diff --git a/README.md b/README.md index 842662b34..fd927cb76 100644 --- a/README.md +++ b/README.md @@ -202,11 +202,13 @@ let us know and we'll be happy to include it here! - **VSCode extension**: [https://github.com/terrastruct/d2-vscode](https://github.com/terrastruct/d2-vscode) - **Vim extension**: [https://github.com/terrastruct/d2-vim](https://github.com/terrastruct/d2-vim) - **Obsidian plugin**: [https://github.com/terrastruct/d2-obsidian](https://github.com/terrastruct/d2-obsidian) +- **Slack app**: [https://d2lang.com/tour/slack](https://d2lang.com/tour/slack) ### Community plugins - **Tree-sitter grammar**: [https://github.com/pleshevskiy/tree-sitter-d2](https://github.com/pleshevskiy/tree-sitter-d2) - **Emacs major mode**: [https://github.com/andorsk/d2-mode](https://github.com/andorsk/d2-mode) +- **Goldmark extension**: [https://github.com/FurqanSoftware/goldmark-d2](https://github.com/FurqanSoftware/goldmark-d2) - **Telegram bot**: [https://github.com/meinside/telegram-d2-bot](https://github.com/meinside/telegram-d2-bot) - **Postgres importer**: [https://github.com/zekenie/d2-erd-from-postgres](https://github.com/zekenie/d2-erd-from-postgres) - **Structurizr to D2 exporter**: [https://github.com/goto1134/structurizr-d2-exporter](https://github.com/goto1134/structurizr-d2-exporter) diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index a4c14441b..150fc23d1 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -1,16 +1,34 @@ +Many have asked how to get the diagram to look like the one on D2's [cheat sheet](https://d2lang.com/tour/cheat-sheet). With this release, now you can! See [https://d2lang.com/tour/themes](https://d2lang.com/tour/themes) for more. + + + +The Slack app for D2 has now hit production, so if you're looking for the quickest way to express a visual model without interrupting the conversation flow, go to [http://d2lang.com/tour/slack](http://d2lang.com/tour/slack) to install. + +Hope everyone is enjoying the holidays this week! + #### Features ๐ - `sketch` flag renders the diagram to look like it was sketched by hand. [#492](https://github.com/terrastruct/d2/pull/492) +- `near` now takes constants like `top-center`, particularly useful for diagram titles. See [docs](https://d2lang.com/tour/text#near-a-constant) for more. [#525](https://github.com/terrastruct/d2/pull/525) #### Improvements ๐งน -- Improved label placements for shapes with images to avoid overlapping container labels. [#474](https://github.com/terrastruct/d2/pull/474) +- Improved label placements for shapes with images and icons to avoid overlapping labels. [#474](https://github.com/terrastruct/d2/pull/474) +- Themes are applied to `sql_table` and `class` shapes. [#521](https://github.com/terrastruct/d2/pull/521) +- `class` shapes use monospaced font. [#521](https://github.com/terrastruct/d2/pull/521) +- Sequence diagram edge group labels have more reasonable padding. [#512](https://github.com/terrastruct/d2/pull/512) +- ELK layout engine preserves order of nodes. [#282](https://github.com/terrastruct/d2/issues/282) +- Non-markdown text (`shape: text` without language block) works with `bold`, `italic`, `underline`, and `font-size`. [#528](https://github.com/terrastruct/d2/pull/528) +- Markdown headings set font-family explicitly, so that external stylesheets with more specific targeting don't override it. [#525](https://github.com/terrastruct/d2/pull/525) #### Bugfixes โ๏ธ - `d2 fmt` only rewrites if it has changes, instead of always rewriting. [#470](https://github.com/terrastruct/d2/pull/470) -- Fixed an issue where text could overflow in sql_table shapes. [#458](https://github.com/terrastruct/d2/pull/458) -- Fixed an issue with elk layouts accounting for edge labels as if they were placed on the side of the edge. [#483](https://github.com/terrastruct/d2/pull/483) -- Fixed an issue where dagre layouts may not have enough spacing for all edge labels. [#484](https://github.com/terrastruct/d2/pull/484) -- Fixed connections being clipped if they were at the very top or left edges of the diagram. [#493](https://github.com/terrastruct/d2/pull/493) -- Fixed edge case where the key `null` was compiling wrongly. [#507](https://github.com/terrastruct/d2/issues/507) +- Text no longer overflows in `sql_table` shapes. [#458](https://github.com/terrastruct/d2/pull/458) +- ELK connection labels are now given the appropriate dimensions. [#483](https://github.com/terrastruct/d2/pull/483) +- Dagre connection lengths make room for longer labels. [#484](https://github.com/terrastruct/d2/pull/484) +- Icons with query parameters are escaped to valid SVG XML. [#438](https://github.com/terrastruct/d2/issues/438) +- Connections at the boundaries no longer get part of its stroke clipped. [#493](https://github.com/terrastruct/d2/pull/493) +- Fixes edge case where `style` being defined in same scope as `sql_table` causes compiler to skip compiling `sql_table`. [#506](https://github.com/terrastruct/d2/issues/506) +- Fixes panic passing a non-string value to `constraint`. [#248](https://github.com/terrastruct/d2/issues/248) +- Fixes edge case where the key `null` was compiling wrongly. [#507](https://github.com/terrastruct/d2/issues/507) diff --git a/ci/sub b/ci/sub index 494f23a57..b1ec0a8d4 160000 --- a/ci/sub +++ b/ci/sub @@ -1 +1 @@ -Subproject commit 494f23a574d5d96b369e886aa1cd48df059dc912 +Subproject commit b1ec0a8d430a62b7556211ed8bcd7b6e41e2362c diff --git a/d2compiler/compile.go b/d2compiler/compile.go index 901f6bcee..9ca373d81 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -583,16 +583,25 @@ func (c *compiler) compileShapes(obj *d2graph.Object) { c.compileShapes(obj) } - for _, obj := range obj.ChildrenArray { - switch obj.Attributes.Shape.Value { + for i := 0; i < len(obj.ChildrenArray); i++ { + ch := obj.ChildrenArray[i] + switch ch.Attributes.Shape.Value { case d2target.ShapeClass, d2target.ShapeSQLTable: - flattenContainer(obj.Graph, obj) + flattenContainer(obj.Graph, ch) } - if obj.IDVal == "style" { - obj.Parent.Attributes.Style = obj.Attributes.Style + if ch.IDVal == "style" { + obj.Attributes.Style = ch.Attributes.Style if obj.Graph != nil { - flattenContainer(obj.Graph, obj) - removeObject(obj.Graph, obj) + flattenContainer(obj.Graph, ch) + for i := 0; i < len(obj.Graph.Objects); i++ { + if obj.Graph.Objects[i] == ch { + obj.Graph.Objects = append(obj.Graph.Objects[:i], obj.Graph.Objects[i+1:]...) + break + } + } + delete(obj.Children, ch.ID) + obj.ChildrenArray = append(obj.ChildrenArray[:i], obj.ChildrenArray[i+1:]...) + i-- } } } @@ -679,6 +688,10 @@ func (c *compiler) compileSQLTable(obj *d2graph.Object) { continue } if n.MapKey.Key.Path[0].Unbox().ScalarString() == "constraint" { + if n.MapKey.Value.StringBox().Unbox() == nil { + c.errorf(n.MapKey.GetRange().Start, n.MapKey.GetRange().End, "constraint value must be a string") + return + } d2Col.Constraint = n.MapKey.Value.StringBox().Unbox().ScalarString() } } @@ -706,23 +719,6 @@ func (c *compiler) compileSQLTable(obj *d2graph.Object) { } } -// TODO too similar to flattenContainer, should reconcile in a refactor -func removeObject(g *d2graph.Graph, obj *d2graph.Object) { - for i := 0; i < len(obj.Graph.Objects); i++ { - if obj.Graph.Objects[i] == obj { - obj.Graph.Objects = append(obj.Graph.Objects[:i], obj.Graph.Objects[i+1:]...) - break - } - } - delete(obj.Parent.Children, obj.ID) - for i, child := range obj.Parent.ChildrenArray { - if obj == child { - obj.Parent.ChildrenArray = append(obj.Parent.ChildrenArray[:i], obj.Parent.ChildrenArray[i+1:]...) - break - } - } -} - func flattenContainer(g *d2graph.Graph, obj *d2graph.Object) { absID := obj.AbsID() @@ -854,9 +850,14 @@ func (c *compiler) validateKeys(obj *d2graph.Object, m *d2ast.Map) { func (c *compiler) validateNear(g *d2graph.Graph) { for _, obj := range g.Objects { if obj.Attributes.NearKey != nil { - _, ok := g.Root.HasChild(d2graph.Key(obj.Attributes.NearKey)) - if !ok { - c.errorf(obj.Attributes.NearKey.GetRange().Start, obj.Attributes.NearKey.GetRange().End, "near key %#v does not exist. It must be the absolute path to a shape.", d2format.Format(obj.Attributes.NearKey)) + _, isKey := g.Root.HasChild(d2graph.Key(obj.Attributes.NearKey)) + _, isConst := d2graph.NearConstants[d2graph.Key(obj.Attributes.NearKey)[0]] + if !isKey && !isConst { + c.errorf(obj.Attributes.NearKey.GetRange().Start, obj.Attributes.NearKey.GetRange().End, "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 + } + if !isKey && isConst && obj.Parent != g.Root { + c.errorf(obj.Attributes.NearKey.GetRange().Start, obj.Attributes.NearKey.GetRange().End, "constant near keys can only be set on root level shapes") continue } } diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index f72894721..29d99cee0 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -1266,6 +1266,28 @@ x -> y: { } }, }, + { + name: "near_constant", + + text: `x.near: top-center +`, + }, + { + name: "near_bad_constant", + + text: `x.near: txop-center +`, + expErr: `d2/testdata/d2compiler/TestCompile/near_bad_constant.d2:1:1: 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: "nested_near_constant", + + text: `x.y.near: top-center +`, + expErr: `d2/testdata/d2compiler/TestCompile/nested_near_constant.d2:1:1: constant near keys can only be set on root level shapes +`, + }, { name: "reserved_icon_near_style", @@ -1312,7 +1334,7 @@ y expErr: `d2/testdata/d2compiler/TestCompile/errors/reserved_icon_style.d2:3:9: bad icon url "::????:::%%orange": parse "::????:::%%orange": missing protocol scheme d2/testdata/d2compiler/TestCompile/errors/reserved_icon_style.d2:4:18: expected "opacity" to be a number between 0.0 and 1.0 d2/testdata/d2compiler/TestCompile/errors/reserved_icon_style.d2:5:18: expected "opacity" to be a number between 0.0 and 1.0 -d2/testdata/d2compiler/TestCompile/errors/reserved_icon_style.d2:1:1: near key "y" does not exist. It must be the absolute path to a shape. +d2/testdata/d2compiler/TestCompile/errors/reserved_icon_style.d2:1:1: near key "y" 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 `, }, { @@ -1660,6 +1682,34 @@ choo: { tassert.Equal(t, "null", g.Objects[0].IDVal) }, }, + { + name: "sql-regression", + + text: `a: { + style: { + fill: lemonchiffon + } + b: { + shape: sql_table + c + } + d +} +`, + assertions: func(t *testing.T, g *d2graph.Graph) { + tassert.Equal(t, 3, len(g.Objects)) + }, + }, + { + name: "sql-panic", + text: `test { + shape: sql_table + test_id: varchar(64) {constraint: [primary_key, foreign_key]} +} +`, + expErr: `d2/testdata/d2compiler/TestCompile/sql-panic.d2:3:27: constraint value must be a string +`, + }, } for _, tc := range testCases { diff --git a/d2exporter/export.go b/d2exporter/export.go index 73a6e37bd..9706365f0 100644 --- a/d2exporter/export.go +++ b/d2exporter/export.go @@ -40,6 +40,11 @@ func applyTheme(shape *d2target.Shape, obj *d2graph.Object, theme *d2themes.Them if obj.Attributes.Shape.Value == d2target.ShapeText { shape.Color = theme.Colors.Neutrals.N1 } + if obj.Attributes.Shape.Value == d2target.ShapeSQLTable || obj.Attributes.Shape.Value == d2target.ShapeClass { + shape.PrimaryAccentColor = theme.Colors.B2 + shape.SecondaryAccentColor = theme.Colors.AA2 + shape.NeutralAccentColor = theme.Colors.Neutrals.N2 + } } func applyStyles(shape *d2target.Shape, obj *d2graph.Object) { @@ -76,19 +81,17 @@ func applyStyles(shape *d2target.Shape, obj *d2graph.Object) { if obj.Attributes.Style.FontColor != nil { shape.Color = obj.Attributes.Style.FontColor.Value } - if obj.Attributes.Shape.Value != d2target.ShapeText { - if obj.Attributes.Style.Italic != nil { - shape.Italic, _ = strconv.ParseBool(obj.Attributes.Style.Italic.Value) - } - if obj.Attributes.Style.Bold != nil { - shape.Bold, _ = strconv.ParseBool(obj.Attributes.Style.Bold.Value) - } - if obj.Attributes.Style.Underline != nil { - shape.Underline, _ = strconv.ParseBool(obj.Attributes.Style.Underline.Value) - } - if obj.Attributes.Style.Font != nil { - shape.FontFamily = obj.Attributes.Style.Font.Value - } + if obj.Attributes.Style.Italic != nil { + shape.Italic, _ = strconv.ParseBool(obj.Attributes.Style.Italic.Value) + } + if obj.Attributes.Style.Bold != nil { + shape.Bold, _ = strconv.ParseBool(obj.Attributes.Style.Bold.Value) + } + if obj.Attributes.Style.Underline != nil { + shape.Underline, _ = strconv.ParseBool(obj.Attributes.Style.Underline.Value) + } + if obj.Attributes.Style.Font != nil { + shape.FontFamily = obj.Attributes.Style.Font.Value } } diff --git a/d2exporter/export_test.go b/d2exporter/export_test.go index 70c02c210..ca813d2b1 100644 --- a/d2exporter/export_test.go +++ b/d2exporter/export_test.go @@ -8,12 +8,15 @@ import ( "cdr.dev/slog" + tassert "github.com/stretchr/testify/assert" + "oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/util-go/diff" "oss.terrastruct.com/d2/d2compiler" "oss.terrastruct.com/d2/d2exporter" "oss.terrastruct.com/d2/d2layouts/d2dagrelayout" + "oss.terrastruct.com/d2/d2layouts/d2sequence" "oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/d2themes/d2themescatalog" "oss.terrastruct.com/d2/lib/geo" @@ -80,6 +83,23 @@ y: {shape: square} } }, }, + { + name: "sequence_group_position", + + dsl: `hey { + shape: sequence_diagram + a + b + group: { + a -> b + } +} +`, + assertions: func(t *testing.T, d *d2target.Diagram) { + tassert.Equal(t, "hey.group", d.Shapes[3].ID) + tassert.Equal(t, "INSIDE_TOP_LEFT", d.Shapes[3].LabelPosition) + }, + }, } runa(t, tcs) @@ -219,7 +239,7 @@ func run(t *testing.T, tc testCase) { err = g.SetDimensions(nil, ruler, nil) assert.JSON(t, nil, err) - err = d2dagrelayout.Layout(ctx, g) + err = d2sequence.Layout(ctx, g, d2dagrelayout.Layout) if err != nil { t.Fatal(err) } diff --git a/d2graph/d2graph.go b/d2graph/d2graph.go index 885823d16..da137cc12 100644 --- a/d2graph/d2graph.go +++ b/d2graph/d2graph.go @@ -392,17 +392,23 @@ func (obj *Object) GetFill(theme *d2themes.Theme) string { return theme.Colors.Neutrals.N5 } + if strings.EqualFold(shape, d2target.ShapeSQLTable) || strings.EqualFold(shape, d2target.ShapeClass) { + return theme.Colors.Neutrals.N1 + } + return theme.Colors.Neutrals.N7 } func (obj *Object) GetStroke(theme *d2themes.Theme, dashGapSize interface{}) string { shape := obj.Attributes.Shape.Value if strings.EqualFold(shape, d2target.ShapeCode) || - strings.EqualFold(shape, d2target.ShapeClass) || - strings.EqualFold(shape, d2target.ShapeSQLTable) || strings.EqualFold(shape, d2target.ShapeText) { return theme.Colors.Neutrals.N1 } + if strings.EqualFold(shape, d2target.ShapeClass) || + strings.EqualFold(shape, d2target.ShapeSQLTable) { + return theme.Colors.Neutrals.N7 + } if dashGapSize != 0.0 { return theme.Colors.B2 } @@ -435,7 +441,14 @@ func (obj *Object) AbsIDArray() []string { } func (obj *Object) Text() *d2target.MText { - isBold := !obj.IsContainer() + isBold := !obj.IsContainer() && obj.Attributes.Shape.Value != "text" + isItalic := false + if obj.Attributes.Style.Bold != nil && obj.Attributes.Style.Bold.Value == "true" { + isBold = true + } + if obj.Attributes.Style.Italic != nil && obj.Attributes.Style.Italic.Value == "true" { + isItalic = true + } fontSize := d2fonts.FONT_SIZE_M if obj.OuterSequenceDiagram() == nil { if obj.IsContainer() { @@ -451,11 +464,14 @@ func (obj *Object) Text() *d2target.MText { if obj.Class != nil || obj.SQLTable != nil { fontSize = d2fonts.FONT_SIZE_XL } + if obj.Class != nil { + isBold = false + } return &d2target.MText{ Text: obj.Attributes.Label.Value, FontSize: fontSize, IsBold: isBold, - IsItalic: false, + IsItalic: isItalic, Language: obj.Attributes.Language, Shape: obj.Attributes.Shape.Value, @@ -899,14 +915,18 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler return err } dims = d2target.NewTextDimensions(width, height) - } else { + } else if obj.Attributes.Language != "" { var err error dims, err = getMarkdownDimensions(mtexts, ruler, obj.Text(), fontFamily) if err != nil { return err } + } else { + dims = getTextDimensions(mtexts, ruler, obj.Text(), fontFamily) } innerLabelPadding = 0 + } else if obj.Attributes.Shape.Value == d2target.ShapeClass { + dims = getTextDimensions(mtexts, ruler, obj.Text(), go2.Pointer(d2fonts.SourceCodePro)) } else { dims = getTextDimensions(mtexts, ruler, obj.Text(), fontFamily) } @@ -962,7 +982,7 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler maxWidth := dims.Width for _, f := range obj.Class.Fields { - fdims := getTextDimensions(mtexts, ruler, f.Text(), fontFamily) + fdims := getTextDimensions(mtexts, ruler, f.Text(), go2.Pointer(d2fonts.SourceCodePro)) if fdims == nil { return fmt.Errorf("dimensions for class field %#v not found", f.Text()) } @@ -972,7 +992,7 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler } } for _, m := range obj.Class.Methods { - mdims := getTextDimensions(mtexts, ruler, m.Text(), fontFamily) + mdims := getTextDimensions(mtexts, ruler, m.Text(), go2.Pointer(d2fonts.SourceCodePro)) if mdims == nil { return fmt.Errorf("dimensions for class method %#v not found", m.Text()) } @@ -991,7 +1011,7 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler } if anyRowText != nil { // 10px of padding top and bottom so text doesn't look squished - rowHeight := getTextDimensions(mtexts, ruler, anyRowText, fontFamily).Height + 20 + rowHeight := getTextDimensions(mtexts, ruler, anyRowText, go2.Pointer(d2fonts.SourceCodePro)).Height + 20 obj.Height = float64(rowHeight * (len(obj.Class.Fields) + len(obj.Class.Methods) + 2)) } // Leave room for padding @@ -1002,23 +1022,29 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler maxTypeWidth := 0 constraintWidth := 0 - font := d2fonts.SourceSansPro.Font(d2fonts.FONT_SIZE_L, d2fonts.FONT_STYLE_REGULAR) for i := range obj.SQLTable.Columns { // Note: we want to set dimensions of actual column not the for loop copy of the struct c := &obj.SQLTable.Columns[i] + ctexts := c.Texts() - nameWidth, nameHeight := ruler.Measure(font, c.Name.Label) - c.Name.LabelWidth = nameWidth - c.Name.LabelHeight = nameHeight - if maxNameWidth < nameWidth { - maxNameWidth = nameWidth + nameDims := getTextDimensions(mtexts, ruler, ctexts[0], fontFamily) + if nameDims == nil { + return fmt.Errorf("dimensions for sql_table name %#v not found", ctexts[0].Text) + } + c.Name.LabelWidth = nameDims.Width + c.Name.LabelHeight = nameDims.Height + if maxNameWidth < nameDims.Width { + maxNameWidth = nameDims.Width } - typeWidth, typeHeight := ruler.Measure(font, c.Type.Label) - c.Type.LabelWidth = typeWidth - c.Type.LabelHeight = typeHeight - if maxTypeWidth < typeWidth { - maxTypeWidth = typeWidth + typeDims := getTextDimensions(mtexts, ruler, ctexts[1], fontFamily) + if typeDims == nil { + return fmt.Errorf("dimensions for sql_table type %#v not found", ctexts[1].Text) + } + c.Type.LabelWidth = typeDims.Width + c.Type.LabelHeight = typeDims.Height + if maxTypeWidth < typeDims.Width { + maxTypeWidth = typeDims.Width } if c.Constraint != "" { @@ -1084,7 +1110,9 @@ func (g *Graph) Texts() []*d2target.MText { } } else if obj.SQLTable != nil { for _, column := range obj.SQLTable.Columns { - texts = appendTextDedup(texts, column.Text()) + for _, t := range column.Texts() { + texts = appendTextDedup(texts, t) + } } } } @@ -1170,6 +1198,22 @@ var StyleKeywords = map[string]struct{}{ "filled": {}, } +// TODO maybe autofmt should allow other values, and transform them to conform +// e.g. left-center becomes center-left +var NearConstantsArray = []string{ + "top-left", + "top-center", + "top-right", + + "center-left", + "center-right", + + "bottom-left", + "bottom-center", + "bottom-right", +} +var NearConstants map[string]struct{} + func init() { for k, v := range StyleKeywords { ReservedKeywords[k] = v @@ -1177,4 +1221,8 @@ func init() { for k, v := range ReservedKeywordHolders { ReservedKeywords[k] = v } + NearConstants = make(map[string]struct{}, len(NearConstantsArray)) + for _, k := range NearConstantsArray { + NearConstants[k] = struct{}{} + } } diff --git a/d2layouts/d2elklayout/layout.go b/d2layouts/d2elklayout/layout.go index be40c6bff..6dd37f828 100644 --- a/d2layouts/d2elklayout/layout.go +++ b/d2layouts/d2elklayout/layout.go @@ -9,7 +9,6 @@ import ( _ "embed" "encoding/json" "fmt" - "math" "strings" "github.com/dop251/goja" @@ -79,14 +78,16 @@ type ELKGraph struct { } type ELKLayoutOptions struct { - Algorithm string `json:"elk.algorithm,omitempty"` - HierarchyHandling string `json:"elk.hierarchyHandling,omitempty"` - NodeSpacing float64 `json:"spacing.nodeNodeBetweenLayers,omitempty"` - Padding string `json:"elk.padding,omitempty"` - EdgeNodeSpacing float64 `json:"spacing.edgeNodeBetweenLayers,omitempty"` - Direction string `json:"elk.direction"` - SelfLoopSpacing float64 `json:"elk.spacing.nodeSelfLoop"` - InlineEdgeLabels bool `json:"elk.edgeLabels.inline,omitempty"` + Algorithm string `json:"elk.algorithm,omitempty"` + HierarchyHandling string `json:"elk.hierarchyHandling,omitempty"` + NodeSpacing float64 `json:"spacing.nodeNodeBetweenLayers,omitempty"` + Padding string `json:"elk.padding,omitempty"` + EdgeNodeSpacing float64 `json:"spacing.edgeNodeBetweenLayers,omitempty"` + Direction string `json:"elk.direction"` + SelfLoopSpacing float64 `json:"elk.spacing.nodeSelfLoop"` + InlineEdgeLabels bool `json:"elk.edgeLabels.inline,omitempty"` + ConsiderModelOrder string `json:"elk.layered.considerModelOrder.strategy,omitempty"` + ForceNodeModelOrder bool `json:"elk.layered.crossingMinimization.forceNodeModelOrder,omitempty"` } func Layout(ctx context.Context, g *d2graph.Graph) (err error) { @@ -109,11 +110,12 @@ func Layout(ctx context.Context, g *d2graph.Graph) (err error) { elkGraph := &ELKGraph{ ID: "root", LayoutOptions: &ELKLayoutOptions{ - Algorithm: "layered", - HierarchyHandling: "INCLUDE_CHILDREN", - NodeSpacing: 100.0, - EdgeNodeSpacing: 50.0, - SelfLoopSpacing: 50.0, + Algorithm: "layered", + HierarchyHandling: "INCLUDE_CHILDREN", + NodeSpacing: 100.0, + EdgeNodeSpacing: 50.0, + SelfLoopSpacing: 50.0, + ConsiderModelOrder: "NODES_AND_EDGES", }, } switch g.Root.Attributes.Direction.Value { @@ -157,7 +159,8 @@ func Layout(ctx context.Context, g *d2graph.Graph) (err error) { if len(obj.ChildrenArray) > 0 { n.LayoutOptions = &ELKLayoutOptions{ - Padding: "[top=75,left=75,bottom=75,right=75]", + Padding: "[top=75,left=75,bottom=75,right=75]", + ForceNodeModelOrder: true, } } @@ -253,7 +256,7 @@ func Layout(ctx context.Context, g *d2graph.Graph) (err error) { parentX = parent.TopLeft.X parentY = parent.TopLeft.Y } - obj.TopLeft = geo.NewPoint(math.Round(parentX+n.X), math.Round(parentY+n.Y)) + obj.TopLeft = geo.NewPoint(parentX+n.X, parentY+n.Y) obj.Width = n.Width obj.Height = n.Height diff --git a/d2layouts/d2near/layout.go b/d2layouts/d2near/layout.go new file mode 100644 index 000000000..99e8a10e1 --- /dev/null +++ b/d2layouts/d2near/layout.go @@ -0,0 +1,146 @@ +// d2near applies near keywords when they're constants +// Intended to be run as the last stage of layout after the diagram has already undergone layout +package d2near + +import ( + "context" + "math" + "strings" + + "oss.terrastruct.com/d2/d2graph" + "oss.terrastruct.com/d2/d2target" + "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 { + return nil + } + + // 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 { + if processCenters == strings.Contains(d2graph.Key(obj.Attributes.NearKey)[0], "center") { + obj.TopLeft = geo.NewPoint(place(obj)) + } + } + for _, obj := range constantNears { + 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) + obj.Parent.Children[obj.ID] = obj + obj.Parent.ChildrenArray = append(obj.Parent.ChildrenArray, obj) + } + } + } + + // These shapes skipped core layout, which means they also skipped label placements + for _, obj := range constantNears { + if obj.Attributes.Shape.Value == d2target.ShapeImage { + 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 +} + +// place returns the position of obj, taking into consideration its near value and the diagram +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] { + case "top-left": + return tl.X - obj.Width - pad, tl.Y - obj.Height - pad + case "top-center": + return tl.X + w/2 - obj.Width/2, tl.Y - obj.Height - pad + case "top-right": + return br.X + pad, tl.Y - obj.Height - pad + case "center-left": + return tl.X - obj.Width - pad, tl.Y + h/2 - obj.Height/2 + case "center-right": + return br.X + pad, tl.Y + h/2 - obj.Height/2 + case "bottom-left": + return tl.X - obj.Width - pad, br.Y + pad + case "bottom-center": + return br.X - w/2 - obj.Width/2, br.Y + pad + case "bottom-right": + return br.X + pad, br.Y + pad + } + return 0, 0 +} + +// 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) { + for i := 0; i < len(g.Objects); i++ { + obj := g.Objects[i] + if obj.Attributes.NearKey == nil { + continue + } + _, isKey := g.Root.HasChild(d2graph.Key(obj.Attributes.NearKey)) + if isKey { + continue + } + _, 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:]...) + i-- + delete(obj.Parent.Children, obj.ID) + for i := 0; i < len(obj.Parent.ChildrenArray); i++ { + if obj.Parent.ChildrenArray[i] == obj { + obj.Parent.ChildrenArray = append(obj.Parent.ChildrenArray[:i], obj.Parent.ChildrenArray[i+1:]...) + break + } + } + } + } + return nears +} + +// boundingBox gets the center of the graph as defined by shapes +// The bounds taking into consideration only shapes gives more of a feeling of true center +// It differs from d2target.BoundingBox which needs to include every visible thing +func boundingBox(g *d2graph.Graph) (tl, br *geo.Point) { + if len(g.Objects) == 0 { + return geo.NewPoint(0, 0), geo.NewPoint(0, 0) + } + x1 := math.Inf(1) + y1 := math.Inf(1) + x2 := math.Inf(-1) + y2 := math.Inf(-1) + + for _, obj := range g.Objects { + if obj.Attributes.NearKey != nil { + // Top left should not be MORE top than top-center + // But it should go more left if top-center label extends beyond bounds of diagram + switch d2graph.Key(obj.Attributes.NearKey)[0] { + case "top-center", "bottom-center": + x1 = math.Min(x1, obj.TopLeft.X) + x2 = math.Max(x2, obj.TopLeft.X+obj.Width) + case "center-left", "center-right": + y1 = math.Min(y1, obj.TopLeft.Y) + y2 = math.Max(y2, obj.TopLeft.Y+obj.Height) + } + } else { + x1 = math.Min(x1, obj.TopLeft.X) + y1 = math.Min(y1, obj.TopLeft.Y) + x2 = math.Max(x2, obj.TopLeft.X+obj.Width) + y2 = math.Max(y2, obj.TopLeft.Y+obj.Height) + } + } + + return geo.NewPoint(x1, y1), geo.NewPoint(x2, y2) +} diff --git a/d2layouts/d2sequence/layout.go b/d2layouts/d2sequence/layout.go index 55192ceab..1747c859b 100644 --- a/d2layouts/d2sequence/layout.go +++ b/d2layouts/d2sequence/layout.go @@ -69,6 +69,7 @@ func Layout(ctx context.Context, g *d2graph.Graph, layout func(ctx context.Conte layoutEdges, edgeOrder := getLayoutEdges(g, edgesToRemove) g.Edges = layoutEdges layoutObjects, objectOrder := getLayoutObjects(g, objectsToRemove) + // TODO this isn't a proper deletion because the objects still appear as children of the object g.Objects = layoutObjects if g.Root.IsSequenceDiagram() { diff --git a/d2layouts/d2sequence/sequence_diagram.go b/d2layouts/d2sequence/sequence_diagram.go index 258428975..1058d6037 100644 --- a/d2layouts/d2sequence/sequence_diagram.go +++ b/d2layouts/d2sequence/sequence_diagram.go @@ -74,6 +74,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se // Groups may have more nested groups for len(queue) > 0 { curr := queue[0] + curr.LabelPosition = go2.Pointer(string(label.InsideTopLeft)) groups = append(groups, curr) queue = queue[1:] queue = append(queue, curr.ChildrenArray...) diff --git a/d2lib/d2.go b/d2lib/d2.go index be71a1536..936124b9f 100644 --- a/d2lib/d2.go +++ b/d2lib/d2.go @@ -9,6 +9,7 @@ import ( "oss.terrastruct.com/d2/d2compiler" "oss.terrastruct.com/d2/d2exporter" "oss.terrastruct.com/d2/d2graph" + "oss.terrastruct.com/d2/d2layouts/d2near" "oss.terrastruct.com/d2/d2layouts/d2sequence" "oss.terrastruct.com/d2/d2renderers/d2fonts" "oss.terrastruct.com/d2/d2target" @@ -48,9 +49,20 @@ func Compile(ctx context.Context, input string, opts *CompileOptions) (*d2target return nil, nil, err } - if layout, err := getLayout(opts); err != nil { + coreLayout, err := getLayout(opts) + if err != nil { return nil, nil, err - } else if err := d2sequence.Layout(ctx, g, layout); err != nil { + } + + constantNears := d2near.WithoutConstantNears(ctx, g) + + err = d2sequence.Layout(ctx, g, coreLayout) + if err != nil { + return nil, nil, err + } + + err = d2near.Layout(ctx, g, constantNears) + if err != nil { return nil, nil, err } } diff --git a/d2renderers/d2sketch/sketch.go b/d2renderers/d2sketch/sketch.go index a8b6326b1..4c4913a2b 100644 --- a/d2renderers/d2sketch/sketch.go +++ b/d2renderers/d2sketch/sketch.go @@ -3,13 +3,17 @@ package d2sketch import ( "encoding/json" "fmt" + "strings" _ "embed" "github.com/dop251/goja" "oss.terrastruct.com/d2/d2target" + "oss.terrastruct.com/d2/lib/geo" + "oss.terrastruct.com/d2/lib/label" "oss.terrastruct.com/d2/lib/svg" + "oss.terrastruct.com/util-go/go2" ) //go:embed fillpattern.svg @@ -62,8 +66,13 @@ func DefineFillPattern() string { func shapeStyle(shape d2target.Shape) string { out := "" - out += fmt.Sprintf(`fill:%s;`, shape.Fill) - out += fmt.Sprintf(`stroke:%s;`, shape.Stroke) + if shape.Type == d2target.ShapeSQLTable || shape.Type == d2target.ShapeClass { + out += fmt.Sprintf(`fill:%s;`, shape.Stroke) + out += fmt.Sprintf(`stroke:%s;`, shape.Fill) + } else { + out += fmt.Sprintf(`fill:%s;`, shape.Fill) + out += fmt.Sprintf(`stroke:%s;`, shape.Stroke) + } out += fmt.Sprintf(`opacity:%f;`, shape.Opacity) out += fmt.Sprintf(`stroke-width:%d;`, shape.StrokeWidth) if shape.StrokeDash != 0 { @@ -81,10 +90,7 @@ func Rect(r *Runner, shape d2target.Shape) (string, error) { strokeWidth: %d, %s });`, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) - if _, err := r.run(js); err != nil { - return "", err - } - paths, err := extractPaths(r) + paths, err := computeRoughPaths(r, js) if err != nil { return "", err } @@ -109,10 +115,7 @@ func Oval(r *Runner, shape d2target.Shape) (string, error) { strokeWidth: %d, %s });`, shape.Width/2, shape.Height/2, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) - if _, err := r.run(js); err != nil { - return "", err - } - paths, err := extractPaths(r) + paths, err := computeRoughPaths(r, js) if err != nil { return "", err } @@ -140,10 +143,7 @@ func Paths(r *Runner, shape d2target.Shape, paths []string) (string, error) { strokeWidth: %d, %s });`, path, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) - if _, err := r.run(js); err != nil { - return "", err - } - sketchPaths, err := extractPaths(r) + sketchPaths, err := computeRoughPaths(r, js) if err != nil { return "", err } @@ -180,10 +180,7 @@ func connectionStyle(connection d2target.Connection) string { func Connection(r *Runner, connection d2target.Connection, path, attrs string) (string, error) { roughness := 1.0 js := fmt.Sprintf(`node = rc.path("%s", {roughness: %f, seed: 1});`, path, roughness) - if _, err := r.run(js); err != nil { - return "", err - } - paths, err := extractPaths(r) + paths, err := computeRoughPaths(r, js) if err != nil { return "", err } @@ -197,6 +194,280 @@ func Connection(r *Runner, connection d2target.Connection, path, attrs string) ( return output, nil } +// TODO cleanup +func Table(r *Runner, shape d2target.Shape) (string, error) { + output := "" + js := fmt.Sprintf(`node = rc.rectangle(0, 0, %d, %d, { + fill: "%s", + stroke: "%s", + strokeWidth: %d, + %s + });`, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) + paths, err := computeRoughPaths(r, js) + if err != nil { + return "", err + } + for _, p := range paths { + output += fmt.Sprintf( + ``, + shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape), + ) + } + + box := geo.NewBox( + geo.NewPoint(float64(shape.Pos.X), float64(shape.Pos.Y)), + float64(shape.Width), + float64(shape.Height), + ) + rowHeight := box.Height / float64(1+len(shape.SQLTable.Columns)) + headerBox := geo.NewBox(box.TopLeft, box.Width, rowHeight) + + js = fmt.Sprintf(`node = rc.rectangle(0, 0, %d, %f, { + fill: "%s", + %s + });`, shape.Width, rowHeight, shape.Fill, baseRoughProps) + paths, err = computeRoughPaths(r, js) + if err != nil { + return "", err + } + for _, p := range paths { + output += fmt.Sprintf( + ``, + shape.Pos.X, shape.Pos.Y, p, shape.Fill, + ) + } + + if shape.Label != "" { + tl := label.InsideMiddleLeft.GetPointOnBox( + headerBox, + 20, + float64(shape.LabelWidth), + float64(shape.LabelHeight), + ) + + output += fmt.Sprintf(`%s`, + "text", + tl.X, + tl.Y+float64(shape.LabelHeight)*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", + "start", + 4+shape.FontSize, + shape.Stroke, + ), + svg.EscapeText(shape.Label), + ) + } + + var longestNameWidth int + for _, f := range shape.Columns { + longestNameWidth = go2.Max(longestNameWidth, f.Name.LabelWidth) + } + + rowBox := geo.NewBox(box.TopLeft.Copy(), box.Width, rowHeight) + rowBox.TopLeft.Y += headerBox.Height + for _, f := range shape.Columns { + nameTL := label.InsideMiddleLeft.GetPointOnBox( + rowBox, + d2target.NamePadding, + rowBox.Width, + float64(shape.FontSize), + ) + constraintTR := label.InsideMiddleRight.GetPointOnBox( + rowBox, + d2target.TypePadding, + 0, + float64(shape.FontSize), + ) + + output += strings.Join([]string{ + fmt.Sprintf(`%s`, + nameTL.X, + nameTL.Y+float64(shape.FontSize)*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", float64(shape.FontSize), shape.PrimaryAccentColor), + svg.EscapeText(f.Name.Label), + ), + fmt.Sprintf(`%s`, + nameTL.X+float64(longestNameWidth)+2*d2target.NamePadding, + nameTL.Y+float64(shape.FontSize)*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", float64(shape.FontSize), shape.NeutralAccentColor), + svg.EscapeText(f.Type.Label), + ), + fmt.Sprintf(`%s`, + constraintTR.X, + constraintTR.Y+float64(shape.FontSize)*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s;letter-spacing:2px;", "end", float64(shape.FontSize), shape.SecondaryAccentColor), + f.ConstraintAbbr(), + ), + }, "\n") + + rowBox.TopLeft.Y += rowHeight + + js = fmt.Sprintf(`node = rc.line(%f, %f, %f, %f, { + %s + });`, rowBox.TopLeft.X, rowBox.TopLeft.Y, rowBox.TopLeft.X+rowBox.Width, rowBox.TopLeft.Y, baseRoughProps) + paths, err = computeRoughPaths(r, js) + if err != nil { + return "", err + } + for _, p := range paths { + output += fmt.Sprintf( + ``, + p, shape.Fill, + ) + } + } + output += fmt.Sprintf( + ``, + shape.Pos.X, shape.Pos.Y, shape.Width, shape.Height, + ) + return output, nil +} + +func Class(r *Runner, shape d2target.Shape) (string, error) { + output := "" + js := fmt.Sprintf(`node = rc.rectangle(0, 0, %d, %d, { + fill: "%s", + stroke: "%s", + strokeWidth: %d, + %s + });`, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) + paths, err := computeRoughPaths(r, js) + if err != nil { + return "", err + } + for _, p := range paths { + output += fmt.Sprintf( + ``, + shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape), + ) + } + + box := geo.NewBox( + geo.NewPoint(float64(shape.Pos.X), float64(shape.Pos.Y)), + float64(shape.Width), + float64(shape.Height), + ) + + rowHeight := box.Height / float64(2+len(shape.Class.Fields)+len(shape.Class.Methods)) + headerBox := geo.NewBox(box.TopLeft, box.Width, 2*rowHeight) + + js = fmt.Sprintf(`node = rc.rectangle(0, 0, %d, %f, { + fill: "%s", + %s + });`, shape.Width, headerBox.Height, shape.Fill, baseRoughProps) + paths, err = computeRoughPaths(r, js) + if err != nil { + return "", err + } + for _, p := range paths { + output += fmt.Sprintf( + ``, + shape.Pos.X, shape.Pos.Y, p, shape.Fill, + ) + } + + output += fmt.Sprintf( + ``, + shape.Pos.X, shape.Pos.Y, shape.Width, headerBox.Height, + ) + + if shape.Label != "" { + tl := label.InsideMiddleCenter.GetPointOnBox( + headerBox, + 0, + float64(shape.LabelWidth), + float64(shape.LabelHeight), + ) + + output += fmt.Sprintf(`%s`, + "text-mono", + tl.X+float64(shape.LabelWidth)/2, + tl.Y+float64(shape.LabelHeight)*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", + "middle", + 4+shape.FontSize, + shape.Stroke, + ), + svg.EscapeText(shape.Label), + ) + } + + rowBox := geo.NewBox(box.TopLeft.Copy(), box.Width, rowHeight) + rowBox.TopLeft.Y += headerBox.Height + for _, f := range shape.Fields { + output += classRow(shape, rowBox, f.VisibilityToken(), f.Name, f.Type, float64(shape.FontSize)) + rowBox.TopLeft.Y += rowHeight + } + + js = fmt.Sprintf(`node = rc.line(%f, %f, %f, %f, { +%s + });`, rowBox.TopLeft.X, rowBox.TopLeft.Y, rowBox.TopLeft.X+rowBox.Width, rowBox.TopLeft.Y, baseRoughProps) + paths, err = computeRoughPaths(r, js) + if err != nil { + return "", err + } + for _, p := range paths { + output += fmt.Sprintf( + ``, + p, shape.Fill, + ) + } + + for _, m := range shape.Methods { + output += classRow(shape, rowBox, m.VisibilityToken(), m.Name, m.Return, float64(shape.FontSize)) + rowBox.TopLeft.Y += rowHeight + } + + return output, nil +} + +func classRow(shape d2target.Shape, box *geo.Box, prefix, nameText, typeText string, fontSize float64) string { + output := "" + prefixTL := label.InsideMiddleLeft.GetPointOnBox( + box, + d2target.PrefixPadding, + box.Width, + fontSize, + ) + typeTR := label.InsideMiddleRight.GetPointOnBox( + box, + d2target.TypePadding, + 0, + fontSize, + ) + + output += strings.Join([]string{ + fmt.Sprintf(`%s`, + prefixTL.X, + prefixTL.Y+fontSize*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, shape.PrimaryAccentColor), + prefix, + ), + + fmt.Sprintf(`%s`, + prefixTL.X+d2target.PrefixWidth, + prefixTL.Y+fontSize*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, shape.Fill), + svg.EscapeText(nameText), + ), + + fmt.Sprintf(`%s`, + typeTR.X, + typeTR.Y+fontSize*3/4, + fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s;", "end", fontSize, shape.SecondaryAccentColor), + svg.EscapeText(typeText), + ), + }, "\n") + return output +} + +func computeRoughPaths(r *Runner, js string) ([]string, error) { + if _, err := r.run(js); err != nil { + return nil, err + } + return extractPaths(r) +} + type attrs struct { D string `json:"d"` } diff --git a/d2renderers/d2sketch/sketch_test.go b/d2renderers/d2sketch/sketch_test.go index cfcb5abdb..e033bedfe 100644 --- a/d2renderers/d2sketch/sketch_test.go +++ b/d2renderers/d2sketch/sketch_test.go @@ -223,6 +223,58 @@ queue -> package -> step callout -> stored_data -> person diamond -> oval -> circle hexagon -> cloud +`, + }, + { + name: "sql_tables", + script: `users: { + shape: sql_table + id: int + name: string + email: string + password: string + last_login: datetime +} + +products: { + shape: sql_table + id: int + price: decimal + sku: string + name: string +} + +orders: { + shape: sql_table + id: int + user_id: int + product_id: int +} + +shipments: { + shape: sql_table + id: int + order_id: int + tracking_number: string {constraint: primary_key} + status: string +} + +users.id <-> orders.user_id +products.id <-> orders.product_id +shipments.order_id <-> orders.id`, + }, + { + name: "class", + script: `manager: BatchManager { + shape: class + -num: int + -timeout: int + -pid + + +getStatus(): Enum + +getJobs(): "Job[]" + +setTimeout(seconds int) +} `, }, } diff --git a/d2renderers/d2sketch/testdata/class/sketch.exp.svg b/d2renderers/d2sketch/testdata/class/sketch.exp.svg new file mode 100644 index 000000000..5dd1ee1a5 --- /dev/null +++ b/d2renderers/d2sketch/testdata/class/sketch.exp.svg @@ -0,0 +1,55 @@ + + + + + + +BatchManager- +num +int- +timeout +int- +pid ++ +getStatus() +Enum+ +getJobs() +Job[]+ +setTimeout(seconds int) +void + + + \ No newline at end of file diff --git a/d2renderers/d2sketch/testdata/sql_tables/sketch.exp.svg b/d2renderers/d2sketch/testdata/sql_tables/sketch.exp.svg new file mode 100644 index 000000000..68d7a9a2a --- /dev/null +++ b/d2renderers/d2sketch/testdata/sql_tables/sketch.exp.svg @@ -0,0 +1,75 @@ + + + + + + +usersid +int +name +string +email +string +password +string +last_login +datetime +productsid +int +price +decimal +sku +string +name +string +ordersid +int +user_id +int +product_id +int +shipmentsid +int +order_id +int +tracking_number +string +PKstatus +string + + + + \ No newline at end of file diff --git a/d2renderers/d2sketch/testdata/twitter/sketch.exp.svg b/d2renderers/d2sketch/testdata/twitter/sketch.exp.svg index 471e8fa0a..a45b29f99 100644 --- a/d2renderers/d2sketch/testdata/twitter/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/twitter/sketch.exp.svg @@ -282,6 +282,7 @@ width="3454" height="2449" viewBox="-100 -100 3454 2449">ninetynineeighty eightseventy sevena\yodetherea\"odea\node +ninetynineeighty eightseventy sevena\yodetherea\"odea\node lambda-build.yamllambda-deploy.yamlapollo-deploy.yamlPush to main branchGitHub ActionsS3TerraformAWSManual TriggerGitHub ActionsAWSApollo RepoGitHub ActionsAWS TriggersBuilds zip and pushes it Pulls zip to deployChanges live lambdasLaunchesBuilds zippushes them to S3. Deploys lambdasusing TerraformTriggered manually/push to master test test test test test test testtest +lambda-build.yamllambda-deploy.yamlapollo-deploy.yamlPush to main branchGitHub ActionsS3TerraformAWSManual TriggerGitHub ActionsAWSApollo RepoGitHub ActionsAWS TriggersBuilds zip and pushes it Pulls zip to deployChanges live lambdasLaunchesBuilds zippushes them to S3. Deploys lambdasusing TerraformTriggered manually/push to master test test test test test test testtest - - - - - - - - + + + + + + + + Oldest message +Offset +Last message +Next message will be +inserted here +M0M1M2M3M4M5M6 + + + \ No newline at end of file diff --git a/e2etests/testdata/regression/elk_order/elk/board.exp.json b/e2etests/testdata/regression/elk_order/elk/board.exp.json new file mode 100644 index 000000000..b59278418 --- /dev/null +++ b/e2etests/testdata/regression/elk_order/elk/board.exp.json @@ -0,0 +1,639 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "queue", + "type": "queue", + "pos": { + "x": 12, + "y": 165 + }, + "width": 1146, + "height": 276, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#DEE1EB", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 1 + }, + { + "id": "queue.M0", + "type": "", + "pos": { + "x": 87, + "y": 240 + }, + "width": 125, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "M0", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 25, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "queue.M1", + "type": "", + "pos": { + "x": 232, + "y": 240 + }, + "width": 125, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "M1", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 25, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "queue.M2", + "type": "", + "pos": { + "x": 377, + "y": 240 + }, + "width": 125, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "M2", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 25, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "queue.M3", + "type": "", + "pos": { + "x": 522, + "y": 240 + }, + "width": 125, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "M3", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 25, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "queue.M4", + "type": "", + "pos": { + "x": 667, + "y": 240 + }, + "width": 126, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "M4", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 26, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "queue.M5", + "type": "", + "pos": { + "x": 813, + "y": 240 + }, + "width": 125, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "M5", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 25, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "queue.M6", + "type": "", + "pos": { + "x": 958, + "y": 240 + }, + "width": 125, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "M6", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 25, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "m0_desc", + "type": "text", + "pos": { + "x": 96, + "y": 36 + }, + "width": 106, + "height": 24, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Oldest message", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 106, + "labelHeight": 24, + "zIndex": 0, + "level": 1 + }, + { + "id": "m2_desc", + "type": "text", + "pos": { + "x": 419, + "y": 36 + }, + "width": 41, + "height": 24, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Offset", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 41, + "labelHeight": 24, + "zIndex": 0, + "level": 1 + }, + { + "id": "m5_desc", + "type": "text", + "pos": { + "x": 830, + "y": 36 + }, + "width": 90, + "height": 24, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Last message", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 90, + "labelHeight": 24, + "zIndex": 0, + "level": 1 + }, + { + "id": "m6_desc", + "type": "text", + "pos": { + "x": 950, + "y": 12 + }, + "width": 140, + "height": 48, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Next message will be\\\ninserted here", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 140, + "labelHeight": 48, + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(m0_desc -> queue.M0)[0]", + "src": "m0_desc", + "srcArrow": "none", + "srcLabel": "", + "dst": "queue.M0", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 149.5, + "y": 60 + }, + { + "x": 149.5, + "y": 240 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(m2_desc -> queue.M2)[0]", + "src": "m2_desc", + "srcArrow": "none", + "srcLabel": "", + "dst": "queue.M2", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 439.5, + "y": 60 + }, + { + "x": 439.5, + "y": 240 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(m5_desc -> queue.M5)[0]", + "src": "m5_desc", + "srcArrow": "none", + "srcLabel": "", + "dst": "queue.M5", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 875.5, + "y": 60 + }, + { + "x": 875.5, + "y": 240 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(m6_desc -> queue.M6)[0]", + "src": "m6_desc", + "srcArrow": "none", + "srcLabel": "", + "dst": "queue.M6", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1020.5, + "y": 60 + }, + { + "x": 1020.5, + "y": 240 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/regression/elk_order/elk/sketch.exp.svg b/e2etests/testdata/regression/elk_order/elk/sketch.exp.svg new file mode 100644 index 000000000..6ccb94a1b --- /dev/null +++ b/e2etests/testdata/regression/elk_order/elk/sketch.exp.svg @@ -0,0 +1,800 @@ + +Oldest message +Offset +Last message +Next message will be +inserted here +M0M1M2M3M4M5M6 + + + \ No newline at end of file diff --git a/e2etests/testdata/regression/query_param_escape/dagre/board.exp.json b/e2etests/testdata/regression/query_param_escape/dagre/board.exp.json new file mode 100644 index 000000000..fb0febb97 --- /dev/null +++ b/e2etests/testdata/regression/query_param_escape/dagre/board.exp.json @@ -0,0 +1,58 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "my network", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 190, + "height": 152, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/infra/019-network.svg", + "RawPath": "", + "ForceQuery": false, + "RawQuery": "fuga=1&hoge", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "my network", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 90, + "labelHeight": 26, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [] +} diff --git a/e2etests/testdata/regression/query_param_escape/dagre/sketch.exp.svg b/e2etests/testdata/regression/query_param_escape/dagre/sketch.exp.svg new file mode 100644 index 000000000..f9fe5a482 --- /dev/null +++ b/e2etests/testdata/regression/query_param_escape/dagre/sketch.exp.svg @@ -0,0 +1,31 @@ + +my network + + + \ No newline at end of file diff --git a/e2etests/testdata/regression/query_param_escape/elk/board.exp.json b/e2etests/testdata/regression/query_param_escape/elk/board.exp.json new file mode 100644 index 000000000..bce062b6f --- /dev/null +++ b/e2etests/testdata/regression/query_param_escape/elk/board.exp.json @@ -0,0 +1,58 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "my network", + "type": "", + "pos": { + "x": 12, + "y": 12 + }, + "width": 190, + "height": 152, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/infra/019-network.svg", + "RawPath": "", + "ForceQuery": false, + "RawQuery": "fuga=1&hoge", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "my network", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 90, + "labelHeight": 26, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [] +} diff --git a/e2etests/testdata/regression/query_param_escape/elk/sketch.exp.svg b/e2etests/testdata/regression/query_param_escape/elk/sketch.exp.svg new file mode 100644 index 000000000..0a13f7b0b --- /dev/null +++ b/e2etests/testdata/regression/query_param_escape/elk/sketch.exp.svg @@ -0,0 +1,31 @@ + +my network + + + \ No newline at end of file diff --git a/e2etests/testdata/regression/sql_table_overflow/dagre/board.exp.json b/e2etests/testdata/regression/sql_table_overflow/dagre/board.exp.json index dddfded93..019dcf923 100644 --- a/e2etests/testdata/regression/sql_table_overflow/dagre/board.exp.json +++ b/e2etests/testdata/regression/sql_table_overflow/dagre/board.exp.json @@ -15,8 +15,8 @@ "strokeDash": 0, "strokeWidth": 2, "borderRadius": 0, - "fill": "#FFFFFF", - "stroke": "#0A0F25", + "fill": "#0A0F25", + "stroke": "#FFFFFF", "shadow": false, "3d": false, "multiple": false, @@ -96,7 +96,10 @@ "labelWidth": 211, "labelHeight": 36, "zIndex": 0, - "level": 1 + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" }, { "id": "table_constrained", @@ -111,8 +114,8 @@ "strokeDash": 0, "strokeWidth": 2, "borderRadius": 0, - "fill": "#FFFFFF", - "stroke": "#0A0F25", + "fill": "#0A0F25", + "stroke": "#FFFFFF", "shadow": false, "3d": false, "multiple": false, @@ -192,7 +195,10 @@ "labelWidth": 350, "labelHeight": 36, "zIndex": 0, - "level": 1 + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" } ], "connections": [] diff --git a/e2etests/testdata/regression/sql_table_overflow/dagre/sketch.exp.svg b/e2etests/testdata/regression/sql_table_overflow/dagre/sketch.exp.svg index 12c04af90..e6346bc89 100644 --- a/e2etests/testdata/regression/sql_table_overflow/dagre/sketch.exp.svg +++ b/e2etests/testdata/regression/sql_table_overflow/dagre/sketch.exp.svg @@ -18,15 +18,15 @@ width="1388" height="308" viewBox="-100 -100 1388 308">sql_table_overflowshort -loooooooooooooooooooong -loooooooooooooooooooong -short -sql_table_constrained_overflowshort -loooooooooooooooooooong -UNQloooooooooooooooooooong -short -FK +sql_table_overflowshort +loooooooooooooooooooong +loooooooooooooooooooong +short +sql_table_constrained_overflowshort +loooooooooooooooooooong +UNQloooooooooooooooooooong +short +FK sql_table_overflowshort -loooooooooooooooooooong -loooooooooooooooooooong -short -sql_table_constrained_overflowshort -loooooooooooooooooooong -UNQloooooooooooooooooooong -short -FK +sql_table_overflowshort +loooooooooooooooooooong +loooooooooooooooooooong +short +sql_table_constrained_overflowshort +loooooooooooooooooooong +UNQloooooooooooooooooooong +short +FK abc +abc acbd +acbd rectanglesquarepageparallelogramdocumentcylinderqueuepackagestepcalloutstored_datapersondiamondovalcirclehexagoncloud - +rectanglesquarepageparallelogramdocumentcylinderqueuepackagestepcalloutstored_datapersondiamondovalcirclehexagoncloud + rectanglesquarepageparallelogramdocumentcylinderqueuepackagestepcalloutstored_datapersondiamondovalcirclehexagoncloud - +rectanglesquarepageparallelogramdocumentcylinderqueuepackagestepcalloutstored_datapersondiamondovalcirclehexagoncloud + cba * +cba * abcdefghijklmno +abcdefghijklmno aabbllmmnn -oocciikkddgg -hhjjee -ff1122 334455667788 - +aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 + - + - + aabbllmmnn -oocciikkddgg -hhjjee -ff1122 334455667788 - - - - - - - - - +aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 + + + + + + + + + BatchManager- -num -int- -timeout -int- -pid -+ -getStatus() -Enum+ -getJobs() -Job[]+ -setTimeout(seconds int) -void - +BatchManager- +num +int- +timeout +int- +pid ++ +getStatus() +Enum+ +getJobs() +Job[]+ +setTimeout(seconds int) +void + \ No newline at end of file diff --git a/e2etests/testdata/stable/class/elk/board.exp.json b/e2etests/testdata/stable/class/elk/board.exp.json index 90dd60cd4..438953ee7 100644 --- a/e2etests/testdata/stable/class/elk/board.exp.json +++ b/e2etests/testdata/stable/class/elk/board.exp.json @@ -9,14 +9,14 @@ "x": 12, "y": 12 }, - "width": 339, + "width": 422, "height": 368, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, "borderRadius": 0, - "fill": "#FFFFFF", - "stroke": "#0A0F25", + "fill": "#0A0F25", + "stroke": "#FFFFFF", "shadow": false, "3d": false, "multiple": false, @@ -68,10 +68,13 @@ "italic": false, "bold": false, "underline": false, - "labelWidth": 150, + "labelWidth": 175, "labelHeight": 36, "zIndex": 0, - "level": 1 + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" } ], "connections": [] diff --git a/e2etests/testdata/stable/class/elk/sketch.exp.svg b/e2etests/testdata/stable/class/elk/sketch.exp.svg index 45f859f36..a433f42f0 100644 --- a/e2etests/testdata/stable/class/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/class/elk/sketch.exp.svg @@ -2,7 +2,7 @@ BatchManager- -num -int- -timeout -int- -pid -+ -getStatus() -Enum+ -getJobs() -Job[]+ -setTimeout(seconds int) -void - +BatchManager- +num +int- +timeout +int- +pid ++ +getStatus() +Enum+ +getJobs() +Job[]+ +setTimeout(seconds int) +void + \ No newline at end of file diff --git a/e2etests/testdata/stable/code_snippet/elk/board.exp.json b/e2etests/testdata/stable/code_snippet/elk/board.exp.json index 8eac03000..290b783e6 100644 --- a/e2etests/testdata/stable/code_snippet/elk/board.exp.json +++ b/e2etests/testdata/stable/code_snippet/elk/board.exp.json @@ -85,7 +85,7 @@ "id": "y", "type": "", "pos": { - "x": 333, + "x": 332, "y": 504 }, "width": 114, diff --git a/e2etests/testdata/stable/code_snippet/elk/sketch.exp.svg b/e2etests/testdata/stable/code_snippet/elk/sketch.exp.svg index aa93f0515..db6a4f592 100644 --- a/e2etests/testdata/stable/code_snippet/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/code_snippet/elk/sketch.exp.svg @@ -26,7 +26,7 @@ width="955" height="818" viewBox="-88 -88 955 818">acfbdhg +acfbdhg xyThe top of the mountainJoeDonaldCats, no less liquid than their shadows, offer no angles to the wind. +If we can't fix it, it ain't broke. +Dieters live life in the fasting lane. +i am top lefti am top righti am bottom lefti am bottom right + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/constant_near_stress/elk/board.exp.json b/e2etests/testdata/stable/constant_near_stress/elk/board.exp.json new file mode 100644 index 000000000..56b5e3d52 --- /dev/null +++ b/e2etests/testdata/stable/constant_near_stress/elk/board.exp.json @@ -0,0 +1,447 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "x", + "type": "", + "pos": { + "x": 12, + "y": 12 + }, + "width": 113, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "x", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 13, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "y", + "type": "", + "pos": { + "x": 12, + "y": 238 + }, + "width": 114, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "y", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 14, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "The top of the mountain", + "type": "text", + "pos": { + "x": -12, + "y": -29 + }, + "width": 162, + "height": 21, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "The top of the mountain", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 162, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "Joe", + "type": "person", + "pos": { + "x": -139, + "y": 125 + }, + "width": 131, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#E3E9FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Joe", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 31, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "Donald", + "type": "person", + "pos": { + "x": 146, + "y": 125 + }, + "width": 155, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#E3E9FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Donald", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 55, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "bottom", + "type": "text", + "pos": { + "x": -402, + "y": 384 + }, + "width": 943, + "height": 130, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "# Cats, no less liquid than their shadows, offer no angles to the wind.\n\nIf we can't fix it, it ain't broke.\n\nDieters live life in the fasting lane.", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 943, + "labelHeight": 130, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "i am top left", + "type": "text", + "pos": { + "x": -502, + "y": -29 + }, + "width": 80, + "height": 21, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "i am top left", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 80, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "i am top right", + "type": "text", + "pos": { + "x": 560, + "y": -29 + }, + "width": 90, + "height": 21, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "i am top right", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 90, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "i am bottom left", + "type": "text", + "pos": { + "x": -529, + "y": 384 + }, + "width": 107, + "height": 21, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "i am bottom left", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 107, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "i am bottom right", + "type": "text", + "pos": { + "x": 560, + "y": 384 + }, + "width": 117, + "height": 21, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "i am bottom right", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 117, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(x -> y)[0]", + "src": "x", + "srcArrow": "none", + "srcLabel": "", + "dst": "y", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 69, + "y": 138 + }, + { + "x": 69, + "y": 238 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg b/e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg new file mode 100644 index 000000000..a7943851b --- /dev/null +++ b/e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg @@ -0,0 +1,798 @@ + +xyThe top of the mountainJoeDonaldCats, no less liquid than their shadows, offer no angles to the wind. +If we can't fix it, it ain't broke. +Dieters live life in the fasting lane. +i am top lefti am top righti am bottom lefti am bottom right + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/constant_near_title/dagre/board.exp.json b/e2etests/testdata/stable/constant_near_title/dagre/board.exp.json new file mode 100644 index 000000000..09cde3d74 --- /dev/null +++ b/e2etests/testdata/stable/constant_near_title/dagre/board.exp.json @@ -0,0 +1,500 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "poll the people", + "type": "", + "pos": { + "x": 112, + "y": 0 + }, + "width": 210, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "poll the people", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 110, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "results", + "type": "", + "pos": { + "x": 241, + "y": 226 + }, + "width": 153, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "results", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 53, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "unfavorable", + "type": "", + "pos": { + "x": 0, + "y": 452 + }, + "width": 191, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "unfavorable", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 91, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "favorable", + "type": "", + "pos": { + "x": 251, + "y": 452 + }, + "width": 173, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "favorable", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 73, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "will of the people", + "type": "", + "pos": { + "x": 224, + "y": 678 + }, + "width": 227, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "will of the people", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 127, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "title", + "type": "text", + "pos": { + "x": 92, + "y": -70 + }, + "width": 266, + "height": 50, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "# A winning strategy", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 266, + "labelHeight": 50, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(poll the people -> results)[0]", + "src": "poll the people", + "srcArrow": "none", + "srcLabel": "", + "dst": "results", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 272.80973451327435, + "y": 126 + }, + { + "x": 308.5619469026549, + "y": 166 + }, + { + "x": 317.5, + "y": 186 + }, + { + "x": 317.5, + "y": 226 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(results -> unfavorable)[0]", + "src": "results", + "srcArrow": "none", + "srcLabel": "", + "dst": "unfavorable", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 250.03982300884957, + "y": 352 + }, + { + "x": 207.2079646017699, + "y": 392 + }, + { + "x": 187.5, + "y": 412 + }, + { + "x": 151.5, + "y": 452 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(unfavorable -> poll the people)[0]", + "src": "unfavorable", + "srcArrow": "none", + "srcLabel": "", + "dst": "poll the people", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 84.34955752212389, + "y": 452 + }, + { + "x": 77.26991150442478, + "y": 412 + }, + { + "x": 75.5, + "y": 379.4 + }, + { + "x": 75.5, + "y": 345.5 + }, + { + "x": 75.5, + "y": 311.6 + }, + { + "x": 87.9, + "y": 166 + }, + { + "x": 137.5, + "y": 126 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(results -> favorable)[0]", + "src": "results", + "srcArrow": "none", + "srcLabel": "", + "dst": "favorable", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 328.6504424778761, + "y": 352 + }, + { + "x": 335.7300884955752, + "y": 392 + }, + { + "x": 337.5, + "y": 412 + }, + { + "x": 337.5, + "y": 452 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(favorable -> will of the people)[0]", + "src": "favorable", + "srcArrow": "none", + "srcLabel": "", + "dst": "will of the people", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 337.5, + "y": 578 + }, + { + "x": 337.5, + "y": 618 + }, + { + "x": 337.5, + "y": 638 + }, + { + "x": 337.5, + "y": 678 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg b/e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg new file mode 100644 index 000000000..de05ea4cf --- /dev/null +++ b/e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg @@ -0,0 +1,796 @@ + +poll the peopleresultsunfavorablefavorablewill of the peopleA winning strategy + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/constant_near_title/elk/board.exp.json b/e2etests/testdata/stable/constant_near_title/elk/board.exp.json new file mode 100644 index 000000000..e4ae5bee0 --- /dev/null +++ b/e2etests/testdata/stable/constant_near_title/elk/board.exp.json @@ -0,0 +1,459 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "poll the people", + "type": "", + "pos": { + "x": 81, + "y": 12 + }, + "width": 210, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "poll the people", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 110, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "results", + "type": "", + "pos": { + "x": 74, + "y": 238 + }, + "width": 153, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "results", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 53, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "unfavorable", + "type": "", + "pos": { + "x": 232, + "y": 464 + }, + "width": 191, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "unfavorable", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 91, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "favorable", + "type": "", + "pos": { + "x": 39, + "y": 464 + }, + "width": 173, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "favorable", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 73, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "will of the people", + "type": "", + "pos": { + "x": 12, + "y": 690 + }, + "width": 227, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "will of the people", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 127, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "title", + "type": "text", + "pos": { + "x": 84, + "y": -58 + }, + "width": 266, + "height": 50, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "# A winning strategy", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 266, + "labelHeight": 50, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(poll the people -> results)[0]", + "src": "poll the people", + "srcArrow": "none", + "srcLabel": "", + "dst": "results", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 151, + "y": 138 + }, + { + "x": 151, + "y": 238 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(results -> unfavorable)[0]", + "src": "results", + "srcArrow": "none", + "srcLabel": "", + "dst": "unfavorable", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 176.5, + "y": 364 + }, + { + "x": 176.5, + "y": 414 + }, + { + "x": 295.6666666666667, + "y": 414 + }, + { + "x": 295.6666666666667, + "y": 464 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(unfavorable -> poll the people)[0]", + "src": "unfavorable", + "srcArrow": "none", + "srcLabel": "", + "dst": "poll the people", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 359.3333333333333, + "y": 464 + }, + { + "x": 359.3333333333333, + "y": 188 + }, + { + "x": 221, + "y": 188 + }, + { + "x": 221, + "y": 138 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(results -> favorable)[0]", + "src": "results", + "srcArrow": "none", + "srcLabel": "", + "dst": "favorable", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 125.5, + "y": 364 + }, + { + "x": 125.5, + "y": 464 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(favorable -> will of the people)[0]", + "src": "favorable", + "srcArrow": "none", + "srcLabel": "", + "dst": "will of the people", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 125.5, + "y": 590 + }, + { + "x": 125.5, + "y": 690 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg b/e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg new file mode 100644 index 000000000..bfc3fa64f --- /dev/null +++ b/e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg @@ -0,0 +1,796 @@ + +poll the peopleresultsunfavorablefavorablewill of the peopleA winning strategy + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/dense/elk/board.exp.json b/e2etests/testdata/stable/dense/elk/board.exp.json index 45e2e0190..1574221b4 100644 --- a/e2etests/testdata/stable/dense/elk/board.exp.json +++ b/e2etests/testdata/stable/dense/elk/board.exp.json @@ -6,8 +6,8 @@ "id": "a", "type": "", "pos": { - "x": 449, - "y": 238 + "x": 537, + "y": 248 }, "width": 113, "height": 126, @@ -46,7 +46,7 @@ "id": "b", "type": "", "pos": { - "x": 420, + "x": 537, "y": 474 }, "width": 113, @@ -86,8 +86,8 @@ "id": "c", "type": "", "pos": { - "x": 316, - "y": 238 + "x": 404, + "y": 248 }, "width": 113, "height": 126, @@ -126,8 +126,8 @@ "id": "d", "type": "", "pos": { - "x": 428, - "y": 720 + "x": 443, + "y": 740 }, "width": 114, "height": 126, @@ -166,8 +166,8 @@ "id": "e", "type": "", "pos": { - "x": 533, - "y": 1202 + "x": 406, + "y": 1222 }, "width": 113, "height": 126, @@ -206,8 +206,8 @@ "id": "f", "type": "", "pos": { - "x": 73, - "y": 946 + "x": 140, + "y": 986 }, "width": 111, "height": 126, @@ -246,8 +246,8 @@ "id": "g", "type": "", "pos": { - "x": 23, - "y": 720 + "x": 157, + "y": 740 }, "width": 114, "height": 126, @@ -286,8 +286,8 @@ "id": "h", "type": "", "pos": { - "x": 562, - "y": 720 + "x": 23, + "y": 740 }, "width": 113, "height": 126, @@ -326,8 +326,8 @@ "id": "i", "type": "", "pos": { - "x": 384, - "y": 1428 + "x": 257, + "y": 1448 }, "width": 109, "height": 126, @@ -366,7 +366,7 @@ "id": "j", "type": "", "pos": { - "x": 317, + "x": 577, "y": 12 }, "width": 110, @@ -406,8 +406,8 @@ "id": "k", "type": "", "pos": { - "x": 382, - "y": 1654 + "x": 255, + "y": 1674 }, "width": 113, "height": 126, @@ -446,8 +446,8 @@ "id": "l", "type": "", "pos": { - "x": 297, - "y": 946 + "x": 474, + "y": 986 }, "width": 109, "height": 126, @@ -486,8 +486,8 @@ "id": "m", "type": "", "pos": { - "x": 158, - "y": 720 + "x": 291, + "y": 740 }, "width": 117, "height": 126, @@ -526,8 +526,8 @@ "id": "n", "type": "", "pos": { - "x": 400, - "y": 1202 + "x": 273, + "y": 1222 }, "width": 113, "height": 126, @@ -566,8 +566,8 @@ "id": "o", "type": "", "pos": { - "x": 695, - "y": 720 + "x": 577, + "y": 740 }, "width": 114, "height": 126, @@ -606,8 +606,8 @@ "id": "p", "type": "", "pos": { - "x": 295, - "y": 720 + "x": 711, + "y": 740 }, "width": 113, "height": 126, @@ -646,8 +646,8 @@ "id": "q", "type": "", "pos": { - "x": 533, - "y": 1428 + "x": 406, + "y": 1448 }, "width": 114, "height": 126, @@ -710,11 +710,11 @@ "labelPercentage": 0, "route": [ { - "x": 505.17857142857144, - "y": 364 + "x": 593.6428571428572, + "y": 374 }, { - "x": 505.17857142857144, + "x": 593.6428571428572, "y": 474 } ], @@ -749,19 +749,19 @@ "labelPercentage": 0, "route": [ { - "x": 372.17857142857144, - "y": 364 + "x": 460.6428571428572, + "y": 374 }, { - "x": 372.17857142857144, - "y": 414 + "x": 460.6428571428572, + "y": 424 }, { - "x": 476.92857142857144, - "y": 414 + "x": 565.3928571428572, + "y": 424 }, { - "x": 476.92857142857144, + "x": 565.3928571428572, "y": 474 } ], @@ -796,20 +796,20 @@ "labelPercentage": 0, "route": [ { - "x": 513.5, - "y": 846 + "x": 500.00000000000006, + "y": 866 }, { - "x": 513.5, - "y": 896 + "x": 500.00000000000006, + "y": 926 }, { - "x": 618, - "y": 896 + "x": 463.00000000000006, + "y": 926 }, { - "x": 618, - "y": 1202 + "x": 463.00000000000006, + "y": 1222 } ], "animated": false, @@ -843,20 +843,20 @@ "labelPercentage": 0, "route": [ { - "x": 147, - "y": 1072 + "x": 214, + "y": 1112 }, { - "x": 147, - "y": 1142 + "x": 214, + "y": 1162 }, { - "x": 561.5, - "y": 1142 + "x": 434.75000000000006, + "y": 1162 }, { - "x": 561.5, - "y": 1202 + "x": 434.75000000000006, + "y": 1222 } ], "animated": false, @@ -890,20 +890,28 @@ "labelPercentage": 0, "route": [ { - "x": 468.8571428571429, + "x": 585.5714285714287, "y": 600 }, { - "x": 468.8571428571429, + "x": 585.5714285714287, "y": 670 }, { - "x": 147, + "x": 146, "y": 670 }, { - "x": 147, - "y": 946 + "x": 146, + "y": 916 + }, + { + "x": 177, + "y": 916 + }, + { + "x": 177, + "y": 986 } ], "animated": false, @@ -937,20 +945,20 @@ "labelPercentage": 0, "route": [ { - "x": 452.7142857142857, + "x": 601.7142857142858, "y": 600 }, { - "x": 452.7142857142857, - "y": 660 + "x": 601.7142857142858, + "y": 680 }, { - "x": 80, - "y": 660 + "x": 214, + "y": 680 }, { - "x": 80, - "y": 720 + "x": 214, + "y": 740 } ], "animated": false, @@ -984,20 +992,12 @@ "labelPercentage": 0, "route": [ { - "x": 80, - "y": 846 + "x": 214, + "y": 866 }, { - "x": 80, - "y": 896 - }, - { - "x": 110, - "y": 896 - }, - { - "x": 110, - "y": 946 + "x": 214, + "y": 986 } ], "animated": false, @@ -1031,20 +1031,20 @@ "labelPercentage": 0, "route": [ { - "x": 501.1428571428571, + "x": 569.4285714285716, "y": 600 }, { - "x": 501.1428571428571, + "x": 569.4285714285716, "y": 660 }, { - "x": 618.5, + "x": 79.5, "y": 660 }, { - "x": 618.5, - "y": 720 + "x": 79.5, + "y": 740 } ], "animated": false, @@ -1078,11 +1078,11 @@ "labelPercentage": 0, "route": [ { - "x": 436.57142857142856, + "x": 553.2857142857143, "y": 600 }, { - "x": 436.57142857142856, + "x": 553.2857142857143, "y": 650 }, { @@ -1091,15 +1091,15 @@ }, { "x": 12, - "y": 1378 + "y": 1398 }, { - "x": 420.4166666666667, - "y": 1378 + "x": 293.6666666666667, + "y": 1398 }, { - "x": 420.4166666666667, - "y": 1428 + "x": 293.6666666666667, + "y": 1448 } ], "animated": false, @@ -1133,12 +1133,20 @@ "labelPercentage": 0, "route": [ { - "x": 485, + "x": 617.8571428571429, "y": 600 }, { - "x": 485, - "y": 720 + "x": 617.8571428571429, + "y": 690 + }, + { + "x": 500.00000000000006, + "y": 690 + }, + { + "x": 500.00000000000006, + "y": 740 } ], "animated": false, @@ -1172,12 +1180,20 @@ "labelPercentage": 0, "route": [ { - "x": 372.17857142857144, + "x": 605.1428571428572, "y": 138 }, { - "x": 372.17857142857144, - "y": 238 + "x": 605.1428571428572, + "y": 188 + }, + { + "x": 460.6428571428572, + "y": 188 + }, + { + "x": 460.6428571428572, + "y": 248 } ], "animated": false, @@ -1211,20 +1227,20 @@ "labelPercentage": 0, "route": [ { - "x": 399.67857142857144, + "x": 632.6428571428572, "y": 138 }, { - "x": 399.67857142857144, - "y": 188 + "x": 632.6428571428572, + "y": 198 }, { - "x": 505.17857142857144, - "y": 188 + "x": 593.6428571428572, + "y": 198 }, { - "x": 505.17857142857144, - "y": 238 + "x": 593.6428571428572, + "y": 248 } ], "animated": false, @@ -1258,27 +1274,19 @@ "labelPercentage": 0, "route": [ { - "x": 448.67857142857144, + "x": 621.8928571428572, "y": 474 }, { - "x": 448.67857142857144, + "x": 621.8928571428572, "y": 424 }, { - "x": 304.67857142857144, + "x": 660.1428571428572, "y": 424 }, { - "x": 304.67857142857144, - "y": 188 - }, - { - "x": 344.67857142857144, - "y": 188 - }, - { - "x": 344.67857142857144, + "x": 660.1428571428572, "y": 138 } ], @@ -1313,12 +1321,12 @@ "labelPercentage": 0, "route": [ { - "x": 438.58333333333337, - "y": 1554 + "x": 311.83333333333337, + "y": 1574 }, { - "x": 438.58333333333337, - "y": 1654 + "x": 311.83333333333337, + "y": 1674 } ], "animated": false, @@ -1352,20 +1360,12 @@ "labelPercentage": 0, "route": [ { - "x": 456.5, - "y": 846 + "x": 528.5, + "y": 866 }, { - "x": 456.5, - "y": 896 - }, - { - "x": 378.75, - "y": 896 - }, - { - "x": 378.75, - "y": 946 + "x": 528.5, + "y": 986 } ], "animated": false, @@ -1399,20 +1399,20 @@ "labelPercentage": 0, "route": [ { - "x": 351.5, - "y": 1072 + "x": 528.5, + "y": 1112 }, { - "x": 351.5, - "y": 1122 + "x": 528.5, + "y": 1162 }, { - "x": 589.75, - "y": 1122 + "x": 491.25000000000006, + "y": 1162 }, { - "x": 589.75, - "y": 1202 + "x": 491.25000000000006, + "y": 1222 } ], "animated": false, @@ -1446,20 +1446,20 @@ "labelPercentage": 0, "route": [ { - "x": 236, - "y": 846 + "x": 369, + "y": 866 }, { - "x": 236, - "y": 896 + "x": 369, + "y": 936 }, { - "x": 324.25, - "y": 896 + "x": 501.25000000000006, + "y": 936 }, { - "x": 324.25, - "y": 946 + "x": 501.25000000000006, + "y": 986 } ], "animated": false, @@ -1493,20 +1493,12 @@ "labelPercentage": 0, "route": [ { - "x": 197, - "y": 846 + "x": 330, + "y": 866 }, { - "x": 197, - "y": 1132 - }, - { - "x": 456.75, - "y": 1132 - }, - { - "x": 456.75, - "y": 1202 + "x": 330, + "y": 1222 } ], "animated": false, @@ -1540,12 +1532,12 @@ "labelPercentage": 0, "route": [ { - "x": 456.75, - "y": 1328 + "x": 330, + "y": 1348 }, { - "x": 456.75, - "y": 1428 + "x": 330, + "y": 1448 } ], "animated": false, @@ -1579,12 +1571,28 @@ "labelPercentage": 0, "route": [ { - "x": 485, - "y": 846 + "x": 471.50000000000006, + "y": 866 }, { - "x": 485, - "y": 1202 + "x": 471.50000000000006, + "y": 916 + }, + { + "x": 452.00000000000006, + "y": 916 + }, + { + "x": 452.00000000000006, + "y": 1172 + }, + { + "x": 358.25, + "y": 1172 + }, + { + "x": 358.25, + "y": 1222 } ], "animated": false, @@ -1618,20 +1626,20 @@ "labelPercentage": 0, "route": [ { - "x": 110, - "y": 1072 + "x": 177, + "y": 1112 }, { - "x": 110, - "y": 1152 + "x": 177, + "y": 1172 }, { - "x": 428.5, - "y": 1152 + "x": 301.75, + "y": 1172 }, { - "x": 428.5, - "y": 1202 + "x": 301.75, + "y": 1222 } ], "animated": false, @@ -1665,20 +1673,12 @@ "labelPercentage": 0, "route": [ { - "x": 517.2857142857142, + "x": 634.0000000000001, "y": 600 }, { - "x": 517.2857142857142, - "y": 650 - }, - { - "x": 752, - "y": 650 - }, - { - "x": 752, - "y": 720 + "x": 634.0000000000001, + "y": 740 } ], "animated": false, @@ -1712,12 +1712,20 @@ "labelPercentage": 0, "route": [ { - "x": 351.5, - "y": 846 + "x": 767.5, + "y": 866 }, { - "x": 351.5, - "y": 946 + "x": 767.5, + "y": 916 + }, + { + "x": 555.75, + "y": 916 + }, + { + "x": 555.75, + "y": 986 } ], "animated": false, @@ -1751,12 +1759,12 @@ "labelPercentage": 0, "route": [ { - "x": 589.75, - "y": 1328 + "x": 463.00000000000006, + "y": 1348 }, { - "x": 589.75, - "y": 1428 + "x": 463.00000000000006, + "y": 1448 } ], "animated": false, diff --git a/e2etests/testdata/stable/dense/elk/sketch.exp.svg b/e2etests/testdata/stable/dense/elk/sketch.exp.svg index 792d8ea74..292905735 100644 --- a/e2etests/testdata/stable/dense/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/dense/elk/sketch.exp.svg @@ -2,7 +2,7 @@ abcdefghijklmnopq - +abcdefghijklmnopq + finallyatreeandnodessomemoremanythenhereyouhavehierarchyanotherofnestingtreesatreeinsidehierarchyroot - +finallyatreeandnodessomemoremanythenhereyouhavehierarchyanotherofnestingtreesatreeinsidehierarchyroot + bacde21345abcde +bacde21345abcde alphabeta gamma +alphabeta gamma size XSsize Ssize Msize Lsize XLsize XXLsize XXXLcustom 8custom 12custom 18custom 21custom 64 custom 10custom 15custom 48 - - - - +size XSsize Ssize Msize Lsize XLsize XXLsize XXXLcustom 8custom 12custom 18custom 21custom 64 custom 10custom 15custom 48 + + + + aabbccddllffwwyyadnniijjkkssuurmeemmmmgghhzzooppqqrrttvvxxabac 123456 - - - - - - - +aabbccddllffwwyyadnniijjkkssuurmeemmmmgghhzzooppqqrrttvvxxabac 123456 + + + + + + + abcdefghiqrjmnoszaabbeeffggklptuwxyccddv - +abcdefghiqrjmnoszaabbeeffggklptuwxyccddv + mixed togethersugarsolution we get +mixed togethersugarsolution we get mixed togethersugarsolution we get +mixed togethersugarsolution we get - + Markdown: Syntax -ab +ab Markdown: Syntax -ab +ab markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - + markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - + markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - + markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - + code -ab +ab code -ab +code +ab abcdefghijklmnopqrstuvw - +abcdefghijklmnopqrstuvw + abcdefghijklmnopqrstu - +abcdefghijklmnopqrstu + Foo Baz12hello - +Foo Baz12hello + acdefgbh +acdefgbh topabcbottomstartend - +topabcbottomstartend + rootcontainerrootleftrightrootinnerrootinnerleftrightleftright to inner leftto inner rightto inner leftto inner rightto left container rootto right container root +rootcontainerrootleftrightrootinnerrootinnerleftrightleftright to inner leftto inner rightto inner leftto inner rightto left container rootto right container root diff --git a/e2etests/testdata/stable/p/dagre/board.exp.json b/e2etests/testdata/stable/p/dagre/board.exp.json index bb254d64c..a4742e0b8 100644 --- a/e2etests/testdata/stable/p/dagre/board.exp.json +++ b/e2etests/testdata/stable/p/dagre/board.exp.json @@ -34,7 +34,7 @@ "language": "markdown", "color": "#0A0F25", "italic": false, - "bold": true, + "bold": false, "underline": false, "labelWidth": 1857, "labelHeight": 24, diff --git a/e2etests/testdata/stable/p/dagre/sketch.exp.svg b/e2etests/testdata/stable/p/dagre/sketch.exp.svg index 840c8a89b..6aba7026c 100644 --- a/e2etests/testdata/stable/p/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/p/dagre/sketch.exp.svg @@ -277,6 +277,7 @@ width="2057" height="676" viewBox="-100 -100 2057 676">xyz hello - - +xyz hello + + a labelblabelsa class+ -public() bool -void- -private() int -voidcloudyyyya := 5 +a labelblabelsa class+ +public() bool +void- +private() int +voidcloudyyyya := 5 b := a + 7 -fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid -int -name -varchar - result := callThisFunction(obj, 5) midthis sideother side - +fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid +int +name +varchar + result := callThisFunction(obj, 5) midthis sideother side + - + a labelblabelsa class+ -public() bool -void- -private() int -voidcloudyyyya := 5 +a labelblabelsa class+ +public() bool +void- +private() int +voidcloudyyyya := 5 b := a + 7 -fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid -int -name -varchar - result := callThisFunction(obj, 5) midthis sideother side - +fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid +int +name +varchar + result := callThisFunction(obj, 5) midthis sideother side + - + abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note +abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note - - - - - + + + + + diff --git a/e2etests/testdata/stable/sequence_diagram_groups/elk/board.exp.json b/e2etests/testdata/stable/sequence_diagram_groups/elk/board.exp.json index 270198f16..776b8ddfb 100644 --- a/e2etests/testdata/stable/sequence_diagram_groups/elk/board.exp.json +++ b/e2etests/testdata/stable/sequence_diagram_groups/elk/board.exp.json @@ -198,6 +198,7 @@ "underline": false, "labelWidth": 30, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 1 }, @@ -237,6 +238,7 @@ "underline": false, "labelWidth": 57, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 1 }, @@ -276,6 +278,7 @@ "underline": false, "labelWidth": 78, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, @@ -315,6 +318,7 @@ "underline": false, "labelWidth": 58, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 1 }, @@ -394,6 +398,7 @@ "underline": false, "labelWidth": 38, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 1 }, diff --git a/e2etests/testdata/stable/sequence_diagram_groups/elk/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_groups/elk/sketch.exp.svg index 0afcfd18a..d3ed45a1a 100644 --- a/e2etests/testdata/stable/sequence_diagram_groups/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/sequence_diagram_groups/elk/sketch.exp.svg @@ -18,13 +18,13 @@ width="1147" height="2268" viewBox="-76 -26 1147 2268">abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note +abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note - - - - - + + + + + diff --git a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json index 21f56fb8a..772cc63c2 100644 --- a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json +++ b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json @@ -158,6 +158,7 @@ "underline": false, "labelWidth": 160, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 1 }, @@ -197,6 +198,7 @@ "underline": false, "labelWidth": 238, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, @@ -236,6 +238,7 @@ "underline": false, "labelWidth": 173, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 3 }, @@ -275,6 +278,7 @@ "underline": false, "labelWidth": 77, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 4 }, @@ -354,6 +358,7 @@ "underline": false, "labelWidth": 41, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 5 }, @@ -393,6 +398,7 @@ "underline": false, "labelWidth": 24, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 1 }, @@ -432,6 +438,7 @@ "underline": false, "labelWidth": 47, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, @@ -471,6 +478,7 @@ "underline": false, "labelWidth": 47, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, @@ -510,6 +518,7 @@ "underline": false, "labelWidth": 47, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, @@ -549,6 +558,7 @@ "underline": false, "labelWidth": 47, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, diff --git a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg index 0dbb0afaa..48b328e86 100644 --- a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg @@ -18,18 +18,18 @@ width="1116" height="2458" viewBox="-197 -26 1116 2458">abjust an actorthis is a message groupaltand this is a nested message groupcase 1case 2case 3case 4what about more nestingcrazy townwhoa a notea note here to remember that padding must consider notes toojustalongnotehere +abjust an actorthis is a message groupaltand this is a nested message groupcase 1case 2case 3case 4what about more nestingcrazy townwhoa a notea note here to remember that padding must consider notes toojustalongnotehere - - - - - - - - - - + + + + + + + + + + abjust an actorthis is a message groupaltand this is a nested message groupcase 1case 2case 3case 4what about more nestingcrazy townwhoa a notea note here to remember that padding must consider notes toojustalongnotehere +abjust an actorthis is a message groupaltand this is a nested message groupcase 1case 2case 3case 4what about more nestingcrazy townwhoa a notea note here to remember that padding must consider notes toojustalongnotehere - - - - - - - - - - + + + + + + + + + + How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place +How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place - + diff --git a/e2etests/testdata/stable/sequence_diagram_real/elk/board.exp.json b/e2etests/testdata/stable/sequence_diagram_real/elk/board.exp.json index d20a6d846..3945edf3f 100644 --- a/e2etests/testdata/stable/sequence_diagram_real/elk/board.exp.json +++ b/e2etests/testdata/stable/sequence_diagram_real/elk/board.exp.json @@ -478,6 +478,7 @@ "underline": false, "labelWidth": 185, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, diff --git a/e2etests/testdata/stable/sequence_diagram_real/elk/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_real/elk/sketch.exp.svg index 364fb5549..5f4dd359a 100644 --- a/e2etests/testdata/stable/sequence_diagram_real/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/sequence_diagram_real/elk/sketch.exp.svg @@ -18,9 +18,9 @@ width="2447" height="2536" viewBox="-88 -88 2447 2536">How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place +How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place - + diff --git a/e2etests/testdata/stable/sequence_diagrams/elk/board.exp.json b/e2etests/testdata/stable/sequence_diagrams/elk/board.exp.json index 69ec36ed6..1f4879ef4 100644 --- a/e2etests/testdata/stable/sequence_diagrams/elk/board.exp.json +++ b/e2etests/testdata/stable/sequence_diagrams/elk/board.exp.json @@ -47,7 +47,7 @@ "type": "sequence_diagram", "pos": { "x": 12, - "y": 364 + "y": 363 }, "width": 1472, "height": 2080, @@ -166,7 +166,7 @@ "id": "finally", "type": "queue", "pos": { - "x": 1504, + "x": 1503, "y": 2626 }, "width": 1623, @@ -206,7 +206,7 @@ "id": "finally.sequence", "type": "sequence_diagram", "pos": { - "x": 1579, + "x": 1578, "y": 2701 }, "width": 1473, @@ -246,7 +246,7 @@ "id": "finally.sequence.scorer", "type": "", "pos": { - "x": 1603, + "x": 1602, "y": 2806 }, "width": 150, @@ -286,7 +286,7 @@ "id": "finally.sequence.concept", "type": "", "pos": { - "x": 1848, + "x": 1847, "y": 2806 }, "width": 160, @@ -326,7 +326,7 @@ "id": "finally.sequence.essayRubric", "type": "", "pos": { - "x": 2085, + "x": 2084, "y": 2806 }, "width": 186, @@ -366,7 +366,7 @@ "id": "finally.sequence.item", "type": "", "pos": { - "x": 2353, + "x": 2352, "y": 2806 }, "width": 150, @@ -406,7 +406,7 @@ "id": "finally.sequence.itemOutcome", "type": "", "pos": { - "x": 2580, + "x": 2579, "y": 2806 }, "width": 197, @@ -446,7 +446,7 @@ "id": "finally.sequence.itemResponse", "type": "", "pos": { - "x": 2828, + "x": 2827, "y": 2806 }, "width": 200, @@ -487,7 +487,7 @@ "type": "", "pos": { "x": 36, - "y": 474 + "y": 473 }, "width": 150, "height": 126, @@ -527,7 +527,7 @@ "type": "rectangle", "pos": { "x": 105, - "y": 714 + "y": 713 }, "width": 12, "height": 1592, @@ -566,7 +566,7 @@ "type": "", "pos": { "x": 261, - "y": 474 + "y": 473 }, "width": 200, "height": 126, @@ -606,7 +606,7 @@ "type": "rectangle", "pos": { "x": 355, - "y": 714 + "y": 713 }, "width": 12, "height": 162, @@ -645,7 +645,7 @@ "type": "", "pos": { "x": 536, - "y": 474 + "y": 473 }, "width": 150, "height": 126, @@ -685,7 +685,7 @@ "type": "rectangle", "pos": { "x": 605, - "y": 974 + "y": 973 }, "width": 12, "height": 162, @@ -724,7 +724,7 @@ "type": "", "pos": { "x": 768, - "y": 474 + "y": 473 }, "width": 186, "height": 126, @@ -764,7 +764,7 @@ "type": "rectangle", "pos": { "x": 855, - "y": 1234 + "y": 1233 }, "width": 12, "height": 422, @@ -803,7 +803,7 @@ "type": "rectangle", "pos": { "x": 851, - "y": 1364 + "y": 1363 }, "width": 20, "height": 162, @@ -842,7 +842,7 @@ "type": "", "pos": { "x": 1031, - "y": 474 + "y": 473 }, "width": 160, "height": 126, @@ -882,7 +882,7 @@ "type": "rectangle", "pos": { "x": 1105, - "y": 1494 + "y": 1493 }, "width": 12, "height": 80, @@ -921,7 +921,7 @@ "type": "", "pos": { "x": 1263, - "y": 474 + "y": 473 }, "width": 197, "height": 126, @@ -961,7 +961,7 @@ "type": "rectangle", "pos": { "x": 1355, - "y": 1754 + "y": 1753 }, "width": 12, "height": 80, @@ -1000,7 +1000,7 @@ "type": "rectangle", "pos": { "x": 605, - "y": 1884 + "y": 1883 }, "width": 12, "height": 80, @@ -1039,7 +1039,7 @@ "type": "rectangle", "pos": { "x": 605, - "y": 2014 + "y": 2013 }, "width": 12, "height": 80, @@ -1078,7 +1078,7 @@ "type": "rectangle", "pos": { "x": 1355, - "y": 2144 + "y": 2143 }, "width": 12, "height": 80, @@ -1117,7 +1117,7 @@ "type": "rectangle", "pos": { "x": 1355, - "y": 2274 + "y": 2273 }, "width": 12, "height": 80, @@ -1864,7 +1864,7 @@ "id": "finally.sequence.itemResponse.a", "type": "rectangle", "pos": { - "x": 2922, + "x": 2921, "y": 3046 }, "width": 12, @@ -1903,7 +1903,7 @@ "id": "finally.sequence.item.a", "type": "rectangle", "pos": { - "x": 2422, + "x": 2421, "y": 3030 }, "width": 12, @@ -1942,7 +1942,7 @@ "id": "finally.sequence.item.a.b", "type": "rectangle", "pos": { - "x": 2418, + "x": 2417, "y": 3046 }, "width": 20, @@ -1981,7 +1981,7 @@ "id": "finally.sequence.essayRubric.a", "type": "rectangle", "pos": { - "x": 2172, + "x": 2171, "y": 3144 }, "width": 12, @@ -2020,7 +2020,7 @@ "id": "finally.sequence.essayRubric.a.b", "type": "rectangle", "pos": { - "x": 2168, + "x": 2167, "y": 3160 }, "width": 20, @@ -2059,7 +2059,7 @@ "id": "finally.sequence.essayRubric.a.b.c", "type": "rectangle", "pos": { - "x": 2164, + "x": 2163, "y": 3176 }, "width": 28, @@ -2098,7 +2098,7 @@ "id": "finally.sequence.concept.a", "type": "rectangle", "pos": { - "x": 1922, + "x": 1921, "y": 3258 }, "width": 12, @@ -2137,7 +2137,7 @@ "id": "finally.sequence.concept.a.b", "type": "rectangle", "pos": { - "x": 1918, + "x": 1917, "y": 3274 }, "width": 20, @@ -2176,7 +2176,7 @@ "id": "finally.sequence.concept.a.b.c", "type": "rectangle", "pos": { - "x": 1914, + "x": 1913, "y": 3290 }, "width": 28, @@ -2215,7 +2215,7 @@ "id": "finally.sequence.concept.a.b.c.d", "type": "rectangle", "pos": { - "x": 1910, + "x": 1909, "y": 3306 }, "width": 36, @@ -2449,7 +2449,7 @@ "id": "finally.sequence.scorer.abc", "type": "rectangle", "pos": { - "x": 1672, + "x": 1671, "y": 3696 }, "width": 12, @@ -2488,7 +2488,7 @@ "id": "finally.sequence.itemResponse.c", "type": "rectangle", "pos": { - "x": 2922, + "x": 2921, "y": 3956 }, "width": 12, @@ -2552,11 +2552,11 @@ "route": [ { "x": 117, - "y": 730 + "y": 729.5 }, { "x": 355, - "y": 730 + "y": 729.5 } ], "animated": false, @@ -2591,11 +2591,11 @@ "route": [ { "x": 117, - "y": 860 + "y": 859.5 }, { "x": 355, - "y": 860 + "y": 859.5 } ], "animated": false, @@ -2630,11 +2630,11 @@ "route": [ { "x": 117, - "y": 990 + "y": 989.5 }, { "x": 605, - "y": 990 + "y": 989.5 } ], "animated": false, @@ -2669,11 +2669,11 @@ "route": [ { "x": 117, - "y": 1120 + "y": 1119.5 }, { "x": 605, - "y": 1120 + "y": 1119.5 } ], "animated": false, @@ -2708,11 +2708,11 @@ "route": [ { "x": 117, - "y": 1250 + "y": 1249.5 }, { "x": 855, - "y": 1250 + "y": 1249.5 } ], "animated": false, @@ -2747,11 +2747,11 @@ "route": [ { "x": 361, - "y": 1380 + "y": 1379.5 }, { "x": 851, - "y": 1380 + "y": 1379.5 } ], "animated": false, @@ -2786,11 +2786,11 @@ "route": [ { "x": 871, - "y": 1510 + "y": 1509.5 }, { "x": 1105, - "y": 1510 + "y": 1509.5 } ], "animated": false, @@ -2825,11 +2825,11 @@ "route": [ { "x": 111, - "y": 1640 + "y": 1639.5 }, { "x": 855, - "y": 1640 + "y": 1639.5 } ], "animated": false, @@ -2864,11 +2864,11 @@ "route": [ { "x": 117, - "y": 1770 + "y": 1769.5 }, { "x": 1355.5, - "y": 1770 + "y": 1769.5 } ], "animated": false, @@ -2903,11 +2903,11 @@ "route": [ { "x": 117, - "y": 1900 + "y": 1899.5 }, { "x": 605, - "y": 1900 + "y": 1899.5 } ], "animated": false, @@ -2942,11 +2942,11 @@ "route": [ { "x": 117, - "y": 2030 + "y": 2029.5 }, { "x": 605, - "y": 2030 + "y": 2029.5 } ], "animated": false, @@ -2981,11 +2981,11 @@ "route": [ { "x": 117, - "y": 2160 + "y": 2159.5 }, { "x": 1355.5, - "y": 2160 + "y": 2159.5 } ], "animated": false, @@ -3020,11 +3020,11 @@ "route": [ { "x": 117, - "y": 2290 + "y": 2289.5 }, { "x": 1355.5, - "y": 2290 + "y": 2289.5 } ], "animated": false, @@ -3749,7 +3749,7 @@ "y": 2571 }, { - "x": 2325, + "x": 2326, "y": 2626 } ], @@ -3784,11 +3784,11 @@ "labelPercentage": 0, "route": [ { - "x": 2922, + "x": 2921.5, "y": 3062 }, { - "x": 2438, + "x": 2437.5, "y": 3062 } ], @@ -3823,11 +3823,11 @@ "labelPercentage": 0, "route": [ { - "x": 2418, + "x": 2417.5, "y": 3192 }, { - "x": 2192, + "x": 2191.5, "y": 3192 } ], @@ -3862,11 +3862,11 @@ "labelPercentage": 0, "route": [ { - "x": 2164, + "x": 2163.5, "y": 3322 }, { - "x": 1946, + "x": 1945.5, "y": 3322 } ], @@ -3901,11 +3901,11 @@ "labelPercentage": 0, "route": [ { - "x": 2422, + "x": 2421.5, "y": 3452 }, { - "x": 2188, + "x": 2187.5, "y": 3452 } ], @@ -3940,11 +3940,11 @@ "labelPercentage": 0, "route": [ { - "x": 1946, + "x": 1945.5, "y": 3582 }, { - "x": 2656.5, + "x": 2656, "y": 3582 } ], @@ -3979,11 +3979,11 @@ "labelPercentage": 0, "route": [ { - "x": 1684, + "x": 1683.5, "y": 3712 }, { - "x": 2422, + "x": 2421.5, "y": 3712 } ], @@ -4018,11 +4018,11 @@ "labelPercentage": 0, "route": [ { - "x": 2656.5, + "x": 2656, "y": 3842 }, { - "x": 1678, + "x": 1677.5, "y": 3842 } ], @@ -4057,11 +4057,11 @@ "labelPercentage": 0, "route": [ { - "x": 1678, + "x": 1677.5, "y": 3972 }, { - "x": 2922, + "x": 2921.5, "y": 3972 } ], @@ -4097,11 +4097,11 @@ "route": [ { "x": 111, - "y": 600 + "y": 599.5 }, { "x": 111, - "y": 2420 + "y": 2419.5 } ], "animated": false, @@ -4136,11 +4136,11 @@ "route": [ { "x": 361, - "y": 600 + "y": 599.5 }, { "x": 361, - "y": 2420 + "y": 2419.5 } ], "animated": false, @@ -4175,11 +4175,11 @@ "route": [ { "x": 611, - "y": 600 + "y": 599.5 }, { "x": 611, - "y": 2420 + "y": 2419.5 } ], "animated": false, @@ -4214,11 +4214,11 @@ "route": [ { "x": 861, - "y": 600 + "y": 599.5 }, { "x": 861, - "y": 2420 + "y": 2419.5 } ], "animated": false, @@ -4253,11 +4253,11 @@ "route": [ { "x": 1111, - "y": 600 + "y": 599.5 }, { "x": 1111, - "y": 2420 + "y": 2419.5 } ], "animated": false, @@ -4292,11 +4292,11 @@ "route": [ { "x": 1361.5, - "y": 600 + "y": 599.5 }, { "x": 1361.5, - "y": 2420 + "y": 2419.5 } ], "animated": false, @@ -4564,11 +4564,11 @@ "labelPercentage": 0, "route": [ { - "x": 1678, + "x": 1677.5, "y": 2932 }, { - "x": 1678, + "x": 1677.5, "y": 4102 } ], @@ -4603,11 +4603,11 @@ "labelPercentage": 0, "route": [ { - "x": 1928, + "x": 1927.5, "y": 2932 }, { - "x": 1928, + "x": 1927.5, "y": 4102 } ], @@ -4642,11 +4642,11 @@ "labelPercentage": 0, "route": [ { - "x": 2178, + "x": 2177.5, "y": 2932 }, { - "x": 2178, + "x": 2177.5, "y": 4102 } ], @@ -4681,11 +4681,11 @@ "labelPercentage": 0, "route": [ { - "x": 2428, + "x": 2427.5, "y": 2932 }, { - "x": 2428, + "x": 2427.5, "y": 4102 } ], @@ -4720,11 +4720,11 @@ "labelPercentage": 0, "route": [ { - "x": 2678.5, + "x": 2678, "y": 2932 }, { - "x": 2678.5, + "x": 2678, "y": 4102 } ], @@ -4759,11 +4759,11 @@ "labelPercentage": 0, "route": [ { - "x": 2928, + "x": 2927.5, "y": 2932 }, { - "x": 2928, + "x": 2927.5, "y": 4102 } ], diff --git a/e2etests/testdata/stable/sequence_diagrams/elk/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagrams/elk/sketch.exp.svg index 8aaa9c058..7d5445201 100644 --- a/e2etests/testdata/stable/sequence_diagrams/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/sequence_diagrams/elk/sketch.exp.svg @@ -18,20 +18,20 @@ width="3324" height="4389" viewBox="-88 -88 3324 4389">a_shapea_sequenceanotherfinallysequencesequencesequencescoreritemResponseitemessayRubricconceptitemOutcomescorerconceptessayRubricitemitemOutcomeitemResponsescoreritemResponseitemessayRubricconceptitemOutcome getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts)getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) +a_shapea_sequenceanotherfinallysequencesequencesequencescoreritemResponseitemessayRubricconceptitemOutcomescorerconceptessayRubricitemitemOutcomeitemResponsescoreritemResponseitemessayRubricconceptitemOutcome getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts)getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/e2etests/testdata/stable/sql_tables/dagre/board.exp.json b/e2etests/testdata/stable/sql_tables/dagre/board.exp.json index a3b85c40e..0fd37e978 100644 --- a/e2etests/testdata/stable/sql_tables/dagre/board.exp.json +++ b/e2etests/testdata/stable/sql_tables/dagre/board.exp.json @@ -9,14 +9,14 @@ "x": 0, "y": 0 }, - "width": 208, + "width": 268, "height": 216, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, "borderRadius": 0, - "fill": "#FFFFFF", - "stroke": "#0A0F25", + "fill": "#0A0F25", + "stroke": "#FFFFFF", "shadow": false, "3d": false, "multiple": false, @@ -165,7 +165,7 @@ "labelWidth": 77, "labelHeight": 26 }, - "constraint": "", + "constraint": "primary_key", "reference": "" } ], @@ -180,13 +180,16 @@ "labelWidth": 61, "labelHeight": 36, "zIndex": 0, - "level": 1 + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" }, { "id": "products", "type": "sql_table", "pos": { - "x": 268, + "x": 328, "y": 18 }, "width": 164, @@ -195,8 +198,8 @@ "strokeDash": 0, "strokeWidth": 2, "borderRadius": 0, - "fill": "#FFFFFF", - "stroke": "#0A0F25", + "fill": "#0A0F25", + "stroke": "#FFFFFF", "shadow": false, "3d": false, "multiple": false, @@ -332,13 +335,16 @@ "labelWidth": 99, "labelHeight": 36, "zIndex": 0, - "level": 1 + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" }, { "id": "orders", "type": "sql_table", "pos": { - "x": 268, + "x": 328, "y": 316 }, "width": 164, @@ -347,8 +353,8 @@ "strokeDash": 0, "strokeWidth": 2, "borderRadius": 0, - "fill": "#FFFFFF", - "stroke": "#0A0F25", + "fill": "#0A0F25", + "stroke": "#FFFFFF", "shadow": false, "3d": false, "multiple": false, @@ -456,13 +462,16 @@ "labelWidth": 74, "labelHeight": 36, "zIndex": 0, - "level": 1 + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" }, { "id": "shipments", "type": "sql_table", "pos": { - "x": 492, + "x": 552, "y": 18 }, "width": 244, @@ -471,8 +480,8 @@ "strokeDash": 0, "strokeWidth": 2, "borderRadius": 0, - "fill": "#FFFFFF", - "stroke": "#0A0F25", + "fill": "#0A0F25", + "stroke": "#FFFFFF", "shadow": false, "3d": false, "multiple": false, @@ -608,7 +617,10 @@ "labelWidth": 116, "labelHeight": 36, "zIndex": 0, - "level": 1 + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" } ], "connections": [ @@ -638,20 +650,20 @@ "labelPercentage": 0, "route": [ { - "x": 104, + "x": 134, "y": 216 }, { - "x": 104, + "x": 134, "y": 256 }, { - "x": 136.8, - "y": 282.2 + "x": 172.8, + "y": 283.2 }, { - "x": 268, - "y": 347 + "x": 328, + "y": 352 } ], "isCurve": true, @@ -686,19 +698,19 @@ "labelPercentage": 0, "route": [ { - "x": 350, + "x": 410, "y": 198 }, { - "x": 350, + "x": 410, "y": 252.4 }, { - "x": 350, + "x": 410, "y": 276 }, { - "x": 350, + "x": 410, "y": 316 } ], @@ -734,19 +746,19 @@ "labelPercentage": 0, "route": [ { - "x": 614, + "x": 674, "y": 198 }, { - "x": 614, + "x": 674, "y": 252.4 }, { - "x": 577.6, + "x": 637.6, "y": 282.8 }, { - "x": 432, + "x": 492, "y": 350 } ], diff --git a/e2etests/testdata/stable/sql_tables/dagre/sketch.exp.svg b/e2etests/testdata/stable/sql_tables/dagre/sketch.exp.svg index d6087ea8a..8b78b0f66 100644 --- a/e2etests/testdata/stable/sql_tables/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/sql_tables/dagre/sketch.exp.svg @@ -2,7 +2,7 @@ usersid -int -name -string -email -string -password -string -last_login -datetime -productsid -int -price -decimal -sku -string -name -string -ordersid -int -user_id -int -product_id -int -shipmentsid -int -order_id -int -tracking_number -string -status -string - - +usersid +int +name +string +email +string +password +string +last_login +datetime +PKproductsid +int +price +decimal +sku +string +name +string +ordersid +int +user_id +int +product_id +int +shipmentsid +int +order_id +int +tracking_number +string +status +string + + usersid -int -name -string -email -string -password -string -last_login -datetime -productsid -int -price -decimal -sku -string -name -string -ordersid -int -user_id -int -product_id -int -shipmentsid -int -order_id -int -tracking_number -string -status -string - - +usersid +int +name +string +email +string +password +string +last_login +datetime +PKproductsid +int +price +decimal +sku +string +name +string +ordersid +int +user_id +int +product_id +int +shipmentsid +int +order_id +int +tracking_number +string +status +string + + -rectangle - -square +rectangle + +square acbl1l2c1l2c3l2c2l3c1l3c2l4bacacbabcc1c2c3abc - +acbl1l2c1l2c3l2c2l3c1l3c2l4bacacbabcc1c2c3abc + bearmama bearpapa bear + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/text_font_sizes/elk/board.exp.json b/e2etests/testdata/stable/text_font_sizes/elk/board.exp.json new file mode 100644 index 000000000..ae4e7c84e --- /dev/null +++ b/e2etests/testdata/stable/text_font_sizes/elk/board.exp.json @@ -0,0 +1,211 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "bear", + "type": "text", + "pos": { + "x": 64, + "y": 153 + }, + "width": 44, + "height": 28, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "bear", + "fontSize": 22, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 44, + "labelHeight": 28, + "zIndex": 0, + "level": 1 + }, + { + "id": "mama bear", + "type": "text", + "pos": { + "x": 12, + "y": 17 + }, + "width": 135, + "height": 36, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "mama bear", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 135, + "labelHeight": 36, + "zIndex": 0, + "level": 1 + }, + { + "id": "papa bear", + "type": "text", + "pos": { + "x": 167, + "y": 12 + }, + "width": 134, + "height": 41, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "#0A0F25", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "papa bear", + "fontSize": 32, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": true, + "labelWidth": 134, + "labelHeight": 41, + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(mama bear -> bear)[0]", + "src": "mama bear", + "srcArrow": "none", + "srcLabel": "", + "dst": "bear", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 79.5, + "y": 53 + }, + { + "x": 79.5, + "y": 153 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(papa bear -> bear)[0]", + "src": "papa bear", + "srcArrow": "none", + "srcLabel": "", + "dst": "bear", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 234, + "y": 53 + }, + { + "x": 234, + "y": 103 + }, + { + "x": 94.16666666666666, + "y": 103 + }, + { + "x": 94.16666666666666, + "y": 153 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg b/e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg new file mode 100644 index 000000000..506609593 --- /dev/null +++ b/e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg @@ -0,0 +1,805 @@ + +bearmama bearpapa bear + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/us_map/elk/board.exp.json b/e2etests/testdata/stable/us_map/elk/board.exp.json index e3aa25c1f..4fae0bd94 100644 --- a/e2etests/testdata/stable/us_map/elk/board.exp.json +++ b/e2etests/testdata/stable/us_map/elk/board.exp.json @@ -6,7 +6,7 @@ "id": "AK", "type": "", "pos": { - "x": 283, + "x": 1237, "y": 12 }, "width": 126, @@ -46,7 +46,7 @@ "id": "HI", "type": "", "pos": { - "x": 429, + "x": 1098, "y": 12 }, "width": 119, @@ -86,7 +86,7 @@ "id": "AL", "type": "", "pos": { - "x": 825, + "x": 549, "y": 238 }, "width": 124, @@ -126,7 +126,7 @@ "id": "FL", "type": "", "pos": { - "x": 827, + "x": 550, "y": 464 }, "width": 121, @@ -166,8 +166,8 @@ "id": "GA", "type": "", "pos": { - "x": 823, - "y": 700 + "x": 549, + "y": 730 }, "width": 126, "height": 126, @@ -206,8 +206,8 @@ "id": "MS", "type": "", "pos": { - "x": 834, - "y": 946 + "x": 415, + "y": 956 }, "width": 126, "height": 126, @@ -246,8 +246,8 @@ "id": "TN", "type": "", "pos": { - "x": 700, - "y": 2276 + "x": 566, + "y": 2336 }, "width": 124, "height": 126, @@ -286,8 +286,8 @@ "id": "AZ", "type": "", "pos": { - "x": 49, - "y": 946 + "x": 1517, + "y": 956 }, "width": 125, "height": 126, @@ -326,8 +326,8 @@ "id": "CA", "type": "", "pos": { - "x": 49, - "y": 1212 + "x": 1517, + "y": 1222 }, "width": 125, "height": 126, @@ -366,8 +366,8 @@ "id": "NV", "type": "", "pos": { - "x": 70, - "y": 1478 + "x": 1497, + "y": 1488 }, "width": 125, "height": 126, @@ -406,8 +406,8 @@ "id": "NM", "type": "", "pos": { - "x": 432, - "y": 1734 + "x": 1005, + "y": 1744 }, "width": 126, "height": 126, @@ -446,8 +446,8 @@ "id": "UT", "type": "", "pos": { - "x": 89, - "y": 2276 + "x": 1451, + "y": 2336 }, "width": 124, "height": 126, @@ -486,7 +486,7 @@ "id": "AR", "type": "", "pos": { - "x": 968, + "x": 404, "y": 464 }, "width": 126, @@ -526,8 +526,8 @@ "id": "LA", "type": "", "pos": { - "x": 969, - "y": 700 + "x": 406, + "y": 730 }, "width": 123, "height": 126, @@ -566,8 +566,8 @@ "id": "MO", "type": "", "pos": { - "x": 530, - "y": 1212 + "x": 1032, + "y": 1222 }, "width": 128, "height": 126, @@ -606,8 +606,8 @@ "id": "OK", "type": "", "pos": { - "x": 485, - "y": 2010 + "x": 714, + "y": 2050 }, "width": 126, "height": 126, @@ -646,8 +646,8 @@ "id": "TX", "type": "", "pos": { - "x": 342, - "y": 2522 + "x": 422, + "y": 2572 }, "width": 123, "height": 126, @@ -686,8 +686,8 @@ "id": "OR", "type": "", "pos": { - "x": 51, - "y": 1734 + "x": 1515, + "y": 1744 }, "width": 126, "height": 126, @@ -726,8 +726,8 @@ "id": "CO", "type": "", "pos": { - "x": 437, - "y": 700 + "x": 819, + "y": 730 }, "width": 126, "height": 126, @@ -766,8 +766,8 @@ "id": "KS", "type": "", "pos": { - "x": 438, - "y": 946 + "x": 820, + "y": 956 }, "width": 123, "height": 126, @@ -806,8 +806,8 @@ "id": "NE", "type": "", "pos": { - "x": 455, - "y": 1478 + "x": 986, + "y": 1488 }, "width": 123, "height": 126, @@ -846,8 +846,8 @@ "id": "WY", "type": "", "pos": { - "x": 58, - "y": 2788 + "x": 1408, + "y": 2818 }, "width": 128, "height": 126, @@ -886,8 +886,8 @@ "id": "CT", "type": "", "pos": { - "x": 1181, - "y": 1212 + "x": 158, + "y": 1222 }, "width": 124, "height": 126, @@ -926,8 +926,8 @@ "id": "MA", "type": "", "pos": { - "x": 1180, - "y": 1478 + "x": 157, + "y": 1488 }, "width": 127, "height": 126, @@ -966,8 +966,8 @@ "id": "NY", "type": "", "pos": { - "x": 1160, - "y": 2010 + "x": 179, + "y": 2050 }, "width": 124, "height": 126, @@ -1006,8 +1006,8 @@ "id": "RI", "type": "", "pos": { - "x": 1463, - "y": 2522 + "x": 170, + "y": 2572 }, "width": 118, "height": 126, @@ -1046,8 +1046,8 @@ "id": "DE", "type": "", "pos": { - "x": 1035, - "y": 1212 + "x": 306, + "y": 1222 }, "width": 123, "height": 126, @@ -1086,8 +1086,8 @@ "id": "MD", "type": "", "pos": { - "x": 1033, - "y": 1478 + "x": 304, + "y": 1488 }, "width": 127, "height": 126, @@ -1126,8 +1126,8 @@ "id": "NJ", "type": "", "pos": { - "x": 1014, - "y": 1734 + "x": 256, + "y": 1744 }, "width": 122, "height": 126, @@ -1166,8 +1166,8 @@ "id": "PA", "type": "", "pos": { - "x": 982, - "y": 2276 + "x": 276, + "y": 2336 }, "width": 124, "height": 126, @@ -1206,8 +1206,8 @@ "id": "NC", "type": "", "pos": { - "x": 679, - "y": 1734 + "x": 571, + "y": 1744 }, "width": 124, "height": 126, @@ -1246,8 +1246,8 @@ "id": "SC", "type": "", "pos": { - "x": 680, - "y": 2010 + "x": 571, + "y": 2050 }, "width": 123, "height": 126, @@ -1286,8 +1286,8 @@ "id": "ID", "type": "", "pos": { - "x": 198, - "y": 946 + "x": 1378, + "y": 956 }, "width": 119, "height": 126, @@ -1326,8 +1326,8 @@ "id": "MT", "type": "", "pos": { - "x": 194, - "y": 1212 + "x": 1180, + "y": 1222 }, "width": 126, "height": 126, @@ -1366,8 +1366,8 @@ "id": "WA", "type": "", "pos": { - "x": 12, - "y": 2522 + "x": 1524, + "y": 2572 }, "width": 129, "height": 126, @@ -1406,7 +1406,7 @@ "id": "IL", "type": "", "pos": { - "x": 568, + "x": 1383, "y": 12 }, "width": 117, @@ -1446,7 +1446,7 @@ "id": "IN", "type": "", "pos": { - "x": 567, + "x": 1382, "y": 238 }, "width": 119, @@ -1486,7 +1486,7 @@ "id": "IA", "type": "", "pos": { - "x": 688, + "x": 1402, "y": 464 }, "width": 119, @@ -1526,8 +1526,8 @@ "id": "MI", "type": "", "pos": { - "x": 637, - "y": 700 + "x": 965, + "y": 730 }, "width": 121, "height": 126, @@ -1566,7 +1566,7 @@ "id": "KY", "type": "", "pos": { - "x": 545, + "x": 1259, "y": 464 }, "width": 123, @@ -1606,8 +1606,8 @@ "id": "WI", "type": "", "pos": { - "x": 342, - "y": 2010 + "x": 956, + "y": 2050 }, "width": 123, "height": 126, @@ -1646,8 +1646,8 @@ "id": "OH", "type": "", "pos": { - "x": 750, - "y": 1478 + "x": 787, + "y": 1488 }, "width": 126, "height": 126, @@ -1686,8 +1686,8 @@ "id": "MN", "type": "", "pos": { - "x": 635, - "y": 946 + "x": 1220, + "y": 956 }, "width": 127, "height": 126, @@ -1726,8 +1726,8 @@ "id": "SD", "type": "", "pos": { - "x": 269, - "y": 1734 + "x": 1202, + "y": 1744 }, "width": 124, "height": 126, @@ -1766,8 +1766,8 @@ "id": "VA", "type": "", "pos": { - "x": 724, - "y": 2522 + "x": 565, + "y": 2572 }, "width": 125, "height": 126, @@ -1806,8 +1806,8 @@ "id": "WV", "type": "", "pos": { - "x": 753, - "y": 2788 + "x": 532, + "y": 2818 }, "width": 129, "height": 126, @@ -1846,8 +1846,8 @@ "id": "ME", "type": "", "pos": { - "x": 1327, - "y": 1478 + "x": 12, + "y": 1488 }, "width": 125, "height": 126, @@ -1886,8 +1886,8 @@ "id": "NH", "type": "", "pos": { - "x": 1306, - "y": 1734 + "x": 32, + "y": 1744 }, "width": 125, "height": 126, @@ -1926,8 +1926,8 @@ "id": "VT", "type": "", "pos": { - "x": 1421, - "y": 2788 + "x": 147, + "y": 2818 }, "width": 124, "height": 126, @@ -1966,8 +1966,8 @@ "id": "ND", "type": "", "pos": { - "x": 237, - "y": 1478 + "x": 1232, + "y": 1488 }, "width": 125, "height": 126, @@ -2030,11 +2030,11 @@ "labelPercentage": 0, "route": [ { - "x": 887.2833333333333, + "x": 611.4666666666666, "y": 364 }, { - "x": 887.2833333333333, + "x": 611.4666666666666, "y": 464 } ], @@ -2069,12 +2069,12 @@ "labelPercentage": 0, "route": [ { - "x": 907.4499999999999, + "x": 591.3, "y": 590 }, { - "x": 907.4499999999999, - "y": 700 + "x": 591.3, + "y": 730 } ], "animated": false, @@ -2108,12 +2108,20 @@ "labelPercentage": 0, "route": [ { - "x": 865.4499999999999, - "y": 826 + "x": 591.3, + "y": 856 }, { - "x": 865.4499999999999, - "y": 946 + "x": 591.3, + "y": 906 + }, + { + "x": 510.29999999999995, + "y": 906 + }, + { + "x": 510.29999999999995, + "y": 956 } ], "animated": false, @@ -2147,28 +2155,20 @@ "labelPercentage": 0, "route": [ { - "x": 909.55, - "y": 1072 + "x": 466.19999999999993, + "y": 1082 }, { - "x": 909.55, - "y": 1132 + "x": 466.19999999999993, + "y": 2256 }, { - "x": 980.9499999999999, - "y": 1132 + "x": 581.6333333333332, + "y": 2256 }, { - "x": 980.9499999999999, - "y": 2196 - }, - { - "x": 792.65, - "y": 2196 - }, - { - "x": 792.65, - "y": 2276 + "x": 581.6333333333332, + "y": 2336 } ], "animated": false, @@ -2202,12 +2202,12 @@ "labelPercentage": 0, "route": [ { - "x": 111.96666666666665, - "y": 1072 + "x": 1580.3833333333332, + "y": 1082 }, { - "x": 111.96666666666665, - "y": 1212 + "x": 1580.3833333333332, + "y": 1222 } ], "animated": false, @@ -2241,12 +2241,12 @@ "labelPercentage": 0, "route": [ { - "x": 132.8, - "y": 1338 + "x": 1559.55, + "y": 1348 }, { - "x": 132.8, - "y": 1478 + "x": 1559.55, + "y": 1488 } ], "animated": false, @@ -2280,20 +2280,20 @@ "labelPercentage": 0, "route": [ { - "x": 170.3, - "y": 1604 + "x": 1522.05, + "y": 1614 }, { - "x": 170.3, + "x": 1522.05, "y": 1674 }, { - "x": 474.04999999999995, + "x": 1089.847619047619, "y": 1674 }, { - "x": 474.04999999999995, - "y": 1734 + "x": 1089.847619047619, + "y": 1744 } ], "animated": false, @@ -2327,20 +2327,20 @@ "labelPercentage": 0, "route": [ { - "x": 463.54999999999995, - "y": 1860 + "x": 1100.347619047619, + "y": 1870 }, { - "x": 463.54999999999995, - "y": 1920 + "x": 1100.347619047619, + "y": 2226 }, { - "x": 163.4, - "y": 1920 + "x": 1500.6499999999999, + "y": 2226 }, { - "x": 163.4, - "y": 2276 + "x": 1500.6499999999999, + "y": 2336 } ], "animated": false, @@ -2374,12 +2374,12 @@ "labelPercentage": 0, "route": [ { - "x": 1030.9499999999998, + "x": 467.79999999999995, "y": 590 }, { - "x": 1030.9499999999998, - "y": 700 + "x": 467.79999999999995, + "y": 730 } ], "animated": false, @@ -2413,20 +2413,12 @@ "labelPercentage": 0, "route": [ { - "x": 1051.4499999999998, - "y": 826 + "x": 447.29999999999995, + "y": 856 }, { - "x": 1051.4499999999998, - "y": 886 - }, - { - "x": 928.4499999999999, - "y": 886 - }, - { - "x": 928.4499999999999, - "y": 946 + "x": 447.29999999999995, + "y": 956 } ], "animated": false, @@ -2460,20 +2452,20 @@ "labelPercentage": 0, "route": [ { - "x": 859.15, - "y": 1072 + "x": 516.5999999999999, + "y": 1082 }, { - "x": 859.15, - "y": 1142 + "x": 516.5999999999999, + "y": 1152 }, { - "x": 636.6500000000001, - "y": 1142 + "x": 1053.4666666666665, + "y": 1152 }, { - "x": 636.6500000000001, - "y": 1212 + "x": 1053.4666666666665, + "y": 1222 } ], "animated": false, @@ -2507,28 +2499,28 @@ "labelPercentage": 0, "route": [ { - "x": 621.4119047619048, - "y": 1338 + "x": 1050.4190476190474, + "y": 1348 }, { - "x": 621.4119047619048, - "y": 1428 + "x": 1050.4190476190474, + "y": 1398 }, { - "x": 601.05, - "y": 1428 + "x": 755.6333333333332, + "y": 1398 }, { - "x": 601.05, - "y": 1960 + "x": 755.6333333333332, + "y": 1920 }, { - "x": 589.55, - "y": 1960 + "x": 735.6333333333332, + "y": 1920 }, { - "x": 589.55, - "y": 2010 + "x": 735.6333333333332, + "y": 2050 } ], "animated": false, @@ -2562,20 +2554,20 @@ "labelPercentage": 0, "route": [ { - "x": 568.55, - "y": 2136 + "x": 777.6333333333332, + "y": 2176 }, { - "x": 568.55, - "y": 2206 + "x": 777.6333333333332, + "y": 2256 }, { - "x": 715.15, - "y": 2206 + "x": 643.6333333333332, + "y": 2256 }, { - "x": 715.15, - "y": 2276 + "x": 643.6333333333332, + "y": 2336 } ], "animated": false, @@ -2609,20 +2601,20 @@ "labelPercentage": 0, "route": [ { - "x": 724.4499999999999, - "y": 2402 + "x": 590.9333333333332, + "y": 2462 }, { - "x": 724.4499999999999, - "y": 2472 + "x": 590.9333333333332, + "y": 2512 }, { - "x": 439.94999999999993, - "y": 2472 + "x": 521.1333333333332, + "y": 2512 }, { - "x": 439.94999999999993, - "y": 2522 + "x": 521.1333333333332, + "y": 2572 } ], "animated": false, @@ -2656,20 +2648,20 @@ "labelPercentage": 0, "route": [ { - "x": 91.13333333333333, - "y": 1338 + "x": 1601.2166666666665, + "y": 1348 }, { - "x": 91.13333333333333, - "y": 1388 + "x": 1601.2166666666665, + "y": 1398 }, { - "x": 101.55, - "y": 1388 + "x": 1590.8, + "y": 1398 }, { - "x": 101.55, - "y": 1478 + "x": 1590.8, + "y": 1488 } ], "animated": false, @@ -2703,12 +2695,12 @@ "labelPercentage": 0, "route": [ { - "x": 145.3, - "y": 1604 + "x": 1547.05, + "y": 1614 }, { - "x": 145.3, - "y": 1734 + "x": 1547.05, + "y": 1744 } ], "animated": false, @@ -2742,12 +2734,12 @@ "labelPercentage": 0, "route": [ { - "x": 499.65, - "y": 826 + "x": 882.1333333333332, + "y": 856 }, { - "x": 499.65, - "y": 946 + "x": 882.1333333333332, + "y": 956 } ], "animated": false, @@ -2781,12 +2773,20 @@ "labelPercentage": 0, "route": [ { - "x": 479.15, - "y": 1072 + "x": 861.6333333333332, + "y": 1082 }, { - "x": 479.15, - "y": 1478 + "x": 861.6333333333332, + "y": 1418 + }, + { + "x": 1010.9476190476189, + "y": 1418 + }, + { + "x": 1010.9476190476189, + "y": 1488 } ], "animated": false, @@ -2820,12 +2820,12 @@ "labelPercentage": 0, "route": [ { - "x": 516.05, - "y": 1604 + "x": 1047.847619047619, + "y": 1614 }, { - "x": 516.05, - "y": 1734 + "x": 1047.847619047619, + "y": 1744 } ], "animated": false, @@ -2859,12 +2859,20 @@ "labelPercentage": 0, "route": [ { - "x": 526.55, - "y": 1860 + "x": 1037.347619047619, + "y": 1870 }, { - "x": 526.55, - "y": 2010 + "x": 1037.347619047619, + "y": 1920 + }, + { + "x": 798.6333333333332, + "y": 1920 + }, + { + "x": 798.6333333333332, + "y": 2050 } ], "animated": false, @@ -2898,20 +2906,20 @@ "labelPercentage": 0, "route": [ { - "x": 505.54999999999995, - "y": 2136 + "x": 819.6333333333332, + "y": 2176 }, { - "x": 505.54999999999995, - "y": 2186 + "x": 819.6333333333332, + "y": 2286 }, { - "x": 188.2, - "y": 2186 + "x": 1475.85, + "y": 2286 }, { - "x": 188.2, - "y": 2276 + "x": 1475.85, + "y": 2336 } ], "animated": false, @@ -2945,28 +2953,12 @@ "labelPercentage": 0, "route": [ { - "x": 182, - "y": 2402 + "x": 1482.05, + "y": 2462 }, { - "x": 182, - "y": 2452 - }, - { - "x": 162, - "y": 2452 - }, - { - "x": 162, - "y": 2708 - }, - { - "x": 113.07142857142857, - "y": 2708 - }, - { - "x": 113.07142857142857, - "y": 2788 + "x": 1482.05, + "y": 2818 } ], "animated": false, @@ -3000,12 +2992,12 @@ "labelPercentage": 0, "route": [ { - "x": 1243.1166666666666, - "y": 1338 + "x": 220.5, + "y": 1348 }, { - "x": 1243.1166666666666, - "y": 1478 + "x": 220.5, + "y": 1488 } ], "animated": false, @@ -3039,12 +3031,12 @@ "labelPercentage": 0, "route": [ { - "x": 1221.9499999999998, - "y": 1604 + "x": 241.66666666666674, + "y": 1614 }, { - "x": 1221.9499999999998, - "y": 2010 + "x": 241.66666666666652, + "y": 2050 } ], "animated": false, @@ -3078,20 +3070,20 @@ "labelPercentage": 0, "route": [ { - "x": 1259.1499999999999, - "y": 2136 + "x": 204.46666666666647, + "y": 2176 }, { - "x": 1259.1499999999999, - "y": 2186 + "x": 204.46666666666647, + "y": 2512 }, { - "x": 1551.2833333333333, - "y": 2186 + "x": 199.76666666666665, + "y": 2512 }, { - "x": 1551.2833333333333, - "y": 2522 + "x": 199.76666666666665, + "y": 2572 } ], "animated": false, @@ -3125,12 +3117,12 @@ "labelPercentage": 0, "route": [ { - "x": 1096.1166666666666, - "y": 1338 + "x": 367.5, + "y": 1348 }, { - "x": 1096.1166666666666, - "y": 1478 + "x": 367.5, + "y": 1488 } ], "animated": false, @@ -3164,12 +3156,20 @@ "labelPercentage": 0, "route": [ { - "x": 1074.9499999999998, - "y": 1604 + "x": 346.33333333333326, + "y": 1614 }, { - "x": 1074.9499999999998, - "y": 1734 + "x": 346.33333333333326, + "y": 1664 + }, + { + "x": 317.66666666666674, + "y": 1664 + }, + { + "x": 317.66666666666674, + "y": 1744 } ], "animated": false, @@ -3203,20 +3203,12 @@ "labelPercentage": 0, "route": [ { - "x": 1054.6166666666666, - "y": 1860 + "x": 338, + "y": 1870 }, { - "x": 1054.6166666666666, - "y": 2186 - }, - { - "x": 1023.6166666666667, - "y": 2186 - }, - { - "x": 1023.6166666666667, - "y": 2276 + "x": 338, + "y": 2336 } ], "animated": false, @@ -3250,20 +3242,20 @@ "labelPercentage": 0, "route": [ { - "x": 867.1166666666667, + "x": 631.6333333333332, "y": 590 }, { - "x": 867.1166666666667, + "x": 631.6333333333332, "y": 640 }, { - "x": 865.4499999999999, + "x": 633.3, "y": 640 }, { - "x": 865.4499999999999, - "y": 700 + "x": 633.3, + "y": 730 } ], "animated": false, @@ -3297,28 +3289,12 @@ "labelPercentage": 0, "route": [ { - "x": 907.4499999999999, - "y": 826 + "x": 633.3, + "y": 856 }, { - "x": 907.4499999999999, - "y": 896 - }, - { - "x": 969.9499999999999, - "y": 896 - }, - { - "x": 969.9499999999999, - "y": 1674 - }, - { - "x": 740.9833333333333, - "y": 1674 - }, - { - "x": 740.9833333333333, - "y": 1734 + "x": 633.3, + "y": 1744 } ], "animated": false, @@ -3352,12 +3328,12 @@ "labelPercentage": 0, "route": [ { - "x": 761.65, - "y": 1860 + "x": 612.6333333333333, + "y": 1870 }, { - "x": 761.65, - "y": 2010 + "x": 612.6333333333332, + "y": 2050 } ], "animated": false, @@ -3391,12 +3367,12 @@ "labelPercentage": 0, "route": [ { - "x": 761.65, - "y": 2136 + "x": 612.6333333333332, + "y": 2176 }, { - "x": 761.65, - "y": 2276 + "x": 612.6333333333332, + "y": 2336 } ], "animated": false, @@ -3430,12 +3406,20 @@ "labelPercentage": 0, "route": [ { - "x": 257.46666666666664, - "y": 1072 + "x": 1438.3833333333332, + "y": 1082 }, { - "x": 257.46666666666664, - "y": 1212 + "x": 1438.3833333333332, + "y": 1172 + }, + { + "x": 1243.1333333333332, + "y": 1172 + }, + { + "x": 1243.1333333333332, + "y": 1222 } ], "animated": false, @@ -3469,20 +3453,20 @@ "labelPercentage": 0, "route": [ { - "x": 236.46666666666664, - "y": 1338 + "x": 1264.1333333333332, + "y": 1348 }, { - "x": 236.46666666666664, - "y": 1388 + "x": 1264.1333333333332, + "y": 1398 }, { - "x": 164.05, - "y": 1388 + "x": 1528.3, + "y": 1398 }, { - "x": 164.05, - "y": 1478 + "x": 1528.3, + "y": 1488 } ], "animated": false, @@ -3516,20 +3500,20 @@ "labelPercentage": 0, "route": [ { - "x": 120.3, - "y": 1604 + "x": 1572.05, + "y": 1614 }, { - "x": 120.3, - "y": 1654 + "x": 1572.05, + "y": 1664 }, { - "x": 113.8, - "y": 1654 + "x": 1578.55, + "y": 1664 }, { - "x": 113.8, - "y": 1734 + "x": 1578.55, + "y": 1744 } ], "animated": false, @@ -3563,20 +3547,20 @@ "labelPercentage": 0, "route": [ { - "x": 145.3, - "y": 1860 + "x": 1547.05, + "y": 1870 }, { - "x": 145.3, - "y": 1910 + "x": 1547.05, + "y": 1920 }, { - "x": 138.6, - "y": 1910 + "x": 1525.4499999999998, + "y": 1920 }, { - "x": 138.6, - "y": 2276 + "x": 1525.4499999999998, + "y": 2336 } ], "animated": false, @@ -3610,20 +3594,20 @@ "labelPercentage": 0, "route": [ { - "x": 120, - "y": 2402 + "x": 1544.05, + "y": 2462 }, { - "x": 120, - "y": 2452 + "x": 1544.05, + "y": 2512 }, { - "x": 98, - "y": 2452 + "x": 1567.05, + "y": 2512 }, { - "x": 98, - "y": 2522 + "x": 1567.05, + "y": 2572 } ], "animated": false, @@ -3657,12 +3641,20 @@ "labelPercentage": 0, "route": [ { - "x": 76.5, - "y": 2648 + "x": 1588.55, + "y": 2698 }, { - "x": 76.5, - "y": 2788 + "x": 1588.55, + "y": 2748 + }, + { + "x": 1518.6214285714284, + "y": 2748 + }, + { + "x": 1518.6214285714284, + "y": 2818 } ], "animated": false, @@ -3696,11 +3688,11 @@ "labelPercentage": 0, "route": [ { - "x": 626.1166666666667, + "x": 1442.1499999999999, "y": 138 }, { - "x": 626.1166666666667, + "x": 1442.1499999999999, "y": 238 } ], @@ -3735,19 +3727,11 @@ "labelPercentage": 0, "route": [ { - "x": 645.95, + "x": 1461.9833333333331, "y": 364 }, { - "x": 645.95, - "y": 414 - }, - { - "x": 747.2833333333333, - "y": 414 - }, - { - "x": 747.2833333333333, + "x": 1461.9833333333331, "y": 464 } ], @@ -3782,12 +3766,20 @@ "labelPercentage": 0, "route": [ { - "x": 727.4499999999999, + "x": 1442.1499999999999, "y": 590 }, { - "x": 727.4499999999999, - "y": 700 + "x": 1442.1499999999999, + "y": 660 + }, + { + "x": 1055.8833333333332, + "y": 660 + }, + { + "x": 1055.8833333333332, + "y": 730 } ], "animated": false, @@ -3821,19 +3813,19 @@ "labelPercentage": 0, "route": [ { - "x": 697.1999999999999, - "y": 700 + "x": 1025.6333333333332, + "y": 730 }, { - "x": 697.1999999999999, - "y": 640 + "x": 1025.6333333333332, + "y": 650 }, { - "x": 643.1833333333333, - "y": 640 + "x": 1308.6833333333332, + "y": 650 }, { - "x": 643.1833333333333, + "x": 1308.6833333333332, "y": 590 } ], @@ -3868,12 +3860,20 @@ "labelPercentage": 0, "route": [ { - "x": 593.9833333333333, + "x": 1333.2833333333333, "y": 590 }, { - "x": 593.9833333333333, - "y": 1212 + "x": 1333.2833333333333, + "y": 670 + }, + { + "x": 1096.1333333333332, + "y": 670 + }, + { + "x": 1096.1333333333332, + "y": 1222 } ], "animated": false, @@ -3907,20 +3907,20 @@ "labelPercentage": 0, "route": [ { - "x": 548.2690476190477, - "y": 1338 + "x": 1141.847619047619, + "y": 1348 }, { - "x": 548.2690476190477, - "y": 1388 + "x": 1141.847619047619, + "y": 1960 }, { - "x": 415.34999999999997, - "y": 1388 + "x": 980.9476190476189, + "y": 1960 }, { - "x": 415.34999999999997, - "y": 2010 + "x": 980.9476190476189, + "y": 2050 } ], "animated": false, @@ -3954,11 +3954,19 @@ "labelPercentage": 0, "route": [ { - "x": 606.2833333333333, + "x": 1422.3166666666666, "y": 364 }, { - "x": 606.2833333333333, + "x": 1422.3166666666666, + "y": 414 + }, + { + "x": 1320.9833333333331, + "y": 414 + }, + { + "x": 1320.9833333333331, "y": 464 } ], @@ -3993,20 +4001,20 @@ "labelPercentage": 0, "route": [ { - "x": 618.5833333333333, + "x": 1284.0833333333333, "y": 590 }, { - "x": 618.5833333333333, - "y": 650 + "x": 1284.0833333333333, + "y": 640 }, { - "x": 666.9499999999999, - "y": 650 + "x": 995.3833333333332, + "y": 640 }, { - "x": 666.9499999999999, - "y": 700 + "x": 995.3833333333332, + "y": 730 } ], "animated": false, @@ -4040,20 +4048,28 @@ "labelPercentage": 0, "route": [ { - "x": 717.3666666666666, - "y": 826 + "x": 1005.4666666666665, + "y": 856 }, { - "x": 717.3666666666666, - "y": 876 + "x": 1005.4666666666665, + "y": 906 }, { - "x": 812.9833333333333, - "y": 876 + "x": 809.6333333333332, + "y": 906 }, { - "x": 812.9833333333333, - "y": 1478 + "x": 809.6333333333332, + "y": 1408 + }, + { + "x": 819.1333333333332, + "y": 1408 + }, + { + "x": 819.1333333333332, + "y": 1488 } ], "animated": false, @@ -4087,28 +4103,20 @@ "labelPercentage": 0, "route": [ { - "x": 767.1166666666667, + "x": 1481.8166666666666, "y": 590 }, { - "x": 767.1166666666667, - "y": 640 + "x": 1481.8166666666666, + "y": 680 }, { - "x": 767.6999999999999, - "y": 640 + "x": 1305.55, + "y": 680 }, { - "x": 767.6999999999999, - "y": 886 - }, - { - "x": 719.3666666666666, - "y": 886 - }, - { - "x": 719.3666666666666, - "y": 946 + "x": 1305.55, + "y": 956 } ], "animated": false, @@ -4142,20 +4150,20 @@ "labelPercentage": 0, "route": [ { - "x": 698.1999999999999, - "y": 1072 + "x": 1284.3833333333332, + "y": 1082 }, { - "x": 698.1999999999999, - "y": 1132 + "x": 1284.3833333333332, + "y": 1152 }, { - "x": 615.3166666666667, - "y": 1132 + "x": 1117.4666666666667, + "y": 1152 }, { - "x": 615.3166666666667, - "y": 1212 + "x": 1117.4666666666667, + "y": 1222 } ], "animated": false, @@ -4189,20 +4197,20 @@ "labelPercentage": 0, "route": [ { - "x": 584.8404761904762, - "y": 1338 + "x": 1086.990476190476, + "y": 1348 }, { - "x": 584.8404761904762, - "y": 1408 + "x": 1086.990476190476, + "y": 1418 }, { - "x": 528.3499999999999, - "y": 1408 + "x": 1035.5476190476188, + "y": 1418 }, { - "x": 528.3499999999999, - "y": 1478 + "x": 1035.5476190476188, + "y": 1488 } ], "animated": false, @@ -4236,20 +4244,20 @@ "labelPercentage": 0, "route": [ { - "x": 475.04999999999995, - "y": 1604 + "x": 1068.347619047619, + "y": 1614 }, { - "x": 475.04999999999995, - "y": 1654 + "x": 1068.347619047619, + "y": 1684 }, { - "x": 351.2166666666666, - "y": 1654 + "x": 1222.7166666666665, + "y": 1684 }, { - "x": 351.2166666666666, - "y": 1734 + "x": 1222.7166666666665, + "y": 1744 } ], "animated": false, @@ -4283,20 +4291,20 @@ "labelPercentage": 0, "route": [ { - "x": 371.88333333333327, - "y": 1860 + "x": 1264.05, + "y": 1870 }, { - "x": 371.88333333333327, - "y": 1930 + "x": 1264.05, + "y": 1970 }, { - "x": 390.74999999999994, - "y": 1930 + "x": 1005.5476190476188, + "y": 1970 }, { - "x": 390.74999999999994, - "y": 2010 + "x": 1005.5476190476188, + "y": 2050 } ], "animated": false, @@ -4330,20 +4338,20 @@ "labelPercentage": 0, "route": [ { - "x": 520.15, - "y": 1072 + "x": 902.6333333333332, + "y": 1082 }, { - "x": 520.15, + "x": 902.6333333333332, "y": 1132 }, { - "x": 551.3166666666667, + "x": 1074.8, "y": 1132 }, { - "x": 551.3166666666667, - "y": 1212 + "x": 1074.8, + "y": 1222 } ], "animated": false, @@ -4377,20 +4385,20 @@ "labelPercentage": 0, "route": [ { - "x": 603.1261904761905, - "y": 1338 + "x": 1105.2761904761903, + "y": 1348 }, { - "x": 603.1261904761905, - "y": 1418 + "x": 1105.2761904761903, + "y": 1428 }, { - "x": 552.9499999999999, - "y": 1418 + "x": 1060.147619047619, + "y": 1428 }, { - "x": 552.9499999999999, - "y": 1478 + "x": 1060.147619047619, + "y": 1488 } ], "animated": false, @@ -4424,28 +4432,28 @@ "labelPercentage": 0, "route": [ { - "x": 536.55, - "y": 1604 + "x": 1006.8476190476189, + "y": 1614 }, { - "x": 536.55, + "x": 1006.8476190476189, "y": 1674 }, { - "x": 579.05, + "x": 766.6333333333332, "y": 1674 }, { - "x": 579.05, - "y": 1940 + "x": 766.6333333333332, + "y": 1930 }, { - "x": 547.55, - "y": 1940 + "x": 756.6333333333332, + "y": 1930 }, { - "x": 547.55, - "y": 2010 + "x": 756.6333333333332, + "y": 2050 } ], "animated": false, @@ -4479,20 +4487,20 @@ "labelPercentage": 0, "route": [ { - "x": 569.3833333333333, + "x": 1357.8833333333332, "y": 590 }, { - "x": 569.3833333333333, - "y": 640 + "x": 1357.8833333333332, + "y": 1162 }, { - "x": 572.65, - "y": 640 + "x": 1138.8, + "y": 1162 }, { - "x": 572.65, - "y": 1212 + "x": 1138.8, + "y": 1222 } ], "animated": false, @@ -4526,20 +4534,20 @@ "labelPercentage": 0, "route": [ { - "x": 639.697619047619, - "y": 1338 + "x": 1068.7047619047617, + "y": 1348 }, { - "x": 639.697619047619, - "y": 1388 + "x": 1068.7047619047617, + "y": 1408 }, { - "x": 781.4833333333333, - "y": 1388 + "x": 882.1333333333332, + "y": 1408 }, { - "x": 781.4833333333333, - "y": 1478 + "x": 882.1333333333332, + "y": 1488 } ], "animated": false, @@ -4573,20 +4581,20 @@ "labelPercentage": 0, "route": [ { - "x": 812.9833333333333, - "y": 1604 + "x": 850.6333333333332, + "y": 1614 }, { - "x": 812.9833333333333, - "y": 2186 - }, - { - "x": 777.15, - "y": 2186 - }, - { - "x": 777.15, + "x": 850.6333333333332, "y": 2276 + }, + { + "x": 674.6333333333332, + "y": 2276 + }, + { + "x": 674.6333333333332, + "y": 2336 } ], "animated": false, @@ -4620,20 +4628,12 @@ "labelPercentage": 0, "route": [ { - "x": 774.05, - "y": 2402 + "x": 615.7333333333332, + "y": 2462 }, { - "x": 774.05, - "y": 2452 - }, - { - "x": 773.85, - "y": 2452 - }, - { - "x": 773.85, - "y": 2522 + "x": 615.7333333333332, + "y": 2572 } ], "animated": false, @@ -4667,20 +4667,12 @@ "labelPercentage": 0, "route": [ { - "x": 786.35, - "y": 2648 - }, - { - "x": 786.35, + "x": 596.9833333333332, "y": 2698 }, { - "x": 796.1, - "y": 2698 - }, - { - "x": 796.1, - "y": 2788 + "x": 596.9833333333332, + "y": 2818 } ], "animated": false, @@ -4714,20 +4706,20 @@ "labelPercentage": 0, "route": [ { - "x": 1010.4499999999999, - "y": 826 + "x": 488.29999999999995, + "y": 856 }, { - "x": 1010.4499999999999, - "y": 876 + "x": 488.29999999999995, + "y": 906 }, { - "x": 896.9499999999999, - "y": 876 + "x": 478.79999999999995, + "y": 906 }, { - "x": 896.9499999999999, - "y": 946 + "x": 478.79999999999995, + "y": 956 } ], "animated": false, @@ -4761,28 +4753,20 @@ "labelPercentage": 0, "route": [ { - "x": 884.3499999999999, - "y": 1072 + "x": 441, + "y": 1082 }, { - "x": 884.3499999999999, - "y": 1152 + "x": 441, + "y": 2512 }, { - "x": 667.9833333333333, - "y": 1152 + "x": 447.33333333333326, + "y": 2512 }, { - "x": 667.9833333333333, - "y": 2462 - }, - { - "x": 415.34999999999997, - "y": 2462 - }, - { - "x": 415.34999999999997, - "y": 2522 + "x": 447.33333333333326, + "y": 2572 } ], "animated": false, @@ -4816,12 +4800,12 @@ "labelPercentage": 0, "route": [ { - "x": 1389.1166666666666, - "y": 1604 + "x": 74.5, + "y": 1614 }, { - "x": 1389.1166666666666, - "y": 1734 + "x": 74.5, + "y": 1744 } ], "animated": false, @@ -4855,28 +4839,20 @@ "labelPercentage": 0, "route": [ { - "x": 1117.2833333333333, - "y": 1604 + "x": 388.66666666666663, + "y": 1614 }, { - "x": 1117.2833333333333, - "y": 1664 + "x": 388.66666666666663, + "y": 2226 }, { - "x": 1440.7833333333333, - "y": 1664 + "x": 358.66666666666663, + "y": 2226 }, { - "x": 1440.7833333333333, - "y": 2216 - }, - { - "x": 1085.6166666666666, - "y": 2216 - }, - { - "x": 1085.6166666666666, - "y": 2276 + "x": 358.66666666666663, + "y": 2336 } ], "animated": false, @@ -4910,20 +4886,20 @@ "labelPercentage": 0, "route": [ { - "x": 1007.0833333333333, - "y": 2402 + "x": 375.20000000000005, + "y": 2462 }, { - "x": 1007.0833333333333, - "y": 2452 - }, - { - "x": 823.85, - "y": 2452 - }, - { - "x": 823.85, + "x": 375.20000000000005, "y": 2522 + }, + { + "x": 590.7333333333332, + "y": 2522 + }, + { + "x": 590.7333333333332, + "y": 2572 } ], "animated": false, @@ -4957,12 +4933,20 @@ "labelPercentage": 0, "route": [ { - "x": 817.6, - "y": 2648 + "x": 628.2333333333332, + "y": 2698 }, { - "x": 817.6, - "y": 2788 + "x": 628.2333333333332, + "y": 2748 + }, + { + "x": 618.4833333333332, + "y": 2748 + }, + { + "x": 618.4833333333332, + "y": 2818 } ], "animated": false, @@ -4996,20 +4980,20 @@ "labelPercentage": 0, "route": [ { - "x": 1264.2833333333333, - "y": 1604 + "x": 199.33333333333326, + "y": 1614 }, { - "x": 1264.2833333333333, - "y": 1654 + "x": 199.33333333333326, + "y": 1664 }, { - "x": 1347.45, - "y": 1654 + "x": 116.16666666666652, + "y": 1664 }, { - "x": 1347.45, - "y": 1734 + "x": 116.16666666666652, + "y": 1744 } ], "animated": false, @@ -5043,20 +5027,20 @@ "labelPercentage": 0, "route": [ { - "x": 1347.45, - "y": 1860 + "x": 116.16666666666652, + "y": 1870 }, { - "x": 1347.45, - "y": 1910 + "x": 116.16666666666652, + "y": 1920 }, { - "x": 1252.9499999999998, - "y": 1910 + "x": 210.66666666666652, + "y": 1920 }, { - "x": 1252.9499999999998, - "y": 2010 + "x": 210.66666666666652, + "y": 2050 } ], "animated": false, @@ -5090,20 +5074,12 @@ "labelPercentage": 0, "route": [ { - "x": 1234.35, - "y": 2136 + "x": 229.26666666666642, + "y": 2176 }, { - "x": 1234.35, - "y": 2226 - }, - { - "x": 1521.7833333333333, - "y": 2226 - }, - { - "x": 1521.7833333333333, - "y": 2522 + "x": 229.26666666666665, + "y": 2572 } ], "animated": false, @@ -5137,20 +5113,12 @@ "labelPercentage": 0, "route": [ { - "x": 1541.45, - "y": 2648 - }, - { - "x": 1541.45, + "x": 209.5999999999999, "y": 2698 }, { - "x": 1513.7833333333333, - "y": 2698 - }, - { - "x": 1513.7833333333333, - "y": 2788 + "x": 209.5999999999999, + "y": 2818 } ], "animated": false, @@ -5184,12 +5152,20 @@ "labelPercentage": 0, "route": [ { - "x": 677.0333333333333, - "y": 826 + "x": 1045.7999999999997, + "y": 856 }, { - "x": 677.0333333333333, - "y": 946 + "x": 1045.7999999999997, + "y": 906 + }, + { + "x": 1263.2166666666665, + "y": 906 + }, + { + "x": 1263.2166666666665, + "y": 956 } ], "animated": false, @@ -5223,20 +5199,20 @@ "labelPercentage": 0, "route": [ { - "x": 729.9499999999999, - "y": 1072 + "x": 1252.6333333333332, + "y": 1082 }, { - "x": 729.9499999999999, - "y": 1162 + "x": 1252.6333333333332, + "y": 1142 }, { - "x": 844.4833333333333, - "y": 1162 + "x": 850.6333333333332, + "y": 1142 }, { - "x": 844.4833333333333, - "y": 1478 + "x": 850.6333333333332, + "y": 1488 } ], "animated": false, @@ -5270,28 +5246,28 @@ "labelPercentage": 0, "route": [ { - "x": 781.4833333333333, - "y": 1604 + "x": 882.1333333333332, + "y": 1614 }, { - "x": 781.4833333333333, - "y": 1664 + "x": 882.1333333333332, + "y": 1694 }, { - "x": 568.05, - "y": 1664 + "x": 1504.55, + "y": 1694 }, { - "x": 568.05, - "y": 1930 + "x": 1504.55, + "y": 1990 }, { - "x": 439.94999999999993, - "y": 1930 + "x": 1054.7476190476189, + "y": 1990 }, { - "x": 439.94999999999993, - "y": 2010 + "x": 1054.7476190476189, + "y": 2050 } ], "animated": false, @@ -5325,28 +5301,12 @@ "labelPercentage": 0, "route": [ { - "x": 666.4499999999999, - "y": 1072 + "x": 1316.1333333333332, + "y": 1082 }, { - "x": 666.4499999999999, - "y": 1122 - }, - { - "x": 330.46666666666664, - "y": 1122 - }, - { - "x": 330.46666666666664, - "y": 1388 - }, - { - "x": 320.1333333333333, - "y": 1388 - }, - { - "x": 320.1333333333333, - "y": 1478 + "x": 1316.1333333333332, + "y": 1488 } ], "animated": false, @@ -5380,20 +5340,12 @@ "labelPercentage": 0, "route": [ { - "x": 299.29999999999995, - "y": 1604 + "x": 1264.05, + "y": 1614 }, { - "x": 299.29999999999995, - "y": 1654 - }, - { - "x": 309.88333333333327, - "y": 1654 - }, - { - "x": 309.88333333333327, - "y": 1734 + "x": 1264.05, + "y": 1744 } ], "animated": false, @@ -5427,20 +5379,20 @@ "labelPercentage": 0, "route": [ { - "x": 351.2166666666666, - "y": 1860 + "x": 1284.7166666666665, + "y": 1870 }, { - "x": 351.2166666666666, - "y": 1930 + "x": 1284.7166666666665, + "y": 1980 }, { - "x": 366.15, - "y": 1930 + "x": 1030.147619047619, + "y": 1980 }, { - "x": 366.15, - "y": 2010 + "x": 1030.147619047619, + "y": 2050 } ], "animated": false, @@ -5474,28 +5426,20 @@ "labelPercentage": 0, "route": [ { - "x": 934.7499999999999, - "y": 1072 + "x": 491.4, + "y": 1082 }, { - "x": 934.7499999999999, - "y": 1122 + "x": 491.4, + "y": 2226 }, { - "x": 991.9499999999999, - "y": 1122 + "x": 597.1333333333332, + "y": 2226 }, { - "x": 991.9499999999999, - "y": 2206 - }, - { - "x": 808.15, - "y": 2206 - }, - { - "x": 808.15, - "y": 2276 + "x": 597.1333333333332, + "y": 2336 } ], "animated": false, @@ -5529,20 +5473,20 @@ "labelPercentage": 0, "route": [ { - "x": 566.5547619047619, - "y": 1338 + "x": 1123.5619047619048, + "y": 1348 }, { - "x": 566.5547619047619, - "y": 1398 + "x": 1123.5619047619048, + "y": 1438 }, { - "x": 503.74999999999994, - "y": 1398 + "x": 1084.7476190476189, + "y": 1438 }, { - "x": 503.74999999999994, - "y": 1478 + "x": 1084.7476190476189, + "y": 1488 } ], "animated": false, @@ -5576,28 +5520,20 @@ "labelPercentage": 0, "route": [ { - "x": 557.05, - "y": 1604 + "x": 1027.347619047619, + "y": 1614 }, { - "x": 557.05, - "y": 1654 + "x": 1027.347619047619, + "y": 1684 }, { - "x": 590.05, - "y": 1654 + "x": 777.6333333333332, + "y": 1684 }, { - "x": 590.05, - "y": 1950 - }, - { - "x": 568.55, - "y": 1950 - }, - { - "x": 568.55, - "y": 2010 + "x": 777.6333333333332, + "y": 2050 } ], "animated": false, @@ -5631,20 +5567,20 @@ "labelPercentage": 0, "route": [ { - "x": 589.55, - "y": 2136 + "x": 798.6333333333332, + "y": 2176 }, { - "x": 589.55, - "y": 2196 + "x": 798.6333333333332, + "y": 2266 }, { - "x": 730.65, - "y": 2196 + "x": 659.1333333333332, + "y": 2266 }, { - "x": 730.65, - "y": 2276 + "x": 659.1333333333332, + "y": 2336 } ], "animated": false, @@ -5678,12 +5614,20 @@ "labelPercentage": 0, "route": [ { - "x": 278.46666666666664, - "y": 1338 + "x": 1222.1333333333332, + "y": 1348 }, { - "x": 278.46666666666664, - "y": 1478 + "x": 1222.1333333333332, + "y": 1408 + }, + { + "x": 1274.4666666666665, + "y": 1408 + }, + { + "x": 1274.4666666666665, + "y": 1488 } ], "animated": false, @@ -5717,12 +5661,20 @@ "labelPercentage": 0, "route": [ { - "x": 330.54999999999995, - "y": 1604 + "x": 1295.3, + "y": 1614 }, { - "x": 330.54999999999995, - "y": 1734 + "x": 1295.3, + "y": 1684 + }, + { + "x": 1284.7166666666665, + "y": 1684 + }, + { + "x": 1284.7166666666665, + "y": 1744 } ], "animated": false, @@ -5756,28 +5708,28 @@ "labelPercentage": 0, "route": [ { - "x": 289.21666666666664, - "y": 1860 + "x": 1222.7166666666665, + "y": 1870 }, { - "x": 289.21666666666664, - "y": 1910 + "x": 1222.7166666666665, + "y": 1940 }, { - "x": 223, - "y": 1910 + "x": 934.3476190476189, + "y": 1940 }, { - "x": 223, - "y": 2718 + "x": 934.3476190476189, + "y": 2768 }, { - "x": 131.35714285714286, - "y": 2718 + "x": 1427.192857142857, + "y": 2768 }, { - "x": 131.35714285714286, - "y": 2788 + "x": 1427.192857142857, + "y": 2818 } ], "animated": false, @@ -5811,20 +5763,20 @@ "labelPercentage": 0, "route": [ { - "x": 495.54999999999995, - "y": 1604 + "x": 1088.847619047619, + "y": 1614 }, { - "x": 495.54999999999995, + "x": 1088.847619047619, "y": 1664 }, { - "x": 371.88333333333327, + "x": 1243.3833333333332, "y": 1664 }, { - "x": 371.88333333333327, - "y": 1734 + "x": 1243.3833333333332, + "y": 1744 } ], "animated": false, @@ -5858,28 +5810,28 @@ "labelPercentage": 0, "route": [ { - "x": 309.88333333333327, - "y": 1860 + "x": 1243.3833333333332, + "y": 1870 }, { - "x": 309.88333333333327, - "y": 1930 + "x": 1243.3833333333332, + "y": 1950 }, { - "x": 234, - "y": 1930 + "x": 945.3476190476189, + "y": 1950 }, { - "x": 234, - "y": 2728 + "x": 945.3476190476189, + "y": 2758 }, { - "x": 149.64285714285714, - "y": 2728 + "x": 1445.4785714285713, + "y": 2758 }, { - "x": 149.64285714285714, - "y": 2788 + "x": 1445.4785714285713, + "y": 2818 } ], "animated": false, @@ -5913,20 +5865,20 @@ "labelPercentage": 0, "route": [ { - "x": 95.3, - "y": 1604 + "x": 1597.05, + "y": 1614 }, { - "x": 95.3, - "y": 1654 + "x": 1597.05, + "y": 1664 }, { - "x": 82.3, - "y": 1654 + "x": 1610.05, + "y": 1664 }, { - "x": 82.3, - "y": 1734 + "x": 1610.05, + "y": 1744 } ], "animated": false, @@ -5960,12 +5912,20 @@ "labelPercentage": 0, "route": [ { - "x": 113.8, - "y": 1860 + "x": 1578.55, + "y": 1870 }, { - "x": 113.8, - "y": 2276 + "x": 1578.55, + "y": 2226 + }, + { + "x": 1550.25, + "y": 2226 + }, + { + "x": 1550.25, + "y": 2336 } ], "animated": false, @@ -5999,20 +5959,20 @@ "labelPercentage": 0, "route": [ { - "x": 1389.1166666666666, - "y": 1860 + "x": 74.5, + "y": 1870 }, { - "x": 1389.1166666666666, - "y": 1910 + "x": 74.5, + "y": 2748 }, { - "x": 1451.7833333333333, - "y": 1910 + "x": 178.5999999999999, + "y": 2748 }, { - "x": 1451.7833333333333, - "y": 2788 + "x": 178.5999999999999, + "y": 2818 } ], "animated": false, @@ -6046,20 +6006,20 @@ "labelPercentage": 0, "route": [ { - "x": 1095.2833333333333, - "y": 1860 + "x": 297.3333333333335, + "y": 1870 }, { - "x": 1095.2833333333333, - "y": 1910 + "x": 297.3333333333335, + "y": 1920 }, { - "x": 1190.9499999999998, - "y": 1910 + "x": 272.6666666666665, + "y": 1920 }, { - "x": 1190.9499999999998, - "y": 2010 + "x": 272.6666666666665, + "y": 2050 } ], "animated": false, @@ -6093,20 +6053,20 @@ "labelPercentage": 0, "route": [ { - "x": 1184.7499999999998, - "y": 2136 + "x": 254.0666666666666, + "y": 2176 }, { - "x": 1184.7499999999998, - "y": 2196 + "x": 254.0666666666666, + "y": 2236 }, { - "x": 1044.2833333333333, - "y": 2196 + "x": 296.66666666666674, + "y": 2236 }, { - "x": 1044.2833333333333, - "y": 2276 + "x": 296.66666666666674, + "y": 2336 } ], "animated": false, @@ -6140,20 +6100,20 @@ "labelPercentage": 0, "route": [ { - "x": 495.04999999999995, - "y": 1860 + "x": 1068.847619047619, + "y": 1870 }, { - "x": 495.04999999999995, - "y": 1940 + "x": 1068.847619047619, + "y": 1930 }, { - "x": 505.54999999999995, - "y": 1940 + "x": 819.6333333333332, + "y": 1930 }, { - "x": 505.54999999999995, - "y": 2010 + "x": 819.6333333333332, + "y": 2050 } ], "animated": false, @@ -6187,20 +6147,28 @@ "labelPercentage": 0, "route": [ { - "x": 547.55, - "y": 2136 + "x": 735.6333333333332, + "y": 2176 }, { - "x": 547.55, - "y": 2452 + "x": 735.6333333333332, + "y": 2236 }, { - "x": 390.74999999999994, - "y": 2452 + "x": 485.5333333333333, + "y": 2236 }, { - "x": 390.74999999999994, - "y": 2522 + "x": 485.5333333333333, + "y": 2512 + }, + { + "x": 471.9333333333333, + "y": 2512 + }, + { + "x": 471.9333333333333, + "y": 2572 } ], "animated": false, @@ -6234,20 +6202,20 @@ "labelPercentage": 0, "route": [ { - "x": 1209.5499999999997, - "y": 2136 + "x": 278.86666666666656, + "y": 2176 }, { - "x": 1209.5499999999997, - "y": 2206 + "x": 278.86666666666656, + "y": 2226 }, { - "x": 1064.95, - "y": 2206 + "x": 317.33333333333326, + "y": 2226 }, { - "x": 1064.95, - "y": 2276 + "x": 317.33333333333326, + "y": 2336 } ], "animated": false, @@ -6281,20 +6249,20 @@ "labelPercentage": 0, "route": [ { - "x": 1081.4833333333333, - "y": 2402 + "x": 300.79999999999995, + "y": 2462 }, { - "x": 1081.4833333333333, - "y": 2452 + "x": 300.79999999999995, + "y": 2512 }, { - "x": 1492.2833333333333, - "y": 2452 + "x": 258.76666666666665, + "y": 2512 }, { - "x": 1492.2833333333333, - "y": 2522 + "x": 258.76666666666665, + "y": 2572 } ], "animated": false, @@ -6328,20 +6296,20 @@ "labelPercentage": 0, "route": [ { - "x": 1502.1166666666666, - "y": 2648 - }, - { - "x": 1502.1166666666666, + "x": 248.9333333333334, "y": 2698 }, { - "x": 1482.7833333333333, - "y": 2698 + "x": 248.9333333333334, + "y": 2748 }, { - "x": 1482.7833333333333, - "y": 2788 + "x": 240.5999999999999, + "y": 2748 + }, + { + "x": 240.5999999999999, + "y": 2818 } ], "animated": false, @@ -6375,20 +6343,20 @@ "labelPercentage": 0, "route": [ { - "x": 720.3166666666667, - "y": 1860 + "x": 653.9666666666666, + "y": 1870 }, { - "x": 720.3166666666667, - "y": 1910 + "x": 653.9666666666666, + "y": 1920 }, { - "x": 720.65, - "y": 1910 + "x": 653.6333333333332, + "y": 1920 }, { - "x": 720.65, - "y": 2010 + "x": 653.6333333333332, + "y": 2050 } ], "animated": false, @@ -6422,20 +6390,20 @@ "labelPercentage": 0, "route": [ { - "x": 720.65, - "y": 2136 + "x": 653.6333333333332, + "y": 2176 }, { - "x": 720.65, - "y": 2186 + "x": 653.6333333333332, + "y": 2226 }, { - "x": 746.15, - "y": 2186 + "x": 628.1333333333332, + "y": 2226 }, { - "x": 746.15, - "y": 2276 + "x": 628.1333333333332, + "y": 2336 } ], "animated": false, @@ -6469,12 +6437,20 @@ "labelPercentage": 0, "route": [ { - "x": 798.85, - "y": 2402 + "x": 640.5333333333332, + "y": 2462 }, { - "x": 798.85, - "y": 2522 + "x": 640.5333333333332, + "y": 2512 + }, + { + "x": 640.7333333333332, + "y": 2512 + }, + { + "x": 640.7333333333332, + "y": 2572 } ], "animated": false, @@ -6508,20 +6484,20 @@ "labelPercentage": 0, "route": [ { - "x": 268.04999999999995, - "y": 1604 + "x": 1326.55, + "y": 1614 }, { - "x": 268.04999999999995, - "y": 1654 + "x": 1326.55, + "y": 1684 }, { - "x": 289.21666666666664, - "y": 1654 + "x": 1305.3833333333332, + "y": 1684 }, { - "x": 289.21666666666664, - "y": 1734 + "x": 1305.3833333333332, + "y": 1744 } ], "animated": false, @@ -6555,20 +6531,28 @@ "labelPercentage": 0, "route": [ { - "x": 844.4833333333333, - "y": 1604 + "x": 819.1333333333332, + "y": 1614 }, { - "x": 844.4833333333333, - "y": 1684 + "x": 819.1333333333332, + "y": 1664 }, { - "x": 1002.9499999999999, - "y": 1684 + "x": 430, + "y": 1664 }, { - "x": 1002.9499999999999, - "y": 2276 + "x": 430, + "y": 2236 + }, + { + "x": 379.33333333333326, + "y": 2236 + }, + { + "x": 379.33333333333326, + "y": 2336 } ], "animated": false, @@ -6602,20 +6586,20 @@ "labelPercentage": 0, "route": [ { - "x": 1031.8833333333332, - "y": 2402 + "x": 325.5999999999999, + "y": 2462 }, { - "x": 1031.8833333333332, - "y": 2698 + "x": 325.5999999999999, + "y": 2758 }, { - "x": 839.1, - "y": 2698 + "x": 553.9833333333332, + "y": 2758 }, { - "x": 839.1, - "y": 2788 + "x": 553.9833333333332, + "y": 2818 } ], "animated": false, @@ -6649,20 +6633,20 @@ "labelPercentage": 0, "route": [ { - "x": 526.55, - "y": 2136 + "x": 756.6333333333332, + "y": 2176 }, { - "x": 526.55, - "y": 2196 + "x": 756.6333333333332, + "y": 2246 }, { - "x": 366.15, - "y": 2196 + "x": 496.5333333333333, + "y": 2246 }, { - "x": 366.15, - "y": 2522 + "x": 496.5333333333333, + "y": 2572 } ], "animated": false, @@ -6696,20 +6680,12 @@ "labelPercentage": 0, "route": [ { - "x": 82.3, - "y": 1860 + "x": 1610.05, + "y": 1870 }, { - "x": 82.3, - "y": 1910 - }, - { - "x": 55, - "y": 1910 - }, - { - "x": 55, - "y": 2522 + "x": 1610.05, + "y": 2572 } ], "animated": false, @@ -6743,28 +6719,20 @@ "labelPercentage": 0, "route": [ { - "x": 1056.6833333333334, - "y": 2402 + "x": 350.4000000000001, + "y": 2462 }, { - "x": 1056.6833333333334, - "y": 2452 + "x": 350.4000000000001, + "y": 2748 }, { - "x": 1042.8833333333332, - "y": 2452 + "x": 575.4833333333332, + "y": 2748 }, { - "x": 1042.8833333333332, - "y": 2708 - }, - { - "x": 860.6, - "y": 2708 - }, - { - "x": 860.6, - "y": 2788 + "x": 575.4833333333332, + "y": 2818 } ], "animated": false, @@ -6798,20 +6766,28 @@ "labelPercentage": 0, "route": [ { - "x": 330.54999999999995, - "y": 1860 + "x": 1305.3833333333332, + "y": 1870 }, { - "x": 330.54999999999995, - "y": 2738 + "x": 1305.3833333333332, + "y": 2000 }, { - "x": 167.92857142857142, - "y": 2738 + "x": 1089.347619047619, + "y": 2000 }, { - "x": 167.92857142857142, - "y": 2788 + "x": 1089.347619047619, + "y": 2748 + }, + { + "x": 1463.7642857142855, + "y": 2748 + }, + { + "x": 1463.7642857142855, + "y": 2818 } ], "animated": false, @@ -6845,20 +6821,20 @@ "labelPercentage": 0, "route": [ { - "x": 749.25, - "y": 2402 + "x": 665.3333333333333, + "y": 2462 }, { - "x": 749.25, - "y": 2452 + "x": 665.3333333333333, + "y": 2512 }, { - "x": 748.85, - "y": 2452 + "x": 665.7333333333332, + "y": 2512 }, { - "x": 748.85, - "y": 2522 + "x": 665.7333333333332, + "y": 2572 } ], "animated": false, @@ -6892,20 +6868,20 @@ "labelPercentage": 0, "route": [ { - "x": 151, - "y": 2402 + "x": 1513.05, + "y": 2462 }, { - "x": 151, - "y": 2698 + "x": 1513.05, + "y": 2748 }, { - "x": 94.78571428571428, - "y": 2698 + "x": 1500.3357142857142, + "y": 2748 }, { - "x": 94.78571428571428, - "y": 2788 + "x": 1500.3357142857142, + "y": 2818 } ], "animated": false, @@ -6939,20 +6915,20 @@ "labelPercentage": 0, "route": [ { - "x": 755.1, - "y": 2648 - }, - { - "x": 755.1, + "x": 659.4833333333332, "y": 2698 }, { - "x": 774.6, - "y": 2698 + "x": 659.4833333333332, + "y": 2748 }, { - "x": 774.6, - "y": 2788 + "x": 639.9833333333332, + "y": 2748 + }, + { + "x": 639.9833333333332, + "y": 2818 } ], "animated": false, diff --git a/e2etests/testdata/stable/us_map/elk/sketch.exp.svg b/e2etests/testdata/stable/us_map/elk/sketch.exp.svg index 3e84ac882..01eb1f442 100644 --- a/e2etests/testdata/stable/us_map/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/us_map/elk/sketch.exp.svg @@ -2,7 +2,7 @@ AKHIALFLGAMSTNAZCANVNMUTARLAMOOKTXORCOKSNEWYCTMANYRIDEMDNJPANCSCIDMTWAILINIAMIKYWIOHMNSDVAWVMENHVTND - +AKHIALFLGAMSTNAZCANVNMUTARLAMOOKTXORCOKSNEWYCTMANYRIDEMDNJPANCSCIDMTWAILINIAMIKYWIOHMNSDVAWVMENHVTND + eightsixteenthirty twosixty fourninety nine twelvetwenty fourforty eighteighty one +eightsixteenthirty twosixty fourninety nine twelvetwenty fourforty eighteighty one diff --git a/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/board.exp.json b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/board.exp.json index c0f384c07..d20401f87 100644 --- a/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/board.exp.json +++ b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/board.exp.json @@ -158,6 +158,7 @@ "underline": false, "labelWidth": 160, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 1 }, @@ -197,6 +198,7 @@ "underline": false, "labelWidth": 238, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 2 }, @@ -236,6 +238,7 @@ "underline": false, "labelWidth": 173, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 3 }, @@ -275,6 +278,7 @@ "underline": false, "labelWidth": 21, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 4 }, @@ -314,6 +318,7 @@ "underline": false, "labelWidth": 21, "labelHeight": 26, + "labelPosition": "INSIDE_TOP_LEFT", "zIndex": 3, "level": 5 } diff --git a/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/sketch.exp.svg b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/sketch.exp.svg index 288cab1f2..5bcd47f78 100644 --- a/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/sketch.exp.svg +++ b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/sketch.exp.svg @@ -18,13 +18,13 @@ width="921" height="1242" viewBox="-147 -26 921 1242">bacthis is a message groupand this is a nested message groupwhat about more nestingyoyo +bacthis is a message groupand this is a nested message groupwhat about more nestingyoyo - - - - - + + + + + bacthis is a message groupand this is a nested message groupwhat about more nestingyoyo +bacthis is a message groupand this is a nested message groupwhat about more nestingyoyo - - - - - + + + + +
Oldest message
Offset
Last message
Next message will be +inserted here
nn
gg
ee
If we can't fix it, it ain't broke.
Dieters live life in the fasting lane.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
code