Merge branch 'master' into fix-null

This commit is contained in:
Alexander Wang 2022-12-26 11:22:37 -08:00
commit 7beff718aa
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
225 changed files with 15714 additions and 3666 deletions

View file

@ -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) - **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) - **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) - **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 ### Community plugins
- **Tree-sitter grammar**: [https://github.com/pleshevskiy/tree-sitter-d2](https://github.com/pleshevskiy/tree-sitter-d2) - **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) - **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) - **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) - **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) - **Structurizr to D2 exporter**: [https://github.com/goto1134/structurizr-d2-exporter](https://github.com/goto1134/structurizr-d2-exporter)

View file

@ -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.
![sketch](https://user-images.githubusercontent.com/3120367/209235066-d8ad6b3c-d19b-491d-b014-407f3c47407f.png)
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 🚀 #### Features 🚀
- `sketch` flag renders the diagram to look like it was sketched by hand. [#492](https://github.com/terrastruct/d2/pull/492) - `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 🧹 #### 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 ⛑️ #### Bugfixes ⛑️
- `d2 fmt` only rewrites if it has changes, instead of always rewriting. [#470](https://github.com/terrastruct/d2/pull/470) - `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) - Text no longer overflows 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) - ELK connection labels are now given the appropriate dimensions. [#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) - Dagre connection lengths make room for longer 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) - Icons with query parameters are escaped to valid SVG XML. [#438](https://github.com/terrastruct/d2/issues/438)
- Fixed edge case where the key `null` was compiling wrongly. [#507](https://github.com/terrastruct/d2/issues/507) - 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)

2
ci/sub

@ -1 +1 @@
Subproject commit 494f23a574d5d96b369e886aa1cd48df059dc912 Subproject commit b1ec0a8d430a62b7556211ed8bcd7b6e41e2362c

View file

@ -583,16 +583,25 @@ func (c *compiler) compileShapes(obj *d2graph.Object) {
c.compileShapes(obj) c.compileShapes(obj)
} }
for _, obj := range obj.ChildrenArray { for i := 0; i < len(obj.ChildrenArray); i++ {
switch obj.Attributes.Shape.Value { ch := obj.ChildrenArray[i]
switch ch.Attributes.Shape.Value {
case d2target.ShapeClass, d2target.ShapeSQLTable: case d2target.ShapeClass, d2target.ShapeSQLTable:
flattenContainer(obj.Graph, obj) flattenContainer(obj.Graph, ch)
} }
if obj.IDVal == "style" { if ch.IDVal == "style" {
obj.Parent.Attributes.Style = obj.Attributes.Style obj.Attributes.Style = ch.Attributes.Style
if obj.Graph != nil { if obj.Graph != nil {
flattenContainer(obj.Graph, obj) flattenContainer(obj.Graph, ch)
removeObject(obj.Graph, obj) 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 continue
} }
if n.MapKey.Key.Path[0].Unbox().ScalarString() == "constraint" { 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() 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) { func flattenContainer(g *d2graph.Graph, obj *d2graph.Object) {
absID := obj.AbsID() absID := obj.AbsID()
@ -854,9 +850,14 @@ func (c *compiler) validateKeys(obj *d2graph.Object, m *d2ast.Map) {
func (c *compiler) validateNear(g *d2graph.Graph) { func (c *compiler) validateNear(g *d2graph.Graph) {
for _, obj := range g.Objects { for _, obj := range g.Objects {
if obj.Attributes.NearKey != nil { if obj.Attributes.NearKey != nil {
_, ok := g.Root.HasChild(d2graph.Key(obj.Attributes.NearKey)) _, isKey := g.Root.HasChild(d2graph.Key(obj.Attributes.NearKey))
if !ok { _, isConst := d2graph.NearConstants[d2graph.Key(obj.Attributes.NearKey)[0]]
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)) 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 continue
} }
} }

View file

@ -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", 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 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: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: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) 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 { for _, tc := range testCases {

View file

@ -40,6 +40,11 @@ func applyTheme(shape *d2target.Shape, obj *d2graph.Object, theme *d2themes.Them
if obj.Attributes.Shape.Value == d2target.ShapeText { if obj.Attributes.Shape.Value == d2target.ShapeText {
shape.Color = theme.Colors.Neutrals.N1 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) { 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 { if obj.Attributes.Style.FontColor != nil {
shape.Color = obj.Attributes.Style.FontColor.Value shape.Color = obj.Attributes.Style.FontColor.Value
} }
if obj.Attributes.Shape.Value != d2target.ShapeText { if obj.Attributes.Style.Italic != nil {
if obj.Attributes.Style.Italic != nil { shape.Italic, _ = strconv.ParseBool(obj.Attributes.Style.Italic.Value)
shape.Italic, _ = strconv.ParseBool(obj.Attributes.Style.Italic.Value) }
} if obj.Attributes.Style.Bold != nil {
if obj.Attributes.Style.Bold != nil { shape.Bold, _ = strconv.ParseBool(obj.Attributes.Style.Bold.Value)
shape.Bold, _ = strconv.ParseBool(obj.Attributes.Style.Bold.Value) }
} if obj.Attributes.Style.Underline != nil {
if obj.Attributes.Style.Underline != nil { shape.Underline, _ = strconv.ParseBool(obj.Attributes.Style.Underline.Value)
shape.Underline, _ = strconv.ParseBool(obj.Attributes.Style.Underline.Value) }
} if obj.Attributes.Style.Font != nil {
if obj.Attributes.Style.Font != nil { shape.FontFamily = obj.Attributes.Style.Font.Value
shape.FontFamily = obj.Attributes.Style.Font.Value
}
} }
} }

View file

@ -8,12 +8,15 @@ import (
"cdr.dev/slog" "cdr.dev/slog"
tassert "github.com/stretchr/testify/assert"
"oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/util-go/assert"
"oss.terrastruct.com/util-go/diff" "oss.terrastruct.com/util-go/diff"
"oss.terrastruct.com/d2/d2compiler" "oss.terrastruct.com/d2/d2compiler"
"oss.terrastruct.com/d2/d2exporter" "oss.terrastruct.com/d2/d2exporter"
"oss.terrastruct.com/d2/d2layouts/d2dagrelayout" "oss.terrastruct.com/d2/d2layouts/d2dagrelayout"
"oss.terrastruct.com/d2/d2layouts/d2sequence"
"oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/d2target"
"oss.terrastruct.com/d2/d2themes/d2themescatalog" "oss.terrastruct.com/d2/d2themes/d2themescatalog"
"oss.terrastruct.com/d2/lib/geo" "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) runa(t, tcs)
@ -219,7 +239,7 @@ func run(t *testing.T, tc testCase) {
err = g.SetDimensions(nil, ruler, nil) err = g.SetDimensions(nil, ruler, nil)
assert.JSON(t, nil, err) assert.JSON(t, nil, err)
err = d2dagrelayout.Layout(ctx, g) err = d2sequence.Layout(ctx, g, d2dagrelayout.Layout)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -392,17 +392,23 @@ func (obj *Object) GetFill(theme *d2themes.Theme) string {
return theme.Colors.Neutrals.N5 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 return theme.Colors.Neutrals.N7
} }
func (obj *Object) GetStroke(theme *d2themes.Theme, dashGapSize interface{}) string { func (obj *Object) GetStroke(theme *d2themes.Theme, dashGapSize interface{}) string {
shape := obj.Attributes.Shape.Value shape := obj.Attributes.Shape.Value
if strings.EqualFold(shape, d2target.ShapeCode) || if strings.EqualFold(shape, d2target.ShapeCode) ||
strings.EqualFold(shape, d2target.ShapeClass) ||
strings.EqualFold(shape, d2target.ShapeSQLTable) ||
strings.EqualFold(shape, d2target.ShapeText) { strings.EqualFold(shape, d2target.ShapeText) {
return theme.Colors.Neutrals.N1 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 { if dashGapSize != 0.0 {
return theme.Colors.B2 return theme.Colors.B2
} }
@ -435,7 +441,14 @@ func (obj *Object) AbsIDArray() []string {
} }
func (obj *Object) Text() *d2target.MText { 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 fontSize := d2fonts.FONT_SIZE_M
if obj.OuterSequenceDiagram() == nil { if obj.OuterSequenceDiagram() == nil {
if obj.IsContainer() { if obj.IsContainer() {
@ -451,11 +464,14 @@ func (obj *Object) Text() *d2target.MText {
if obj.Class != nil || obj.SQLTable != nil { if obj.Class != nil || obj.SQLTable != nil {
fontSize = d2fonts.FONT_SIZE_XL fontSize = d2fonts.FONT_SIZE_XL
} }
if obj.Class != nil {
isBold = false
}
return &d2target.MText{ return &d2target.MText{
Text: obj.Attributes.Label.Value, Text: obj.Attributes.Label.Value,
FontSize: fontSize, FontSize: fontSize,
IsBold: isBold, IsBold: isBold,
IsItalic: false, IsItalic: isItalic,
Language: obj.Attributes.Language, Language: obj.Attributes.Language,
Shape: obj.Attributes.Shape.Value, Shape: obj.Attributes.Shape.Value,
@ -899,14 +915,18 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler
return err return err
} }
dims = d2target.NewTextDimensions(width, height) dims = d2target.NewTextDimensions(width, height)
} else { } else if obj.Attributes.Language != "" {
var err error var err error
dims, err = getMarkdownDimensions(mtexts, ruler, obj.Text(), fontFamily) dims, err = getMarkdownDimensions(mtexts, ruler, obj.Text(), fontFamily)
if err != nil { if err != nil {
return err return err
} }
} else {
dims = getTextDimensions(mtexts, ruler, obj.Text(), fontFamily)
} }
innerLabelPadding = 0 innerLabelPadding = 0
} else if obj.Attributes.Shape.Value == d2target.ShapeClass {
dims = getTextDimensions(mtexts, ruler, obj.Text(), go2.Pointer(d2fonts.SourceCodePro))
} else { } else {
dims = getTextDimensions(mtexts, ruler, obj.Text(), fontFamily) dims = getTextDimensions(mtexts, ruler, obj.Text(), fontFamily)
} }
@ -962,7 +982,7 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler
maxWidth := dims.Width maxWidth := dims.Width
for _, f := range obj.Class.Fields { 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 { if fdims == nil {
return fmt.Errorf("dimensions for class field %#v not found", f.Text()) 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 { 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 { if mdims == nil {
return fmt.Errorf("dimensions for class method %#v not found", m.Text()) 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 { if anyRowText != nil {
// 10px of padding top and bottom so text doesn't look squished // 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)) obj.Height = float64(rowHeight * (len(obj.Class.Fields) + len(obj.Class.Methods) + 2))
} }
// Leave room for padding // Leave room for padding
@ -1002,23 +1022,29 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler
maxTypeWidth := 0 maxTypeWidth := 0
constraintWidth := 0 constraintWidth := 0
font := d2fonts.SourceSansPro.Font(d2fonts.FONT_SIZE_L, d2fonts.FONT_STYLE_REGULAR)
for i := range obj.SQLTable.Columns { for i := range obj.SQLTable.Columns {
// Note: we want to set dimensions of actual column not the for loop copy of the struct // Note: we want to set dimensions of actual column not the for loop copy of the struct
c := &obj.SQLTable.Columns[i] c := &obj.SQLTable.Columns[i]
ctexts := c.Texts()
nameWidth, nameHeight := ruler.Measure(font, c.Name.Label) nameDims := getTextDimensions(mtexts, ruler, ctexts[0], fontFamily)
c.Name.LabelWidth = nameWidth if nameDims == nil {
c.Name.LabelHeight = nameHeight return fmt.Errorf("dimensions for sql_table name %#v not found", ctexts[0].Text)
if maxNameWidth < nameWidth { }
maxNameWidth = nameWidth 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) typeDims := getTextDimensions(mtexts, ruler, ctexts[1], fontFamily)
c.Type.LabelWidth = typeWidth if typeDims == nil {
c.Type.LabelHeight = typeHeight return fmt.Errorf("dimensions for sql_table type %#v not found", ctexts[1].Text)
if maxTypeWidth < typeWidth { }
maxTypeWidth = typeWidth c.Type.LabelWidth = typeDims.Width
c.Type.LabelHeight = typeDims.Height
if maxTypeWidth < typeDims.Width {
maxTypeWidth = typeDims.Width
} }
if c.Constraint != "" { if c.Constraint != "" {
@ -1084,7 +1110,9 @@ func (g *Graph) Texts() []*d2target.MText {
} }
} else if obj.SQLTable != nil { } else if obj.SQLTable != nil {
for _, column := range obj.SQLTable.Columns { 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": {}, "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() { func init() {
for k, v := range StyleKeywords { for k, v := range StyleKeywords {
ReservedKeywords[k] = v ReservedKeywords[k] = v
@ -1177,4 +1221,8 @@ func init() {
for k, v := range ReservedKeywordHolders { for k, v := range ReservedKeywordHolders {
ReservedKeywords[k] = v ReservedKeywords[k] = v
} }
NearConstants = make(map[string]struct{}, len(NearConstantsArray))
for _, k := range NearConstantsArray {
NearConstants[k] = struct{}{}
}
} }

View file

@ -9,7 +9,6 @@ import (
_ "embed" _ "embed"
"encoding/json" "encoding/json"
"fmt" "fmt"
"math"
"strings" "strings"
"github.com/dop251/goja" "github.com/dop251/goja"
@ -79,14 +78,16 @@ type ELKGraph struct {
} }
type ELKLayoutOptions struct { type ELKLayoutOptions struct {
Algorithm string `json:"elk.algorithm,omitempty"` Algorithm string `json:"elk.algorithm,omitempty"`
HierarchyHandling string `json:"elk.hierarchyHandling,omitempty"` HierarchyHandling string `json:"elk.hierarchyHandling,omitempty"`
NodeSpacing float64 `json:"spacing.nodeNodeBetweenLayers,omitempty"` NodeSpacing float64 `json:"spacing.nodeNodeBetweenLayers,omitempty"`
Padding string `json:"elk.padding,omitempty"` Padding string `json:"elk.padding,omitempty"`
EdgeNodeSpacing float64 `json:"spacing.edgeNodeBetweenLayers,omitempty"` EdgeNodeSpacing float64 `json:"spacing.edgeNodeBetweenLayers,omitempty"`
Direction string `json:"elk.direction"` Direction string `json:"elk.direction"`
SelfLoopSpacing float64 `json:"elk.spacing.nodeSelfLoop"` SelfLoopSpacing float64 `json:"elk.spacing.nodeSelfLoop"`
InlineEdgeLabels bool `json:"elk.edgeLabels.inline,omitempty"` 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) { 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{ elkGraph := &ELKGraph{
ID: "root", ID: "root",
LayoutOptions: &ELKLayoutOptions{ LayoutOptions: &ELKLayoutOptions{
Algorithm: "layered", Algorithm: "layered",
HierarchyHandling: "INCLUDE_CHILDREN", HierarchyHandling: "INCLUDE_CHILDREN",
NodeSpacing: 100.0, NodeSpacing: 100.0,
EdgeNodeSpacing: 50.0, EdgeNodeSpacing: 50.0,
SelfLoopSpacing: 50.0, SelfLoopSpacing: 50.0,
ConsiderModelOrder: "NODES_AND_EDGES",
}, },
} }
switch g.Root.Attributes.Direction.Value { 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 { if len(obj.ChildrenArray) > 0 {
n.LayoutOptions = &ELKLayoutOptions{ 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 parentX = parent.TopLeft.X
parentY = parent.TopLeft.Y 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.Width = n.Width
obj.Height = n.Height obj.Height = n.Height

146
d2layouts/d2near/layout.go Normal file
View file

@ -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)
}

View file

@ -69,6 +69,7 @@ func Layout(ctx context.Context, g *d2graph.Graph, layout func(ctx context.Conte
layoutEdges, edgeOrder := getLayoutEdges(g, edgesToRemove) layoutEdges, edgeOrder := getLayoutEdges(g, edgesToRemove)
g.Edges = layoutEdges g.Edges = layoutEdges
layoutObjects, objectOrder := getLayoutObjects(g, objectsToRemove) 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 g.Objects = layoutObjects
if g.Root.IsSequenceDiagram() { if g.Root.IsSequenceDiagram() {

View file

@ -74,6 +74,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se
// Groups may have more nested groups // Groups may have more nested groups
for len(queue) > 0 { for len(queue) > 0 {
curr := queue[0] curr := queue[0]
curr.LabelPosition = go2.Pointer(string(label.InsideTopLeft))
groups = append(groups, curr) groups = append(groups, curr)
queue = queue[1:] queue = queue[1:]
queue = append(queue, curr.ChildrenArray...) queue = append(queue, curr.ChildrenArray...)

View file

@ -9,6 +9,7 @@ import (
"oss.terrastruct.com/d2/d2compiler" "oss.terrastruct.com/d2/d2compiler"
"oss.terrastruct.com/d2/d2exporter" "oss.terrastruct.com/d2/d2exporter"
"oss.terrastruct.com/d2/d2graph" "oss.terrastruct.com/d2/d2graph"
"oss.terrastruct.com/d2/d2layouts/d2near"
"oss.terrastruct.com/d2/d2layouts/d2sequence" "oss.terrastruct.com/d2/d2layouts/d2sequence"
"oss.terrastruct.com/d2/d2renderers/d2fonts" "oss.terrastruct.com/d2/d2renderers/d2fonts"
"oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/d2target"
@ -48,9 +49,20 @@ func Compile(ctx context.Context, input string, opts *CompileOptions) (*d2target
return nil, nil, err return nil, nil, err
} }
if layout, err := getLayout(opts); err != nil { coreLayout, err := getLayout(opts)
if err != nil {
return nil, nil, err 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 return nil, nil, err
} }
} }

View file

@ -3,13 +3,17 @@ package d2sketch
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"strings"
_ "embed" _ "embed"
"github.com/dop251/goja" "github.com/dop251/goja"
"oss.terrastruct.com/d2/d2target" "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/d2/lib/svg"
"oss.terrastruct.com/util-go/go2"
) )
//go:embed fillpattern.svg //go:embed fillpattern.svg
@ -62,8 +66,13 @@ func DefineFillPattern() string {
func shapeStyle(shape d2target.Shape) string { func shapeStyle(shape d2target.Shape) string {
out := "" out := ""
out += fmt.Sprintf(`fill:%s;`, shape.Fill) if shape.Type == d2target.ShapeSQLTable || shape.Type == d2target.ShapeClass {
out += fmt.Sprintf(`stroke:%s;`, shape.Stroke) 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(`opacity:%f;`, shape.Opacity)
out += fmt.Sprintf(`stroke-width:%d;`, shape.StrokeWidth) out += fmt.Sprintf(`stroke-width:%d;`, shape.StrokeWidth)
if shape.StrokeDash != 0 { if shape.StrokeDash != 0 {
@ -81,10 +90,7 @@ func Rect(r *Runner, shape d2target.Shape) (string, error) {
strokeWidth: %d, strokeWidth: %d,
%s %s
});`, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) });`, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps)
if _, err := r.run(js); err != nil { paths, err := computeRoughPaths(r, js)
return "", err
}
paths, err := extractPaths(r)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -109,10 +115,7 @@ func Oval(r *Runner, shape d2target.Shape) (string, error) {
strokeWidth: %d, strokeWidth: %d,
%s %s
});`, shape.Width/2, shape.Height/2, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) });`, shape.Width/2, shape.Height/2, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps)
if _, err := r.run(js); err != nil { paths, err := computeRoughPaths(r, js)
return "", err
}
paths, err := extractPaths(r)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -140,10 +143,7 @@ func Paths(r *Runner, shape d2target.Shape, paths []string) (string, error) {
strokeWidth: %d, strokeWidth: %d,
%s %s
});`, path, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps) });`, path, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps)
if _, err := r.run(js); err != nil { sketchPaths, err := computeRoughPaths(r, js)
return "", err
}
sketchPaths, err := extractPaths(r)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -180,10 +180,7 @@ func connectionStyle(connection d2target.Connection) string {
func Connection(r *Runner, connection d2target.Connection, path, attrs string) (string, error) { func Connection(r *Runner, connection d2target.Connection, path, attrs string) (string, error) {
roughness := 1.0 roughness := 1.0
js := fmt.Sprintf(`node = rc.path("%s", {roughness: %f, seed: 1});`, path, roughness) js := fmt.Sprintf(`node = rc.path("%s", {roughness: %f, seed: 1});`, path, roughness)
if _, err := r.run(js); err != nil { paths, err := computeRoughPaths(r, js)
return "", err
}
paths, err := extractPaths(r)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -197,6 +194,280 @@ func Connection(r *Runner, connection d2target.Connection, path, attrs string) (
return output, nil 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(
`<path class="shape" transform="translate(%d %d)" d="%s" style="%s" />`,
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(
`<path class="class_header" transform="translate(%d %d)" d="%s" style="fill:%s" />`,
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(`<text class="%s" x="%f" y="%f" style="%s">%s</text>`,
"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(`<text class="text" x="%f" y="%f" style="%s">%s</text>`,
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(`<text class="text" x="%f" y="%f" style="%s">%s</text>`,
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(`<text class="text" x="%f" y="%f" style="%s">%s</text>`,
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(
`<path d="%s" style="fill:%s" />`,
p, shape.Fill,
)
}
}
output += fmt.Sprintf(
`<rect class="sketch-overlay" transform="translate(%d %d)" width="%d" height="%d" />`,
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(
`<path class="shape" transform="translate(%d %d)" d="%s" style="%s" />`,
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(
`<path class="class_header" transform="translate(%d %d)" d="%s" style="fill:%s" />`,
shape.Pos.X, shape.Pos.Y, p, shape.Fill,
)
}
output += fmt.Sprintf(
`<rect class="sketch-overlay" transform="translate(%d %d)" width="%d" height="%f" />`,
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(`<text class="%s" x="%f" y="%f" style="%s">%s</text>`,
"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(
`<path class="class_header" d="%s" style="fill:%s" />`,
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(`<text class="text-mono" x="%f" y="%f" style="%s">%s</text>`,
prefixTL.X,
prefixTL.Y+fontSize*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, shape.PrimaryAccentColor),
prefix,
),
fmt.Sprintf(`<text class="text-mono" x="%f" y="%f" style="%s">%s</text>`,
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(`<text class="text-mono" x="%f" y="%f" style="%s">%s</text>`,
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 { type attrs struct {
D string `json:"d"` D string `json:"d"`
} }

View file

@ -223,6 +223,58 @@ queue -> package -> step
callout -> stored_data -> person callout -> stored_data -> person
diamond -> oval -> circle diamond -> oval -> circle
hexagon -> cloud 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)
}
`, `,
}, },
} }

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 196 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 86 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 384 KiB

After

Width:  |  Height:  |  Size: 384 KiB

View file

@ -8,11 +8,12 @@ import (
"oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/d2target"
"oss.terrastruct.com/d2/lib/geo" "oss.terrastruct.com/d2/lib/geo"
"oss.terrastruct.com/d2/lib/label" "oss.terrastruct.com/d2/lib/label"
"oss.terrastruct.com/d2/lib/svg"
) )
func classHeader(box *geo.Box, text string, textWidth, textHeight, fontSize float64) string { func classHeader(shape d2target.Shape, box *geo.Box, text string, textWidth, textHeight, fontSize float64) string {
str := fmt.Sprintf(`<rect class="class_header" x="%f" y="%f" width="%f" height="%f" fill="black" />`, str := fmt.Sprintf(`<rect class="class_header" x="%f" y="%f" width="%f" height="%f" fill="%s" />`,
box.TopLeft.X, box.TopLeft.Y, box.Width, box.Height) box.TopLeft.X, box.TopLeft.Y, box.Width, box.Height, shape.Fill)
if text != "" { if text != "" {
tl := label.InsideMiddleCenter.GetPointOnBox( tl := label.InsideMiddleCenter.GetPointOnBox(
@ -23,79 +24,60 @@ func classHeader(box *geo.Box, text string, textWidth, textHeight, fontSize floa
) )
str += fmt.Sprintf(`<text class="%s" x="%f" y="%f" style="%s">%s</text>`, str += fmt.Sprintf(`<text class="%s" x="%f" y="%f" style="%s">%s</text>`,
// TODO use monospace font "text-mono",
"text",
tl.X+textWidth/2, tl.X+textWidth/2,
tl.Y+textHeight*3/4, tl.Y+textHeight*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", fmt.Sprintf(`text-anchor:%s;font-size:%vpx;fill:%s`,
"middle", "middle",
4+fontSize, 4+fontSize,
"white", shape.Stroke,
), ),
escapeText(text), svg.EscapeText(text),
) )
} }
return str return str
} }
const ( func classRow(shape d2target.Shape, box *geo.Box, prefix, nameText, typeText string, fontSize float64) string {
prefixPadding = 10
prefixWidth = 20
typePadding = 20
)
func classRow(box *geo.Box, prefix, nameText, typeText string, fontSize float64) string {
// Row is made up of prefix, name, and type // Row is made up of prefix, name, and type
// e.g. | + firstName string | // e.g. | + firstName string |
prefixTL := label.InsideMiddleLeft.GetPointOnBox( prefixTL := label.InsideMiddleLeft.GetPointOnBox(
box, box,
prefixPadding, d2target.PrefixPadding,
box.Width, box.Width,
fontSize, fontSize,
) )
typeTR := label.InsideMiddleRight.GetPointOnBox( typeTR := label.InsideMiddleRight.GetPointOnBox(
box, box,
typePadding, d2target.TypePadding,
0, 0,
fontSize, fontSize,
) )
accentColor := "rgb(13, 50, 178)"
return strings.Join([]string{ return strings.Join([]string{
fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`, fmt.Sprintf(`<text class="text-mono" x="%f" y="%f" style="%s">%s</text>`,
prefixTL.X, prefixTL.X,
prefixTL.Y+fontSize*3/4, prefixTL.Y+fontSize*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, accentColor), fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, shape.PrimaryAccentColor),
prefix, prefix,
), ),
fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`, fmt.Sprintf(`<text class="text-mono" x="%f" y="%f" style="%s">%s</text>`,
prefixTL.X+prefixWidth, prefixTL.X+d2target.PrefixWidth,
prefixTL.Y+fontSize*3/4, prefixTL.Y+fontSize*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, "black"), fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, shape.Fill),
escapeText(nameText), svg.EscapeText(nameText),
), ),
fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`, fmt.Sprintf(`<text class="text-mono" x="%f" y="%f" style="%s">%s</text>`,
typeTR.X, typeTR.X,
typeTR.Y+fontSize*3/4, typeTR.Y+fontSize*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "end", fontSize, accentColor), fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "end", fontSize, shape.SecondaryAccentColor),
escapeText(typeText), svg.EscapeText(typeText),
), ),
}, "\n") }, "\n")
} }
func visibilityToken(visibility string) string {
switch visibility {
case "protected":
return "#"
case "private":
return "-"
default:
return "+"
}
}
func drawClass(writer io.Writer, targetShape d2target.Shape) { func drawClass(writer io.Writer, targetShape d2target.Shape) {
fmt.Fprintf(writer, `<rect class="shape" x="%d" y="%d" width="%d" height="%d" style="%s"/>`, fmt.Fprintf(writer, `<rect class="shape" x="%d" y="%d" width="%d" height="%d" style="%s"/>`,
targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, shapeStyle(targetShape)) targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, shapeStyle(targetShape))
@ -109,14 +91,14 @@ func drawClass(writer io.Writer, targetShape d2target.Shape) {
headerBox := geo.NewBox(box.TopLeft, box.Width, 2*rowHeight) headerBox := geo.NewBox(box.TopLeft, box.Width, 2*rowHeight)
fmt.Fprint(writer, fmt.Fprint(writer,
classHeader(headerBox, targetShape.Label, float64(targetShape.LabelWidth), float64(targetShape.LabelHeight), float64(targetShape.FontSize)), classHeader(targetShape, headerBox, targetShape.Label, float64(targetShape.LabelWidth), float64(targetShape.LabelHeight), float64(targetShape.FontSize)),
) )
rowBox := geo.NewBox(box.TopLeft.Copy(), box.Width, rowHeight) rowBox := geo.NewBox(box.TopLeft.Copy(), box.Width, rowHeight)
rowBox.TopLeft.Y += headerBox.Height rowBox.TopLeft.Y += headerBox.Height
for _, f := range targetShape.Class.Fields { for _, f := range targetShape.Fields {
fmt.Fprint(writer, fmt.Fprint(writer,
classRow(rowBox, visibilityToken(f.Visibility), f.Name, f.Type, float64(targetShape.FontSize)), classRow(targetShape, rowBox, f.VisibilityToken(), f.Name, f.Type, float64(targetShape.FontSize)),
) )
rowBox.TopLeft.Y += rowHeight rowBox.TopLeft.Y += rowHeight
} }
@ -124,11 +106,11 @@ func drawClass(writer io.Writer, targetShape d2target.Shape) {
fmt.Fprintf(writer, `<line x1="%f" y1="%f" x2="%f" y2="%f" style="%s" />`, fmt.Fprintf(writer, `<line x1="%f" y1="%f" x2="%f" y2="%f" style="%s" />`,
rowBox.TopLeft.X, rowBox.TopLeft.Y, rowBox.TopLeft.X, rowBox.TopLeft.Y,
rowBox.TopLeft.X+rowBox.Width, rowBox.TopLeft.Y, rowBox.TopLeft.X+rowBox.Width, rowBox.TopLeft.Y,
fmt.Sprintf("stroke-width:1;stroke:%v", targetShape.Stroke)) fmt.Sprintf("stroke-width:1;stroke:%v", targetShape.Fill))
for _, m := range targetShape.Class.Methods { for _, m := range targetShape.Methods {
fmt.Fprint(writer, fmt.Fprint(writer,
classRow(rowBox, visibilityToken(m.Visibility), m.Name, m.Return, float64(targetShape.FontSize)), classRow(targetShape, rowBox, m.VisibilityToken(), m.Name, m.Return, float64(targetShape.FontSize)),
) )
rowBox.TopLeft.Y += rowHeight rowBox.TopLeft.Y += rowHeight
} }

View file

@ -5,10 +5,10 @@ package d2svg
import ( import (
"bytes" "bytes"
_ "embed" _ "embed"
"encoding/xml"
"errors" "errors"
"fmt" "fmt"
"hash/fnv" "hash/fnv"
"html"
"io" "io"
"sort" "sort"
"strings" "strings"
@ -357,7 +357,7 @@ func makeLabelMask(labelTL *geo.Point, width, height int) string {
} }
func drawConnection(writer io.Writer, labelMaskID string, connection d2target.Connection, markers map[string]struct{}, idToShape map[string]d2target.Shape, sketchRunner *d2sketch.Runner) (labelMask string, _ error) { func drawConnection(writer io.Writer, labelMaskID string, connection d2target.Connection, markers map[string]struct{}, idToShape map[string]d2target.Shape, sketchRunner *d2sketch.Runner) (labelMask string, _ error) {
fmt.Fprintf(writer, `<g id="%s">`, escapeText(connection.ID)) fmt.Fprintf(writer, `<g id="%s">`, svg.EscapeText(connection.ID))
var markerStart string var markerStart string
if connection.SrcArrow != d2target.NoArrowhead { if connection.SrcArrow != d2target.NoArrowhead {
id := arrowheadMarkerID(false, connection) id := arrowheadMarkerID(false, connection)
@ -536,7 +536,7 @@ func render3dRect(targetShape d2target.Shape) string {
strings.Join(borderSegments, " "), borderStyle) strings.Join(borderSegments, " "), borderStyle)
// create mask from border stroke, to cut away from the shape fills // create mask from border stroke, to cut away from the shape fills
maskID := fmt.Sprintf("border-mask-%v", escapeText(targetShape.ID)) maskID := fmt.Sprintf("border-mask-%v", svg.EscapeText(targetShape.ID))
borderMask := strings.Join([]string{ borderMask := strings.Join([]string{
fmt.Sprintf(`<defs><mask id="%s" maskUnits="userSpaceOnUse" x="%d" y="%d" width="%d" height="%d">`, fmt.Sprintf(`<defs><mask id="%s" maskUnits="userSpaceOnUse" x="%d" y="%d" width="%d" height="%d">`,
maskID, targetShape.Pos.X, targetShape.Pos.Y-threeDeeOffset, targetShape.Width+threeDeeOffset, targetShape.Height+threeDeeOffset, maskID, targetShape.Pos.X, targetShape.Pos.Y-threeDeeOffset, targetShape.Width+threeDeeOffset, targetShape.Height+threeDeeOffset,
@ -583,7 +583,7 @@ func render3dRect(targetShape d2target.Shape) string {
} }
func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2sketch.Runner) (labelMask string, err error) { func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2sketch.Runner) (labelMask string, err error) {
fmt.Fprintf(writer, `<g id="%s">`, escapeText(targetShape.ID)) fmt.Fprintf(writer, `<g id="%s">`, svg.EscapeText(targetShape.ID))
tl := geo.NewPoint(float64(targetShape.Pos.X), float64(targetShape.Pos.Y)) tl := geo.NewPoint(float64(targetShape.Pos.X), float64(targetShape.Pos.Y))
width := float64(targetShape.Width) width := float64(targetShape.Width)
height := float64(targetShape.Height) height := float64(targetShape.Height)
@ -618,11 +618,27 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
switch targetShape.Type { switch targetShape.Type {
case d2target.ShapeClass: case d2target.ShapeClass:
drawClass(writer, targetShape) if sketchRunner != nil {
out, err := d2sketch.Class(sketchRunner, targetShape)
if err != nil {
return "", err
}
fmt.Fprintf(writer, out)
} else {
drawClass(writer, targetShape)
}
fmt.Fprintf(writer, `</g></g>`) fmt.Fprintf(writer, `</g></g>`)
return labelMask, nil return labelMask, nil
case d2target.ShapeSQLTable: case d2target.ShapeSQLTable:
drawTable(writer, targetShape) if sketchRunner != nil {
out, err := d2sketch.Table(sketchRunner, targetShape)
if err != nil {
return "", err
}
fmt.Fprintf(writer, out)
} else {
drawTable(writer, targetShape)
}
fmt.Fprintf(writer, `</g></g>`) fmt.Fprintf(writer, `</g></g>`)
return labelMask, nil return labelMask, nil
case d2target.ShapeOval: case d2target.ShapeOval:
@ -641,7 +657,7 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
case d2target.ShapeImage: case d2target.ShapeImage:
fmt.Fprintf(writer, `<image href="%s" x="%d" y="%d" width="%d" height="%d" style="%s" />`, fmt.Fprintf(writer, `<image href="%s" x="%d" y="%d" width="%d" height="%d" style="%s" />`,
targetShape.Icon.String(), html.EscapeString(targetShape.Icon.String()),
targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style) targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style)
// TODO should standardize "" to rectangle // TODO should standardize "" to rectangle
@ -701,7 +717,7 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
tl := iconPosition.GetPointOnBox(box, label.PADDING, float64(iconSize), float64(iconSize)) tl := iconPosition.GetPointOnBox(box, label.PADDING, float64(iconSize), float64(iconSize))
fmt.Fprintf(writer, `<image href="%s" x="%f" y="%f" width="%d" height="%d" />`, fmt.Fprintf(writer, `<image href="%s" x="%f" y="%f" width="%d" height="%d" />`,
targetShape.Icon.String(), html.EscapeString(targetShape.Icon.String()),
tl.X, tl.X,
tl.Y, tl.Y,
iconSize, iconSize,
@ -725,9 +741,11 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
} else if targetShape.Italic { } else if targetShape.Italic {
fontClass += "-italic" fontClass += "-italic"
} }
if targetShape.Underline {
fontClass += " text-underline"
}
switch targetShape.Type { if targetShape.Type == d2target.ShapeCode {
case d2target.ShapeCode:
lexer := lexers.Get(targetShape.Language) lexer := lexers.Get(targetShape.Language)
if lexer == nil { if lexer == nil {
return labelMask, fmt.Errorf("code snippet lexer for %s not found", targetShape.Language) return labelMask, fmt.Errorf("code snippet lexer for %s not found", targetShape.Language)
@ -768,38 +786,36 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
fmt.Fprint(writer, "</text>") fmt.Fprint(writer, "</text>")
} }
fmt.Fprintf(writer, "</g></g>") fmt.Fprintf(writer, "</g></g>")
case d2target.ShapeText: } else if targetShape.Type == d2target.ShapeText && targetShape.Language == "latex" {
if targetShape.Language == "latex" { render, err := d2latex.Render(targetShape.Label)
render, err := d2latex.Render(targetShape.Label) if err != nil {
if err != nil { return labelMask, err
return labelMask, err
}
fmt.Fprintf(writer, `<g transform="translate(%f %f)" style="opacity:%f">`, box.TopLeft.X, box.TopLeft.Y, targetShape.Opacity)
fmt.Fprint(writer, render)
fmt.Fprintf(writer, "</g>")
} else {
render, err := textmeasure.RenderMarkdown(targetShape.Label)
if err != nil {
return labelMask, err
}
fmt.Fprintf(writer, `<g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="%f" y="%f" width="%d" height="%d">`,
box.TopLeft.X, box.TopLeft.Y, targetShape.Width, targetShape.Height,
)
// we need the self closing form in this svg/xhtml context
render = strings.ReplaceAll(render, "<hr>", "<hr />")
var mdStyle string
if targetShape.Fill != "" {
mdStyle = fmt.Sprintf("background-color:%s;", targetShape.Fill)
}
if targetShape.Stroke != "" {
mdStyle += fmt.Sprintf("color:%s;", targetShape.Stroke)
}
fmt.Fprintf(writer, `<div xmlns="http://www.w3.org/1999/xhtml" class="md" style="%s">%v</div>`, mdStyle, render)
fmt.Fprint(writer, `</foreignObject></g>`)
} }
default: fmt.Fprintf(writer, `<g transform="translate(%f %f)" style="opacity:%f">`, box.TopLeft.X, box.TopLeft.Y, targetShape.Opacity)
fmt.Fprint(writer, render)
fmt.Fprintf(writer, "</g>")
} else if targetShape.Type == d2target.ShapeText && targetShape.Language != "" {
render, err := textmeasure.RenderMarkdown(targetShape.Label)
if err != nil {
return labelMask, err
}
fmt.Fprintf(writer, `<g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="%f" y="%f" width="%d" height="%d">`,
box.TopLeft.X, box.TopLeft.Y, targetShape.Width, targetShape.Height,
)
// we need the self closing form in this svg/xhtml context
render = strings.ReplaceAll(render, "<hr>", "<hr />")
var mdStyle string
if targetShape.Fill != "" {
mdStyle = fmt.Sprintf("background-color:%s;", targetShape.Fill)
}
if targetShape.Stroke != "" {
mdStyle += fmt.Sprintf("color:%s;", targetShape.Stroke)
}
fmt.Fprintf(writer, `<div xmlns="http://www.w3.org/1999/xhtml" class="md" style="%s">%v</div>`, mdStyle, render)
fmt.Fprint(writer, `</foreignObject></g>`)
} else {
fontColor := "black" fontColor := "black"
if targetShape.Color != "" { if targetShape.Color != "" {
fontColor = targetShape.Color fontColor = targetShape.Color
@ -823,15 +839,9 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
return labelMask, nil return labelMask, nil
} }
func escapeText(text string) string {
buf := new(bytes.Buffer)
_ = xml.EscapeText(buf, []byte(text))
return buf.String()
}
func renderText(text string, x, height float64) string { func renderText(text string, x, height float64) string {
if !strings.Contains(text, "\n") { if !strings.Contains(text, "\n") {
return escapeText(text) return svg.EscapeText(text)
} }
rendered := []string{} rendered := []string{}
lines := strings.Split(text, "\n") lines := strings.Split(text, "\n")
@ -840,7 +850,7 @@ func renderText(text string, x, height float64) string {
if i == 0 { if i == 0 {
dy = 0 dy = 0
} }
escaped := escapeText(line) escaped := svg.EscapeText(line)
if escaped == "" { if escaped == "" {
// if there are multiple newlines in a row we still need text for the tspan to render // if there are multiple newlines in a row we still need text for the tspan to render
escaped = " " escaped = " "
@ -853,8 +863,16 @@ func renderText(text string, x, height float64) string {
func shapeStyle(shape d2target.Shape) string { func shapeStyle(shape d2target.Shape) string {
out := "" out := ""
out += fmt.Sprintf(`fill:%s;`, shape.Fill) if shape.Type == d2target.ShapeSQLTable || shape.Type == d2target.ShapeClass {
out += fmt.Sprintf(`stroke:%s;`, shape.Stroke) // Fill is used for header fill in these types
// This fill property is just background of rows
out += fmt.Sprintf(`fill:%s;`, shape.Stroke)
// Stroke (border) of these shapes should match the header fill
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(`opacity:%f;`, shape.Opacity)
out += fmt.Sprintf(`stroke-width:%d;`, shape.StrokeWidth) out += fmt.Sprintf(`stroke-width:%d;`, shape.StrokeWidth)
if shape.StrokeDash != 0 { if shape.StrokeDash != 0 {
@ -885,6 +903,7 @@ func embedFonts(buf *bytes.Buffer, fontFamily *d2fonts.FontFamily) {
triggers := []string{ triggers := []string{
`class="text"`, `class="text"`,
`class="text `,
`class="md"`, `class="md"`,
} }
@ -903,6 +922,20 @@ func embedFonts(buf *bytes.Buffer, fontFamily *d2fonts.FontFamily) {
} }
} }
triggers = []string{
`text-underline`,
}
for _, t := range triggers {
if strings.Contains(content, t) {
buf.WriteString(`
.text-underline {
text-decoration: underline;
}`)
break
}
}
triggers = []string{ triggers = []string{
`class="text-bold"`, `class="text-bold"`,
`<b>`, `<b>`,

View file

@ -257,6 +257,7 @@
margin-bottom: 16px; margin-bottom: 16px;
font-weight: 600; font-weight: 600;
line-height: 1.25; line-height: 1.25;
font-family: "font-regular";
} }
.md h2 { .md h2 {

View file

@ -8,12 +8,13 @@ import (
"oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/d2target"
"oss.terrastruct.com/d2/lib/geo" "oss.terrastruct.com/d2/lib/geo"
"oss.terrastruct.com/d2/lib/label" "oss.terrastruct.com/d2/lib/label"
"oss.terrastruct.com/d2/lib/svg"
"oss.terrastruct.com/util-go/go2" "oss.terrastruct.com/util-go/go2"
) )
func tableHeader(box *geo.Box, text string, textWidth, textHeight, fontSize float64) string { func tableHeader(shape d2target.Shape, box *geo.Box, text string, textWidth, textHeight, fontSize float64) string {
str := fmt.Sprintf(`<rect class="class_header" x="%f" y="%f" width="%f" height="%f" fill="%s" />`, str := fmt.Sprintf(`<rect class="class_header" x="%f" y="%f" width="%f" height="%f" fill="%s" />`,
box.TopLeft.X, box.TopLeft.Y, box.Width, box.Height, "#0a0f25") box.TopLeft.X, box.TopLeft.Y, box.Width, box.Height, shape.Fill)
if text != "" { if text != "" {
tl := label.InsideMiddleLeft.GetPointOnBox( tl := label.InsideMiddleLeft.GetPointOnBox(
@ -30,15 +31,15 @@ func tableHeader(box *geo.Box, text string, textWidth, textHeight, fontSize floa
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s",
"start", "start",
4+fontSize, 4+fontSize,
"white", shape.Stroke,
), ),
escapeText(text), svg.EscapeText(text),
) )
} }
return str return str
} }
func tableRow(box *geo.Box, nameText, typeText, constraintText string, fontSize, longestNameWidth float64) string { func tableRow(shape d2target.Shape, box *geo.Box, nameText, typeText, constraintText string, fontSize, longestNameWidth float64) string {
// Row is made up of name, type, and constraint // Row is made up of name, type, and constraint
// e.g. | diagram int FK | // e.g. | diagram int FK |
nameTL := label.InsideMiddleLeft.GetPointOnBox( nameTL := label.InsideMiddleLeft.GetPointOnBox(
@ -54,49 +55,30 @@ func tableRow(box *geo.Box, nameText, typeText, constraintText string, fontSize,
fontSize, fontSize,
) )
// TODO theme based
primaryColor := "rgb(13, 50, 178)"
accentColor := "rgb(74, 111, 243)"
neutralColor := "rgb(103, 108, 126)"
return strings.Join([]string{ return strings.Join([]string{
fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`, fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`,
nameTL.X, nameTL.X,
nameTL.Y+fontSize*3/4, nameTL.Y+fontSize*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, primaryColor), fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, shape.PrimaryAccentColor),
escapeText(nameText), svg.EscapeText(nameText),
), ),
// TODO light font
fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`, fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`,
nameTL.X+longestNameWidth+2*d2target.NamePadding, nameTL.X+longestNameWidth+2*d2target.NamePadding,
nameTL.Y+fontSize*3/4, nameTL.Y+fontSize*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, neutralColor), fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s", "start", fontSize, shape.NeutralAccentColor),
escapeText(typeText), svg.EscapeText(typeText),
), ),
fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`, fmt.Sprintf(`<text class="text" x="%f" y="%f" style="%s">%s</text>`,
constraintTR.X, constraintTR.X,
constraintTR.Y+fontSize*3/4, constraintTR.Y+fontSize*3/4,
fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s;letter-spacing:2px;", "end", fontSize, accentColor), fmt.Sprintf("text-anchor:%s;font-size:%vpx;fill:%s;letter-spacing:2px;", "end", fontSize, shape.SecondaryAccentColor),
constraintText, constraintText,
), ),
}, "\n") }, "\n")
} }
func constraintAbbr(constraint string) string {
switch constraint {
case "primary_key":
return "PK"
case "foreign_key":
return "FK"
case "unique":
return "UNQ"
default:
return ""
}
}
func drawTable(writer io.Writer, targetShape d2target.Shape) { func drawTable(writer io.Writer, targetShape d2target.Shape) {
fmt.Fprintf(writer, `<rect class="shape" x="%d" y="%d" width="%d" height="%d" style="%s"/>`, fmt.Fprintf(writer, `<rect class="shape" x="%d" y="%d" width="%d" height="%d" style="%s"/>`,
targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, shapeStyle(targetShape)) targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, shapeStyle(targetShape))
@ -110,24 +92,26 @@ func drawTable(writer io.Writer, targetShape d2target.Shape) {
headerBox := geo.NewBox(box.TopLeft, box.Width, rowHeight) headerBox := geo.NewBox(box.TopLeft, box.Width, rowHeight)
fmt.Fprint(writer, fmt.Fprint(writer,
tableHeader(headerBox, targetShape.Label, float64(targetShape.LabelWidth), float64(targetShape.LabelHeight), float64(targetShape.FontSize)), tableHeader(targetShape, headerBox, targetShape.Label,
float64(targetShape.LabelWidth), float64(targetShape.LabelHeight), float64(targetShape.FontSize)),
) )
var longestNameWidth int var longestNameWidth int
for _, f := range targetShape.SQLTable.Columns { for _, f := range targetShape.Columns {
longestNameWidth = go2.Max(longestNameWidth, f.Name.LabelWidth) longestNameWidth = go2.Max(longestNameWidth, f.Name.LabelWidth)
} }
rowBox := geo.NewBox(box.TopLeft.Copy(), box.Width, rowHeight) rowBox := geo.NewBox(box.TopLeft.Copy(), box.Width, rowHeight)
rowBox.TopLeft.Y += headerBox.Height rowBox.TopLeft.Y += headerBox.Height
for _, f := range targetShape.SQLTable.Columns { for _, f := range targetShape.Columns {
fmt.Fprint(writer, fmt.Fprint(writer,
tableRow(rowBox, f.Name.Label, f.Type.Label, constraintAbbr(f.Constraint), float64(targetShape.FontSize), float64(longestNameWidth)), tableRow(targetShape, rowBox, f.Name.Label, f.Type.Label, f.ConstraintAbbr(), float64(targetShape.FontSize), float64(longestNameWidth)),
) )
rowBox.TopLeft.Y += rowHeight rowBox.TopLeft.Y += rowHeight
fmt.Fprintf(writer, `<line x1="%f" y1="%f" x2="%f" y2="%f" style="stroke-width:2;stroke:#0a0f25" />`, fmt.Fprintf(writer, `<line x1="%f" y1="%f" x2="%f" y2="%f" style="stroke-width:2;stroke:%s" />`,
rowBox.TopLeft.X, rowBox.TopLeft.Y, rowBox.TopLeft.X, rowBox.TopLeft.Y,
rowBox.TopLeft.X+rowBox.Width, rowBox.TopLeft.Y, rowBox.TopLeft.X+rowBox.Width, rowBox.TopLeft.Y,
targetShape.Fill,
) )
} }
} }

View file

@ -6,6 +6,11 @@ import (
"oss.terrastruct.com/d2/d2renderers/d2fonts" "oss.terrastruct.com/d2/d2renderers/d2fonts"
) )
const (
PrefixPadding = 10
PrefixWidth = 20
)
type Class struct { type Class struct {
Fields []ClassField `json:"fields"` Fields []ClassField `json:"fields"`
Methods []ClassMethod `json:"methods"` Methods []ClassMethod `json:"methods"`
@ -27,6 +32,17 @@ func (cf ClassField) Text() *MText {
} }
} }
func (cf ClassField) VisibilityToken() string {
switch cf.Visibility {
case "protected":
return "#"
case "private":
return "-"
default:
return "+"
}
}
type ClassMethod struct { type ClassMethod struct {
Name string `json:"name"` Name string `json:"name"`
Return string `json:"return"` Return string `json:"return"`
@ -42,3 +58,14 @@ func (cm ClassMethod) Text() *MText {
Shape: "class", Shape: "class",
} }
} }
func (cm ClassMethod) VisibilityToken() string {
switch cm.Visibility {
case "protected":
return "#"
case "private":
return "-"
default:
return "+"
}
}

View file

@ -146,6 +146,11 @@ type Shape struct {
ZIndex int `json:"zIndex"` ZIndex int `json:"zIndex"`
Level int `json:"level"` Level int `json:"level"`
// These are used for special shapes, sql_table and class
PrimaryAccentColor string `json:"primaryAccentColor,omitempty"`
SecondaryAccentColor string `json:"secondaryAccentColor,omitempty"`
NeutralAccentColor string `json:"neutralAccentColor,omitempty"`
} }
func (s *Shape) SetType(t string) { func (s *Shape) SetType(t string) {

View file

@ -1,10 +1,6 @@
package d2target package d2target
import ( import "oss.terrastruct.com/d2/d2renderers/d2fonts"
"fmt"
"oss.terrastruct.com/d2/d2renderers/d2fonts"
)
const ( const (
NamePadding = 10 NamePadding = 10
@ -22,12 +18,34 @@ type SQLColumn struct {
Reference string `json:"reference"` Reference string `json:"reference"`
} }
func (c SQLColumn) Text() *MText { func (c SQLColumn) Texts() []*MText {
return &MText{ return []*MText{
Text: fmt.Sprintf("%s%s%s%s", c.Name.Label, c.Type.Label, c.Constraint, c.Reference), {
FontSize: d2fonts.FONT_SIZE_L, Text: c.Name.Label,
IsBold: false, FontSize: d2fonts.FONT_SIZE_L,
IsItalic: false, IsBold: false,
Shape: "sql_table", IsItalic: false,
Shape: "sql_table",
},
{
Text: c.Type.Label,
FontSize: d2fonts.FONT_SIZE_L,
IsBold: false,
IsItalic: false,
Shape: "sql_table",
},
}
}
func (c SQLColumn) ConstraintAbbr() string {
switch c.Constraint {
case "primary_key":
return "PK"
case "foreign_key":
return "FK"
case "unique":
return "UNQ"
default:
return ""
} }
} }

View file

@ -139,6 +139,7 @@ func run(t *testing.T, tc testCase) {
defer os.Remove(pathGotSVG) defer os.Remove(pathGotSVG)
} }
// Check that it's valid SVG
var xmlParsed interface{} var xmlParsed interface{}
err = xml.Unmarshal(svgBytes, &xmlParsed) err = xml.Unmarshal(svgBytes, &xmlParsed)
assert.Success(t, err) assert.Success(t, err)

View file

@ -171,6 +171,50 @@ build_workflow: lambda-build.yaml {
S3 <-> Terraform: Pulls zip to deploy S3 <-> Terraform: Pulls zip to deploy
Terraform -> AWS: Changes the live lambdas Terraform -> AWS: Changes the live lambdas
} }
`,
},
{
name: "query_param_escape",
script: `my network: {
icon: https://icons.terrastruct.com/infra/019-network.svg?fuga=1&hoge
}
`,
},
{
name: "elk_order",
script: `queue: {
shape: queue
label: ''
M0
M1
M2
M3
M4
M5
M6
}
m0_desc: |md
Oldest message
|
m0_desc -> queue.M0
m2_desc: |md
Offset
|
m2_desc -> queue.M2
m5_desc: |md
Last message
|
m5_desc -> queue.M5
m6_desc: |md
Next message will be\
inserted here
|
m6_desc -> queue.M6
`, `,
}, },
} }

View file

@ -840,7 +840,7 @@ a -> md -> b
name: string name: string
email: string email: string
password: string password: string
last_login: datetime last_login: datetime { constraint: primary_key }
} }
products: { products: {
@ -1585,6 +1585,45 @@ container: {
label: to right container root label: to right container root
} }
} }
`,
},
{
name: "constant_near_stress",
script: `x -> y
The top of the mountain: { shape: text; near: top-center }
Joe: { shape: person; near: center-left }
Donald: { shape: person; near: center-right }
bottom: |md
# Cats, 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.
| { near: bottom-center }
i am top left: { shape: text; near: top-left }
i am top right: { shape: text; near: top-right }
i am bottom left: { shape: text; near: bottom-left }
i am bottom right: { shape: text; near: bottom-right }
`,
},
{
name: "constant_near_title",
script: `title: |md
# A winning strategy
| { near: top-center }
poll the people -> results
results -> unfavorable -> poll the people
results -> favorable -> will of the people
`,
},
{
name: "text_font_sizes",
script: `bear: { shape: text; style.font-size: 22; style.bold: true }
mama bear: { shape: text; style.font-size: 28; style.italic: true }
papa bear: { shape: text; style.font-size: 32; style.underline: true }
mama bear -> bear
papa bear -> bear
`, `,
}, },
} }

View file

@ -6,7 +6,7 @@
"id": "\"ninety\\nnine\"", "id": "\"ninety\\nnine\"",
"type": "", "type": "",
"pos": { "pos": {
"x": 714, "x": 12,
"y": 12 "y": 12
}, },
"width": 151, "width": 151,
@ -46,7 +46,7 @@
"id": "eighty\reight", "id": "eighty\reight",
"type": "", "type": "",
"pos": { "pos": {
"x": 194, "x": 183,
"y": 20 "y": 20
}, },
"width": 151, "width": 151,
@ -86,7 +86,7 @@
"id": "\"seventy\r\\nseven\"", "id": "\"seventy\r\\nseven\"",
"type": "", "type": "",
"pos": { "pos": {
"x": 12, "x": 354,
"y": 12 "y": 12
}, },
"width": 162, "width": 162,
@ -126,7 +126,7 @@
"id": "\"a\\\\yode\"", "id": "\"a\\\\yode\"",
"type": "", "type": "",
"pos": { "pos": {
"x": 885, "x": 536,
"y": 28 "y": 28
}, },
"width": 154, "width": 154,
@ -166,7 +166,7 @@
"id": "there", "id": "there",
"type": "", "type": "",
"pos": { "pos": {
"x": 546, "x": 715,
"y": 254 "y": 254
}, },
"width": 143, "width": 143,
@ -206,7 +206,7 @@
"id": "'a\\\"ode'", "id": "'a\\\"ode'",
"type": "", "type": "",
"pos": { "pos": {
"x": 540, "x": 710,
"y": 28 "y": 28
}, },
"width": 154, "width": 154,
@ -246,7 +246,7 @@
"id": "\"a\\\\node\"", "id": "\"a\\\\node\"",
"type": "", "type": "",
"pos": { "pos": {
"x": 365, "x": 884,
"y": 28 "y": 28
}, },
"width": 155, "width": 155,
@ -310,19 +310,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 962, "x": 613,
"y": 154 "y": 154
}, },
{ {
"x": 962, "x": 613,
"y": 204 "y": 204
}, },
{ {
"x": 652.75, "x": 751.25,
"y": 204 "y": 204
}, },
{ {
"x": 652.75, "x": 751.25,
"y": 254 "y": 254
} }
], ],
@ -357,11 +357,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 617, "x": 787,
"y": 154 "y": 154
}, },
{ {
"x": 617, "x": 787,
"y": 254 "y": 254
} }
], ],
@ -396,19 +396,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 442.5, "x": 961.5,
"y": 154 "y": 154
}, },
{ {
"x": 442.5, "x": 961.5,
"y": 204 "y": 204
}, },
{ {
"x": 581.25, "x": 822.75,
"y": 204 "y": 204
}, },
{ {
"x": 581.25, "x": 822.75,
"y": 254 "y": 254
} }
], ],

View file

@ -18,7 +18,7 @@ width="1227" height="568" viewBox="-88 -88 1227 568"><style type="text/css">
} }
]]> ]]>
</style><g id="&#34;ninety\nnine&#34;"><g class="shape" ><rect x="714" y="12" width="151" height="142" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="789.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25"><tspan x="789.500000" dy="0.000000">ninety</tspan><tspan x="789.500000" dy="21.000000">nine</tspan></text></g><g id="eighty&#xD;eight"><g class="shape" ><rect x="194" y="20" width="151" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="269.500000" y="86.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">eighty&#xD;eight</text></g><g id="&#34;seventy&#xD;\nseven&#34;"><g class="shape" ><rect x="12" y="12" width="162" height="142" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="93.000000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25"><tspan x="93.000000" dy="0.000000">seventy&#xD;</tspan><tspan x="93.000000" dy="21.000000">seven</tspan></text></g><g id="&#34;a\\yode&#34;"><g class="shape" ><rect x="885" y="28" width="154" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="962.000000" y="94.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a\yode</text></g><g id="there"><g class="shape" ><rect x="546" y="254" width="143" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="617.500000" y="320.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">there</text></g><g id="&#39;a\&#34;ode&#39;"><g class="shape" ><rect x="540" y="28" width="154" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="617.000000" y="94.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a\&#34;ode</text></g><g id="&#34;a\\node&#34;"><g class="shape" ><rect x="365" y="28" width="155" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="442.500000" y="94.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a\node</text></g><g id="(&#34;a\\yode&#34; -&gt; there)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 962.000000 156.000000 L 962.000000 194.000000 S 962.000000 204.000000 952.000000 204.000000 L 662.750000 204.000000 S 652.750000 204.000000 652.750000 214.000000 L 652.750000 250.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3044386072)"/></g><g id="(&#39;a\&#34;ode&#39; -&gt; there)[0]"><path d="M 617.000000 156.000000 L 617.000000 250.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3044386072)"/></g><g id="(&#34;a\\node&#34; -&gt; there)[0]"><path d="M 442.500000 156.000000 L 442.500000 194.000000 S 442.500000 204.000000 452.500000 204.000000 L 571.250000 204.000000 S 581.250000 204.000000 581.250000 214.000000 L 581.250000 250.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3044386072)"/></g><mask id="3044386072" maskUnits="userSpaceOnUse" x="-100" y="-100" width="1227" height="568"> </style><g id="&#34;ninety\nnine&#34;"><g class="shape" ><rect x="12" y="12" width="151" height="142" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="87.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25"><tspan x="87.500000" dy="0.000000">ninety</tspan><tspan x="87.500000" dy="21.000000">nine</tspan></text></g><g id="eighty&#xD;eight"><g class="shape" ><rect x="183" y="20" width="151" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="258.500000" y="86.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">eighty&#xD;eight</text></g><g id="&#34;seventy&#xD;\nseven&#34;"><g class="shape" ><rect x="354" y="12" width="162" height="142" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="435.000000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25"><tspan x="435.000000" dy="0.000000">seventy&#xD;</tspan><tspan x="435.000000" dy="21.000000">seven</tspan></text></g><g id="&#34;a\\yode&#34;"><g class="shape" ><rect x="536" y="28" width="154" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="613.000000" y="94.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a\yode</text></g><g id="there"><g class="shape" ><rect x="715" y="254" width="143" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="786.500000" y="320.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">there</text></g><g id="&#39;a\&#34;ode&#39;"><g class="shape" ><rect x="710" y="28" width="154" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="787.000000" y="94.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a\&#34;ode</text></g><g id="&#34;a\\node&#34;"><g class="shape" ><rect x="884" y="28" width="155" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="961.500000" y="94.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a\node</text></g><g id="(&#34;a\\yode&#34; -&gt; there)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 613.000000 156.000000 L 613.000000 194.000000 S 613.000000 204.000000 623.000000 204.000000 L 741.250000 204.000000 S 751.250000 204.000000 751.250000 214.000000 L 751.250000 250.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3106414556)"/></g><g id="(&#39;a\&#34;ode&#39; -&gt; there)[0]"><path d="M 787.000000 156.000000 L 787.000000 250.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3106414556)"/></g><g id="(&#34;a\\node&#34; -&gt; there)[0]"><path d="M 961.500000 156.000000 L 961.500000 194.000000 S 961.500000 204.000000 951.500000 204.000000 L 832.750000 204.000000 S 822.750000 204.000000 822.750000 214.000000 L 822.750000 250.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3106414556)"/></g><mask id="3106414556" maskUnits="userSpaceOnUse" x="-100" y="-100" width="1227" height="568">
<rect x="-100" y="-100" width="1227" height="568" fill="white"></rect> <rect x="-100" y="-100" width="1227" height="568" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 327 KiB

After

Width:  |  Height:  |  Size: 327 KiB

View file

@ -6,7 +6,7 @@
"id": "build_workflow", "id": "build_workflow",
"type": "", "type": "",
"pos": { "pos": {
"x": 716, "x": 12,
"y": 12 "y": 12
}, },
"width": 480, "width": 480,
@ -46,7 +46,7 @@
"id": "build_workflow.push", "id": "build_workflow.push",
"type": "", "type": "",
"pos": { "pos": {
"x": 791, "x": 87,
"y": 87 "y": 87
}, },
"width": 330, "width": 330,
@ -86,7 +86,7 @@
"id": "build_workflow.GHA", "id": "build_workflow.GHA",
"type": "", "type": "",
"pos": { "pos": {
"x": 822, "x": 117,
"y": 290 "y": 290
}, },
"width": 269, "width": 269,
@ -126,7 +126,7 @@
"id": "build_workflow.S3", "id": "build_workflow.S3",
"type": "", "type": "",
"pos": { "pos": {
"x": 891, "x": 186,
"y": 493 "y": 493
}, },
"width": 131, "width": 131,
@ -166,7 +166,7 @@
"id": "build_workflow.Terraform", "id": "build_workflow.Terraform",
"type": "", "type": "",
"pos": { "pos": {
"x": 847, "x": 143,
"y": 696 "y": 696
}, },
"width": 218, "width": 218,
@ -206,7 +206,7 @@
"id": "build_workflow.AWS", "id": "build_workflow.AWS",
"type": "", "type": "",
"pos": { "pos": {
"x": 879, "x": 174,
"y": 899 "y": 899
}, },
"width": 155, "width": 155,
@ -246,7 +246,7 @@
"id": "deploy_workflow", "id": "deploy_workflow",
"type": "", "type": "",
"pos": { "pos": {
"x": 1216, "x": 512,
"y": 175 "y": 175
}, },
"width": 421, "width": 421,
@ -286,7 +286,7 @@
"id": "deploy_workflow.manual", "id": "deploy_workflow.manual",
"type": "", "type": "",
"pos": { "pos": {
"x": 1291, "x": 587,
"y": 250 "y": 250
}, },
"width": 271, "width": 271,
@ -326,7 +326,7 @@
"id": "deploy_workflow.GHA", "id": "deploy_workflow.GHA",
"type": "", "type": "",
"pos": { "pos": {
"x": 1292, "x": 588,
"y": 453 "y": 453
}, },
"width": 269, "width": 269,
@ -366,7 +366,7 @@
"id": "deploy_workflow.AWS", "id": "deploy_workflow.AWS",
"type": "", "type": "",
"pos": { "pos": {
"x": 1349, "x": 645,
"y": 736 "y": 736
}, },
"width": 155, "width": 155,
@ -406,7 +406,7 @@
"id": "apollo_workflow", "id": "apollo_workflow",
"type": "", "type": "",
"pos": { "pos": {
"x": 12, "x": 953,
"y": 215 "y": 215
}, },
"width": 684, "width": 684,
@ -446,7 +446,7 @@
"id": "apollo_workflow.apollo", "id": "apollo_workflow.apollo",
"type": "", "type": "",
"pos": { "pos": {
"x": 235, "x": 1175,
"y": 290 "y": 290
}, },
"width": 238, "width": 238,
@ -486,7 +486,7 @@
"id": "apollo_workflow.GHA", "id": "apollo_workflow.GHA",
"type": "", "type": "",
"pos": { "pos": {
"x": 219, "x": 1160,
"y": 493 "y": 493
}, },
"width": 269, "width": 269,
@ -526,7 +526,7 @@
"id": "apollo_workflow.AWS", "id": "apollo_workflow.AWS",
"type": "", "type": "",
"pos": { "pos": {
"x": 276, "x": 1217,
"y": 696 "y": 696
}, },
"width": 155, "width": 155,
@ -590,11 +590,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 956, "x": 252,
"y": 224 "y": 224
}, },
{ {
"x": 956, "x": 252,
"y": 290 "y": 290
} }
], ],
@ -629,11 +629,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 956, "x": 252,
"y": 427 "y": 427
}, },
{ {
"x": 956, "x": 252,
"y": 493 "y": 493
} }
], ],
@ -668,11 +668,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 956, "x": 252,
"y": 630 "y": 630
}, },
{ {
"x": 956, "x": 252,
"y": 696 "y": 696
} }
], ],
@ -707,11 +707,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 956, "x": 252,
"y": 833 "y": 833
}, },
{ {
"x": 956, "x": 252,
"y": 899 "y": 899
} }
], ],
@ -746,11 +746,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1426.5, "x": 722.5,
"y": 387 "y": 387
}, },
{ {
"x": 1426.5, "x": 722.5,
"y": 453 "y": 453
} }
], ],
@ -785,11 +785,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1426.5, "x": 722.5,
"y": 590 "y": 590
}, },
{ {
"x": 1426.5, "x": 722.5,
"y": 736 "y": 736
} }
], ],
@ -824,11 +824,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 353.5, "x": 1294.5,
"y": 427 "y": 427
}, },
{ {
"x": 353.5, "x": 1294.5,
"y": 493 "y": 493
} }
], ],
@ -863,11 +863,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 353.5, "x": 1294.5,
"y": 630 "y": 630
}, },
{ {
"x": 353.5, "x": 1294.5,
"y": 696 "y": 696
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 799 KiB

After

Width:  |  Height:  |  Size: 799 KiB

View file

@ -0,0 +1,675 @@
{
"name": "",
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "queue",
"type": "queue",
"pos": {
"x": 0,
"y": 148
},
"width": 1336,
"height": 226,
"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": 50,
"y": 198
},
"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": 235,
"y": 198
},
"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": 420,
"y": 198
},
"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": 605,
"y": 198
},
"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": 790,
"y": 198
},
"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": 976,
"y": 198
},
"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": 1161,
"y": 198
},
"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": 60,
"y": 12
},
"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": 462,
"y": 12
},
"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": 994,
"y": 12
},
"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": 1154,
"y": 0
},
"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": 112.5,
"y": 36
},
{
"x": 112.5,
"y": 85.6
},
{
"x": 112.5,
"y": 158
},
{
"x": 112.5,
"y": 198
}
],
"isCurve": true,
"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": 482.5,
"y": 36
},
{
"x": 482.5,
"y": 85.6
},
{
"x": 482.5,
"y": 158
},
{
"x": 482.5,
"y": 198
}
],
"isCurve": true,
"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": 1038.5,
"y": 36
},
{
"x": 1038.5,
"y": 85.6
},
{
"x": 1038.5,
"y": 158
},
{
"x": 1038.5,
"y": 198
}
],
"isCurve": true,
"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": 1223.5,
"y": 48
},
{
"x": 1223.5,
"y": 88
},
{
"x": 1223.5,
"y": 158
},
{
"x": 1223.5,
"y": 198
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 663 KiB

View file

@ -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
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 663 KiB

View file

@ -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": []
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 324 KiB

View file

@ -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": []
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 324 KiB

View file

@ -15,8 +15,8 @@
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
"borderRadius": 0, "borderRadius": 0,
"fill": "#FFFFFF", "fill": "#0A0F25",
"stroke": "#0A0F25", "stroke": "#FFFFFF",
"shadow": false, "shadow": false,
"3d": false, "3d": false,
"multiple": false, "multiple": false,
@ -96,7 +96,10 @@
"labelWidth": 211, "labelWidth": 211,
"labelHeight": 36, "labelHeight": 36,
"zIndex": 0, "zIndex": 0,
"level": 1 "level": 1,
"primaryAccentColor": "#0D32B2",
"secondaryAccentColor": "#4A6FF3",
"neutralAccentColor": "#676C7E"
}, },
{ {
"id": "table_constrained", "id": "table_constrained",
@ -111,8 +114,8 @@
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
"borderRadius": 0, "borderRadius": 0,
"fill": "#FFFFFF", "fill": "#0A0F25",
"stroke": "#0A0F25", "stroke": "#FFFFFF",
"shadow": false, "shadow": false,
"3d": false, "3d": false,
"multiple": false, "multiple": false,
@ -192,7 +195,10 @@
"labelWidth": 350, "labelWidth": 350,
"labelHeight": 36, "labelHeight": 36,
"zIndex": 0, "zIndex": 0,
"level": 1 "level": 1,
"primaryAccentColor": "#0D32B2",
"secondaryAccentColor": "#4A6FF3",
"neutralAccentColor": "#676C7E"
} }
], ],
"connections": [] "connections": []

View file

@ -18,15 +18,15 @@ width="1388" height="308" viewBox="-100 -100 1388 308"><style type="text/css">
} }
]]> ]]>
</style><g id="table"><g class="shape" ><rect class="shape" x="0" y="0" width="534" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="0.000000" y="0.000000" width="534.000000" height="36.000000" fill="#0a0f25" /><text class="text" x="20.000000" y="27.000000" style="text-anchor:start;font-size:24px;fill:white">sql_table_overflow</text><text class="text" x="10.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">short</text> </style><g id="table"><g class="shape" ><rect class="shape" x="0" y="0" width="534" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="0.000000" y="0.000000" width="534.000000" height="36.000000" fill="#0A0F25" /><text class="text" x="20.000000" y="27.000000" style="text-anchor:start;font-size:24px;fill:#FFFFFF">sql_table_overflow</text><text class="text" x="10.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">short</text>
<text class="text" x="272.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">loooooooooooooooooooong</text> <text class="text" x="272.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">loooooooooooooooooooong</text>
<text class="text" x="514.000000" y="59.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;"></text><line x1="0.000000" y1="72.000000" x2="534.000000" y2="72.000000" style="stroke-width:2;stroke:#0a0f25" /><text class="text" x="10.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">loooooooooooooooooooong</text> <text class="text" x="514.000000" y="59.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;"></text><line x1="0.000000" y1="72.000000" x2="534.000000" y2="72.000000" style="stroke-width:2;stroke:#0A0F25" /><text class="text" x="10.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">loooooooooooooooooooong</text>
<text class="text" x="272.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">short</text> <text class="text" x="272.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">short</text>
<text class="text" x="514.000000" y="95.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;"></text><line x1="0.000000" y1="108.000000" x2="534.000000" y2="108.000000" style="stroke-width:2;stroke:#0a0f25" /></g></g><g id="table_constrained"><g class="shape" ><rect class="shape" x="594" y="0" width="594" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="594.000000" y="0.000000" width="594.000000" height="36.000000" fill="#0a0f25" /><text class="text" x="614.000000" y="27.000000" style="text-anchor:start;font-size:24px;fill:white">sql_table_constrained_overflow</text><text class="text" x="604.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">short</text> <text class="text" x="514.000000" y="95.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;"></text><line x1="0.000000" y1="108.000000" x2="534.000000" y2="108.000000" style="stroke-width:2;stroke:#0A0F25" /></g></g><g id="table_constrained"><g class="shape" ><rect class="shape" x="594" y="0" width="594" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="594.000000" y="0.000000" width="594.000000" height="36.000000" fill="#0A0F25" /><text class="text" x="614.000000" y="27.000000" style="text-anchor:start;font-size:24px;fill:#FFFFFF">sql_table_constrained_overflow</text><text class="text" x="604.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">short</text>
<text class="text" x="866.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">loooooooooooooooooooong</text> <text class="text" x="866.000000" y="59.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">loooooooooooooooooooong</text>
<text class="text" x="1168.000000" y="59.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;">UNQ</text><line x1="594.000000" y1="72.000000" x2="1188.000000" y2="72.000000" style="stroke-width:2;stroke:#0a0f25" /><text class="text" x="604.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">loooooooooooooooooooong</text> <text class="text" x="1168.000000" y="59.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;">UNQ</text><line x1="594.000000" y1="72.000000" x2="1188.000000" y2="72.000000" style="stroke-width:2;stroke:#0A0F25" /><text class="text" x="604.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">loooooooooooooooooooong</text>
<text class="text" x="866.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">short</text> <text class="text" x="866.000000" y="95.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">short</text>
<text class="text" x="1168.000000" y="95.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;">FK</text><line x1="594.000000" y1="108.000000" x2="1188.000000" y2="108.000000" style="stroke-width:2;stroke:#0a0f25" /></g></g><mask id="1631228640" maskUnits="userSpaceOnUse" x="-100" y="-100" width="1388" height="308"> <text class="text" x="1168.000000" y="95.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;">FK</text><line x1="594.000000" y1="108.000000" x2="1188.000000" y2="108.000000" style="stroke-width:2;stroke:#0A0F25" /></g></g><mask id="3570027740" maskUnits="userSpaceOnUse" x="-100" y="-100" width="1388" height="308">
<rect x="-100" y="-100" width="1388" height="308" fill="white"></rect> <rect x="-100" y="-100" width="1388" height="308" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 327 KiB

After

Width:  |  Height:  |  Size: 327 KiB

View file

@ -15,8 +15,8 @@
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
"borderRadius": 0, "borderRadius": 0,
"fill": "#FFFFFF", "fill": "#0A0F25",
"stroke": "#0A0F25", "stroke": "#FFFFFF",
"shadow": false, "shadow": false,
"3d": false, "3d": false,
"multiple": false, "multiple": false,
@ -96,7 +96,10 @@
"labelWidth": 211, "labelWidth": 211,
"labelHeight": 36, "labelHeight": 36,
"zIndex": 0, "zIndex": 0,
"level": 1 "level": 1,
"primaryAccentColor": "#0D32B2",
"secondaryAccentColor": "#4A6FF3",
"neutralAccentColor": "#676C7E"
}, },
{ {
"id": "table_constrained", "id": "table_constrained",
@ -111,8 +114,8 @@
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
"borderRadius": 0, "borderRadius": 0,
"fill": "#FFFFFF", "fill": "#0A0F25",
"stroke": "#0A0F25", "stroke": "#FFFFFF",
"shadow": false, "shadow": false,
"3d": false, "3d": false,
"multiple": false, "multiple": false,
@ -192,7 +195,10 @@
"labelWidth": 350, "labelWidth": 350,
"labelHeight": 36, "labelHeight": 36,
"zIndex": 0, "zIndex": 0,
"level": 1 "level": 1,
"primaryAccentColor": "#0D32B2",
"secondaryAccentColor": "#4A6FF3",
"neutralAccentColor": "#676C7E"
} }
], ],
"connections": [] "connections": []

View file

@ -18,15 +18,15 @@ width="1348" height="308" viewBox="-88 -88 1348 308"><style type="text/css">
} }
]]> ]]>
</style><g id="table"><g class="shape" ><rect class="shape" x="12" y="12" width="534" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="12.000000" y="12.000000" width="534.000000" height="36.000000" fill="#0a0f25" /><text class="text" x="32.000000" y="39.000000" style="text-anchor:start;font-size:24px;fill:white">sql_table_overflow</text><text class="text" x="22.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">short</text> </style><g id="table"><g class="shape" ><rect class="shape" x="12" y="12" width="534" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="12.000000" y="12.000000" width="534.000000" height="36.000000" fill="#0A0F25" /><text class="text" x="32.000000" y="39.000000" style="text-anchor:start;font-size:24px;fill:#FFFFFF">sql_table_overflow</text><text class="text" x="22.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">short</text>
<text class="text" x="284.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">loooooooooooooooooooong</text> <text class="text" x="284.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">loooooooooooooooooooong</text>
<text class="text" x="526.000000" y="71.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;"></text><line x1="12.000000" y1="84.000000" x2="546.000000" y2="84.000000" style="stroke-width:2;stroke:#0a0f25" /><text class="text" x="22.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">loooooooooooooooooooong</text> <text class="text" x="526.000000" y="71.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;"></text><line x1="12.000000" y1="84.000000" x2="546.000000" y2="84.000000" style="stroke-width:2;stroke:#0A0F25" /><text class="text" x="22.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">loooooooooooooooooooong</text>
<text class="text" x="284.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">short</text> <text class="text" x="284.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">short</text>
<text class="text" x="526.000000" y="107.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;"></text><line x1="12.000000" y1="120.000000" x2="546.000000" y2="120.000000" style="stroke-width:2;stroke:#0a0f25" /></g></g><g id="table_constrained"><g class="shape" ><rect class="shape" x="566" y="12" width="594" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="566.000000" y="12.000000" width="594.000000" height="36.000000" fill="#0a0f25" /><text class="text" x="586.000000" y="39.000000" style="text-anchor:start;font-size:24px;fill:white">sql_table_constrained_overflow</text><text class="text" x="576.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">short</text> <text class="text" x="526.000000" y="107.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;"></text><line x1="12.000000" y1="120.000000" x2="546.000000" y2="120.000000" style="stroke-width:2;stroke:#0A0F25" /></g></g><g id="table_constrained"><g class="shape" ><rect class="shape" x="566" y="12" width="594" height="108" style="fill:#FFFFFF;stroke:#0A0F25;opacity:1.000000;stroke-width:2;"/><rect class="class_header" x="566.000000" y="12.000000" width="594.000000" height="36.000000" fill="#0A0F25" /><text class="text" x="586.000000" y="39.000000" style="text-anchor:start;font-size:24px;fill:#FFFFFF">sql_table_constrained_overflow</text><text class="text" x="576.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">short</text>
<text class="text" x="838.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">loooooooooooooooooooong</text> <text class="text" x="838.000000" y="71.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">loooooooooooooooooooong</text>
<text class="text" x="1140.000000" y="71.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;">UNQ</text><line x1="566.000000" y1="84.000000" x2="1160.000000" y2="84.000000" style="stroke-width:2;stroke:#0a0f25" /><text class="text" x="576.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:rgb(13, 50, 178)">loooooooooooooooooooong</text> <text class="text" x="1140.000000" y="71.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;">UNQ</text><line x1="566.000000" y1="84.000000" x2="1160.000000" y2="84.000000" style="stroke-width:2;stroke:#0A0F25" /><text class="text" x="576.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:#0D32B2">loooooooooooooooooooong</text>
<text class="text" x="838.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:rgb(103, 108, 126)">short</text> <text class="text" x="838.000000" y="107.000000" style="text-anchor:start;font-size:20px;fill:#676C7E">short</text>
<text class="text" x="1140.000000" y="107.000000" style="text-anchor:end;font-size:20px;fill:rgb(74, 111, 243);letter-spacing:2px;">FK</text><line x1="566.000000" y1="120.000000" x2="1160.000000" y2="120.000000" style="stroke-width:2;stroke:#0a0f25" /></g></g><mask id="1355556118" maskUnits="userSpaceOnUse" x="-100" y="-100" width="1348" height="308"> <text class="text" x="1140.000000" y="107.000000" style="text-anchor:end;font-size:20px;fill:#4A6FF3;letter-spacing:2px;">FK</text><line x1="566.000000" y1="120.000000" x2="1160.000000" y2="120.000000" style="stroke-width:2;stroke:#0A0F25" /></g></g><mask id="1110839858" maskUnits="userSpaceOnUse" x="-100" y="-100" width="1348" height="308">
<rect x="-100" y="-100" width="1348" height="308" fill="white"></rect> <rect x="-100" y="-100" width="1348" height="308" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 327 KiB

After

Width:  |  Height:  |  Size: 327 KiB

View file

@ -6,7 +6,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 31, "x": 30,
"y": 12 "y": 12
}, },
"width": 113, "width": 113,

View file

@ -18,7 +18,7 @@ width="446" height="552" viewBox="-88 -88 446 552"><style type="text/css">
} }
]]> ]]>
</style><g id="a"><g class="shape" ><rect x="31" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="87.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="12" y="238" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="68.500000" y="304.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="c"><g class="shape" ><rect x="145" y="238" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="201.500000" y="304.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">c</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 68.500000 140.000000 L 68.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3433333173)"/></g><g id="(a -&gt; c)[0]"><path d="M 106.166667 140.000000 L 106.166667 178.000000 S 106.166667 188.000000 116.166667 188.000000 L 191.500000 188.000000 S 201.500000 188.000000 201.500000 198.000000 L 201.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3433333173)"/></g><mask id="3433333173" maskUnits="userSpaceOnUse" x="-100" y="-100" width="446" height="552"> </style><g id="a"><g class="shape" ><rect x="30" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="86.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="12" y="238" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="68.500000" y="304.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="c"><g class="shape" ><rect x="145" y="238" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="201.500000" y="304.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">c</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 68.500000 140.000000 L 68.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1488396738)"/></g><g id="(a -&gt; c)[0]"><path d="M 106.166667 140.000000 L 106.166667 178.000000 S 106.166667 188.000000 116.166667 188.000000 L 191.500000 188.000000 S 201.500000 188.000000 201.500000 198.000000 L 201.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1488396738)"/></g><mask id="1488396738" maskUnits="userSpaceOnUse" x="-100" y="-100" width="446" height="552">
<rect x="-100" y="-100" width="446" height="552" fill="white"></rect> <rect x="-100" y="-100" width="446" height="552" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 325 KiB

After

Width:  |  Height:  |  Size: 325 KiB

View file

@ -6,7 +6,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 13, "x": 12,
"y": 12 "y": 12
}, },
"width": 263, "width": 263,
@ -46,7 +46,7 @@
"id": "a.b", "id": "a.b",
"type": "", "type": "",
"pos": { "pos": {
"x": 88, "x": 87,
"y": 87 "y": 87
}, },
"width": 113, "width": 113,

View file

@ -18,7 +18,7 @@ width="464" height="862" viewBox="-88 -88 464 862"><style type="text/css">
} }
]]> ]]>
</style><g id="a"><g class="shape" ><rect x="13" y="12" width="263" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="144.500000" y="45.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">a</text></g><g id="c"><g class="shape" ><rect x="12" y="398" width="264" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="144.000000" y="431.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">c</text></g><g id="a.b"><g class="shape" ><rect x="88" y="87" width="113" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="144.500000" y="153.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="c.d"><g class="shape" ><rect x="87" y="473" width="114" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="144.000000" y="539.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">d</text></g><g id="(a.b -&gt; c.d)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 144.000000 215.000000 L 144.000000 469.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2473032921)"/></g><mask id="2473032921" maskUnits="userSpaceOnUse" x="-100" y="-100" width="464" height="862"> </style><g id="a"><g class="shape" ><rect x="12" y="12" width="263" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="143.500000" y="45.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">a</text></g><g id="c"><g class="shape" ><rect x="12" y="398" width="264" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="144.000000" y="431.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">c</text></g><g id="a.b"><g class="shape" ><rect x="87" y="87" width="113" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="143.500000" y="153.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="c.d"><g class="shape" ><rect x="87" y="473" width="114" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="144.000000" y="539.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">d</text></g><g id="(a.b -&gt; c.d)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 144.000000 215.000000 L 144.000000 469.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3058194229)"/></g><mask id="3058194229" maskUnits="userSpaceOnUse" x="-100" y="-100" width="464" height="862">
<rect x="-100" y="-100" width="464" height="862" fill="white"></rect> <rect x="-100" y="-100" width="464" height="862" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 649 KiB

After

Width:  |  Height:  |  Size: 649 KiB

View file

@ -6,7 +6,7 @@
"id": "rectangle", "id": "rectangle",
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 769, "x": 12,
"y": 12 "y": 12
}, },
"width": 171, "width": 171,
@ -46,7 +46,7 @@
"id": "square", "id": "square",
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 778, "x": 20,
"y": 238 "y": 238
}, },
"width": 154, "width": 154,
@ -86,7 +86,7 @@
"id": "page", "id": "page",
"type": "page", "type": "page",
"pos": { "pos": {
"x": 785, "x": 28,
"y": 492 "y": 492
}, },
"width": 139, "width": 139,
@ -126,7 +126,7 @@
"id": "parallelogram", "id": "parallelogram",
"type": "parallelogram", "type": "parallelogram",
"pos": { "pos": {
"x": 960, "x": 203,
"y": 12 "y": 12
}, },
"width": 204, "width": 204,
@ -166,7 +166,7 @@
"id": "document", "id": "document",
"type": "document", "type": "document",
"pos": { "pos": {
"x": 974, "x": 216,
"y": 252 "y": 252
}, },
"width": 177, "width": 177,
@ -206,7 +206,7 @@
"id": "cylinder", "id": "cylinder",
"type": "cylinder", "type": "cylinder",
"pos": { "pos": {
"x": 980, "x": 223,
"y": 492 "y": 492
}, },
"width": 164, "width": 164,
@ -246,7 +246,7 @@
"id": "queue", "id": "queue",
"type": "queue", "type": "queue",
"pos": { "pos": {
"x": 19, "x": 427,
"y": 12 "y": 12
}, },
"width": 149, "width": 149,
@ -286,7 +286,7 @@
"id": "package", "id": "package",
"type": "package", "type": "package",
"pos": { "pos": {
"x": 12, "x": 420,
"y": 252 "y": 252
}, },
"width": 163, "width": 163,
@ -326,7 +326,7 @@
"id": "step", "id": "step",
"type": "step", "type": "step",
"pos": { "pos": {
"x": 26, "x": 433,
"y": 492 "y": 492
}, },
"width": 136, "width": 136,
@ -366,7 +366,7 @@
"id": "callout", "id": "callout",
"type": "callout", "type": "callout",
"pos": { "pos": {
"x": 213, "x": 621,
"y": 12 "y": 12
}, },
"width": 155, "width": 155,
@ -406,7 +406,7 @@
"id": "stored_data", "id": "stored_data",
"type": "stored_data", "type": "stored_data",
"pos": { "pos": {
"x": 195, "x": 603,
"y": 252 "y": 252
}, },
"width": 191, "width": 191,
@ -446,7 +446,7 @@
"id": "person", "id": "person",
"type": "person", "type": "person",
"pos": { "pos": {
"x": 214, "x": 622,
"y": 492 "y": 492
}, },
"width": 153, "width": 153,
@ -486,7 +486,7 @@
"id": "diamond", "id": "diamond",
"type": "diamond", "type": "diamond",
"pos": { "pos": {
"x": 581, "x": 798,
"y": 12 "y": 12
}, },
"width": 168, "width": 168,
@ -526,7 +526,7 @@
"id": "oval", "id": "oval",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 597, "x": 814,
"y": 252 "y": 252
}, },
"width": 136, "width": 136,
@ -566,7 +566,7 @@
"id": "circle", "id": "circle",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 593, "x": 810,
"y": 492 "y": 492
}, },
"width": 144, "width": 144,
@ -606,7 +606,7 @@
"id": "hexagon", "id": "hexagon",
"type": "hexagon", "type": "hexagon",
"pos": { "pos": {
"x": 396, "x": 986,
"y": 12 "y": 12
}, },
"width": 165, "width": 165,
@ -646,7 +646,7 @@
"id": "cloud", "id": "cloud",
"type": "cloud", "type": "cloud",
"pos": { "pos": {
"x": 406, "x": 996,
"y": 238 "y": 238
}, },
"width": 145, "width": 145,
@ -710,11 +710,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 854.5, "x": 97.5,
"y": 138 "y": 138
}, },
{ {
"x": 854.5, "x": 97.5,
"y": 238 "y": 238
} }
], ],
@ -749,11 +749,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 854.5, "x": 97.5,
"y": 392 "y": 392
}, },
{ {
"x": 855, "x": 98,
"y": 492 "y": 492
} }
], ],
@ -788,11 +788,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1062, "x": 305,
"y": 138 "y": 138
}, },
{ {
"x": 1062, "x": 306,
"y": 252 "y": 252
} }
], ],
@ -827,11 +827,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1062, "x": 305,
"y": 361 "y": 361
}, },
{ {
"x": 1062, "x": 305,
"y": 492 "y": 492
} }
], ],
@ -866,11 +866,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 93, "x": 501,
"y": 138 "y": 138
}, },
{ {
"x": 94, "x": 502,
"y": 252 "y": 252
} }
], ],
@ -905,11 +905,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 93, "x": 501,
"y": 378 "y": 378
}, },
{ {
"x": 94, "x": 502,
"y": 492 "y": 492
} }
], ],
@ -944,11 +944,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 291, "x": 699,
"y": 138 "y": 138
}, },
{ {
"x": 291, "x": 699,
"y": 252 "y": 252
} }
], ],
@ -983,11 +983,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 290, "x": 698,
"y": 378 "y": 378
}, },
{ {
"x": 291, "x": 699,
"y": 492 "y": 492
} }
], ],
@ -1022,11 +1022,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 665, "x": 882,
"y": 138 "y": 138
}, },
{ {
"x": 665, "x": 882,
"y": 252 "y": 252
} }
], ],
@ -1061,11 +1061,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 665, "x": 882,
"y": 378 "y": 378
}, },
{ {
"x": 665, "x": 882,
"y": 492 "y": 492
} }
], ],
@ -1100,11 +1100,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 478, "x": 1068,
"y": 138 "y": 138
}, },
{ {
"x": 479, "x": 1069,
"y": 240 "y": 240
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 334 KiB

After

Width:  |  Height:  |  Size: 334 KiB

View file

@ -6,7 +6,7 @@
"id": "rectangle", "id": "rectangle",
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 769, "x": 12,
"y": 12 "y": 12
}, },
"width": 171, "width": 171,
@ -46,7 +46,7 @@
"id": "square", "id": "square",
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 778, "x": 20,
"y": 238 "y": 238
}, },
"width": 154, "width": 154,
@ -86,7 +86,7 @@
"id": "page", "id": "page",
"type": "page", "type": "page",
"pos": { "pos": {
"x": 785, "x": 28,
"y": 492 "y": 492
}, },
"width": 139, "width": 139,
@ -126,7 +126,7 @@
"id": "parallelogram", "id": "parallelogram",
"type": "parallelogram", "type": "parallelogram",
"pos": { "pos": {
"x": 960, "x": 203,
"y": 12 "y": 12
}, },
"width": 204, "width": 204,
@ -166,7 +166,7 @@
"id": "document", "id": "document",
"type": "document", "type": "document",
"pos": { "pos": {
"x": 974, "x": 216,
"y": 252 "y": 252
}, },
"width": 177, "width": 177,
@ -206,7 +206,7 @@
"id": "cylinder", "id": "cylinder",
"type": "cylinder", "type": "cylinder",
"pos": { "pos": {
"x": 980, "x": 223,
"y": 492 "y": 492
}, },
"width": 164, "width": 164,
@ -246,7 +246,7 @@
"id": "queue", "id": "queue",
"type": "queue", "type": "queue",
"pos": { "pos": {
"x": 19, "x": 427,
"y": 12 "y": 12
}, },
"width": 149, "width": 149,
@ -286,7 +286,7 @@
"id": "package", "id": "package",
"type": "package", "type": "package",
"pos": { "pos": {
"x": 12, "x": 420,
"y": 252 "y": 252
}, },
"width": 163, "width": 163,
@ -326,7 +326,7 @@
"id": "step", "id": "step",
"type": "step", "type": "step",
"pos": { "pos": {
"x": 26, "x": 433,
"y": 492 "y": 492
}, },
"width": 136, "width": 136,
@ -366,7 +366,7 @@
"id": "callout", "id": "callout",
"type": "callout", "type": "callout",
"pos": { "pos": {
"x": 213, "x": 621,
"y": 12 "y": 12
}, },
"width": 155, "width": 155,
@ -406,7 +406,7 @@
"id": "stored_data", "id": "stored_data",
"type": "stored_data", "type": "stored_data",
"pos": { "pos": {
"x": 195, "x": 603,
"y": 252 "y": 252
}, },
"width": 191, "width": 191,
@ -446,7 +446,7 @@
"id": "person", "id": "person",
"type": "person", "type": "person",
"pos": { "pos": {
"x": 214, "x": 622,
"y": 492 "y": 492
}, },
"width": 153, "width": 153,
@ -486,7 +486,7 @@
"id": "diamond", "id": "diamond",
"type": "diamond", "type": "diamond",
"pos": { "pos": {
"x": 581, "x": 798,
"y": 12 "y": 12
}, },
"width": 168, "width": 168,
@ -526,7 +526,7 @@
"id": "oval", "id": "oval",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 597, "x": 814,
"y": 252 "y": 252
}, },
"width": 136, "width": 136,
@ -566,7 +566,7 @@
"id": "circle", "id": "circle",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 593, "x": 810,
"y": 492 "y": 492
}, },
"width": 144, "width": 144,
@ -606,7 +606,7 @@
"id": "hexagon", "id": "hexagon",
"type": "hexagon", "type": "hexagon",
"pos": { "pos": {
"x": 396, "x": 986,
"y": 12 "y": 12
}, },
"width": 165, "width": 165,
@ -646,7 +646,7 @@
"id": "cloud", "id": "cloud",
"type": "cloud", "type": "cloud",
"pos": { "pos": {
"x": 406, "x": 996,
"y": 238 "y": 238
}, },
"width": 145, "width": 145,
@ -710,11 +710,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 854.5, "x": 97.5,
"y": 138 "y": 138
}, },
{ {
"x": 854.5, "x": 97.5,
"y": 238 "y": 238
} }
], ],
@ -749,11 +749,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 854.5, "x": 97.5,
"y": 392 "y": 392
}, },
{ {
"x": 855, "x": 98,
"y": 492 "y": 492
} }
], ],
@ -788,11 +788,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1062, "x": 305,
"y": 138 "y": 138
}, },
{ {
"x": 1062, "x": 306,
"y": 252 "y": 252
} }
], ],
@ -827,11 +827,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1062, "x": 305,
"y": 361 "y": 361
}, },
{ {
"x": 1062, "x": 305,
"y": 492 "y": 492
} }
], ],
@ -866,11 +866,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 93, "x": 501,
"y": 138 "y": 138
}, },
{ {
"x": 94, "x": 502,
"y": 252 "y": 252
} }
], ],
@ -905,11 +905,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 93, "x": 501,
"y": 378 "y": 378
}, },
{ {
"x": 94, "x": 502,
"y": 492 "y": 492
} }
], ],
@ -944,11 +944,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 291, "x": 699,
"y": 138 "y": 138
}, },
{ {
"x": 291, "x": 699,
"y": 252 "y": 252
} }
], ],
@ -983,11 +983,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 290, "x": 698,
"y": 378 "y": 378
}, },
{ {
"x": 291, "x": 699,
"y": 492 "y": 492
} }
], ],
@ -1022,11 +1022,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 665, "x": 882,
"y": 138 "y": 138
}, },
{ {
"x": 665, "x": 882,
"y": 252 "y": 252
} }
], ],
@ -1061,11 +1061,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 665, "x": 882,
"y": 378 "y": 378
}, },
{ {
"x": 665, "x": 882,
"y": 492 "y": 492
} }
], ],
@ -1100,11 +1100,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 478, "x": 1068,
"y": 138 "y": 138
}, },
{ {
"x": 479, "x": 1069,
"y": 240 "y": 240
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 338 KiB

After

Width:  |  Height:  |  Size: 338 KiB

View file

@ -6,7 +6,7 @@
"id": "rectangle", "id": "rectangle",
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 769, "x": 12,
"y": 12 "y": 12
}, },
"width": 171, "width": 171,
@ -46,7 +46,7 @@
"id": "square", "id": "square",
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 778, "x": 20,
"y": 238 "y": 238
}, },
"width": 154, "width": 154,
@ -86,7 +86,7 @@
"id": "page", "id": "page",
"type": "page", "type": "page",
"pos": { "pos": {
"x": 785, "x": 28,
"y": 492 "y": 492
}, },
"width": 139, "width": 139,
@ -126,7 +126,7 @@
"id": "parallelogram", "id": "parallelogram",
"type": "parallelogram", "type": "parallelogram",
"pos": { "pos": {
"x": 960, "x": 203,
"y": 12 "y": 12
}, },
"width": 204, "width": 204,
@ -166,7 +166,7 @@
"id": "document", "id": "document",
"type": "document", "type": "document",
"pos": { "pos": {
"x": 974, "x": 216,
"y": 252 "y": 252
}, },
"width": 177, "width": 177,
@ -206,7 +206,7 @@
"id": "cylinder", "id": "cylinder",
"type": "cylinder", "type": "cylinder",
"pos": { "pos": {
"x": 980, "x": 223,
"y": 492 "y": 492
}, },
"width": 164, "width": 164,
@ -246,7 +246,7 @@
"id": "queue", "id": "queue",
"type": "queue", "type": "queue",
"pos": { "pos": {
"x": 19, "x": 427,
"y": 12 "y": 12
}, },
"width": 149, "width": 149,
@ -286,7 +286,7 @@
"id": "package", "id": "package",
"type": "package", "type": "package",
"pos": { "pos": {
"x": 12, "x": 420,
"y": 252 "y": 252
}, },
"width": 163, "width": 163,
@ -326,7 +326,7 @@
"id": "step", "id": "step",
"type": "step", "type": "step",
"pos": { "pos": {
"x": 26, "x": 433,
"y": 492 "y": 492
}, },
"width": 136, "width": 136,
@ -366,7 +366,7 @@
"id": "callout", "id": "callout",
"type": "callout", "type": "callout",
"pos": { "pos": {
"x": 213, "x": 621,
"y": 12 "y": 12
}, },
"width": 155, "width": 155,
@ -406,7 +406,7 @@
"id": "stored_data", "id": "stored_data",
"type": "stored_data", "type": "stored_data",
"pos": { "pos": {
"x": 195, "x": 603,
"y": 252 "y": 252
}, },
"width": 191, "width": 191,
@ -446,7 +446,7 @@
"id": "person", "id": "person",
"type": "person", "type": "person",
"pos": { "pos": {
"x": 214, "x": 622,
"y": 492 "y": 492
}, },
"width": 153, "width": 153,
@ -486,7 +486,7 @@
"id": "diamond", "id": "diamond",
"type": "diamond", "type": "diamond",
"pos": { "pos": {
"x": 581, "x": 798,
"y": 12 "y": 12
}, },
"width": 168, "width": 168,
@ -526,7 +526,7 @@
"id": "oval", "id": "oval",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 597, "x": 814,
"y": 252 "y": 252
}, },
"width": 136, "width": 136,
@ -566,7 +566,7 @@
"id": "circle", "id": "circle",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 593, "x": 810,
"y": 492 "y": 492
}, },
"width": 144, "width": 144,
@ -606,7 +606,7 @@
"id": "hexagon", "id": "hexagon",
"type": "hexagon", "type": "hexagon",
"pos": { "pos": {
"x": 396, "x": 986,
"y": 12 "y": 12
}, },
"width": 165, "width": 165,
@ -646,7 +646,7 @@
"id": "cloud", "id": "cloud",
"type": "cloud", "type": "cloud",
"pos": { "pos": {
"x": 406, "x": 996,
"y": 238 "y": 238
}, },
"width": 145, "width": 145,
@ -710,11 +710,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 854.5, "x": 97.5,
"y": 138 "y": 138
}, },
{ {
"x": 854.5, "x": 97.5,
"y": 238 "y": 238
} }
], ],
@ -749,11 +749,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 854.5, "x": 97.5,
"y": 392 "y": 392
}, },
{ {
"x": 855, "x": 98,
"y": 492 "y": 492
} }
], ],
@ -788,11 +788,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1062, "x": 305,
"y": 138 "y": 138
}, },
{ {
"x": 1062, "x": 306,
"y": 252 "y": 252
} }
], ],
@ -827,11 +827,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1062, "x": 305,
"y": 361 "y": 361
}, },
{ {
"x": 1062, "x": 305,
"y": 492 "y": 492
} }
], ],
@ -866,11 +866,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 93, "x": 501,
"y": 138 "y": 138
}, },
{ {
"x": 94, "x": 502,
"y": 252 "y": 252
} }
], ],
@ -905,11 +905,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 93, "x": 501,
"y": 378 "y": 378
}, },
{ {
"x": 94, "x": 502,
"y": 492 "y": 492
} }
], ],
@ -944,11 +944,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 291, "x": 699,
"y": 138 "y": 138
}, },
{ {
"x": 291, "x": 699,
"y": 252 "y": 252
} }
], ],
@ -983,11 +983,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 290, "x": 698,
"y": 378 "y": 378
}, },
{ {
"x": 291, "x": 699,
"y": 492 "y": 492
} }
], ],
@ -1022,11 +1022,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 665, "x": 882,
"y": 138 "y": 138
}, },
{ {
"x": 665, "x": 882,
"y": 252 "y": 252
} }
], ],
@ -1061,11 +1061,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 665, "x": 882,
"y": 378 "y": 378
}, },
{ {
"x": 665, "x": 882,
"y": 492 "y": 492
} }
], ],
@ -1100,11 +1100,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 478, "x": 1068,
"y": 138 "y": 138
}, },
{ {
"x": 479, "x": 1069,
"y": 240 "y": 240
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 335 KiB

View file

@ -86,7 +86,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 103, "x": 102,
"y": 248 "y": 248
}, },
"width": 113, "width": 113,
@ -315,7 +315,7 @@
"route": [ "route": [
{ {
"x": 78, "x": 78,
"y": 120 "y": 121
}, },
{ {
"x": 77.91666666666667, "x": 77.91666666666667,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 472 KiB

View file

@ -6,7 +6,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 67, "x": 68,
"y": 12 "y": 12
}, },
"width": 113, "width": 113,
@ -46,7 +46,7 @@
"id": "b", "id": "b",
"type": "", "type": "",
"pos": { "pos": {
"x": 48, "x": 49,
"y": 238 "y": 238
}, },
"width": 113, "width": 113,
@ -86,7 +86,7 @@
"id": "c", "id": "c",
"type": "", "type": "",
"pos": { "pos": {
"x": 575, "x": 572,
"y": 238 "y": 238
}, },
"width": 113, "width": 113,
@ -126,7 +126,7 @@
"id": "d", "id": "d",
"type": "", "type": "",
"pos": { "pos": {
"x": 294, "x": 30,
"y": 464 "y": 464
}, },
"width": 114, "width": 114,
@ -166,7 +166,7 @@
"id": "e", "id": "e",
"type": "", "type": "",
"pos": { "pos": {
"x": 29, "x": 291,
"y": 464 "y": 464
}, },
"width": 113, "width": 113,
@ -206,7 +206,7 @@
"id": "f", "id": "f",
"type": "", "type": "",
"pos": { "pos": {
"x": 822, "x": 554,
"y": 464 "y": 464
}, },
"width": 111, "width": 111,
@ -246,7 +246,7 @@
"id": "g", "id": "g",
"type": "", "type": "",
"pos": { "pos": {
"x": 556, "x": 821,
"y": 464 "y": 464
}, },
"width": 114, "width": 114,
@ -286,7 +286,7 @@
"id": "h", "id": "h",
"type": "", "type": "",
"pos": { "pos": {
"x": 275, "x": 12,
"y": 690 "y": 690
}, },
"width": 113, "width": 113,
@ -326,7 +326,7 @@
"id": "i", "id": "i",
"type": "", "type": "",
"pos": { "pos": {
"x": 408, "x": 145,
"y": 690 "y": 690
}, },
"width": 109, "width": 109,
@ -366,7 +366,7 @@
"id": "j", "id": "j",
"type": "", "type": "",
"pos": { "pos": {
"x": 12, "x": 274,
"y": 690 "y": 690
}, },
"width": 110, "width": 110,
@ -406,7 +406,7 @@
"id": "k", "id": "k",
"type": "", "type": "",
"pos": { "pos": {
"x": 142, "x": 404,
"y": 690 "y": 690
}, },
"width": 113, "width": 113,
@ -446,7 +446,7 @@
"id": "l", "id": "l",
"type": "", "type": "",
"pos": { "pos": {
"x": 804, "x": 537,
"y": 690 "y": 690
}, },
"width": 109, "width": 109,
@ -486,7 +486,7 @@
"id": "m", "id": "m",
"type": "", "type": "",
"pos": { "pos": {
"x": 933, "x": 666,
"y": 690 "y": 690
}, },
"width": 117, "width": 117,
@ -526,7 +526,7 @@
"id": "n", "id": "n",
"type": "", "type": "",
"pos": { "pos": {
"x": 671, "x": 803,
"y": 690 "y": 690
}, },
"width": 113, "width": 113,
@ -566,7 +566,7 @@
"id": "o", "id": "o",
"type": "", "type": "",
"pos": { "pos": {
"x": 537, "x": 936,
"y": 690 "y": 690
}, },
"width": 114, "width": 114,
@ -630,11 +630,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 104.66666666666666, "x": 106.33333333333333,
"y": 138 "y": 138
}, },
{ {
"x": 104.66666666666666, "x": 106.33333333333333,
"y": 238 "y": 238
} }
], ],
@ -669,19 +669,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 142.33333333333331, "x": 144,
"y": 138 "y": 138
}, },
{ {
"x": 142.33333333333331, "x": 144,
"y": 188 "y": 188
}, },
{ {
"x": 631.8333333333334, "x": 628.8333333333334,
"y": 188 "y": 188
}, },
{ {
"x": 631.8333333333334, "x": 628.8333333333334,
"y": 238 "y": 238
} }
], ],
@ -716,19 +716,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 123.5, "x": 87.5,
"y": 364 "y": 364
}, },
{ {
"x": 123.5, "x": 87.5,
"y": 414
},
{
"x": 350.5,
"y": 414
},
{
"x": 350.5,
"y": 464 "y": 464
} }
], ],
@ -763,11 +755,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 85.83333333333333, "x": 125.16666666666667,
"y": 364 "y": 364
}, },
{ {
"x": 85.83333333333333, "x": 125.16666666666667,
"y": 414
},
{
"x": 347.8333333333333,
"y": 414
},
{
"x": 347.8333333333333,
"y": 464 "y": 464
} }
], ],
@ -802,19 +802,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 650.6666666666667, "x": 610,
"y": 364 "y": 364
}, },
{ {
"x": 650.6666666666667, "x": 610,
"y": 414
},
{
"x": 877,
"y": 414
},
{
"x": 877,
"y": 464 "y": 464
} }
], ],
@ -849,11 +841,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 613, "x": 647.6666666666667,
"y": 364 "y": 364
}, },
{ {
"x": 613, "x": 647.6666666666667,
"y": 414
},
{
"x": 878.5,
"y": 414
},
{
"x": 878.5,
"y": 464 "y": 464
} }
], ],
@ -888,11 +888,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 331.5, "x": 68.5,
"y": 590 "y": 590
}, },
{ {
"x": 331.5, "x": 68.5,
"y": 690 "y": 690
} }
], ],
@ -927,19 +927,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 369.5, "x": 106.5,
"y": 590 "y": 590
}, },
{ {
"x": 369.5, "x": 106.5,
"y": 640 "y": 640
}, },
{ {
"x": 462.5, "x": 199.5,
"y": 640 "y": 640
}, },
{ {
"x": 462.5, "x": 199.5,
"y": 690 "y": 690
} }
], ],
@ -974,11 +974,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 67, "x": 329,
"y": 590 "y": 590
}, },
{ {
"x": 67, "x": 329,
"y": 690 "y": 690
} }
], ],
@ -1013,19 +1013,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 104.66666666666667, "x": 366.66666666666663,
"y": 590 "y": 590
}, },
{ {
"x": 104.66666666666667, "x": 366.66666666666663,
"y": 640 "y": 640
}, },
{ {
"x": 198.5, "x": 460.5,
"y": 640 "y": 640
}, },
{ {
"x": 198.5, "x": 460.5,
"y": 690 "y": 690
} }
], ],
@ -1060,11 +1060,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 858.5, "x": 591.5,
"y": 590 "y": 590
}, },
{ {
"x": 858.5, "x": 591.5,
"y": 690 "y": 690
} }
], ],
@ -1099,19 +1099,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 895.5, "x": 628.5,
"y": 590 "y": 590
}, },
{ {
"x": 895.5, "x": 628.5,
"y": 640 "y": 640
}, },
{ {
"x": 991.5, "x": 724.5,
"y": 640 "y": 640
}, },
{ {
"x": 991.5, "x": 724.5,
"y": 690 "y": 690
} }
], ],
@ -1146,19 +1146,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 632, "x": 859.5,
"y": 590 "y": 590
}, },
{ {
"x": 632, "x": 859.5,
"y": 640
},
{
"x": 727.5,
"y": 640
},
{
"x": 727.5,
"y": 690 "y": 690
} }
], ],
@ -1193,11 +1185,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 594, "x": 897.5,
"y": 590 "y": 590
}, },
{ {
"x": 594, "x": 897.5,
"y": 640
},
{
"x": 993,
"y": 640
},
{
"x": 993,
"y": 690 "y": 690
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 332 KiB

View file

@ -9,8 +9,8 @@
"x": 0, "x": 0,
"y": 0 "y": 0
}, },
"width": 1117, "width": 1115,
"height": 1654, "height": 1651,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -50,7 +50,7 @@
"y": 50 "y": 50
}, },
"width": 776, "width": 776,
"height": 1554, "height": 1551,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -90,7 +90,7 @@
"y": 878 "y": 878
}, },
"width": 510, "width": 510,
"height": 676, "height": 673,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -167,10 +167,10 @@
"type": "text", "type": "text",
"pos": { "pos": {
"x": 232, "x": 232,
"y": 1029 "y": 1031
}, },
"width": 16, "width": 16,
"height": 24, "height": 21,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -194,10 +194,10 @@
"language": "", "language": "",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 16, "labelWidth": 16,
"labelHeight": 24, "labelHeight": 21,
"zIndex": 0, "zIndex": 0,
"level": 5 "level": 5
}, },
@ -249,7 +249,7 @@
"y": 1254 "y": 1254
}, },
"width": 17, "width": 17,
"height": 24, "height": 21,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -273,10 +273,10 @@
"language": "", "language": "",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 17, "labelWidth": 17,
"labelHeight": 24, "labelHeight": 21,
"zIndex": 0, "zIndex": 0,
"level": 4 "level": 4
}, },
@ -285,7 +285,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 356, "x": 356,
"y": 1378 "y": 1375
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -405,7 +405,7 @@
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 641, "x": 641,
"y": 1378 "y": 1375
}, },
"width": 126, "width": 126,
"height": 126, "height": 126,
@ -444,7 +444,7 @@
"id": "aa.ll", "id": "aa.ll",
"type": "", "type": "",
"pos": { "pos": {
"x": 915, "x": 914,
"y": 652 "y": 652
}, },
"width": 114, "width": 114,
@ -484,7 +484,7 @@
"id": "aa.mm", "id": "aa.mm",
"type": "cylinder", "type": "cylinder",
"pos": { "pos": {
"x": 902, "x": 901,
"y": 426 "y": 426
}, },
"width": 131, "width": 131,
@ -525,10 +525,10 @@
"type": "text", "type": "text",
"pos": { "pos": {
"x": 867, "x": 867,
"y": 1429 "y": 1428
}, },
"width": 18, "width": 16,
"height": 24, "height": 21,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -552,10 +552,10 @@
"language": "", "language": "",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 18, "labelWidth": 16,
"labelHeight": 24, "labelHeight": 21,
"zIndex": 0, "zIndex": 0,
"level": 2 "level": 2
}, },
@ -563,8 +563,8 @@
"id": "aa.oo", "id": "aa.oo",
"type": "", "type": "",
"pos": { "pos": {
"x": 945, "x": 943,
"y": 1378 "y": 1375
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -628,19 +628,19 @@
"route": [ "route": [
{ {
"x": 240, "x": 240,
"y": 1053 "y": 1052.5
}, },
{ {
"x": 240, "x": 240,
"y": 1133.8 "y": 1133.7
}, },
{ {
"x": 273.8, "x": 273.8,
"y": 1215.8 "y": 1215.6
}, },
{ {
"x": 409, "x": 409,
"y": 1263 "y": 1262
} }
], ],
"isCurve": true, "isCurve": true,
@ -676,19 +676,19 @@
"route": [ "route": [
{ {
"x": 417.5, "x": 417.5,
"y": 1278 "y": 1275
}, },
{ {
"x": 417.5, "x": 417.5,
"y": 1318 "y": 1315
}, },
{ {
"x": 417.5, "x": 417.5,
"y": 1338 "y": 1335
}, },
{ {
"x": 417.5, "x": 417.5,
"y": 1378 "y": 1375
} }
], ],
"isCurve": true, "isCurve": true,
@ -819,20 +819,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 914.5, "x": 913.5,
"y": 723.8051948051948 "y": 723.8172484599589
}, },
{ {
"x": 836.1, "x": 835.9,
"y": 735.8051948051948 "y": 735.8172484599589
}, },
{ {
"x": 894.9, "x": 894.1,
"y": 726.8051948051948 "y": 726.8172484599589
}, },
{ {
"x": 816.5, "x": 816.5,
"y": 738.8051948051948 "y": 738.8172484599589
} }
], ],
"isCurve": true, "isCurve": true,
@ -867,11 +867,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 902, "x": 901,
"y": 500 "y": 500
}, },
{ {
"x": 404.4, "x": 404.2,
"y": 581.6 "y": 581.6
}, },
{ {
@ -927,19 +927,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 970, "x": 969,
"y": 552 "y": 552
}, },
{ {
"x": 971.2, "x": 970.2,
"y": 592 "y": 592
}, },
{ {
"x": 971.5, "x": 970.5,
"y": 612 "y": 612
}, },
{ {
"x": 971.5, "x": 970.5,
"y": 652 "y": 652
} }
], ],
@ -975,20 +975,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 902, "x": 901,
"y": 500 "y": 500
}, },
{ {
"x": 833.8, "x": 833.6,
"y": 512.3482425646968 "y": 512.3623984526112
}, },
{ {
"x": 884.95, "x": 884.15,
"y": 503.08706064117416 "y": 503.0905996131528
}, },
{ {
"x": 816.75, "x": 816.75,
"y": 515.4353032058709 "y": 515.452998065764
} }
], ],
"isCurve": true, "isCurve": true,
@ -1023,12 +1023,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 914.5, "x": 913.5,
"y": 729.1095290251917 "y": 729.1405049396268
}, },
{ {
"x": 594.9, "x": 594.7,
"y": 808.2219058050383 "y": 808.2281009879254
}, },
{ {
"x": 515, "x": 515,
@ -1080,11 +1080,11 @@
}, },
{ {
"x": 497.2, "x": 497.2,
"y": 1215.4 "y": 1215
}, },
{ {
"x": 426, "x": 426,
"y": 1261 "y": 1259
} }
], ],
"isCurve": true, "isCurve": true,
@ -1119,11 +1119,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 902, "x": 901,
"y": 476 "y": 476
}, },
{ {
"x": 500.4, "x": 500.2,
"y": 396 "y": 396
}, },
{ {
@ -1175,12 +1175,12 @@
"y": 838 "y": 838
}, },
{ {
"x": 484.9, "x": 484.7,
"y": 807.5686868686869 "y": 807.5723440134907
}, },
{ {
"x": 914.5, "x": 913.5,
"y": 725.8434343434343 "y": 725.8617200674536
} }
], ],
"isCurve": true, "isCurve": true,
@ -1235,12 +1235,12 @@
"y": 466.4 "y": 466.4
}, },
{ {
"x": 470.9, "x": 470.7,
"y": 622.493376941946 "y": 622.4899262899263
}, },
{ {
"x": 914.5, "x": 913.5,
"y": 704.4668847097302 "y": 704.4496314496314
} }
], ],
"isCurve": true, "isCurve": true,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 812 KiB

After

Width:  |  Height:  |  Size: 811 KiB

View file

@ -9,8 +9,8 @@
"x": 12, "x": 12,
"y": 12 "y": 12
}, },
"width": 880, "width": 892,
"height": 1707, "height": 1704,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -46,11 +46,11 @@
"id": "aa.bb", "id": "aa.bb",
"type": "", "type": "",
"pos": { "pos": {
"x": 132, "x": 107,
"y": 445 "y": 465
}, },
"width": 685, "width": 722,
"height": 1174, "height": 1151,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -86,11 +86,11 @@
"id": "aa.bb.cc", "id": "aa.bb.cc",
"type": "", "type": "",
"pos": { "pos": {
"x": 278, "x": 281,
"y": 841 "y": 841
}, },
"width": 464, "width": 473,
"height": 703, "height": 700,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -126,7 +126,7 @@
"id": "aa.bb.cc.dd", "id": "aa.bb.cc.dd",
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 364, "x": 356,
"y": 916 "y": 916
}, },
"width": 303, "width": 303,
@ -166,11 +166,11 @@
"id": "aa.bb.cc.dd.ee", "id": "aa.bb.cc.dd.ee",
"type": "text", "type": "text",
"pos": { "pos": {
"x": 576, "x": 431,
"y": 1093 "y": 1096
}, },
"width": 16, "width": 16,
"height": 24, "height": 21,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -194,10 +194,10 @@
"language": "", "language": "",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 16, "labelWidth": 16,
"labelHeight": 24, "labelHeight": 21,
"zIndex": 0, "zIndex": 0,
"level": 5 "level": 5
}, },
@ -205,7 +205,7 @@
"id": "aa.bb.cc.dd.ff", "id": "aa.bb.cc.dd.ff",
"type": "", "type": "",
"pos": { "pos": {
"x": 439, "x": 467,
"y": 991 "y": 991
}, },
"width": 117, "width": 117,
@ -245,11 +245,11 @@
"id": "aa.bb.cc.gg", "id": "aa.bb.cc.gg",
"type": "text", "type": "text",
"pos": { "pos": {
"x": 573, "x": 433,
"y": 1258 "y": 1258
}, },
"width": 17, "width": 17,
"height": 24, "height": 21,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -273,10 +273,10 @@
"language": "", "language": "",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 17, "labelWidth": 17,
"labelHeight": 24, "labelHeight": 21,
"zIndex": 0, "zIndex": 0,
"level": 4 "level": 4
}, },
@ -284,8 +284,8 @@
"id": "aa.bb.cc.hh", "id": "aa.bb.cc.hh",
"type": "", "type": "",
"pos": { "pos": {
"x": 520, "x": 380,
"y": 1343 "y": 1340
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -324,8 +324,8 @@
"id": "aa.bb.ii", "id": "aa.bb.ii",
"type": "package", "type": "package",
"pos": { "pos": {
"x": 364, "x": 181,
"y": 520 "y": 540
}, },
"width": 265, "width": 265,
"height": 276, "height": 276,
@ -364,8 +364,8 @@
"id": "aa.bb.ii.jj", "id": "aa.bb.ii.jj",
"type": "diamond", "type": "diamond",
"pos": { "pos": {
"x": 439, "x": 256,
"y": 595 "y": 615
}, },
"width": 115, "width": 115,
"height": 126, "height": 126,
@ -404,8 +404,8 @@
"id": "aa.bb.kk", "id": "aa.bb.kk",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 207, "x": 533,
"y": 595 "y": 615
}, },
"width": 126, "width": 126,
"height": 126, "height": 126,
@ -444,8 +444,8 @@
"id": "aa.ll", "id": "aa.ll",
"type": "", "type": "",
"pos": { "pos": {
"x": 355, "x": 343,
"y": 233 "y": 243
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -484,7 +484,7 @@
"id": "aa.mm", "id": "aa.mm",
"type": "cylinder", "type": "cylinder",
"pos": { "pos": {
"x": 446, "x": 348,
"y": 87 "y": 87
}, },
"width": 131, "width": 131,
@ -524,11 +524,11 @@
"id": "aa.nn", "id": "aa.nn",
"type": "text", "type": "text",
"pos": { "pos": {
"x": 408, "x": 499,
"y": 138 "y": 139
}, },
"width": 18, "width": 16,
"height": 24, "height": 21,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -552,10 +552,10 @@
"language": "", "language": "",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 18, "labelWidth": 16,
"labelHeight": 24, "labelHeight": 21,
"zIndex": 0, "zIndex": 0,
"level": 2 "level": 2
}, },
@ -563,7 +563,7 @@
"id": "aa.oo", "id": "aa.oo",
"type": "", "type": "",
"pos": { "pos": {
"x": 597, "x": 535,
"y": 87 "y": 87
}, },
"width": 123, "width": 123,
@ -627,11 +627,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 584, "x": 439.33333333333326,
"y": 1117 "y": 1117
}, },
{ {
"x": 584, "x": 439.3333333333332,
"y": 1258 "y": 1258
} }
], ],
@ -666,12 +666,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 581.1666666666666, "x": 442.1666666666666,
"y": 1282 "y": 1279
}, },
{ {
"x": 581.1666666666666, "x": 442.16666666666663,
"y": 1343 "y": 1340
} }
], ],
"animated": false, "animated": false,
@ -705,19 +705,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 541, "x": 359,
"y": 796
},
{
"x": 540.6666666666666,
"y": 816 "y": 816
}, },
{ {
"x": 439, "x": 358.66666666666663,
"y": 816 "y": 826
}, },
{ {
"x": 439.00000000000006, "x": 431.33333333333326,
"y": 826
},
{
"x": 431.33333333333326,
"y": 916 "y": 916
} }
], ],
@ -752,20 +752,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 422.9000000000001, "x": 411.9,
"y": 359 "y": 369
}, },
{ {
"x": 422.9000000000001, "x": 411.9,
"y": 420 "y": 389
}, },
{ {
"x": 333.00000000000006, "x": 659.3333333333333,
"y": 420 "y": 389
}, },
{ {
"x": 333.00000000000006, "x": 659.3333333333333,
"y": 445 "y": 465
} }
], ],
"animated": false, "animated": false,
@ -799,27 +799,35 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 551, "x": 453,
"y": 209 "y": 209
}, },
{ {
"x": 550.5, "x": 452.9,
"y": 420 "y": 223
}, },
{ {
"x": 639, "x": 716.8333333333333,
"y": 420 "y": 223
}, },
{ {
"x": 639, "x": 716.8333333333333,
"y": 450
},
{
"x": 689.3333333333333,
"y": 450
},
{
"x": 689.3333333333333,
"y": 826 "y": 826
}, },
{ {
"x": 449.00000000000006, "x": 679.3333333333333,
"y": 826 "y": 826
}, },
{ {
"x": 449.00000000000006, "x": 679.3333333333333,
"y": 841 "y": 841
} }
], ],
@ -854,20 +862,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 472, "x": 400,
"y": 209 "y": 213
}, },
{ {
"x": 471.90000000000003, "x": 400.49999999999994,
"y": 223 "y": 243
},
{
"x": 411.50000000000006,
"y": 223
},
{
"x": 411.50000000000006,
"y": 233
} }
], ],
"animated": false, "animated": false,
@ -901,28 +901,28 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 524, "x": 427,
"y": 213 "y": 213
}, },
{ {
"x": 524.3000000000001, "x": 426.69999999999993,
"y": 223 "y": 233
}, },
{ {
"x": 523.5, "x": 689.8333333333333,
"y": 223 "y": 233
}, },
{ {
"x": 523.5, "x": 689.8333333333333,
"y": 420 "y": 440
}, },
{ {
"x": 506.50000000000006, "x": 679.3333333333333,
"y": 420 "y": 440
}, },
{ {
"x": 506.50000000000006, "x": 679.3333333333333,
"y": 445 "y": 465
} }
], ],
"animated": false, "animated": false,
@ -956,27 +956,35 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 445.70000000000005, "x": 434.69999999999993,
"y": 359 "y": 369
}, },
{ {
"x": 445.70000000000005, "x": 434.69999999999993,
"y": 379
},
{
"x": 678.8333333333333,
"y": 379
},
{
"x": 678.8333333333333,
"y": 430 "y": 430
}, },
{ {
"x": 353.00000000000006, "x": 669.3333333333333,
"y": 430 "y": 430
}, },
{ {
"x": 353.00000000000006, "x": 669.3333333333333,
"y": 1248 "y": 1248
}, },
{ {
"x": 578.3333333333334, "x": 445,
"y": 1248 "y": 1248
}, },
{ {
"x": 578.3333333333334, "x": 445,
"y": 1258 "y": 1258
} }
], ],
@ -1011,20 +1019,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 498, "x": 374,
"y": 213 "y": 209
}, },
{ {
"x": 498.1, "x": 374.29999999999995,
"y": 223 "y": 223
}, },
{ {
"x": 496.50000000000006, "x": 314.49999999999994,
"y": 223 "y": 223
}, },
{ {
"x": 497, "x": 314,
"y": 575 "y": 540
} }
], ],
"animated": false, "animated": false,
@ -1058,28 +1066,36 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 449, "x": 356.33333333333326,
"y": 1544 "y": 1541
}, },
{ {
"x": 449.0000000000001, "x": 356.33333333333326,
"y": 1644 "y": 1641
}, },
{ {
"x": 95.00000000000011, "x": 87,
"y": 1644 "y": 1641
}, },
{ {
"x": 95.00000000000011, "x": 87,
"y": 430
},
{
"x": 333.49999999999994,
"y": 430
},
{
"x": 333.49999999999994,
"y": 379
},
{
"x": 366.29999999999995,
"y": 379
},
{
"x": 366.29999999999995,
"y": 369 "y": 369
},
{
"x": 377.3000000000001,
"y": 369
},
{
"x": 377.3000000000001,
"y": 359
} }
], ],
"animated": false, "animated": false,
@ -1113,36 +1129,28 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 452, "x": 270,
"y": 796 "y": 816
}, },
{ {
"x": 452.3333333333333, "x": 270.33333333333326,
"y": 806 "y": 1631
}, },
{ {
"x": 267, "x": 97,
"y": 806 "y": 1631
}, },
{ {
"x": 267.0000000000001, "x": 97,
"y": 1634 "y": 440
}, },
{ {
"x": 122.00000000000011, "x": 389.09999999999997,
"y": 1634 "y": 440
}, },
{ {
"x": 122.00000000000011, "x": 389.09999999999997,
"y": 379 "y": 369
},
{
"x": 400.10000000000014,
"y": 379
},
{
"x": 400.10000000000014,
"y": 359
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 813 KiB

After

Width:  |  Height:  |  Size: 812 KiB

View file

@ -9,14 +9,14 @@
"x": 0, "x": 0,
"y": 0 "y": 0
}, },
"width": 339, "width": 422,
"height": 368, "height": 368,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
"borderRadius": 0, "borderRadius": 0,
"fill": "#FFFFFF", "fill": "#0A0F25",
"stroke": "#0A0F25", "stroke": "#FFFFFF",
"shadow": false, "shadow": false,
"3d": false, "3d": false,
"multiple": false, "multiple": false,
@ -68,10 +68,13 @@
"italic": false, "italic": false,
"bold": false, "bold": false,
"underline": false, "underline": false,
"labelWidth": 150, "labelWidth": 175,
"labelHeight": 36, "labelHeight": 36,
"zIndex": 0, "zIndex": 0,
"level": 1 "level": 1,
"primaryAccentColor": "#0D32B2",
"secondaryAccentColor": "#4A6FF3",
"neutralAccentColor": "#676C7E"
} }
], ],
"connections": [] "connections": []

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 327 KiB

After

Width:  |  Height:  |  Size: 184 KiB

View file

@ -9,14 +9,14 @@
"x": 12, "x": 12,
"y": 12 "y": 12
}, },
"width": 339, "width": 422,
"height": 368, "height": 368,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
"borderRadius": 0, "borderRadius": 0,
"fill": "#FFFFFF", "fill": "#0A0F25",
"stroke": "#0A0F25", "stroke": "#FFFFFF",
"shadow": false, "shadow": false,
"3d": false, "3d": false,
"multiple": false, "multiple": false,
@ -68,10 +68,13 @@
"italic": false, "italic": false,
"bold": false, "bold": false,
"underline": false, "underline": false,
"labelWidth": 150, "labelWidth": 175,
"labelHeight": 36, "labelHeight": 36,
"zIndex": 0, "zIndex": 0,
"level": 1 "level": 1,
"primaryAccentColor": "#0D32B2",
"secondaryAccentColor": "#4A6FF3",
"neutralAccentColor": "#676C7E"
} }
], ],
"connections": [] "connections": []

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 327 KiB

After

Width:  |  Height:  |  Size: 184 KiB

View file

@ -85,7 +85,7 @@
"id": "y", "id": "y",
"type": "", "type": "",
"pos": { "pos": {
"x": 333, "x": 332,
"y": 504 "y": 504
}, },
"width": 114, "width": 114,

View file

@ -26,7 +26,7 @@ width="955" height="818" viewBox="-88 -88 955 818"><style type="text/css">
</text><text class="text-mono" x="0" y="6.000000em" xml:space="preserve">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<tspan fill="#0086b3">panic</tspan>(<tspan fill="#dd1144">&quot;crypto:&#160;RegisterHash&#160;of&#160;unknown&#160;hash&#160;function&quot;</tspan>) </text><text class="text-mono" x="0" y="6.000000em" xml:space="preserve">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<tspan fill="#0086b3">panic</tspan>(<tspan fill="#dd1144">&quot;crypto:&#160;RegisterHash&#160;of&#160;unknown&#160;hash&#160;function&quot;</tspan>)
</text><text class="text-mono" x="0" y="7.000000em" xml:space="preserve">&#160;&#160;&#160;&#160;} </text><text class="text-mono" x="0" y="7.000000em" xml:space="preserve">&#160;&#160;&#160;&#160;}
</text><text class="text-mono" x="0" y="8.000000em" xml:space="preserve">&#160;&#160;&#160;&#160;hashes[h]&#160;=&#160;f </text><text class="text-mono" x="0" y="8.000000em" xml:space="preserve">&#160;&#160;&#160;&#160;hashes[h]&#160;=&#160;f
</text><text class="text-mono" x="0" y="9.000000em" xml:space="preserve">}</text></g></g></g><g id="x"><g class="shape" ><rect x="333" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="389.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">x</text></g><g id="y"><g class="shape" ><rect x="333" y="504" width="114" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="390.000000" y="570.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">y</text></g><g id="(x -&gt; hey)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 389.500000 140.000000 L 389.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#4046676353)"/></g><g id="(hey -&gt; y)[0]"><path d="M 389.500000 406.000000 L 389.500000 500.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#4046676353)"/></g><mask id="4046676353" maskUnits="userSpaceOnUse" x="-100" y="-100" width="955" height="818"> </text><text class="text-mono" x="0" y="9.000000em" xml:space="preserve">}</text></g></g></g><g id="x"><g class="shape" ><rect x="333" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="389.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">x</text></g><g id="y"><g class="shape" ><rect x="332" y="504" width="114" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="389.000000" y="570.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">y</text></g><g id="(x -&gt; hey)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 389.500000 140.000000 L 389.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1364404966)"/></g><g id="(hey -&gt; y)[0]"><path d="M 389.500000 406.000000 L 389.500000 500.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1364404966)"/></g><mask id="1364404966" maskUnits="userSpaceOnUse" x="-100" y="-100" width="955" height="818">
<rect x="-100" y="-100" width="955" height="818" fill="white"></rect> <rect x="-100" y="-100" width="955" height="818" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 508 KiB

After

Width:  |  Height:  |  Size: 508 KiB

View file

@ -6,7 +6,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 88, "x": 87,
"y": 12 "y": 12
}, },
"width": 263, "width": 263,
@ -46,7 +46,7 @@
"id": "a.b", "id": "a.b",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 87 "y": 87
}, },
"width": 113, "width": 113,

View file

@ -18,7 +18,7 @@ width="614" height="1403" viewBox="-88 -88 614 1403"><style type="text/css">
} }
]]> ]]>
</style><g id="a"><g class="shape" ><rect x="88" y="12" width="263" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="219.500000" y="45.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">a</text></g><g id="c"><g class="shape" ><rect x="87" y="398" width="264" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="219.000000" y="431.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">c</text></g><g id="f"><g class="shape" ><rect x="12" y="784" width="414" height="431" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="219.000000" y="817.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">f</text></g><g id="a.b"><g class="shape" ><rect x="163" y="87" width="113" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="219.500000" y="153.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="c.d"><g class="shape" ><rect x="162" y="473" width="114" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="219.000000" y="539.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">d</text></g><g id="f.h"><g class="shape" ><rect x="87" y="864" width="264" height="276" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="219.000000" y="893.000000" style="text-anchor:middle;font-size:24px;fill:#0A0F25">h</text></g><g id="f.h.g"><g class="shape" ><rect x="162" y="939" width="114" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="219.000000" y="1005.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">g</text></g><g id="(a.b -&gt; c.d)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 219.000000 215.000000 L 219.000000 469.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1997561525)"/></g><g id="(c.d -&gt; f.h.g)[0]"><path d="M 219.000000 601.000000 L 219.000000 935.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1997561525)"/></g><mask id="1997561525" maskUnits="userSpaceOnUse" x="-100" y="-100" width="614" height="1403"> </style><g id="a"><g class="shape" ><rect x="87" y="12" width="263" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="218.500000" y="45.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">a</text></g><g id="c"><g class="shape" ><rect x="87" y="398" width="264" height="276" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="219.000000" y="431.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">c</text></g><g id="f"><g class="shape" ><rect x="12" y="784" width="414" height="431" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="219.000000" y="817.000000" style="text-anchor:middle;font-size:28px;fill:#0A0F25">f</text></g><g id="a.b"><g class="shape" ><rect x="162" y="87" width="113" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="218.500000" y="153.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="c.d"><g class="shape" ><rect x="162" y="473" width="114" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="219.000000" y="539.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">d</text></g><g id="f.h"><g class="shape" ><rect x="87" y="864" width="264" height="276" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text" x="219.000000" y="893.000000" style="text-anchor:middle;font-size:24px;fill:#0A0F25">h</text></g><g id="f.h.g"><g class="shape" ><rect x="162" y="939" width="114" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="219.000000" y="1005.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">g</text></g><g id="(a.b -&gt; c.d)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 219.000000 215.000000 L 219.000000 469.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#349145811)"/></g><g id="(c.d -&gt; f.h.g)[0]"><path d="M 219.000000 601.000000 L 219.000000 935.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#349145811)"/></g><mask id="349145811" maskUnits="userSpaceOnUse" x="-100" y="-100" width="614" height="1403">
<rect x="-100" y="-100" width="614" height="1403" fill="white"></rect> <rect x="-100" y="-100" width="614" height="1403" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 650 KiB

After

Width:  |  Height:  |  Size: 650 KiB

View file

@ -0,0 +1,456 @@
{
"name": "",
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "x",
"type": "",
"pos": {
"x": 1,
"y": 0
},
"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": 0,
"y": 226
},
"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": -24,
"y": -41
},
"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": -151,
"y": 113
},
"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": 134,
"y": 113
},
"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": -414,
"y": 372
},
"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": -514,
"y": -41
},
"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": 548,
"y": -41
},
"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": -541,
"y": 372
},
"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": 548,
"y": 372
},
"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": 57,
"y": 126
},
{
"x": 57,
"y": 166
},
{
"x": 57,
"y": 186
},
{
"x": 57,
"y": 226
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 662 KiB

View file

@ -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
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 662 KiB

View file

@ -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
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 662 KiB

View file

@ -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
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 662 KiB

View file

@ -6,8 +6,8 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 449, "x": 537,
"y": 238 "y": 248
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -46,7 +46,7 @@
"id": "b", "id": "b",
"type": "", "type": "",
"pos": { "pos": {
"x": 420, "x": 537,
"y": 474 "y": 474
}, },
"width": 113, "width": 113,
@ -86,8 +86,8 @@
"id": "c", "id": "c",
"type": "", "type": "",
"pos": { "pos": {
"x": 316, "x": 404,
"y": 238 "y": 248
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -126,8 +126,8 @@
"id": "d", "id": "d",
"type": "", "type": "",
"pos": { "pos": {
"x": 428, "x": 443,
"y": 720 "y": 740
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -166,8 +166,8 @@
"id": "e", "id": "e",
"type": "", "type": "",
"pos": { "pos": {
"x": 533, "x": 406,
"y": 1202 "y": 1222
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -206,8 +206,8 @@
"id": "f", "id": "f",
"type": "", "type": "",
"pos": { "pos": {
"x": 73, "x": 140,
"y": 946 "y": 986
}, },
"width": 111, "width": 111,
"height": 126, "height": 126,
@ -246,8 +246,8 @@
"id": "g", "id": "g",
"type": "", "type": "",
"pos": { "pos": {
"x": 23, "x": 157,
"y": 720 "y": 740
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -286,8 +286,8 @@
"id": "h", "id": "h",
"type": "", "type": "",
"pos": { "pos": {
"x": 562, "x": 23,
"y": 720 "y": 740
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -326,8 +326,8 @@
"id": "i", "id": "i",
"type": "", "type": "",
"pos": { "pos": {
"x": 384, "x": 257,
"y": 1428 "y": 1448
}, },
"width": 109, "width": 109,
"height": 126, "height": 126,
@ -366,7 +366,7 @@
"id": "j", "id": "j",
"type": "", "type": "",
"pos": { "pos": {
"x": 317, "x": 577,
"y": 12 "y": 12
}, },
"width": 110, "width": 110,
@ -406,8 +406,8 @@
"id": "k", "id": "k",
"type": "", "type": "",
"pos": { "pos": {
"x": 382, "x": 255,
"y": 1654 "y": 1674
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -446,8 +446,8 @@
"id": "l", "id": "l",
"type": "", "type": "",
"pos": { "pos": {
"x": 297, "x": 474,
"y": 946 "y": 986
}, },
"width": 109, "width": 109,
"height": 126, "height": 126,
@ -486,8 +486,8 @@
"id": "m", "id": "m",
"type": "", "type": "",
"pos": { "pos": {
"x": 158, "x": 291,
"y": 720 "y": 740
}, },
"width": 117, "width": 117,
"height": 126, "height": 126,
@ -526,8 +526,8 @@
"id": "n", "id": "n",
"type": "", "type": "",
"pos": { "pos": {
"x": 400, "x": 273,
"y": 1202 "y": 1222
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -566,8 +566,8 @@
"id": "o", "id": "o",
"type": "", "type": "",
"pos": { "pos": {
"x": 695, "x": 577,
"y": 720 "y": 740
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -606,8 +606,8 @@
"id": "p", "id": "p",
"type": "", "type": "",
"pos": { "pos": {
"x": 295, "x": 711,
"y": 720 "y": 740
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -646,8 +646,8 @@
"id": "q", "id": "q",
"type": "", "type": "",
"pos": { "pos": {
"x": 533, "x": 406,
"y": 1428 "y": 1448
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -710,11 +710,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 505.17857142857144, "x": 593.6428571428572,
"y": 364 "y": 374
}, },
{ {
"x": 505.17857142857144, "x": 593.6428571428572,
"y": 474 "y": 474
} }
], ],
@ -749,19 +749,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 372.17857142857144, "x": 460.6428571428572,
"y": 364 "y": 374
}, },
{ {
"x": 372.17857142857144, "x": 460.6428571428572,
"y": 414 "y": 424
}, },
{ {
"x": 476.92857142857144, "x": 565.3928571428572,
"y": 414 "y": 424
}, },
{ {
"x": 476.92857142857144, "x": 565.3928571428572,
"y": 474 "y": 474
} }
], ],
@ -796,20 +796,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 513.5, "x": 500.00000000000006,
"y": 846 "y": 866
}, },
{ {
"x": 513.5, "x": 500.00000000000006,
"y": 896 "y": 926
}, },
{ {
"x": 618, "x": 463.00000000000006,
"y": 896 "y": 926
}, },
{ {
"x": 618, "x": 463.00000000000006,
"y": 1202 "y": 1222
} }
], ],
"animated": false, "animated": false,
@ -843,20 +843,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 147, "x": 214,
"y": 1072 "y": 1112
}, },
{ {
"x": 147, "x": 214,
"y": 1142 "y": 1162
}, },
{ {
"x": 561.5, "x": 434.75000000000006,
"y": 1142 "y": 1162
}, },
{ {
"x": 561.5, "x": 434.75000000000006,
"y": 1202 "y": 1222
} }
], ],
"animated": false, "animated": false,
@ -890,20 +890,28 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 468.8571428571429, "x": 585.5714285714287,
"y": 600 "y": 600
}, },
{ {
"x": 468.8571428571429, "x": 585.5714285714287,
"y": 670 "y": 670
}, },
{ {
"x": 147, "x": 146,
"y": 670 "y": 670
}, },
{ {
"x": 147, "x": 146,
"y": 946 "y": 916
},
{
"x": 177,
"y": 916
},
{
"x": 177,
"y": 986
} }
], ],
"animated": false, "animated": false,
@ -937,20 +945,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 452.7142857142857, "x": 601.7142857142858,
"y": 600 "y": 600
}, },
{ {
"x": 452.7142857142857, "x": 601.7142857142858,
"y": 660 "y": 680
}, },
{ {
"x": 80, "x": 214,
"y": 660 "y": 680
}, },
{ {
"x": 80, "x": 214,
"y": 720 "y": 740
} }
], ],
"animated": false, "animated": false,
@ -984,20 +992,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 80, "x": 214,
"y": 846 "y": 866
}, },
{ {
"x": 80, "x": 214,
"y": 896 "y": 986
},
{
"x": 110,
"y": 896
},
{
"x": 110,
"y": 946
} }
], ],
"animated": false, "animated": false,
@ -1031,20 +1031,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 501.1428571428571, "x": 569.4285714285716,
"y": 600 "y": 600
}, },
{ {
"x": 501.1428571428571, "x": 569.4285714285716,
"y": 660 "y": 660
}, },
{ {
"x": 618.5, "x": 79.5,
"y": 660 "y": 660
}, },
{ {
"x": 618.5, "x": 79.5,
"y": 720 "y": 740
} }
], ],
"animated": false, "animated": false,
@ -1078,11 +1078,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 436.57142857142856, "x": 553.2857142857143,
"y": 600 "y": 600
}, },
{ {
"x": 436.57142857142856, "x": 553.2857142857143,
"y": 650 "y": 650
}, },
{ {
@ -1091,15 +1091,15 @@
}, },
{ {
"x": 12, "x": 12,
"y": 1378 "y": 1398
}, },
{ {
"x": 420.4166666666667, "x": 293.6666666666667,
"y": 1378 "y": 1398
}, },
{ {
"x": 420.4166666666667, "x": 293.6666666666667,
"y": 1428 "y": 1448
} }
], ],
"animated": false, "animated": false,
@ -1133,12 +1133,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 485, "x": 617.8571428571429,
"y": 600 "y": 600
}, },
{ {
"x": 485, "x": 617.8571428571429,
"y": 720 "y": 690
},
{
"x": 500.00000000000006,
"y": 690
},
{
"x": 500.00000000000006,
"y": 740
} }
], ],
"animated": false, "animated": false,
@ -1172,12 +1180,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 372.17857142857144, "x": 605.1428571428572,
"y": 138 "y": 138
}, },
{ {
"x": 372.17857142857144, "x": 605.1428571428572,
"y": 238 "y": 188
},
{
"x": 460.6428571428572,
"y": 188
},
{
"x": 460.6428571428572,
"y": 248
} }
], ],
"animated": false, "animated": false,
@ -1211,20 +1227,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 399.67857142857144, "x": 632.6428571428572,
"y": 138 "y": 138
}, },
{ {
"x": 399.67857142857144, "x": 632.6428571428572,
"y": 188 "y": 198
}, },
{ {
"x": 505.17857142857144, "x": 593.6428571428572,
"y": 188 "y": 198
}, },
{ {
"x": 505.17857142857144, "x": 593.6428571428572,
"y": 238 "y": 248
} }
], ],
"animated": false, "animated": false,
@ -1258,27 +1274,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 448.67857142857144, "x": 621.8928571428572,
"y": 474 "y": 474
}, },
{ {
"x": 448.67857142857144, "x": 621.8928571428572,
"y": 424 "y": 424
}, },
{ {
"x": 304.67857142857144, "x": 660.1428571428572,
"y": 424 "y": 424
}, },
{ {
"x": 304.67857142857144, "x": 660.1428571428572,
"y": 188
},
{
"x": 344.67857142857144,
"y": 188
},
{
"x": 344.67857142857144,
"y": 138 "y": 138
} }
], ],
@ -1313,12 +1321,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 438.58333333333337, "x": 311.83333333333337,
"y": 1554 "y": 1574
}, },
{ {
"x": 438.58333333333337, "x": 311.83333333333337,
"y": 1654 "y": 1674
} }
], ],
"animated": false, "animated": false,
@ -1352,20 +1360,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 456.5, "x": 528.5,
"y": 846 "y": 866
}, },
{ {
"x": 456.5, "x": 528.5,
"y": 896 "y": 986
},
{
"x": 378.75,
"y": 896
},
{
"x": 378.75,
"y": 946
} }
], ],
"animated": false, "animated": false,
@ -1399,20 +1399,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 351.5, "x": 528.5,
"y": 1072 "y": 1112
}, },
{ {
"x": 351.5, "x": 528.5,
"y": 1122 "y": 1162
}, },
{ {
"x": 589.75, "x": 491.25000000000006,
"y": 1122 "y": 1162
}, },
{ {
"x": 589.75, "x": 491.25000000000006,
"y": 1202 "y": 1222
} }
], ],
"animated": false, "animated": false,
@ -1446,20 +1446,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 236, "x": 369,
"y": 846 "y": 866
}, },
{ {
"x": 236, "x": 369,
"y": 896 "y": 936
}, },
{ {
"x": 324.25, "x": 501.25000000000006,
"y": 896 "y": 936
}, },
{ {
"x": 324.25, "x": 501.25000000000006,
"y": 946 "y": 986
} }
], ],
"animated": false, "animated": false,
@ -1493,20 +1493,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 197, "x": 330,
"y": 846 "y": 866
}, },
{ {
"x": 197, "x": 330,
"y": 1132 "y": 1222
},
{
"x": 456.75,
"y": 1132
},
{
"x": 456.75,
"y": 1202
} }
], ],
"animated": false, "animated": false,
@ -1540,12 +1532,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 456.75, "x": 330,
"y": 1328 "y": 1348
}, },
{ {
"x": 456.75, "x": 330,
"y": 1428 "y": 1448
} }
], ],
"animated": false, "animated": false,
@ -1579,12 +1571,28 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 485, "x": 471.50000000000006,
"y": 846 "y": 866
}, },
{ {
"x": 485, "x": 471.50000000000006,
"y": 1202 "y": 916
},
{
"x": 452.00000000000006,
"y": 916
},
{
"x": 452.00000000000006,
"y": 1172
},
{
"x": 358.25,
"y": 1172
},
{
"x": 358.25,
"y": 1222
} }
], ],
"animated": false, "animated": false,
@ -1618,20 +1626,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 110, "x": 177,
"y": 1072 "y": 1112
}, },
{ {
"x": 110, "x": 177,
"y": 1152 "y": 1172
}, },
{ {
"x": 428.5, "x": 301.75,
"y": 1152 "y": 1172
}, },
{ {
"x": 428.5, "x": 301.75,
"y": 1202 "y": 1222
} }
], ],
"animated": false, "animated": false,
@ -1665,20 +1673,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 517.2857142857142, "x": 634.0000000000001,
"y": 600 "y": 600
}, },
{ {
"x": 517.2857142857142, "x": 634.0000000000001,
"y": 650 "y": 740
},
{
"x": 752,
"y": 650
},
{
"x": 752,
"y": 720
} }
], ],
"animated": false, "animated": false,
@ -1712,12 +1712,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 351.5, "x": 767.5,
"y": 846 "y": 866
}, },
{ {
"x": 351.5, "x": 767.5,
"y": 946 "y": 916
},
{
"x": 555.75,
"y": 916
},
{
"x": 555.75,
"y": 986
} }
], ],
"animated": false, "animated": false,
@ -1751,12 +1759,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 589.75, "x": 463.00000000000006,
"y": 1328 "y": 1348
}, },
{ {
"x": 589.75, "x": 463.00000000000006,
"y": 1428 "y": 1448
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 336 KiB

After

Width:  |  Height:  |  Size: 336 KiB

View file

@ -6,7 +6,7 @@
"id": "finally", "id": "finally",
"type": "", "type": "",
"pos": { "pos": {
"x": 843, "x": 591,
"y": 12 "y": 12
}, },
"width": 458, "width": 458,
@ -46,7 +46,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 57, "x": 76,
"y": 600 "y": 600
}, },
"width": 113, "width": 113,
@ -86,7 +86,7 @@
"id": "tree", "id": "tree",
"type": "", "type": "",
"pos": { "pos": {
"x": 362, "x": 37,
"y": 836 "y": 836
}, },
"width": 134, "width": 134,
@ -126,7 +126,7 @@
"id": "and", "id": "and",
"type": "", "type": "",
"pos": { "pos": {
"x": 179, "x": 343,
"y": 836 "y": 836
}, },
"width": 132, "width": 132,
@ -166,7 +166,7 @@
"id": "nodes", "id": "nodes",
"type": "", "type": "",
"pos": { "pos": {
"x": 12, "x": 495,
"y": 836 "y": 836
}, },
"width": 147, "width": 147,
@ -206,7 +206,7 @@
"id": "some", "id": "some",
"type": "", "type": "",
"pos": { "pos": {
"x": 174, "x": 338,
"y": 1062 "y": 1062
}, },
"width": 143, "width": 143,
@ -246,7 +246,7 @@
"id": "more", "id": "more",
"type": "", "type": "",
"pos": { "pos": {
"x": 337, "x": 12,
"y": 1062 "y": 1062
}, },
"width": 141, "width": 141,
@ -286,7 +286,7 @@
"id": "many", "id": "many",
"type": "", "type": "",
"pos": { "pos": {
"x": 498, "x": 173,
"y": 1062 "y": 1062
}, },
"width": 145, "width": 145,
@ -326,7 +326,7 @@
"id": "then", "id": "then",
"type": "", "type": "",
"pos": { "pos": {
"x": 685, "x": 1247,
"y": 600 "y": 600
}, },
"width": 138, "width": 138,
@ -366,7 +366,7 @@
"id": "here", "id": "here",
"type": "", "type": "",
"pos": { "pos": {
"x": 709, "x": 1225,
"y": 836 "y": 836
}, },
"width": 136, "width": 136,
@ -406,7 +406,7 @@
"id": "you", "id": "you",
"type": "", "type": "",
"pos": { "pos": {
"x": 711, "x": 1227,
"y": 1062 "y": 1062
}, },
"width": 132, "width": 132,
@ -446,7 +446,7 @@
"id": "have", "id": "have",
"type": "", "type": "",
"pos": { "pos": {
"x": 505, "x": 1427,
"y": 600 "y": 600
}, },
"width": 138, "width": 138,
@ -486,7 +486,7 @@
"id": "hierarchy", "id": "hierarchy",
"type": "", "type": "",
"pos": { "pos": {
"x": 516, "x": 1381,
"y": 836 "y": 836
}, },
"width": 173, "width": 173,
@ -526,7 +526,7 @@
"id": "another", "id": "another",
"type": "", "type": "",
"pos": { "pos": {
"x": 915, "x": 662,
"y": 836 "y": 836
}, },
"width": 163, "width": 163,
@ -566,7 +566,7 @@
"id": "of", "id": "of",
"type": "", "type": "",
"pos": { "pos": {
"x": 936, "x": 684,
"y": 1062 "y": 1062
}, },
"width": 120, "width": 120,
@ -606,7 +606,7 @@
"id": "nesting", "id": "nesting",
"type": "", "type": "",
"pos": { "pos": {
"x": 1322, "x": 1069,
"y": 600 "y": 600
}, },
"width": 158, "width": 158,
@ -646,7 +646,7 @@
"id": "trees", "id": "trees",
"type": "", "type": "",
"pos": { "pos": {
"x": 1306, "x": 1053,
"y": 836 "y": 836
}, },
"width": 142, "width": 142,
@ -686,7 +686,7 @@
"id": "finally.a", "id": "finally.a",
"type": "", "type": "",
"pos": { "pos": {
"x": 948, "x": 715,
"y": 233 "y": 233
}, },
"width": 113, "width": 113,
@ -726,7 +726,7 @@
"id": "finally.tree", "id": "finally.tree",
"type": "", "type": "",
"pos": { "pos": {
"x": 1073, "x": 685,
"y": 379 "y": 379
}, },
"width": 134, "width": 134,
@ -766,7 +766,7 @@
"id": "finally.inside", "id": "finally.inside",
"type": "", "type": "",
"pos": { "pos": {
"x": 930, "x": 697,
"y": 87 "y": 87
}, },
"width": 148, "width": 148,
@ -806,7 +806,7 @@
"id": "finally.hierarchy", "id": "finally.hierarchy",
"type": "", "type": "",
"pos": { "pos": {
"x": 1054, "x": 666,
"y": 525 "y": 525
}, },
"width": 173, "width": 173,
@ -846,7 +846,7 @@
"id": "finally.root", "id": "finally.root",
"type": "", "type": "",
"pos": { "pos": {
"x": 918, "x": 839,
"y": 379 "y": 379
}, },
"width": 135, "width": 135,
@ -910,19 +910,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 142, "x": 104.83333333333334,
"y": 726 "y": 726
}, },
{ {
"x": 142, "x": 104.83333333333334,
"y": 776
},
{
"x": 429.3333333333333,
"y": 776
},
{
"x": 429.3333333333333,
"y": 836 "y": 836
} }
], ],
@ -957,19 +949,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 113.75, "x": 133.08333333333334,
"y": 726 "y": 726
}, },
{ {
"x": 113.75, "x": 133.08333333333334,
"y": 786 "y": 786
}, },
{ {
"x": 245, "x": 409.5,
"y": 786 "y": 786
}, },
{ {
"x": 245, "x": 409.5,
"y": 836 "y": 836
} }
], ],
@ -1004,11 +996,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 85.5, "x": 161.33333333333334,
"y": 726 "y": 726
}, },
{ {
"x": 85.5, "x": 161.33333333333334,
"y": 776
},
{
"x": 569,
"y": 776
},
{
"x": 569,
"y": 836 "y": 836
} }
], ],
@ -1043,11 +1043,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 245, "x": 409.5,
"y": 962 "y": 962
}, },
{ {
"x": 245, "x": 409.5,
"y": 1062 "y": 1062
} }
], ],
@ -1082,11 +1082,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 407, "x": 82.5,
"y": 962 "y": 962
}, },
{ {
"x": 407, "x": 82.5,
"y": 1062 "y": 1062
} }
], ],
@ -1121,19 +1121,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 451.66666666666663, "x": 127.16666666666667,
"y": 962 "y": 962
}, },
{ {
"x": 451.66666666666663, "x": 127.16666666666667,
"y": 1012 "y": 1012
}, },
{ {
"x": 570, "x": 245.5,
"y": 1012 "y": 1012
}, },
{ {
"x": 570, "x": 245.5,
"y": 1062 "y": 1062
} }
], ],
@ -1168,11 +1168,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 777.3333333333333, "x": 1293.6666666666665,
"y": 726 "y": 726
}, },
{ {
"x": 777.3333333333333, "x": 1293.6666666666665,
"y": 836 "y": 836
} }
], ],
@ -1207,11 +1207,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 777.3333333333333, "x": 1293.6666666666665,
"y": 962 "y": 962
}, },
{ {
"x": 777.3333333333333, "x": 1293.6666666666665,
"y": 1062 "y": 1062
} }
], ],
@ -1246,11 +1246,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 574, "x": 1496.9999999999998,
"y": 726 "y": 726
}, },
{ {
"x": 574, "x": 1496.9999999999998,
"y": 836 "y": 836
} }
], ],
@ -1285,19 +1285,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 731.3333333333333, "x": 1339.6666666666665,
"y": 726 "y": 726
}, },
{ {
"x": 731.3333333333333, "x": 1339.6666666666665,
"y": 776 "y": 776
}, },
{ {
"x": 631.6666666666666, "x": 1439.3333333333333,
"y": 776 "y": 776
}, },
{ {
"x": 631.6666666666666, "x": 1439.3333333333333,
"y": 836 "y": 836
} }
], ],
@ -1332,11 +1332,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 996.1666666666666, "x": 744,
"y": 726 "y": 726
}, },
{ {
"x": 996.1666666666666, "x": 744,
"y": 836 "y": 836
} }
], ],
@ -1371,11 +1371,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 996.1666666666666, "x": 744,
"y": 962 "y": 962
}, },
{ {
"x": 996.1666666666666, "x": 744,
"y": 1062 "y": 1062
} }
], ],
@ -1410,11 +1410,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1400.8333333333333, "x": 1148.6666666666665,
"y": 726 "y": 726
}, },
{ {
"x": 1400.8333333333333, "x": 1148.6666666666665,
"y": 836 "y": 836
} }
], ],
@ -1449,19 +1449,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1149, "x": 896.8333333333333,
"y": 726 "y": 726
}, },
{ {
"x": 1149, "x": 896.8333333333333,
"y": 776 "y": 776
}, },
{ {
"x": 1353.4999999999998, "x": 1101.333333333333,
"y": 776 "y": 776
}, },
{ {
"x": 1353.4999999999998, "x": 1101.333333333333,
"y": 836 "y": 836
} }
], ],
@ -1496,19 +1496,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1023.1666666666667, "x": 752.6666666666666,
"y": 359 "y": 359
}, },
{ {
"x": 1023.1666666666667, "x": 752.6666666666666,
"y": 369
},
{
"x": 1140,
"y": 369
},
{
"x": 1140,
"y": 379 "y": 379
} }
], ],
@ -1543,11 +1535,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1004.3333333333333, "x": 771.5,
"y": 213 "y": 213
}, },
{ {
"x": 1004.3333333333333, "x": 771.5,
"y": 233 "y": 233
} }
], ],
@ -1582,11 +1574,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1140, "x": 752.6666666666666,
"y": 505 "y": 505
}, },
{ {
"x": 1140, "x": 752.6666666666666,
"y": 525 "y": 525
} }
], ],
@ -1621,11 +1613,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 985.5, "x": 790.3333333333333,
"y": 359 "y": 359
}, },
{ {
"x": 985.5, "x": 790.3333333333333,
"y": 369
},
{
"x": 907.1666666666666,
"y": 369
},
{
"x": 907.1666666666666,
"y": 379 "y": 379
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 658 KiB

After

Width:  |  Height:  |  Size: 658 KiB

View file

@ -86,7 +86,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 12 "y": 12
}, },
"width": 113, "width": 113,
@ -126,7 +126,7 @@
"id": "c", "id": "c",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 1932 "y": 1932
}, },
"width": 113, "width": 113,
@ -206,7 +206,7 @@
"id": "e", "id": "e",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 2384 "y": 2384
}, },
"width": 113, "width": 113,
@ -286,7 +286,7 @@
"id": "b.3", "id": "b.3",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 1339 "y": 1339
}, },
"width": 113, "width": 113,
@ -366,7 +366,7 @@
"id": "b.5", "id": "b.5",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 1631 "y": 1631
}, },
"width": 113, "width": 113,
@ -406,7 +406,7 @@
"id": "b.2.a", "id": "b.2.a",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 534 "y": 534
}, },
"width": 113, "width": 113,
@ -446,7 +446,7 @@
"id": "b.2.b", "id": "b.2.b",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 680 "y": 680
}, },
"width": 113, "width": 113,
@ -486,7 +486,7 @@
"id": "b.2.c", "id": "b.2.c",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 826 "y": 826
}, },
"width": 113, "width": 113,
@ -566,7 +566,7 @@
"id": "b.2.e", "id": "b.2.e",
"type": "", "type": "",
"pos": { "pos": {
"x": 163, "x": 162,
"y": 1118 "y": 1118
}, },
"width": 113, "width": 113,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 654 KiB

After

Width:  |  Height:  |  Size: 654 KiB

View file

@ -46,7 +46,7 @@
"id": "beta", "id": "beta",
"type": "", "type": "",
"pos": { "pos": {
"x": 17, "x": 16,
"y": 359 "y": 359
}, },
"width": 136, "width": 136,

View file

@ -18,7 +18,7 @@ width="345" height="673" viewBox="-88 -88 345 673"><style type="text/css">
} }
]]> ]]>
</style><g id="alpha"><g class="shape" ><rect x="12" y="12" width="145" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="84.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#4A6FF3">alpha</text></g><g id="beta"><g class="shape" ><rect x="17" y="359" width="136" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="85.000000" y="425.000000" style="text-anchor:middle;font-size:16px;fill:red">beta</text></g><g id="(alpha -&gt; beta)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 84.500000 140.000000 L 84.500000 355.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2688269051)"/><text class="text-italic" x="85.000000" y="254.000000" style="text-anchor:middle;font-size:16px;fill:green">gamma</text></g><mask id="2688269051" maskUnits="userSpaceOnUse" x="-100" y="-100" width="345" height="673"> </style><g id="alpha"><g class="shape" ><rect x="12" y="12" width="145" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="84.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#4A6FF3">alpha</text></g><g id="beta"><g class="shape" ><rect x="16" y="359" width="136" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="84.000000" y="425.000000" style="text-anchor:middle;font-size:16px;fill:red">beta</text></g><g id="(alpha -&gt; beta)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 84.500000 140.000000 L 84.500000 355.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1137835220)"/><text class="text-italic" x="85.000000" y="254.000000" style="text-anchor:middle;font-size:16px;fill:green">gamma</text></g><mask id="1137835220" maskUnits="userSpaceOnUse" x="-100" y="-100" width="345" height="673">
<rect x="-100" y="-100" width="345" height="673" fill="white"></rect> <rect x="-100" y="-100" width="345" height="673" fill="white"></rect>
<rect x="59.000000" y="238.000000" width="52" height="21" fill="black"></rect> <rect x="59.000000" y="238.000000" width="52" height="21" fill="black"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 468 KiB

After

Width:  |  Height:  |  Size: 468 KiB

View file

@ -6,7 +6,7 @@
"id": "size XS", "id": "size XS",
"type": "", "type": "",
"pos": { "pos": {
"x": 1465, "x": 1104,
"y": 419 "y": 419
}, },
"width": 145, "width": 145,
@ -46,7 +46,7 @@
"id": "size S", "id": "size S",
"type": "", "type": "",
"pos": { "pos": {
"x": 1634, "x": 15,
"y": 35 "y": 35
}, },
"width": 140, "width": 140,
@ -86,7 +86,7 @@
"id": "size M", "id": "size M",
"type": "", "type": "",
"pos": { "pos": {
"x": 1630, "x": 12,
"y": 419 "y": 419
}, },
"width": 147, "width": 147,
@ -126,8 +126,8 @@
"id": "size L", "id": "size L",
"type": "", "type": "",
"pos": { "pos": {
"x": 1116, "x": 175,
"y": 20 "y": 19
}, },
"width": 153, "width": 153,
"height": 131, "height": 131,
@ -166,7 +166,7 @@
"id": "size XL", "id": "size XL",
"type": "", "type": "",
"pos": { "pos": {
"x": 12, "x": 348,
"y": 17 "y": 17
}, },
"width": 177, "width": 177,
@ -206,8 +206,8 @@
"id": "size XXL", "id": "size XXL",
"type": "", "type": "",
"pos": { "pos": {
"x": 429, "x": 545,
"y": 15 "y": 14
}, },
"width": 204, "width": 204,
"height": 141, "height": 141,
@ -246,7 +246,7 @@
"id": "size XXXL", "id": "size XXXL",
"type": "", "type": "",
"pos": { "pos": {
"x": 653, "x": 769,
"y": 12 "y": 12
}, },
"width": 237, "width": 237,
@ -286,7 +286,7 @@
"id": "custom 8", "id": "custom 8",
"type": "", "type": "",
"pos": { "pos": {
"x": 1469, "x": 1108,
"y": 42 "y": 42
}, },
"width": 137, "width": 137,
@ -326,8 +326,8 @@
"id": "custom 12", "id": "custom 12",
"type": "", "type": "",
"pos": { "pos": {
"x": 1289, "x": 1265,
"y": 25 "y": 24
}, },
"width": 160, "width": 160,
"height": 121, "height": 121,
@ -366,7 +366,7 @@
"id": "custom 18", "id": "custom 18",
"type": "", "type": "",
"pos": { "pos": {
"x": 910, "x": 1445,
"y": 21 "y": 21
}, },
"width": 186, "width": 186,
@ -406,7 +406,7 @@
"id": "custom 21", "id": "custom 21",
"type": "", "type": "",
"pos": { "pos": {
"x": 209, "x": 1651,
"y": 19 "y": 19
}, },
"width": 200, "width": 200,
@ -446,7 +446,7 @@
"id": "custom 64", "id": "custom 64",
"type": "", "type": "",
"pos": { "pos": {
"x": 575, "x": 691,
"y": 419 "y": 419
}, },
"width": 393, "width": 393,
@ -510,11 +510,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1537.5, "x": 1177,
"y": 158 "y": 158
}, },
{ {
"x": 1537.5, "x": 1177,
"y": 419 "y": 419
} }
], ],
@ -549,11 +549,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 1703.5, "x": 85.5,
"y": 158 "y": 158
}, },
{ {
"x": 1703.5, "x": 85.5,
"y": 419 "y": 419
} }
], ],
@ -589,11 +589,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 771.5, "x": 888,
"y": 158 "y": 158
}, },
{ {
"x": 771.5, "x": 888,
"y": 419 "y": 419
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 471 KiB

After

Width:  |  Height:  |  Size: 471 KiB

View file

@ -34,7 +34,7 @@
"language": "markdown", "language": "markdown",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 3051, "labelWidth": 3051,
"labelHeight": 4848, "labelHeight": 4848,

View file

@ -277,6 +277,7 @@ width="3251" height="5500" viewBox="-100 -100 3251 5500"><style type="text/css">
margin-bottom: 16px; margin-bottom: 16px;
font-weight: 600; font-weight: 600;
line-height: 1.25; line-height: 1.25;
font-family: "font-regular";
} }
.md h2 { .md h2 {
@ -1031,7 +1032,7 @@ title for the link, surrounded in quotes. For example:</p>
<h3>Code</h3> <h3>Code</h3>
<p>Unlike a pre-formatted code block, a code span indicates code within a <p>Unlike a pre-formatted code block, a code span indicates code within a
normal paragraph. For example:</p> normal paragraph. For example:</p>
</div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="1469" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1525.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="1469" y="5174" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1525.500000" y="5240.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 1525.500000 128.000000 C 1525.500000 166.000000 1525.500000 186.000000 1525.500000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3004641400)"/></g><g id="(md -&gt; b)[0]"><path d="M 1525.500000 5076.000000 C 1525.500000 5114.000000 1525.500000 5134.000000 1525.500000 5170.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#3004641400)"/></g><mask id="3004641400" maskUnits="userSpaceOnUse" x="-100" y="-100" width="3251" height="5500"> </div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="1469" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1525.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="1469" y="5174" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1525.500000" y="5240.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 1525.500000 128.000000 C 1525.500000 166.000000 1525.500000 186.000000 1525.500000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#4068872453)"/></g><g id="(md -&gt; b)[0]"><path d="M 1525.500000 5076.000000 C 1525.500000 5114.000000 1525.500000 5134.000000 1525.500000 5170.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#4068872453)"/></g><mask id="4068872453" maskUnits="userSpaceOnUse" x="-100" y="-100" width="3251" height="5500">
<rect x="-100" y="-100" width="3251" height="5500" fill="white"></rect> <rect x="-100" y="-100" width="3251" height="5500" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 993 KiB

After

Width:  |  Height:  |  Size: 993 KiB

View file

@ -34,7 +34,7 @@
"language": "markdown", "language": "markdown",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 3051, "labelWidth": 3051,
"labelHeight": 4848, "labelHeight": 4848,

View file

@ -277,6 +277,7 @@ width="3251" height="5500" viewBox="-88 -88 3251 5500"><style type="text/css">
margin-bottom: 16px; margin-bottom: 16px;
font-weight: 600; font-weight: 600;
line-height: 1.25; line-height: 1.25;
font-family: "font-regular";
} }
.md h2 { .md h2 {
@ -1031,7 +1032,7 @@ title for the link, surrounded in quotes. For example:</p>
<h3>Code</h3> <h3>Code</h3>
<p>Unlike a pre-formatted code block, a code span indicates code within a <p>Unlike a pre-formatted code block, a code span indicates code within a
normal paragraph. For example:</p> normal paragraph. For example:</p>
</div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="1481" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1537.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="1481" y="5186" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1537.500000" y="5252.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 1537.500000 140.000000 L 1537.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2933553414)"/></g><g id="(md -&gt; b)[0]"><path d="M 1537.500000 5088.000000 L 1537.500000 5182.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2933553414)"/></g><mask id="2933553414" maskUnits="userSpaceOnUse" x="-100" y="-100" width="3251" height="5500"> </div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="1481" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1537.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="1481" y="5186" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="1537.500000" y="5252.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 1537.500000 140.000000 L 1537.500000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2511908393)"/></g><g id="(md -&gt; b)[0]"><path d="M 1537.500000 5088.000000 L 1537.500000 5182.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2511908393)"/></g><mask id="2511908393" maskUnits="userSpaceOnUse" x="-100" y="-100" width="3251" height="5500">
<rect x="-100" y="-100" width="3251" height="5500" fill="white"></rect> <rect x="-100" y="-100" width="3251" height="5500" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 993 KiB

After

Width:  |  Height:  |  Size: 993 KiB

View file

@ -34,7 +34,7 @@
"language": "markdown", "language": "markdown",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 738, "labelWidth": 738,
"labelHeight": 134, "labelHeight": 134,

View file

@ -277,6 +277,7 @@ width="938" height="786" viewBox="-100 -100 938 786"><style type="text/css">
margin-bottom: 16px; margin-bottom: 16px;
font-weight: 600; font-weight: 600;
line-height: 1.25; line-height: 1.25;
font-family: "font-regular";
} }
.md h2 { .md h2 {
@ -778,7 +779,7 @@ width="938" height="786" viewBox="-100 -100 938 786"><style type="text/css">
can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p> can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
<hr /> <hr />
<h2>Overview</h2> <h2>Overview</h2>
</div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="313" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="369.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="313" y="460" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="369.500000" y="526.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 369.000000 128.000000 C 369.000000 166.000000 369.000000 186.000000 369.000000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#255996187)"/></g><g id="(md -&gt; b)[0]"><path d="M 369.000000 362.000000 C 369.000000 400.000000 369.000000 420.000000 369.000000 456.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#255996187)"/></g><mask id="255996187" maskUnits="userSpaceOnUse" x="-100" y="-100" width="938" height="786"> </div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="313" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="369.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="313" y="460" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="369.500000" y="526.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 369.000000 128.000000 C 369.000000 166.000000 369.000000 186.000000 369.000000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2921353566)"/></g><g id="(md -&gt; b)[0]"><path d="M 369.000000 362.000000 C 369.000000 400.000000 369.000000 420.000000 369.000000 456.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2921353566)"/></g><mask id="2921353566" maskUnits="userSpaceOnUse" x="-100" y="-100" width="938" height="786">
<rect x="-100" y="-100" width="938" height="786" fill="white"></rect> <rect x="-100" y="-100" width="938" height="786" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 660 KiB

After

Width:  |  Height:  |  Size: 660 KiB

View file

@ -34,7 +34,7 @@
"language": "markdown", "language": "markdown",
"color": "#0A0F25", "color": "#0A0F25",
"italic": false, "italic": false,
"bold": true, "bold": false,
"underline": false, "underline": false,
"labelWidth": 738, "labelWidth": 738,
"labelHeight": 134, "labelHeight": 134,
@ -45,7 +45,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 325, "x": 324,
"y": 12 "y": 12
}, },
"width": 113, "width": 113,
@ -85,7 +85,7 @@
"id": "b", "id": "b",
"type": "", "type": "",
"pos": { "pos": {
"x": 325, "x": 324,
"y": 472 "y": 472
}, },
"width": 113, "width": 113,

View file

@ -277,6 +277,7 @@ width="938" height="786" viewBox="-88 -88 938 786"><style type="text/css">
margin-bottom: 16px; margin-bottom: 16px;
font-weight: 600; font-weight: 600;
line-height: 1.25; line-height: 1.25;
font-family: "font-regular";
} }
.md h2 { .md h2 {
@ -778,7 +779,7 @@ width="938" height="786" viewBox="-88 -88 938 786"><style type="text/css">
can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p> can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
<hr /> <hr />
<h2>Overview</h2> <h2>Overview</h2>
</div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="325" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="381.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="325" y="472" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="381.500000" y="538.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 381.000000 140.000000 L 381.000000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1468961209)"/></g><g id="(md -&gt; b)[0]"><path d="M 381.000000 374.000000 L 381.000000 468.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#1468961209)"/></g><mask id="1468961209" maskUnits="userSpaceOnUse" x="-100" y="-100" width="938" height="786"> </div></foreignObject></g></g><g id="a"><g class="shape" ><rect x="324" y="12" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="380.500000" y="78.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">a</text></g><g id="b"><g class="shape" ><rect x="324" y="472" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /></g><text class="text-bold" x="380.500000" y="538.000000" style="text-anchor:middle;font-size:16px;fill:#0A0F25">b</text></g><g id="(a -&gt; md)[0]"><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 381.000000 140.000000 L 381.000000 234.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2975790206)"/></g><g id="(md -&gt; b)[0]"><path d="M 381.000000 374.000000 L 381.000000 468.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#2975790206)"/></g><mask id="2975790206" maskUnits="userSpaceOnUse" x="-100" y="-100" width="938" height="786">
<rect x="-100" y="-100" width="938" height="786" fill="white"></rect> <rect x="-100" y="-100" width="938" height="786" fill="white"></rect>
</mask><style type="text/css"><![CDATA[ </mask><style type="text/css"><![CDATA[

Before

Width:  |  Height:  |  Size: 660 KiB

After

Width:  |  Height:  |  Size: 660 KiB

View file

@ -6,7 +6,7 @@
"id": "aa", "id": "aa",
"type": "step", "type": "step",
"pos": { "pos": {
"x": 429, "x": 563,
"y": 12 "y": 12
}, },
"width": 122, "width": 122,
@ -46,7 +46,7 @@
"id": "bb", "id": "bb",
"type": "step", "type": "step",
"pos": { "pos": {
"x": 286, "x": 583,
"y": 238 "y": 238
}, },
"width": 123, "width": 123,
@ -86,7 +86,7 @@
"id": "cc", "id": "cc",
"type": "step", "type": "step",
"pos": { "pos": {
"x": 307, "x": 458,
"y": 464 "y": 464
}, },
"width": 121, "width": 121,
@ -126,7 +126,7 @@
"id": "dd", "id": "dd",
"type": "", "type": "",
"pos": { "pos": {
"x": 231, "x": 240,
"y": 816 "y": 816
}, },
"width": 415, "width": 415,
@ -166,7 +166,7 @@
"id": "dd.ee", "id": "dd.ee",
"type": "diamond", "type": "diamond",
"pos": { "pos": {
"x": 449, "x": 315,
"y": 891 "y": 891
}, },
"width": 122, "width": 122,
@ -206,8 +206,8 @@
"id": "ll", "id": "ll",
"type": "", "type": "",
"pos": { "pos": {
"x": 246, "x": 12,
"y": 3120 "y": 3130
}, },
"width": 425, "width": 425,
"height": 427, "height": 427,
@ -246,8 +246,8 @@
"id": "ll.mm", "id": "ll.mm",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 465, "x": 87,
"y": 3195 "y": 3205
}, },
"width": 131, "width": 131,
"height": 131, "height": 131,
@ -286,8 +286,8 @@
"id": "ff", "id": "ff",
"type": "", "type": "",
"pos": { "pos": {
"x": 247, "x": 12,
"y": 2462 "y": 2472
}, },
"width": 424, "width": 424,
"height": 427, "height": 427,
@ -326,8 +326,8 @@
"id": "ff.mm", "id": "ff.mm",
"type": "oval", "type": "oval",
"pos": { "pos": {
"x": 465, "x": 87,
"y": 2537 "y": 2547
}, },
"width": 131, "width": 131,
"height": 131, "height": 131,
@ -366,8 +366,8 @@
"id": "ff.gg", "id": "ff.gg",
"type": "diamond", "type": "diamond",
"pos": { "pos": {
"x": 322, "x": 238,
"y": 2539 "y": 2548
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -406,7 +406,7 @@
"id": "dd.hh", "id": "dd.hh",
"type": "diamond", "type": "diamond",
"pos": { "pos": {
"x": 306, "x": 457,
"y": 891 "y": 891
}, },
"width": 123, "width": 123,
@ -446,7 +446,7 @@
"id": "ww", "id": "ww",
"type": "queue", "type": "queue",
"pos": { "pos": {
"x": 120, "x": 431,
"y": 2195 "y": 2195
}, },
"width": 131, "width": 131,
@ -497,8 +497,8 @@
"id": "yy", "id": "yy",
"type": "", "type": "",
"pos": { "pos": {
"x": 68, "x": 383,
"y": 3657 "y": 3677
}, },
"width": 273, "width": 273,
"height": 448, "height": 448,
@ -537,8 +537,8 @@
"id": "yy.zz", "id": "yy.zz",
"type": "queue", "type": "queue",
"pos": { "pos": {
"x": 145, "x": 459,
"y": 3732 "y": 3752
}, },
"width": 120, "width": 120,
"height": 152, "height": 152,
@ -588,8 +588,8 @@
"id": "ad", "id": "ad",
"type": "parallelogram", "type": "parallelogram",
"pos": { "pos": {
"x": 327, "x": 452,
"y": 4606 "y": 4616
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -628,8 +628,8 @@
"id": "nn", "id": "nn",
"type": "cylinder", "type": "cylinder",
"pos": { "pos": {
"x": 110, "x": 93,
"y": 4225 "y": 4235
}, },
"width": 557, "width": 557,
"height": 276, "height": 276,
@ -668,7 +668,7 @@
"id": "ii", "id": "ii",
"type": "", "type": "",
"pos": { "pos": {
"x": 453, "x": 244,
"y": 1197 "y": 1197
}, },
"width": 114, "width": 114,
@ -708,7 +708,7 @@
"id": "jj", "id": "jj",
"type": "", "type": "",
"pos": { "pos": {
"x": 453, "x": 244,
"y": 1503 "y": 1503
}, },
"width": 115, "width": 115,
@ -748,7 +748,7 @@
"id": "kk", "id": "kk",
"type": "", "type": "",
"pos": { "pos": {
"x": 449, "x": 240,
"y": 1914 "y": 1914
}, },
"width": 122, "width": 122,
@ -788,8 +788,8 @@
"id": "nn.oo", "id": "nn.oo",
"type": "", "type": "",
"pos": { "pos": {
"x": 469, "x": 168,
"y": 4300 "y": 4310
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -828,8 +828,8 @@
"id": "ff.pp", "id": "ff.pp",
"type": "", "type": "",
"pos": { "pos": {
"x": 322, "x": 238,
"y": 2688 "y": 2698
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -868,8 +868,8 @@
"id": "ll.qq", "id": "ll.qq",
"type": "", "type": "",
"pos": { "pos": {
"x": 321, "x": 238,
"y": 3198 "y": 3207
}, },
"width": 124, "width": 124,
"height": 126, "height": 126,
@ -908,8 +908,8 @@
"id": "ll.rr", "id": "ll.rr",
"type": "", "type": "",
"pos": { "pos": {
"x": 324, "x": 241,
"y": 3346 "y": 3356
}, },
"width": 118, "width": 118,
"height": 126, "height": 126,
@ -948,7 +948,7 @@
"id": "ss", "id": "ss",
"type": "", "type": "",
"pos": { "pos": {
"x": 30, "x": 385,
"y": 1428 "y": 1428
}, },
"width": 268, "width": 268,
@ -988,7 +988,7 @@
"id": "ss.tt", "id": "ss.tt",
"type": "", "type": "",
"pos": { "pos": {
"x": 105, "x": 460,
"y": 1503 "y": 1503
}, },
"width": 118, "width": 118,
@ -1028,7 +1028,7 @@
"id": "uu", "id": "uu",
"type": "", "type": "",
"pos": { "pos": {
"x": 28, "x": 382,
"y": 1814 "y": 1814
}, },
"width": 273, "width": 273,
@ -1068,7 +1068,7 @@
"id": "uu.vv", "id": "uu.vv",
"type": "", "type": "",
"pos": { "pos": {
"x": 103, "x": 457,
"y": 1889 "y": 1889
}, },
"width": 123, "width": 123,
@ -1108,8 +1108,8 @@
"id": "rm", "id": "rm",
"type": "", "type": "",
"pos": { "pos": {
"x": 102, "x": 457,
"y": 3321 "y": 3330
}, },
"width": 124, "width": 124,
"height": 126, "height": 126,
@ -1148,8 +1148,8 @@
"id": "nn.xx", "id": "nn.xx",
"type": "", "type": "",
"pos": { "pos": {
"x": 185, "x": 311,
"y": 4300 "y": 4310
}, },
"width": 122, "width": 122,
"height": 126, "height": 126,
@ -1188,8 +1188,8 @@
"id": "yy.ab", "id": "yy.ab",
"type": "", "type": "",
"pos": { "pos": {
"x": 143, "x": 458,
"y": 3904 "y": 3924
}, },
"width": 123, "width": 123,
"height": 126, "height": 126,
@ -1228,8 +1228,8 @@
"id": "nn.ac", "id": "nn.ac",
"type": "", "type": "",
"pos": { "pos": {
"x": 327, "x": 453,
"y": 4300 "y": 4310
}, },
"width": 122, "width": 122,
"height": 126, "height": 126,
@ -1292,19 +1292,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 470, "x": 645,
"y": 138 "y": 138
}, },
{ {
"x": 469.5, "x": 646,
"y": 188
},
{
"x": 347.16666666666663,
"y": 188
},
{
"x": 347,
"y": 238 "y": 238
} }
], ],
@ -1339,11 +1331,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 368, "x": 625,
"y": 364 "y": 364
}, },
{ {
"x": 368, "x": 624.5,
"y": 414
},
{
"x": 519,
"y": 414
},
{
"x": 520,
"y": 464 "y": 464
} }
], ],
@ -1378,11 +1378,27 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 510, "x": 605,
"y": 138 "y": 138
}, },
{ {
"x": 510, "x": 604.3333333333333,
"y": 188
},
{
"x": 434,
"y": 188
},
{
"x": 434,
"y": 761
},
{
"x": 376.5,
"y": 761
},
{
"x": 377,
"y": 891 "y": 891
} }
], ],
@ -1417,28 +1433,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 327, "x": 666,
"y": 364 "y": 364
}, },
{ {
"x": 326.66666666666663, "x": 665.5,
"y": 414 "y": 2417
}, },
{ {
"x": 16.5, "x": 320.5,
"y": 414 "y": 2417
}, },
{ {
"x": 16.5, "x": 320,
"y": 2407 "y": 2569
},
{
"x": 363,
"y": 2407
},
{
"x": 363,
"y": 2559
} }
], ],
"animated": false, "animated": false,
@ -1472,11 +1480,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 368, "x": 519,
"y": 590 "y": 590
}, },
{ {
"x": 368, "x": 519,
"y": 891 "y": 891
} }
], ],
@ -1511,11 +1519,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 510, "x": 377,
"y": 1017 "y": 1017
}, },
{ {
"x": 510.16666666666663, "x": 376.5,
"y": 1147
},
{
"x": 301.5,
"y": 1147
},
{
"x": 301.5,
"y": 1197 "y": 1197
} }
], ],
@ -1550,11 +1566,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 510.16666666666663, "x": 301.5,
"y": 1323 "y": 1323
}, },
{ {
"x": 510.16666666666663, "x": 301.5,
"y": 1503 "y": 1503
} }
], ],
@ -1589,11 +1605,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 510.16666666666663, "x": 301.5,
"y": 1629 "y": 1629
}, },
{ {
"x": 510.16666666666663, "x": 301.5,
"y": 1914 "y": 1914
} }
], ],
@ -1628,12 +1644,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 530.5, "x": 281.1666666666667,
"y": 2040 "y": 2040
}, },
{ {
"x": 531, "x": 281.1666666666667,
"y": 2537 "y": 2397
},
{
"x": 153,
"y": 2397
},
{
"x": 153,
"y": 2547
} }
], ],
"animated": false, "animated": false,
@ -1667,12 +1691,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 531, "x": 153,
"y": 2668 "y": 2678
}, },
{ {
"x": 531, "x": 153,
"y": 3195 "y": 3075
},
{
"x": 152.5,
"y": 3075
},
{
"x": 153,
"y": 3205
} }
], ],
"animated": false, "animated": false,
@ -1706,12 +1738,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 531, "x": 153,
"y": 3326 "y": 3336
}, },
{ {
"x": 530.5, "x": 152.5,
"y": 4300 "y": 4180
},
{
"x": 229.66666666666663,
"y": 4180
},
{
"x": 229.66666666666663,
"y": 4310
} }
], ],
"animated": false, "animated": false,
@ -1745,12 +1785,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 384, "x": 300,
"y": 2665 "y": 2675
}, },
{ {
"x": 383.5, "x": 300,
"y": 2688 "y": 2698
} }
], ],
"animated": false, "animated": false,
@ -1784,20 +1824,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 383.5, "x": 300,
"y": 2814 "y": 2824
}, },
{ {
"x": 383.5, "x": 300,
"y": 2944 "y": 3207.5
},
{
"x": 383,
"y": 2944
},
{
"x": 383,
"y": 3197.5
} }
], ],
"animated": false, "animated": false,
@ -1831,12 +1863,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 383, "x": 300,
"y": 3323.5 "y": 3333.5
}, },
{ {
"x": 383, "x": 300,
"y": 3346 "y": 3356
} }
], ],
"animated": false, "animated": false,
@ -1870,19 +1902,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 368, "x": 519,
"y": 1017 "y": 1017
}, },
{ {
"x": 367.66666666666663, "x": 519,
"y": 1147
},
{
"x": 163.99999999999997,
"y": 1147
},
{
"x": 163.99999999999997,
"y": 1503 "y": 1503
} }
], ],
@ -1917,11 +1941,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 164, "x": 519,
"y": 1629 "y": 1629
}, },
{ {
"x": 164, "x": 519,
"y": 1889 "y": 1889
} }
], ],
@ -1956,19 +1980,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 489.8333333333333, "x": 321.83333333333337,
"y": 2040 "y": 2040
}, },
{ {
"x": 489.8333333333333, "x": 321.83333333333337,
"y": 2145 "y": 2145
}, },
{ {
"x": 207.66666666666669, "x": 475.33333333333337,
"y": 2145 "y": 2145
}, },
{ {
"x": 208, "x": 476,
"y": 2195 "y": 2195
} }
], ],
@ -2003,11 +2027,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 164, "x": 519,
"y": 2015 "y": 2015
}, },
{ {
"x": 164, "x": 519,
"y": 2195 "y": 2195
} }
], ],
@ -2042,12 +2066,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 164, "x": 519,
"y": 2347 "y": 2347
}, },
{ {
"x": 164, "x": 519,
"y": 3320.6666666666665 "y": 3330.6666666666665
} }
], ],
"animated": false, "animated": false,
@ -2081,28 +2105,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 143.33333333333331, "x": 498.3333333333333,
"y": 3446.6666666666665 "y": 3456.6666666666665
}, },
{ {
"x": 143.33333333333331, "x": 498.3333333333333,
"y": 3602 "y": 3612
}, },
{ {
"x": 57.166666666666664, "x": 372.16666666666663,
"y": 3602 "y": 3612
}, },
{ {
"x": 57.166666666666664, "x": 372.16666666666663,
"y": 4170 "y": 4310
},
{
"x": 246,
"y": 4170
},
{
"x": 246,
"y": 4300
} }
], ],
"animated": false, "animated": false,
@ -2136,20 +2152,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 383, "x": 300,
"y": 3472 "y": 3482
}, },
{ {
"x": 383, "x": 300,
"y": 3602 "y": 3622
}, },
{ {
"x": 224.66666666666666, "x": 499.66666666666663,
"y": 3602 "y": 3622
}, },
{ {
"x": 225, "x": 500,
"y": 3732 "y": 3752
} }
], ],
"animated": false, "animated": false,
@ -2183,12 +2199,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 184.66666666666666, "x": 539.6666666666666,
"y": 3446.6666666666665 "y": 3456.6666666666665
}, },
{ {
"x": 185, "x": 540,
"y": 3732 "y": 3752
} }
], ],
"animated": false, "animated": false,
@ -2222,12 +2238,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 204, "x": 520,
"y": 3884 "y": 3904
}, },
{ {
"x": 204.5, "x": 519.6666666666666,
"y": 3904 "y": 3924
} }
], ],
"animated": false, "animated": false,
@ -2261,20 +2277,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 204.66666666666666, "x": 519.6666666666666,
"y": 4030 "y": 4050
}, },
{ {
"x": 204.66666666666666, "x": 519.6666666666666,
"y": 4160 "y": 4180
}, },
{ {
"x": 388, "x": 514.1666666666666,
"y": 4160 "y": 4180
}, },
{ {
"x": 388, "x": 514.1666666666666,
"y": 4300 "y": 4310
} }
], ],
"animated": false, "animated": false,
@ -2308,12 +2324,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 388, "x": 514.1666666666666,
"y": 4426 "y": 4436
}, },
{ {
"x": 388, "x": 514,
"y": 4606 "y": 4616
} }
], ],
"animated": false, "animated": false,
@ -2347,20 +2363,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 208, "x": 476,
"y": 2347 "y": 2347
}, },
{ {
"x": 207.66666666666669, "x": 475.33333333333337,
"y": 2397 "y": 2407
}, },
{ {
"x": 404, "x": 279.5,
"y": 2397 "y": 2407
}, },
{ {
"x": 404, "x": 280,
"y": 2559 "y": 2569
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 809 KiB

After

Width:  |  Height:  |  Size: 810 KiB

View file

@ -6,7 +6,7 @@
"id": "a", "id": "a",
"type": "", "type": "",
"pos": { "pos": {
"x": 1657, "x": 12,
"y": 541 "y": 541
}, },
"width": 113, "width": 113,
@ -46,7 +46,7 @@
"id": "b", "id": "b",
"type": "", "type": "",
"pos": { "pos": {
"x": 1524, "x": 1393,
"y": 541 "y": 541
}, },
"width": 113, "width": 113,
@ -86,8 +86,8 @@
"id": "c", "id": "c",
"type": "", "type": "",
"pos": { "pos": {
"x": 578, "x": 722,
"y": 2178 "y": 2168
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -126,8 +126,8 @@
"id": "d", "id": "d",
"type": "", "type": "",
"pos": { "pos": {
"x": 711, "x": 855,
"y": 2178 "y": 2168
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -166,8 +166,8 @@
"id": "e", "id": "e",
"type": "", "type": "",
"pos": { "pos": {
"x": 712, "x": 855,
"y": 2404 "y": 2394
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -206,8 +206,8 @@
"id": "f", "id": "f",
"type": "", "type": "",
"pos": { "pos": {
"x": 447, "x": 989,
"y": 2178 "y": 2168
}, },
"width": 111, "width": 111,
"height": 126, "height": 126,
@ -246,8 +246,8 @@
"id": "g", "id": "g",
"type": "", "type": "",
"pos": { "pos": {
"x": 919, "x": 294,
"y": 2178 "y": 2168
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -286,8 +286,8 @@
"id": "h", "id": "h",
"type": "", "type": "",
"pos": { "pos": {
"x": 1006, "x": 343,
"y": 1311 "y": 1301
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -326,10 +326,10 @@
"id": "i", "id": "i",
"type": "", "type": "",
"pos": { "pos": {
"x": 239, "x": 664,
"y": 1311 "y": 1301
}, },
"width": 746, "width": 683,
"height": 732, "height": 732,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
@ -366,8 +366,8 @@
"id": "i.j", "id": "i.j",
"type": "", "type": "",
"pos": { "pos": {
"x": 517, "x": 878,
"y": 1386 "y": 1376
}, },
"width": 392, "width": 392,
"height": 276, "height": 276,
@ -406,8 +406,8 @@
"id": "i.j.k", "id": "i.j.k",
"type": "", "type": "",
"pos": { "pos": {
"x": 592, "x": 953,
"y": 1461 "y": 1451
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -446,8 +446,8 @@
"id": "i.j.l", "id": "i.j.l",
"type": "", "type": "",
"pos": { "pos": {
"x": 725, "x": 1086,
"y": 1461 "y": 1451
}, },
"width": 109, "width": 109,
"height": 126, "height": 126,
@ -486,8 +486,8 @@
"id": "i.m", "id": "i.m",
"type": "", "type": "",
"pos": { "pos": {
"x": 447, "x": 739,
"y": 1784 "y": 1773
}, },
"width": 117, "width": 117,
"height": 126, "height": 126,
@ -526,8 +526,8 @@
"id": "i.n", "id": "i.n",
"type": "", "type": "",
"pos": { "pos": {
"x": 314, "x": 876,
"y": 1842 "y": 1832
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -566,8 +566,8 @@
"id": "i.o", "id": "i.o",
"type": "", "type": "",
"pos": { "pos": {
"x": 648, "x": 1009,
"y": 1692 "y": 1682
}, },
"width": 263, "width": 263,
"height": 276, "height": 276,
@ -606,8 +606,8 @@
"id": "i.o.p", "id": "i.o.p",
"type": "", "type": "",
"pos": { "pos": {
"x": 723, "x": 1084,
"y": 1767 "y": 1757
}, },
"width": 113, "width": 113,
"height": 126, "height": 126,
@ -646,8 +646,8 @@
"id": "q", "id": "q",
"type": "", "type": "",
"pos": { "pos": {
"x": 313, "x": 1272,
"y": 2178 "y": 2168
}, },
"width": 114, "width": 114,
"height": 126, "height": 126,
@ -686,10 +686,10 @@
"id": "r", "id": "r",
"type": "", "type": "",
"pos": { "pos": {
"x": 12, "x": 145,
"y": 12 "y": 12
}, },
"width": 1492, "width": 1228,
"height": 1179, "height": 1179,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
@ -726,10 +726,10 @@
"id": "r.s", "id": "r.s",
"type": "", "type": "",
"pos": { "pos": {
"x": 87, "x": 220,
"y": 388 "y": 388
}, },
"width": 767, "width": 795,
"height": 577, "height": 577,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
@ -766,7 +766,7 @@
"id": "r.s.t", "id": "r.s.t",
"type": "", "type": "",
"pos": { "pos": {
"x": 669, "x": 295,
"y": 671 "y": 671
}, },
"width": 111, "width": 111,
@ -806,7 +806,7 @@
"id": "r.s.u", "id": "r.s.u",
"type": "", "type": "",
"pos": { "pos": {
"x": 162, "x": 426,
"y": 609 "y": 609
}, },
"width": 264, "width": 264,
@ -846,7 +846,7 @@
"id": "r.s.u.v", "id": "r.s.u.v",
"type": "", "type": "",
"pos": { "pos": {
"x": 237, "x": 501,
"y": 684 "y": 684
}, },
"width": 114, "width": 114,
@ -886,8 +886,8 @@
"id": "r.s.w", "id": "r.s.w",
"type": "", "type": "",
"pos": { "pos": {
"x": 446, "x": 710,
"y": 687 "y": 686
}, },
"width": 118, "width": 118,
"height": 126, "height": 126,
@ -926,7 +926,7 @@
"id": "r.s.x", "id": "r.s.x",
"type": "", "type": "",
"pos": { "pos": {
"x": 467, "x": 693,
"y": 463 "y": 463
}, },
"width": 113, "width": 113,
@ -966,7 +966,7 @@
"id": "r.s.y", "id": "r.s.y",
"type": "", "type": "",
"pos": { "pos": {
"x": 600, "x": 826,
"y": 463 "y": 463
}, },
"width": 114, "width": 114,
@ -1006,7 +1006,7 @@
"id": "r.z", "id": "r.z",
"type": "", "type": "",
"pos": { "pos": {
"x": 238, "x": 502,
"y": 990 "y": 990
}, },
"width": 112, "width": 112,
@ -1046,7 +1046,7 @@
"id": "r.aa", "id": "r.aa",
"type": "", "type": "",
"pos": { "pos": {
"x": 549, "x": 261,
"y": 237 "y": 237
}, },
"width": 122, "width": 122,
@ -1086,7 +1086,7 @@
"id": "r.bb", "id": "r.bb",
"type": "", "type": "",
"pos": { "pos": {
"x": 1014, "x": 403,
"y": 87 "y": 87
}, },
"width": 415, "width": 415,
@ -1126,7 +1126,7 @@
"id": "r.bb.cc", "id": "r.bb.cc",
"type": "", "type": "",
"pos": { "pos": {
"x": 1089, "x": 478,
"y": 162 "y": 162
}, },
"width": 121, "width": 121,
@ -1166,7 +1166,7 @@
"id": "r.bb.dd", "id": "r.bb.dd",
"type": "", "type": "",
"pos": { "pos": {
"x": 1230, "x": 619,
"y": 162 "y": 162
}, },
"width": 124, "width": 124,
@ -1206,7 +1206,7 @@
"id": "r.ee", "id": "r.ee",
"type": "", "type": "",
"pos": { "pos": {
"x": 872, "x": 1033,
"y": 237 "y": 237
}, },
"width": 122, "width": 122,
@ -1246,7 +1246,7 @@
"id": "r.ff", "id": "r.ff",
"type": "", "type": "",
"pos": { "pos": {
"x": 875, "x": 1035,
"y": 388 "y": 388
}, },
"width": 117, "width": 117,
@ -1286,7 +1286,7 @@
"id": "r.gg", "id": "r.gg",
"type": "", "type": "",
"pos": { "pos": {
"x": 691, "x": 1175,
"y": 237 "y": 237
}, },
"width": 123, "width": 123,
@ -1350,20 +1350,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 648, "x": 1010.25,
"y": 1587 "y": 1577
}, },
{ {
"x": 648, "x": 1010.25,
"y": 1677 "y": 1667
}, },
{ {
"x": 534.75, "x": 827.5,
"y": 1677 "y": 1667
}, },
{ {
"x": 534.75, "x": 827.5,
"y": 1783.875 "y": 1773.875
} }
], ],
"animated": false, "animated": false,
@ -1397,12 +1397,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 779, "x": 1141.25,
"y": 1587 "y": 1577
}, },
{ {
"x": 779, "x": 1141.25,
"y": 1767 "y": 1757
} }
], ],
"animated": false, "animated": false,
@ -1436,28 +1436,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 341.5, "x": 1357.75,
"y": 2178 "y": 2168
}, },
{ {
"x": 341.5, "x": 1357.75,
"y": 2098 "y": 1246
}, },
{ {
"x": 228.5, "x": 798.25,
"y": 2098 "y": 1246
}, },
{ {
"x": 228.5, "x": 798.25,
"y": 1256 "y": 1773.875
},
{
"x": 475.75,
"y": 1256
},
{
"x": 475.75,
"y": 1783.875
} }
], ],
"animated": false, "animated": false,
@ -1491,20 +1483,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 466, "x": 837.25,
"y": 1909.875 "y": 1899.875
}, },
{ {
"x": 466, "x": 837.25,
"y": 2098 "y": 2098
}, },
{ {
"x": 398.5, "x": 1300.75,
"y": 2098 "y": 2098
}, },
{ {
"x": 398.5, "x": 1300.75,
"y": 2178 "y": 2168
} }
], ],
"animated": false, "animated": false,
@ -1538,12 +1530,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 370, "x": 933.25,
"y": 1968 "y": 1958
}, },
{ {
"x": 370, "x": 933.25,
"y": 2178 "y": 2088
},
{
"x": 1329.25,
"y": 2088
},
{
"x": 1329.25,
"y": 2168
} }
], ],
"animated": false, "animated": false,
@ -1577,20 +1577,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 505, "x": 778.75,
"y": 1909.875 "y": 1899.875
}, },
{ {
"x": 505, "x": 778.75,
"y": 2118 "y": 2168
},
{
"x": 634.5,
"y": 2118
},
{
"x": 634.5,
"y": 2178
} }
], ],
"animated": false, "animated": false,
@ -1624,20 +1616,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 524.5, "x": 798.25,
"y": 1909.875 "y": 1899.875
}, },
{ {
"x": 524.5, "x": 798.25,
"y": 2108 "y": 2118
}, },
{ {
"x": 768, "x": 912.25,
"y": 2108 "y": 2118
}, },
{ {
"x": 768, "x": 912.25,
"y": 2178 "y": 2168
} }
], ],
"animated": false, "animated": false,
@ -1671,20 +1663,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 544, "x": 759.25,
"y": 1909.875 "y": 1899.875
}, },
{ {
"x": 544, "x": 759.25,
"y": 2098 "y": 2088
}, },
{ {
"x": 957, "x": 370,
"y": 2098 "y": 2088
}, },
{ {
"x": 957, "x": 370,
"y": 2178 "y": 2168
} }
], ],
"animated": false, "animated": false,
@ -1718,20 +1710,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 485.5, "x": 817.75,
"y": 1909.875 "y": 1899.875
}, },
{ {
"x": 485.5, "x": 817.75,
"y": 2128 "y": 2108
}, },
{ {
"x": 502.5, "x": 1044.75,
"y": 2128 "y": 2108
}, },
{ {
"x": 502.5, "x": 1044.75,
"y": 2178 "y": 2168
} }
], ],
"animated": false, "animated": false,
@ -1765,12 +1757,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 768, "x": 912.25,
"y": 2304 "y": 2294
}, },
{ {
"x": 768, "x": 912.25,
"y": 2404 "y": 2394
} }
], ],
"animated": false, "animated": false,
@ -1804,19 +1796,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 542.6666666666666, "x": 731.3333333333333,
"y": 589 "y": 589
}, },
{ {
"x": 542.6666666666666, "x": 731.3333333333333,
"y": 599 "y": 599
}, },
{ {
"x": 696.5833333333333, "x": 378.25,
"y": 599 "y": 599
}, },
{ {
"x": 696.5833333333333, "x": 378.25,
"y": 671 "y": 671
} }
], ],
@ -1851,11 +1843,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 505, "x": 769,
"y": 589 "y": 589
}, },
{ {
"x": 505, "x": 769,
"y": 686.5 "y": 686.5
} }
], ],
@ -1890,11 +1882,19 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 752.0833333333333, "x": 1236.6666666666665,
"y": 363 "y": 363
}, },
{ {
"x": 752.0833333333333, "x": 1236.6666666666665,
"y": 373
},
{
"x": 350.5,
"y": 373
},
{
"x": 350.5,
"y": 671 "y": 671
} }
], ],
@ -1929,11 +1929,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 294, "x": 558,
"y": 810 "y": 810
}, },
{ {
"x": 294, "x": 558,
"y": 990 "y": 990
} }
], ],
@ -1968,19 +1968,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 609.5833333333333, "x": 322.75,
"y": 363 "y": 363
}, },
{ {
"x": 609.5833333333333, "x": 322.75,
"y": 373
},
{
"x": 724.3333333333333,
"y": 373
},
{
"x": 724.3333333333333,
"y": 671 "y": 671
} }
], ],
@ -2015,12 +2007,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 505, "x": 769,
"y": 812.5 "y": 812.5
}, },
{ {
"x": 505, "x": 769,
"y": 1783.875 "y": 1773.875
} }
], ],
"animated": false, "animated": false,
@ -2054,20 +2046,12 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 705.8333333333333, "x": 332,
"y": 797 "y": 797
}, },
{ {
"x": 705.8333333333333, "x": 332,
"y": 1256 "y": 2168
},
{
"x": 995,
"y": 1256
},
{
"x": 995,
"y": 2178
} }
], ],
"animated": false, "animated": false,
@ -2101,20 +2085,20 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 742.8333333333333, "x": 369,
"y": 797 "y": 797
}, },
{ {
"x": 742.8333333333333, "x": 369,
"y": 1246 "y": 1246
}, },
{ {
"x": 1062.5, "x": 399.5,
"y": 1246 "y": 1246
}, },
{ {
"x": 1062.5, "x": 399.5,
"y": 1311 "y": 1301
} }
], ],
"animated": false, "animated": false,
@ -2148,11 +2132,11 @@
"labelPercentage": 0, "labelPercentage": 0,
"route": [ "route": [
{ {
"x": 933.3333333333333, "x": 1094.1666666666665,
"y": 363 "y": 363
}, },
{ {
"x": 933.3333333333333, "x": 1094.1666666666665,
"y": 388 "y": 388
} }
], ],

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 662 KiB

After

Width:  |  Height:  |  Size: 662 KiB

Some files were not shown because too many files have changed in this diff Show more