diff --git a/README.md b/README.md index 18e2f34b9..99f11d3c6 100644 --- a/README.md +++ b/README.md @@ -226,6 +226,7 @@ let us know and we'll be happy to include it here! - **CIL (C#, Visual Basic, F#, C++ CLR) to D2**: [https://github.com/HugoVG/AppDiagram](https://github.com/HugoVG/AppDiagram) - **D2 Snippets (for text editors)**: [https://github.com/Paracelsus-Rose/D2-Language-Code-Snippets](https://github.com/Paracelsus-Rose/D2-Language-Code-Snippets) - **Mongo to D2**: [https://github.com/novuhq/mongo-to-D2](https://github.com/novuhq/mongo-to-D2) +- **Pandoc filter**: [https://github.com/ram02z/d2-filter](https://github.com/ram02z/d2-filter) ### Misc diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 041b8e68b..80566ebb2 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -2,9 +2,12 @@ - Container with constant key near attribute now can have descendant objects and connections [#1071](https://github.com/terrastruct/d2/pull/1071) - Multi-board SVG outputs with internal links go to their output paths [#1116](https://github.com/terrastruct/d2/pull/1116) +- New grid layout to place nodes in rows and columns [#1122](https://github.com/terrastruct/d2/pull/1122) #### Improvements 🧹 +- Labels on parallel `dagre` connections include a gap between them [#1134](https://github.com/terrastruct/d2/pull/1134) + #### Bugfixes ⛑️ - Fix a bug in 32bit builds [#1115](https://github.com/terrastruct/d2/issues/1115) diff --git a/d2compiler/compile.go b/d2compiler/compile.go index e75d791f7..3050a19f8 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -73,6 +73,7 @@ func (c *compiler) compileBoard(g *d2graph.Graph, ir *d2ir.Map) *d2graph.Graph { c.validateKeys(g.Root, ir) } c.validateNear(g) + c.validateEdges(g) c.compileBoardsField(g, ir, "layers") c.compileBoardsField(g, ir, "scenarios") @@ -362,6 +363,32 @@ func (c *compiler) compileReserved(attrs *d2graph.Attributes, f *d2ir.Field) { } attrs.Constraint.Value = scalar.ScalarString() attrs.Constraint.MapKey = f.LastPrimaryKey() + case "grid-rows": + v, err := strconv.Atoi(scalar.ScalarString()) + if err != nil { + c.errorf(scalar, "non-integer grid-rows %#v: %s", scalar.ScalarString(), err) + return + } + if v <= 0 { + c.errorf(scalar, "grid-rows must be a positive integer: %#v", scalar.ScalarString()) + return + } + attrs.GridRows = &d2graph.Scalar{} + attrs.GridRows.Value = scalar.ScalarString() + attrs.GridRows.MapKey = f.LastPrimaryKey() + case "grid-columns": + v, err := strconv.Atoi(scalar.ScalarString()) + if err != nil { + c.errorf(scalar, "non-integer grid-columns %#v: %s", scalar.ScalarString(), err) + return + } + if v <= 0 { + c.errorf(scalar, "grid-columns must be a positive integer: %#v", scalar.ScalarString()) + return + } + attrs.GridColumns = &d2graph.Scalar{} + attrs.GridColumns.Value = scalar.ScalarString() + attrs.GridColumns.MapKey = f.LastPrimaryKey() } if attrs.Link != nil && attrs.Tooltip != nil { @@ -678,6 +705,13 @@ func (c *compiler) validateKey(obj *d2graph.Object, f *d2ir.Field) { if !in && arrowheadIn { c.errorf(f.LastPrimaryKey(), fmt.Sprintf(`invalid shape, can only set "%s" for arrowheads`, obj.Attributes.Shape.Value)) } + case "grid-rows", "grid-columns": + for _, child := range obj.ChildrenArray { + if child.IsContainer() { + c.errorf(f.LastPrimaryKey(), + fmt.Sprintf(`%#v can only be used on containers with one level of nesting right now. (%#v has nested %#v)`, keyword, child.AbsID(), child.ChildrenArray[0].ID)) + } + } } return } @@ -765,6 +799,19 @@ func (c *compiler) validateNear(g *d2graph.Graph) { } +func (c *compiler) validateEdges(g *d2graph.Graph) { + for _, edge := range g.Edges { + if gd := edge.Src.Parent.ClosestGridDiagram(); gd != nil { + c.errorf(edge.GetAstEdge(), "edges in grid diagrams are not supported yet") + continue + } + if gd := edge.Dst.Parent.ClosestGridDiagram(); gd != nil { + c.errorf(edge.GetAstEdge(), "edges in grid diagrams are not supported yet") + continue + } + } +} + func (c *compiler) validateBoardLinks(g *d2graph.Graph) { for _, obj := range g.Objects { if obj.Attributes.Link == nil { diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index 4a66b8e85..b50629d94 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -2270,6 +2270,56 @@ obj { `, expErr: `d2/testdata/d2compiler/TestCompile/near_near_const.d2:7:8: near keys cannot be set to an object with a constant near key`, }, + { + name: "grid", + text: `hey: { + grid-rows: 200 + grid-columns: 230 +} +`, + assertions: func(t *testing.T, g *d2graph.Graph) { + tassert.Equal(t, "200", g.Objects[0].Attributes.GridRows.Value) + }, + }, + { + name: "grid_negative", + text: `hey: { + grid-rows: 200 + grid-columns: -200 +} +`, + expErr: `d2/testdata/d2compiler/TestCompile/grid_negative.d2:3:16: grid-columns must be a positive integer: "-200"`, + }, + { + name: "grid_edge", + text: `hey: { + grid-rows: 1 + a -> b +} + c -> hey.b + hey.a -> c + + hey -> c: ok +`, + expErr: `d2/testdata/d2compiler/TestCompile/grid_edge.d2:3:2: edges in grid diagrams are not supported yet +d2/testdata/d2compiler/TestCompile/grid_edge.d2:5:2: edges in grid diagrams are not supported yet +d2/testdata/d2compiler/TestCompile/grid_edge.d2:6:2: edges in grid diagrams are not supported yet`, + }, + { + name: "grid_nested", + text: `hey: { + grid-rows: 200 + grid-columns: 200 + + a + b + c + d.invalid descendant +} +`, + expErr: `d2/testdata/d2compiler/TestCompile/grid_nested.d2:2:2: "grid-rows" can only be used on containers with one level of nesting right now. ("hey.d" has nested "invalid descendant") +d2/testdata/d2compiler/TestCompile/grid_nested.d2:3:2: "grid-columns" can only be used on containers with one level of nesting right now. ("hey.d" has nested "invalid descendant")`, + }, } for _, tc := range testCases { diff --git a/d2exporter/export_test.go b/d2exporter/export_test.go index effcc07a8..bc6f47010 100644 --- a/d2exporter/export_test.go +++ b/d2exporter/export_test.go @@ -16,6 +16,7 @@ import ( "oss.terrastruct.com/d2/d2compiler" "oss.terrastruct.com/d2/d2exporter" "oss.terrastruct.com/d2/d2layouts/d2dagrelayout" + "oss.terrastruct.com/d2/d2layouts/d2grid" "oss.terrastruct.com/d2/d2layouts/d2sequence" "oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/lib/geo" @@ -231,7 +232,7 @@ func run(t *testing.T, tc testCase) { err = g.SetDimensions(nil, ruler, nil) assert.JSON(t, nil, err) - err = d2sequence.Layout(ctx, g, d2dagrelayout.DefaultLayout) + err = d2sequence.Layout(ctx, g, d2grid.Layout(ctx, g, d2dagrelayout.DefaultLayout)) if err != nil { t.Fatal(err) } diff --git a/d2graph/d2graph.go b/d2graph/d2graph.go index 5f966ddfc..64f1aaebf 100644 --- a/d2graph/d2graph.go +++ b/d2graph/d2graph.go @@ -1,6 +1,7 @@ package d2graph import ( + "context" "errors" "fmt" "math" @@ -67,6 +68,8 @@ func (g *Graph) RootBoard() *Graph { return g } +type LayoutGraph func(context.Context, *Graph) error + // TODO consider having different Scalar types // Right now we'll hold any types in Value and just convert, e.g. floats type Scalar struct { @@ -129,6 +132,9 @@ type Attributes struct { Direction Scalar `json:"direction"` Constraint Scalar `json:"constraint"` + + GridRows *Scalar `json:"gridRows,omitempty"` + GridColumns *Scalar `json:"gridColumns,omitempty"` } // TODO references at the root scope should have their Scope set to root graph AST @@ -1017,6 +1023,10 @@ type EdgeReference struct { ScopeObj *Object `json:"-"` } +func (e *Edge) GetAstEdge() *d2ast.Edge { + return e.References[0].Edge +} + func (e *Edge) GetStroke(dashGapSize interface{}) string { if dashGapSize != 0.0 { return color.B2 @@ -1531,19 +1541,21 @@ var ReservedKeywords2 map[string]struct{} // Non Style/Holder keywords. var SimpleReservedKeywords = map[string]struct{}{ - "label": {}, - "desc": {}, - "shape": {}, - "icon": {}, - "constraint": {}, - "tooltip": {}, - "link": {}, - "near": {}, - "width": {}, - "height": {}, - "direction": {}, - "top": {}, - "left": {}, + "label": {}, + "desc": {}, + "shape": {}, + "icon": {}, + "constraint": {}, + "tooltip": {}, + "link": {}, + "near": {}, + "width": {}, + "height": {}, + "direction": {}, + "top": {}, + "left": {}, + "grid-rows": {}, + "grid-columns": {}, } // ReservedKeywordHolders are reserved keywords that are meaningless on its own and exist solely to hold a set of reserved keywords diff --git a/d2graph/grid_diagram.go b/d2graph/grid_diagram.go new file mode 100644 index 000000000..6c40667a5 --- /dev/null +++ b/d2graph/grid_diagram.go @@ -0,0 +1,16 @@ +package d2graph + +func (obj *Object) IsGridDiagram() bool { + return obj != nil && obj.Attributes != nil && + (obj.Attributes.GridRows != nil || obj.Attributes.GridColumns != nil) +} + +func (obj *Object) ClosestGridDiagram() *Object { + if obj == nil { + return nil + } + if obj.IsGridDiagram() { + return obj + } + return obj.Parent.ClosestGridDiagram() +} diff --git a/d2layouts/d2dagrelayout/layout.go b/d2layouts/d2dagrelayout/layout.go index dec8c164e..afa676dc0 100644 --- a/d2layouts/d2dagrelayout/layout.go +++ b/d2layouts/d2dagrelayout/layout.go @@ -33,6 +33,7 @@ var dagreJS string const ( MIN_SEGMENT_LEN = 10 MIN_RANK_SEP = 60 + EDGE_LABEL_GAP = 20 ) type ConfigurableOpts struct { @@ -173,37 +174,30 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err } } for _, edge := range g.Edges { - // dagre doesn't work with edges to containers so we connect container edges to their first child instead (going all the way down) - // we will chop the edge where it intersects the container border so it only shows the edge from the container - src := edge.Src - for len(src.Children) > 0 && src.Class == nil && src.SQLTable == nil { - // We want to get the bottom node of sources, setting its rank higher than all children - src = getLongestEdgeChainTail(g, src) - } - dst := edge.Dst - for len(dst.Children) > 0 && dst.Class == nil && dst.SQLTable == nil { - dst = dst.ChildrenArray[0] + src, dst := getEdgeEndpoints(g, edge) - // We want to get the top node of destinations - for _, child := range dst.ChildrenArray { - isHead := true - for _, e := range g.Edges { - if inContainer(e.Src, child) != nil && inContainer(e.Dst, dst) != nil { - isHead = false - break - } - } - if isHead { - dst = child - break - } + width := edge.LabelDimensions.Width + height := edge.LabelDimensions.Height + + numEdges := 0 + for _, e := range g.Edges { + otherSrc, otherDst := getEdgeEndpoints(g, e) + if (otherSrc == src && otherDst == dst) || (otherSrc == dst && otherDst == src) { + numEdges++ } } - if edge.SrcArrow && !edge.DstArrow { - // for `b <- a`, edge.Edge is `a -> b` and we expect this routing result - src, dst = dst, src + + // We want to leave some gap between multiple edges + if numEdges > 1 { + switch g.Root.Attributes.Direction.Value { + case "down", "up", "": + width += EDGE_LABEL_GAP + case "left", "right": + height += EDGE_LABEL_GAP + } } - loadScript += generateAddEdgeLine(src.AbsID(), dst.AbsID(), edge.AbsID(), edge.LabelDimensions.Width, edge.LabelDimensions.Height) + + loadScript += generateAddEdgeLine(src.AbsID(), dst.AbsID(), edge.AbsID(), width, height) } if debugJS { @@ -528,6 +522,40 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err return nil } +func getEdgeEndpoints(g *d2graph.Graph, edge *d2graph.Edge) (*d2graph.Object, *d2graph.Object) { + // dagre doesn't work with edges to containers so we connect container edges to their first child instead (going all the way down) + // we will chop the edge where it intersects the container border so it only shows the edge from the container + src := edge.Src + for len(src.Children) > 0 && src.Class == nil && src.SQLTable == nil { + // We want to get the bottom node of sources, setting its rank higher than all children + src = getLongestEdgeChainTail(g, src) + } + dst := edge.Dst + for len(dst.Children) > 0 && dst.Class == nil && dst.SQLTable == nil { + dst = dst.ChildrenArray[0] + + // We want to get the top node of destinations + for _, child := range dst.ChildrenArray { + isHead := true + for _, e := range g.Edges { + if inContainer(e.Src, child) != nil && inContainer(e.Dst, dst) != nil { + isHead = false + break + } + } + if isHead { + dst = child + break + } + } + } + if edge.SrcArrow && !edge.DstArrow { + // for `b <- a`, edge.Edge is `a -> b` and we expect this routing result + src, dst = dst, src + } + return src, dst +} + func setGraphAttrs(attrs dagreOpts) string { return fmt.Sprintf(`g.setGraph({ ranksep: %d, diff --git a/d2layouts/d2grid/grid_diagram.go b/d2layouts/d2grid/grid_diagram.go new file mode 100644 index 000000000..264bc07cc --- /dev/null +++ b/d2layouts/d2grid/grid_diagram.go @@ -0,0 +1,87 @@ +package d2grid + +import ( + "strconv" + "strings" + + "oss.terrastruct.com/d2/d2graph" +) + +type gridDiagram struct { + root *d2graph.Object + objects []*d2graph.Object + rows int + columns int + + // if true, place objects left to right along rows + // if false, place objects top to bottom along columns + rowDirected bool + + width float64 + height float64 +} + +func newGridDiagram(root *d2graph.Object) *gridDiagram { + gd := gridDiagram{root: root, objects: root.ChildrenArray} + if root.Attributes.GridRows != nil { + gd.rows, _ = strconv.Atoi(root.Attributes.GridRows.Value) + } + if root.Attributes.GridColumns != nil { + gd.columns, _ = strconv.Atoi(root.Attributes.GridColumns.Value) + } + + if gd.rows != 0 && gd.columns != 0 { + // . row-directed column-directed + // . ┌───────┐ ┌───────┐ + // . │ a b c │ │ a d g │ + // . │ d e f │ │ b e h │ + // . │ g h i │ │ c f i │ + // . └───────┘ └───────┘ + // if keyword rows is first, make it row-directed, if columns is first it is column-directed + if root.Attributes.GridRows.MapKey.Range.Before(root.Attributes.GridColumns.MapKey.Range) { + gd.rowDirected = true + } + + // rows and columns specified, but we want to continue naturally if user enters more objects + // e.g. 2 rows, 3 columns specified + g added: │ with 3 columns, 2 rows: + // . original add row add column │ original add row add column + // . ┌───────┐ ┌───────┐ ┌─────────┐ │ ┌───────┐ ┌───────┐ ┌─────────┐ + // . │ a b c │ │ a b c │ │ a b c d │ │ │ a c e │ │ a d g │ │ a c e g │ + // . │ d e f │ │ d e f │ │ e f g │ │ │ b d f │ │ b e │ │ b d f │ + // . └───────┘ │ g │ └─────────┘ │ └───────┘ │ c f │ └─────────┘ + // . └───────┘ ▲ │ └───────┘ ▲ + // . ▲ └─existing objects modified│ ▲ └─existing columns preserved + // . └─existing rows preserved │ └─existing objects modified + capacity := gd.rows * gd.columns + for capacity < len(gd.objects) { + if gd.rowDirected { + gd.rows++ + capacity += gd.columns + } else { + gd.columns++ + capacity += gd.rows + } + } + } else if gd.columns == 0 { + gd.rowDirected = true + } + + return &gd +} + +func (gd *gridDiagram) shift(dx, dy float64) { + for _, obj := range gd.objects { + obj.TopLeft.X += dx + obj.TopLeft.Y += dy + } +} + +func (gd *gridDiagram) cleanup(obj *d2graph.Object, graph *d2graph.Graph) { + obj.Children = make(map[string]*d2graph.Object) + obj.ChildrenArray = make([]*d2graph.Object, 0) + for _, child := range gd.objects { + obj.Children[strings.ToLower(child.ID)] = child + obj.ChildrenArray = append(obj.ChildrenArray, child) + } + graph.Objects = append(graph.Objects, gd.objects...) +} diff --git a/d2layouts/d2grid/layout.go b/d2layouts/d2grid/layout.go new file mode 100644 index 000000000..1edae9066 --- /dev/null +++ b/d2layouts/d2grid/layout.go @@ -0,0 +1,578 @@ +package d2grid + +import ( + "context" + "math" + "sort" + + "oss.terrastruct.com/d2/d2graph" + "oss.terrastruct.com/d2/lib/geo" + "oss.terrastruct.com/d2/lib/label" + "oss.terrastruct.com/util-go/go2" +) + +const ( + CONTAINER_PADDING = 60 + HORIZONTAL_PAD = 40. + VERTICAL_PAD = 40. +) + +// Layout runs the grid layout on containers with rows/columns +// Note: children are not allowed edges or descendants +// +// 1. Traverse graph from root, skip objects with no rows/columns +// 2. Construct a grid with the container children +// 3. Remove the children from the main graph +// 4. Run grid layout +// 5. Set the resulting dimensions to the main graph shape +// 6. Run core layouts (without grid children) +// 7. Put grid children back in correct location +func Layout(ctx context.Context, g *d2graph.Graph, layout d2graph.LayoutGraph) d2graph.LayoutGraph { + return func(ctx context.Context, g *d2graph.Graph) error { + gridDiagrams, objectOrder, err := withoutGridDiagrams(ctx, g) + if err != nil { + return err + } + + if g.Root.IsGridDiagram() && len(g.Root.ChildrenArray) != 0 { + g.Root.TopLeft = geo.NewPoint(0, 0) + } else if err := layout(ctx, g); err != nil { + return err + } + + cleanup(g, gridDiagrams, objectOrder) + return nil + } +} + +func withoutGridDiagrams(ctx context.Context, g *d2graph.Graph) (gridDiagrams map[string]*gridDiagram, objectOrder map[string]int, err error) { + toRemove := make(map[*d2graph.Object]struct{}) + gridDiagrams = make(map[string]*gridDiagram) + + if len(g.Objects) > 0 { + queue := make([]*d2graph.Object, 1, len(g.Objects)) + queue[0] = g.Root + for len(queue) > 0 { + obj := queue[0] + queue = queue[1:] + if len(obj.ChildrenArray) == 0 { + continue + } + if !obj.IsGridDiagram() { + queue = append(queue, obj.ChildrenArray...) + continue + } + + gd, err := layoutGrid(g, obj) + if err != nil { + return nil, nil, err + } + obj.Children = make(map[string]*d2graph.Object) + obj.ChildrenArray = nil + + var dx, dy float64 + width := gd.width + 2*CONTAINER_PADDING + labelWidth := float64(obj.LabelDimensions.Width) + 2*label.PADDING + if labelWidth > width { + dx = (labelWidth - width) / 2 + width = labelWidth + } + height := gd.height + 2*CONTAINER_PADDING + labelHeight := float64(obj.LabelDimensions.Height) + 2*label.PADDING + if labelHeight > CONTAINER_PADDING { + // if the label doesn't fit within the padding, we need to add more + grow := labelHeight - CONTAINER_PADDING + dy = grow / 2 + height += grow + } + // we need to center children if we have to expand to fit the container label + if dx != 0 || dy != 0 { + gd.shift(dx, dy) + } + obj.Box = geo.NewBox(nil, width, height) + + obj.LabelPosition = go2.Pointer(string(label.InsideTopCenter)) + gridDiagrams[obj.AbsID()] = gd + + for _, o := range gd.objects { + toRemove[o] = struct{}{} + } + } + } + + objectOrder = make(map[string]int) + layoutObjects := make([]*d2graph.Object, 0, len(toRemove)) + for i, obj := range g.Objects { + objectOrder[obj.AbsID()] = i + if _, exists := toRemove[obj]; !exists { + layoutObjects = append(layoutObjects, obj) + } + } + g.Objects = layoutObjects + + return gridDiagrams, objectOrder, nil +} + +func layoutGrid(g *d2graph.Graph, obj *d2graph.Object) (*gridDiagram, error) { + gd := newGridDiagram(obj) + + if gd.rows != 0 && gd.columns != 0 { + gd.layoutEvenly(g, obj) + } else { + gd.layoutDynamic(g, obj) + } + + // position labels and icons + for _, o := range gd.objects { + if o.Attributes.Icon != nil { + o.LabelPosition = go2.Pointer(string(label.InsideTopCenter)) + o.IconPosition = go2.Pointer(string(label.InsideMiddleCenter)) + } else { + o.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter)) + } + } + + return gd, nil +} + +func (gd *gridDiagram) layoutEvenly(g *d2graph.Graph, obj *d2graph.Object) { + // layout objects in a grid with these 2 properties: + // all objects in the same row should have the same height + // all objects in the same column should have the same width + + getObject := func(rowIndex, columnIndex int) *d2graph.Object { + var index int + if gd.rowDirected { + index = rowIndex*gd.columns + columnIndex + } else { + index = columnIndex*gd.rows + rowIndex + } + if index < len(gd.objects) { + return gd.objects[index] + } + return nil + } + + rowHeights := make([]float64, 0, gd.rows) + colWidths := make([]float64, 0, gd.columns) + for i := 0; i < gd.rows; i++ { + rowHeight := 0. + for j := 0; j < gd.columns; j++ { + o := getObject(i, j) + if o == nil { + break + } + rowHeight = math.Max(rowHeight, o.Height) + } + rowHeights = append(rowHeights, rowHeight) + } + for j := 0; j < gd.columns; j++ { + columnWidth := 0. + for i := 0; i < gd.rows; i++ { + o := getObject(i, j) + if o == nil { + break + } + columnWidth = math.Max(columnWidth, o.Width) + } + colWidths = append(colWidths, columnWidth) + } + + cursor := geo.NewPoint(0, 0) + if gd.rowDirected { + for i := 0; i < gd.rows; i++ { + for j := 0; j < gd.columns; j++ { + o := getObject(i, j) + if o == nil { + break + } + o.Width = colWidths[j] + o.Height = rowHeights[i] + o.TopLeft = cursor.Copy() + cursor.X += o.Width + HORIZONTAL_PAD + } + cursor.X = 0 + cursor.Y += rowHeights[i] + VERTICAL_PAD + } + } else { + for j := 0; j < gd.columns; j++ { + for i := 0; i < gd.rows; i++ { + o := getObject(i, j) + if o == nil { + break + } + o.Width = colWidths[j] + o.Height = rowHeights[i] + o.TopLeft = cursor.Copy() + cursor.Y += o.Height + VERTICAL_PAD + } + cursor.X += colWidths[j] + HORIZONTAL_PAD + cursor.Y = 0 + } + } + + var totalWidth, totalHeight float64 + for _, w := range colWidths { + totalWidth += w + HORIZONTAL_PAD + } + for _, h := range rowHeights { + totalHeight += h + VERTICAL_PAD + } + totalWidth -= HORIZONTAL_PAD + totalHeight -= VERTICAL_PAD + gd.width = totalWidth + gd.height = totalHeight +} + +func (gd *gridDiagram) layoutDynamic(g *d2graph.Graph, obj *d2graph.Object) { + // assume we have the following objects to layout: + // . ┌A──────────────┐ ┌B──┐ ┌C─────────┐ ┌D────────┐ ┌E────────────────┐ + // . └───────────────┘ │ │ │ │ │ │ │ │ + // . │ │ └──────────┘ │ │ │ │ + // . │ │ │ │ └─────────────────┘ + // . └───┘ │ │ + // . └─────────┘ + // Note: if the grid is row dominant, all objects should be the same height (same width if column dominant) + // . ┌A─────────────┐ ┌B──┐ ┌C─────────┐ ┌D────────┐ ┌E────────────────┐ + // . ├ ─ ─ ─ ─ ─ ─ ─┤ │ │ │ │ │ │ │ │ + // . │ │ │ │ ├ ─ ─ ─ ─ ─┤ │ │ │ │ + // . │ │ │ │ │ │ │ │ ├ ─ ─ ─ ─ ─ ─ ─ ─ ┤ + // . │ │ ├ ─ ┤ │ │ │ │ │ │ + // . └──────────────┘ └───┘ └──────────┘ └─────────┘ └─────────────────┘ + + // we want to split up the total width across the N rows or columns as evenly as possible + var totalWidth, totalHeight float64 + for _, o := range gd.objects { + totalWidth += o.Width + totalHeight += o.Height + } + totalWidth += HORIZONTAL_PAD * float64(len(gd.objects)-gd.rows) + totalHeight += VERTICAL_PAD * float64(len(gd.objects)-gd.columns) + + var layout [][]*d2graph.Object + if gd.rowDirected { + targetWidth := totalWidth / float64(gd.rows) + layout = gd.getBestLayout(targetWidth, false) + } else { + targetHeight := totalHeight / float64(gd.columns) + layout = gd.getBestLayout(targetHeight, true) + } + + cursor := geo.NewPoint(0, 0) + var maxY, maxX float64 + if gd.rowDirected { + // if we have 2 rows, then each row's objects should have the same height + // . ┌A─────────────┐ ┌B──┐ ┌C─────────┐ ┬ maxHeight(A,B,C) + // . ├ ─ ─ ─ ─ ─ ─ ─┤ │ │ │ │ │ + // . │ │ │ │ ├ ─ ─ ─ ─ ─┤ │ + // . │ │ │ │ │ │ │ + // . └──────────────┘ └───┘ └──────────┘ ┴ + // . ┌D────────┐ ┌E────────────────┐ ┬ maxHeight(D,E) + // . │ │ │ │ │ + // . │ │ │ │ │ + // . │ │ ├ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │ + // . │ │ │ │ │ + // . └─────────┘ └─────────────────┘ ┴ + rowWidths := []float64{} + for _, row := range layout { + rowHeight := 0. + for _, o := range row { + o.TopLeft = cursor.Copy() + cursor.X += o.Width + HORIZONTAL_PAD + rowHeight = math.Max(rowHeight, o.Height) + } + rowWidth := cursor.X - HORIZONTAL_PAD + rowWidths = append(rowWidths, rowWidth) + maxX = math.Max(maxX, rowWidth) + + // set all objects in row to the same height + for _, o := range row { + o.Height = rowHeight + } + + // new row + cursor.X = 0 + cursor.Y += rowHeight + VERTICAL_PAD + } + maxY = cursor.Y - VERTICAL_PAD + + // then expand thinnest objects to make each row the same width + // . ┌A─────────────┐ ┌B──┐ ┌C─────────┐ ┬ maxHeight(A,B,C) + // . │ │ │ │ │ │ │ + // . │ │ │ │ │ │ │ + // . │ │ │ │ │ │ │ + // . └──────────────┘ └───┘ └──────────┘ ┴ + // . ┌D────────┬────┐ ┌E────────────────┐ ┬ maxHeight(D,E) + // . │ │ │ │ │ + // . │ │ │ │ │ │ + // . │ │ │ │ │ + // . │ │ │ │ │ │ + // . └─────────┴────┘ └─────────────────┘ ┴ + for i, row := range layout { + rowWidth := rowWidths[i] + if rowWidth == maxX { + continue + } + delta := maxX - rowWidth + objects := []*d2graph.Object{} + var widest float64 + for _, o := range row { + widest = math.Max(widest, o.Width) + objects = append(objects, o) + } + sort.Slice(objects, func(i, j int) bool { + return objects[i].Width < objects[j].Width + }) + // expand smaller objects to fill remaining space + for _, o := range objects { + if o.Width < widest { + var index int + for i, rowObj := range row { + if o == rowObj { + index = i + break + } + } + grow := math.Min(widest-o.Width, delta) + o.Width += grow + // shift following objects + for i := index + 1; i < len(row); i++ { + row[i].TopLeft.X += grow + } + delta -= grow + if delta <= 0 { + break + } + } + } + if delta > 0 { + grow := delta / float64(len(row)) + for i := len(row) - 1; i >= 0; i-- { + o := row[i] + o.TopLeft.X += grow * float64(i) + o.Width += grow + delta -= grow + } + } + } + } else { + // if we have 3 columns, then each column's objects should have the same width + // . ├maxWidth(A,B)─┤ ├maxW(C,D)─┤ ├maxWidth(E)──────┤ + // . ┌A─────────────┐ ┌C─────────┐ ┌E────────────────┐ + // . └──────────────┘ │ │ │ │ + // . ┌B──┬──────────┐ └──────────┘ │ │ + // . │ │ ┌D────────┬┐ └─────────────────┘ + // . │ │ │ │ │ + // . │ │ │ ││ + // . └───┴──────────┘ │ │ + // . │ ││ + // . └─────────┴┘ + colHeights := []float64{} + for _, column := range layout { + colWidth := 0. + for _, o := range column { + o.TopLeft = cursor.Copy() + cursor.Y += o.Height + VERTICAL_PAD + colWidth = math.Max(colWidth, o.Width) + } + colHeight := cursor.Y - VERTICAL_PAD + colHeights = append(colHeights, colHeight) + maxY = math.Max(maxY, colHeight) + // set all objects in column to the same width + for _, o := range column { + o.Width = colWidth + } + + // new column + cursor.Y = 0 + cursor.X += colWidth + HORIZONTAL_PAD + } + maxX = cursor.X - HORIZONTAL_PAD + // then expand shortest objects to make each column the same height + // . ├maxWidth(A,B)─┤ ├maxW(C,D)─┤ ├maxWidth(E)──────┤ + // . ┌A─────────────┐ ┌C─────────┐ ┌E────────────────┐ + // . ├ ─ ─ ─ ─ ─ ─ ┤ │ │ │ │ + // . │ │ └──────────┘ │ │ + // . └──────────────┘ ┌D─────────┐ ├ ─ ─ ─ ─ ─ ─ ─ ─ ┤ + // . ┌B─────────────┐ │ │ │ │ + // . │ │ │ │ │ │ + // . │ │ │ │ │ │ + // . │ │ │ │ │ │ + // . └──────────────┘ └──────────┘ └─────────────────┘ + for i, column := range layout { + colHeight := colHeights[i] + if colHeight == maxY { + continue + } + delta := maxY - colHeight + objects := []*d2graph.Object{} + var tallest float64 + for _, o := range column { + tallest = math.Max(tallest, o.Height) + objects = append(objects, o) + } + sort.Slice(objects, func(i, j int) bool { + return objects[i].Height < objects[j].Height + }) + // expand smaller objects to fill remaining space + for _, o := range objects { + if o.Height < tallest { + var index int + for i, colObj := range column { + if o == colObj { + index = i + break + } + } + grow := math.Min(tallest-o.Height, delta) + o.Height += grow + // shift following objects + for i := index + 1; i < len(column); i++ { + column[i].TopLeft.Y += grow + } + delta -= grow + if delta <= 0 { + break + } + } + } + if delta > 0 { + grow := delta / float64(len(column)) + for i := len(column) - 1; i >= 0; i-- { + o := column[i] + o.TopLeft.Y += grow * float64(i) + o.Height += grow + delta -= grow + } + } + } + } + gd.width = maxX + gd.height = maxY +} + +// generate the best layout of objects aiming for each row to be the targetSize width +// if columns is true, each column aims to have the targetSize height +func (gd *gridDiagram) getBestLayout(targetSize float64, columns bool) [][]*d2graph.Object { + var nCuts int + if columns { + nCuts = gd.columns - 1 + } else { + nCuts = gd.rows - 1 + } + if nCuts == 0 { + return genLayout(gd.objects, nil) + } + + // get all options for where to place these cuts, preferring later cuts over earlier cuts + // with 5 objects and 2 cuts we have these options: + // . A B C │ D │ E <- these cuts would produce: ┌A─┐ ┌B─┐ ┌C─┐ + // . A B │ C D │ E └──┘ └──┘ └──┘ + // . A │ B C D │ E ┌D───────────┐ + // . A B │ C │ D E └────────────┘ + // . A │ B C │ D E ┌E───────────┐ + // . A │ B │ C D E └────────────┘ + divisions := genDivisions(gd.objects, nCuts) + + var bestLayout [][]*d2graph.Object + bestDist := math.MaxFloat64 + // of these divisions, find the layout with rows closest to the targetSize + for _, division := range divisions { + layout := genLayout(gd.objects, division) + dist := getDistToTarget(layout, targetSize, columns) + if dist < bestDist { + bestLayout = layout + bestDist = dist + } + } + + return bestLayout +} + +// get all possible divisions of objects by the number of cuts +func genDivisions(objects []*d2graph.Object, nCuts int) (divisions [][]int) { + if len(objects) < 2 || nCuts == 0 { + return nil + } + // we go in this order to prefer extra objects in starting rows rather than later ones + lastObj := len(objects) - 1 + for index := lastObj; index >= nCuts; index-- { + if nCuts > 1 { + for _, inner := range genDivisions(objects[:index], nCuts-1) { + divisions = append(divisions, append(inner, index-1)) + } + } else { + divisions = append(divisions, []int{index - 1}) + } + } + + return divisions +} + +// generate a grid of objects from the given cut indices +func genLayout(objects []*d2graph.Object, cutIndices []int) [][]*d2graph.Object { + layout := make([][]*d2graph.Object, len(cutIndices)+1) + objIndex := 0 + for i := 0; i <= len(cutIndices); i++ { + var stop int + if i < len(cutIndices) { + stop = cutIndices[i] + } else { + stop = len(objects) - 1 + } + for ; objIndex <= stop; objIndex++ { + layout[i] = append(layout[i], objects[objIndex]) + } + } + return layout +} + +func getDistToTarget(layout [][]*d2graph.Object, targetSize float64, columns bool) float64 { + totalDelta := 0. + for _, row := range layout { + rowSize := 0. + for _, o := range row { + if columns { + rowSize += o.Height + VERTICAL_PAD + } else { + rowSize += o.Width + HORIZONTAL_PAD + } + } + totalDelta += math.Abs(rowSize - targetSize) + } + return totalDelta +} + +// cleanup restores the graph after the core layout engine finishes +// - translating the grid to its position placed by the core layout engine +// - restore the children of the grid +// - sorts objects to their original graph order +func cleanup(graph *d2graph.Graph, gridDiagrams map[string]*gridDiagram, objectsOrder map[string]int) { + defer func() { + sort.SliceStable(graph.Objects, func(i, j int) bool { + return objectsOrder[graph.Objects[i].AbsID()] < objectsOrder[graph.Objects[j].AbsID()] + }) + }() + + if graph.Root.IsGridDiagram() { + gd, exists := gridDiagrams[graph.Root.AbsID()] + if exists { + gd.cleanup(graph.Root, graph) + return + } + } + + for _, obj := range graph.Objects { + gd, exists := gridDiagrams[obj.AbsID()] + if !exists { + continue + } + obj.LabelPosition = go2.Pointer(string(label.InsideTopCenter)) + // shift the grid from (0, 0) + gd.shift( + obj.TopLeft.X+CONTAINER_PADDING, + obj.TopLeft.Y+CONTAINER_PADDING, + ) + gd.cleanup(obj, graph) + } +} diff --git a/d2layouts/d2near/layout.go b/d2layouts/d2near/layout.go index 0359b2b70..07cfef4d1 100644 --- a/d2layouts/d2near/layout.go +++ b/d2layouts/d2near/layout.go @@ -59,7 +59,7 @@ func Layout(ctx context.Context, g *d2graph.Graph, constantNearGraphs []*d2graph 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, tempGraph.Objects...) - obj.Parent.Children[obj.ID] = obj + obj.Parent.Children[strings.ToLower(obj.ID)] = obj obj.Parent.ChildrenArray = append(obj.Parent.ChildrenArray, obj) g.Edges = append(g.Edges, tempGraph.Edges...) } diff --git a/d2layouts/d2sequence/layout.go b/d2layouts/d2sequence/layout.go index 28755f3e0..0da870f19 100644 --- a/d2layouts/d2sequence/layout.go +++ b/d2layouts/d2sequence/layout.go @@ -13,6 +13,33 @@ import ( "oss.terrastruct.com/d2/lib/label" ) +// Layout runs the sequence diagram layout engine on objects of shape sequence_diagram +// +// 1. Traverse graph from root, skip objects with shape not `sequence_diagram` +// 2. Construct a sequence diagram from all descendant objects and edges +// 3. Remove those objects and edges from the main graph +// 4. Run layout on sequence diagrams +// 5. Set the resulting dimensions to the main graph shape +// 6. Run core layouts (still without sequence diagram innards) +// 7. Put back sequence diagram innards in correct location +func Layout(ctx context.Context, g *d2graph.Graph, layout d2graph.LayoutGraph) error { + sequenceDiagrams, objectOrder, edgeOrder, err := WithoutSequenceDiagrams(ctx, g) + if err != nil { + return err + } + + if g.Root.IsSequenceDiagram() { + // the sequence diagram is the only layout engine if the whole diagram is + // shape: sequence_diagram + g.Root.TopLeft = geo.NewPoint(0, 0) + } else if err := layout(ctx, g); err != nil { + return err + } + + cleanup(g, sequenceDiagrams, objectOrder, edgeOrder) + return nil +} + func WithoutSequenceDiagrams(ctx context.Context, g *d2graph.Graph) (map[string]*sequenceDiagram, map[string]int, map[string]int, error) { objectsToRemove := make(map[*d2graph.Object]struct{}) edgesToRemove := make(map[*d2graph.Edge]struct{}) @@ -69,33 +96,6 @@ func WithoutSequenceDiagrams(ctx context.Context, g *d2graph.Graph) (map[string] return sequenceDiagrams, objectOrder, edgeOrder, nil } -// Layout runs the sequence diagram layout engine on objects of shape sequence_diagram -// -// 1. Traverse graph from root, skip objects with shape not `sequence_diagram` -// 2. Construct a sequence diagram from all descendant objects and edges -// 3. Remove those objects and edges from the main graph -// 4. Run layout on sequence diagrams -// 5. Set the resulting dimensions to the main graph shape -// 6. Run core layouts (still without sequence diagram innards) -// 7. Put back sequence diagram innards in correct location -func Layout(ctx context.Context, g *d2graph.Graph, layout func(ctx context.Context, g *d2graph.Graph) error) error { - sequenceDiagrams, objectOrder, edgeOrder, err := WithoutSequenceDiagrams(ctx, g) - if err != nil { - return err - } - - if g.Root.IsSequenceDiagram() { - // the sequence diagram is the only layout engine if the whole diagram is - // shape: sequence_diagram - g.Root.TopLeft = geo.NewPoint(0, 0) - } else if err := layout(ctx, g); err != nil { - return err - } - - cleanup(g, sequenceDiagrams, objectOrder, edgeOrder) - return nil -} - // layoutSequenceDiagram finds the edges inside the sequence diagram and performs the layout on the object descendants func layoutSequenceDiagram(g *d2graph.Graph, obj *d2graph.Object) (*sequenceDiagram, error) { var edges []*d2graph.Edge @@ -154,11 +154,11 @@ func cleanup(g *d2graph.Graph, sequenceDiagrams map[string]*sequenceDiagram, obj objects = g.Objects } for _, obj := range objects { - if _, exists := sequenceDiagrams[obj.AbsID()]; !exists { + sd, exists := sequenceDiagrams[obj.AbsID()] + if !exists { continue } obj.LabelPosition = go2.Pointer(string(label.InsideTopCenter)) - sd := sequenceDiagrams[obj.AbsID()] // shift the sequence diagrams as they are always placed at (0, 0) with some padding sd.shift( @@ -171,22 +171,22 @@ func cleanup(g *d2graph.Graph, sequenceDiagrams map[string]*sequenceDiagram, obj obj.Children = make(map[string]*d2graph.Object) obj.ChildrenArray = make([]*d2graph.Object, 0) for _, child := range sd.actors { - obj.Children[child.ID] = child + obj.Children[strings.ToLower(child.ID)] = child obj.ChildrenArray = append(obj.ChildrenArray, child) } for _, child := range sd.groups { if child.Parent.AbsID() == obj.AbsID() { - obj.Children[child.ID] = child + obj.Children[strings.ToLower(child.ID)] = child obj.ChildrenArray = append(obj.ChildrenArray, child) } } - g.Edges = append(g.Edges, sequenceDiagrams[obj.AbsID()].messages...) - g.Edges = append(g.Edges, sequenceDiagrams[obj.AbsID()].lifelines...) - g.Objects = append(g.Objects, sequenceDiagrams[obj.AbsID()].actors...) - g.Objects = append(g.Objects, sequenceDiagrams[obj.AbsID()].notes...) - g.Objects = append(g.Objects, sequenceDiagrams[obj.AbsID()].groups...) - g.Objects = append(g.Objects, sequenceDiagrams[obj.AbsID()].spans...) + g.Edges = append(g.Edges, sd.messages...) + g.Edges = append(g.Edges, sd.lifelines...) + g.Objects = append(g.Objects, sd.actors...) + g.Objects = append(g.Objects, sd.notes...) + g.Objects = append(g.Objects, sd.groups...) + g.Objects = append(g.Objects, sd.spans...) } // no new objects, so just keep the same position diff --git a/d2lib/d2.go b/d2lib/d2.go index 8f94d86c2..5b497b594 100644 --- a/d2lib/d2.go +++ b/d2lib/d2.go @@ -10,6 +10,7 @@ import ( "oss.terrastruct.com/d2/d2exporter" "oss.terrastruct.com/d2/d2graph" "oss.terrastruct.com/d2/d2layouts/d2dagrelayout" + "oss.terrastruct.com/d2/d2layouts/d2grid" "oss.terrastruct.com/d2/d2layouts/d2near" "oss.terrastruct.com/d2/d2layouts/d2sequence" "oss.terrastruct.com/d2/d2renderers/d2fonts" @@ -77,7 +78,9 @@ func compile(ctx context.Context, g *d2graph.Graph, opts *CompileOptions) (*d2ta } } - err = d2sequence.Layout(ctx, g, coreLayout) + layoutWithGrids := d2grid.Layout(ctx, g, coreLayout) + + err = d2sequence.Layout(ctx, g, layoutWithGrids) if err != nil { return nil, err } @@ -117,7 +120,7 @@ func compile(ctx context.Context, g *d2graph.Graph, opts *CompileOptions) (*d2ta return d, nil } -func getLayout(opts *CompileOptions) (func(context.Context, *d2graph.Graph) error, error) { +func getLayout(opts *CompileOptions) (d2graph.LayoutGraph, error) { if opts.Layout != nil { return opts.Layout, nil } else if os.Getenv("D2_LAYOUT") == "dagre" { diff --git a/d2oracle/edit.go b/d2oracle/edit.go index 668b6d4a0..58aaab1b6 100644 --- a/d2oracle/edit.go +++ b/d2oracle/edit.go @@ -314,6 +314,16 @@ func _set(g *d2graph.Graph, key string, tag, value *string) error { attrs.Left.MapKey.SetScalar(mk.Value.ScalarBox()) return nil } + case "grid-rows": + if attrs.GridRows != nil && attrs.GridRows.MapKey != nil { + attrs.GridRows.MapKey.SetScalar(mk.Value.ScalarBox()) + return nil + } + case "grid-columns": + if attrs.GridColumns != nil && attrs.GridColumns.MapKey != nil { + attrs.GridColumns.MapKey.SetScalar(mk.Value.ScalarBox()) + return nil + } case "source-arrowhead", "target-arrowhead": if reservedKey == "source-arrowhead" { attrs = edge.SrcArrowhead diff --git a/d2renderers/d2sketch/testdata/dots-real/sketch.exp.svg b/d2renderers/d2sketch/testdata/dots-real/sketch.exp.svg index c75d9d004..2433dad67 100644 --- a/d2renderers/d2sketch/testdata/dots-real/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/dots-real/sketch.exp.svg @@ -1,16 +1,16 @@ - + .d2-1107823994 .fill-N1{fill:#0A0F25;} + .d2-1107823994 .fill-N2{fill:#676C7E;} + .d2-1107823994 .fill-N3{fill:#9499AB;} + .d2-1107823994 .fill-N4{fill:#CFD2DD;} + .d2-1107823994 .fill-N5{fill:#DEE1EB;} + .d2-1107823994 .fill-N6{fill:#EEF1F8;} + .d2-1107823994 .fill-N7{fill:#FFFFFF;} + .d2-1107823994 .fill-B1{fill:#0D32B2;} + .d2-1107823994 .fill-B2{fill:#0D32B2;} + .d2-1107823994 .fill-B3{fill:#E3E9FD;} + .d2-1107823994 .fill-B4{fill:#E3E9FD;} + .d2-1107823994 .fill-B5{fill:#EDF0FD;} + .d2-1107823994 .fill-B6{fill:#F7F8FE;} + .d2-1107823994 .fill-AA2{fill:#4A6FF3;} + .d2-1107823994 .fill-AA4{fill:#EDF0FD;} + .d2-1107823994 .fill-AA5{fill:#F7F8FE;} + .d2-1107823994 .fill-AB4{fill:#EDF0FD;} + .d2-1107823994 .fill-AB5{fill:#F7F8FE;} + .d2-1107823994 .stroke-N1{stroke:#0A0F25;} + .d2-1107823994 .stroke-N2{stroke:#676C7E;} + .d2-1107823994 .stroke-N3{stroke:#9499AB;} + .d2-1107823994 .stroke-N4{stroke:#CFD2DD;} + .d2-1107823994 .stroke-N5{stroke:#DEE1EB;} + .d2-1107823994 .stroke-N6{stroke:#EEF1F8;} + .d2-1107823994 .stroke-N7{stroke:#FFFFFF;} + .d2-1107823994 .stroke-B1{stroke:#0D32B2;} + .d2-1107823994 .stroke-B2{stroke:#0D32B2;} + .d2-1107823994 .stroke-B3{stroke:#E3E9FD;} + .d2-1107823994 .stroke-B4{stroke:#E3E9FD;} + .d2-1107823994 .stroke-B5{stroke:#EDF0FD;} + .d2-1107823994 .stroke-B6{stroke:#F7F8FE;} + .d2-1107823994 .stroke-AA2{stroke:#4A6FF3;} + .d2-1107823994 .stroke-AA4{stroke:#EDF0FD;} + .d2-1107823994 .stroke-AA5{stroke:#F7F8FE;} + .d2-1107823994 .stroke-AB4{stroke:#EDF0FD;} + .d2-1107823994 .stroke-AB5{stroke:#F7F8FE;} + .d2-1107823994 .background-color-N1{background-color:#0A0F25;} + .d2-1107823994 .background-color-N2{background-color:#676C7E;} + .d2-1107823994 .background-color-N3{background-color:#9499AB;} + .d2-1107823994 .background-color-N4{background-color:#CFD2DD;} + .d2-1107823994 .background-color-N5{background-color:#DEE1EB;} + .d2-1107823994 .background-color-N6{background-color:#EEF1F8;} + .d2-1107823994 .background-color-N7{background-color:#FFFFFF;} + .d2-1107823994 .background-color-B1{background-color:#0D32B2;} + .d2-1107823994 .background-color-B2{background-color:#0D32B2;} + .d2-1107823994 .background-color-B3{background-color:#E3E9FD;} + .d2-1107823994 .background-color-B4{background-color:#E3E9FD;} + .d2-1107823994 .background-color-B5{background-color:#EDF0FD;} + .d2-1107823994 .background-color-B6{background-color:#F7F8FE;} + .d2-1107823994 .background-color-AA2{background-color:#4A6FF3;} + .d2-1107823994 .background-color-AA4{background-color:#EDF0FD;} + .d2-1107823994 .background-color-AA5{background-color:#F7F8FE;} + .d2-1107823994 .background-color-AB4{background-color:#EDF0FD;} + .d2-1107823994 .background-color-AB5{background-color:#F7F8FE;} + .d2-1107823994 .color-N1{color:#0A0F25;} + .d2-1107823994 .color-N2{color:#676C7E;} + .d2-1107823994 .color-N3{color:#9499AB;} + .d2-1107823994 .color-N4{color:#CFD2DD;} + .d2-1107823994 .color-N5{color:#DEE1EB;} + .d2-1107823994 .color-N6{color:#EEF1F8;} + .d2-1107823994 .color-N7{color:#FFFFFF;} + .d2-1107823994 .color-B1{color:#0D32B2;} + .d2-1107823994 .color-B2{color:#0D32B2;} + .d2-1107823994 .color-B3{color:#E3E9FD;} + .d2-1107823994 .color-B4{color:#E3E9FD;} + .d2-1107823994 .color-B5{color:#EDF0FD;} + .d2-1107823994 .color-B6{color:#F7F8FE;} + .d2-1107823994 .color-AA2{color:#4A6FF3;} + .d2-1107823994 .color-AA4{color:#EDF0FD;} + .d2-1107823994 .color-AA5{color:#F7F8FE;} + .d2-1107823994 .color-AB4{color:#EDF0FD;} + .d2-1107823994 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> @@ -159,9 +159,9 @@ -NETWORKD2 Parser+readerio.RuneReader+readerPosd2ast.Position-lookahead[]rune#peekn(n int)(s string, eof bool)+peek()(r rune, eof bool)+rewind()void+commit()voidCELL TOWERSATELLITESTRANSMITTER SEND SEND SEND - - - - +NETWORKD2 Parser+readerio.RuneReader+readerPosd2ast.Position-lookahead[]rune#peekn(n int)(s string, eof bool)+peek()(r rune, eof bool)+rewind()void+commit()voidCELL TOWERSATELLITESTRANSMITTER SEND SEND SEND + + + + \ No newline at end of file diff --git a/d2renderers/d2sketch/testdata/paper-real/sketch.exp.svg b/d2renderers/d2sketch/testdata/paper-real/sketch.exp.svg index c61df223a..b213a3400 100644 --- a/d2renderers/d2sketch/testdata/paper-real/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/paper-real/sketch.exp.svg @@ -1,16 +1,16 @@ - + .d2-3084549463 .fill-N1{fill:#0A0F25;} + .d2-3084549463 .fill-N2{fill:#676C7E;} + .d2-3084549463 .fill-N3{fill:#9499AB;} + .d2-3084549463 .fill-N4{fill:#CFD2DD;} + .d2-3084549463 .fill-N5{fill:#DEE1EB;} + .d2-3084549463 .fill-N6{fill:#EEF1F8;} + .d2-3084549463 .fill-N7{fill:#FFFFFF;} + .d2-3084549463 .fill-B1{fill:#0D32B2;} + .d2-3084549463 .fill-B2{fill:#0D32B2;} + .d2-3084549463 .fill-B3{fill:#E3E9FD;} + .d2-3084549463 .fill-B4{fill:#E3E9FD;} + .d2-3084549463 .fill-B5{fill:#EDF0FD;} + .d2-3084549463 .fill-B6{fill:#F7F8FE;} + .d2-3084549463 .fill-AA2{fill:#4A6FF3;} + .d2-3084549463 .fill-AA4{fill:#EDF0FD;} + .d2-3084549463 .fill-AA5{fill:#F7F8FE;} + .d2-3084549463 .fill-AB4{fill:#EDF0FD;} + .d2-3084549463 .fill-AB5{fill:#F7F8FE;} + .d2-3084549463 .stroke-N1{stroke:#0A0F25;} + .d2-3084549463 .stroke-N2{stroke:#676C7E;} + .d2-3084549463 .stroke-N3{stroke:#9499AB;} + .d2-3084549463 .stroke-N4{stroke:#CFD2DD;} + .d2-3084549463 .stroke-N5{stroke:#DEE1EB;} + .d2-3084549463 .stroke-N6{stroke:#EEF1F8;} + .d2-3084549463 .stroke-N7{stroke:#FFFFFF;} + .d2-3084549463 .stroke-B1{stroke:#0D32B2;} + .d2-3084549463 .stroke-B2{stroke:#0D32B2;} + .d2-3084549463 .stroke-B3{stroke:#E3E9FD;} + .d2-3084549463 .stroke-B4{stroke:#E3E9FD;} + .d2-3084549463 .stroke-B5{stroke:#EDF0FD;} + .d2-3084549463 .stroke-B6{stroke:#F7F8FE;} + .d2-3084549463 .stroke-AA2{stroke:#4A6FF3;} + .d2-3084549463 .stroke-AA4{stroke:#EDF0FD;} + .d2-3084549463 .stroke-AA5{stroke:#F7F8FE;} + .d2-3084549463 .stroke-AB4{stroke:#EDF0FD;} + .d2-3084549463 .stroke-AB5{stroke:#F7F8FE;} + .d2-3084549463 .background-color-N1{background-color:#0A0F25;} + .d2-3084549463 .background-color-N2{background-color:#676C7E;} + .d2-3084549463 .background-color-N3{background-color:#9499AB;} + .d2-3084549463 .background-color-N4{background-color:#CFD2DD;} + .d2-3084549463 .background-color-N5{background-color:#DEE1EB;} + .d2-3084549463 .background-color-N6{background-color:#EEF1F8;} + .d2-3084549463 .background-color-N7{background-color:#FFFFFF;} + .d2-3084549463 .background-color-B1{background-color:#0D32B2;} + .d2-3084549463 .background-color-B2{background-color:#0D32B2;} + .d2-3084549463 .background-color-B3{background-color:#E3E9FD;} + .d2-3084549463 .background-color-B4{background-color:#E3E9FD;} + .d2-3084549463 .background-color-B5{background-color:#EDF0FD;} + .d2-3084549463 .background-color-B6{background-color:#F7F8FE;} + .d2-3084549463 .background-color-AA2{background-color:#4A6FF3;} + .d2-3084549463 .background-color-AA4{background-color:#EDF0FD;} + .d2-3084549463 .background-color-AA5{background-color:#F7F8FE;} + .d2-3084549463 .background-color-AB4{background-color:#EDF0FD;} + .d2-3084549463 .background-color-AB5{background-color:#F7F8FE;} + .d2-3084549463 .color-N1{color:#0A0F25;} + .d2-3084549463 .color-N2{color:#676C7E;} + .d2-3084549463 .color-N3{color:#9499AB;} + .d2-3084549463 .color-N4{color:#CFD2DD;} + .d2-3084549463 .color-N5{color:#DEE1EB;} + .d2-3084549463 .color-N6{color:#EEF1F8;} + .d2-3084549463 .color-N7{color:#FFFFFF;} + .d2-3084549463 .color-B1{color:#0D32B2;} + .d2-3084549463 .color-B2{color:#0D32B2;} + .d2-3084549463 .color-B3{color:#E3E9FD;} + .d2-3084549463 .color-B4{color:#E3E9FD;} + .d2-3084549463 .color-B5{color:#EDF0FD;} + .d2-3084549463 .color-B6{color:#F7F8FE;} + .d2-3084549463 .color-AA2{color:#4A6FF3;} + .d2-3084549463 .color-AA4{color:#EDF0FD;} + .d2-3084549463 .color-AA5{color:#F7F8FE;} + .d2-3084549463 .color-AB4{color:#EDF0FD;} + .d2-3084549463 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> @@ -1205,9 +1205,9 @@ -NETWORKCELL TOWERSATELLITESTRANSMITTER SEND SEND SEND - - - - +NETWORKCELL TOWERSATELLITESTRANSMITTER SEND SEND SEND + + + + \ No newline at end of file diff --git a/d2renderers/d2sketch/testdata/terminal/sketch.exp.svg b/d2renderers/d2sketch/testdata/terminal/sketch.exp.svg index 167aac474..4459c8a37 100644 --- a/d2renderers/d2sketch/testdata/terminal/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/terminal/sketch.exp.svg @@ -1,16 +1,16 @@ - + .d2-457017616 .fill-N1{fill:#000410;} + .d2-457017616 .fill-N2{fill:#0000B8;} + .d2-457017616 .fill-N3{fill:#9499AB;} + .d2-457017616 .fill-N4{fill:#CFD2DD;} + .d2-457017616 .fill-N5{fill:#C3DEF3;} + .d2-457017616 .fill-N6{fill:#EEF1F8;} + .d2-457017616 .fill-N7{fill:#FFFFFF;} + .d2-457017616 .fill-B1{fill:#000410;} + .d2-457017616 .fill-B2{fill:#0000E4;} + .d2-457017616 .fill-B3{fill:#5AA4DC;} + .d2-457017616 .fill-B4{fill:#E7E9EE;} + .d2-457017616 .fill-B5{fill:#F5F6F9;} + .d2-457017616 .fill-B6{fill:#FFFFFF;} + .d2-457017616 .fill-AA2{fill:#008566;} + .d2-457017616 .fill-AA4{fill:#45BBA5;} + .d2-457017616 .fill-AA5{fill:#7ACCBD;} + .d2-457017616 .fill-AB4{fill:#F1C759;} + .d2-457017616 .fill-AB5{fill:#F9E088;} + .d2-457017616 .stroke-N1{stroke:#000410;} + .d2-457017616 .stroke-N2{stroke:#0000B8;} + .d2-457017616 .stroke-N3{stroke:#9499AB;} + .d2-457017616 .stroke-N4{stroke:#CFD2DD;} + .d2-457017616 .stroke-N5{stroke:#C3DEF3;} + .d2-457017616 .stroke-N6{stroke:#EEF1F8;} + .d2-457017616 .stroke-N7{stroke:#FFFFFF;} + .d2-457017616 .stroke-B1{stroke:#000410;} + .d2-457017616 .stroke-B2{stroke:#0000E4;} + .d2-457017616 .stroke-B3{stroke:#5AA4DC;} + .d2-457017616 .stroke-B4{stroke:#E7E9EE;} + .d2-457017616 .stroke-B5{stroke:#F5F6F9;} + .d2-457017616 .stroke-B6{stroke:#FFFFFF;} + .d2-457017616 .stroke-AA2{stroke:#008566;} + .d2-457017616 .stroke-AA4{stroke:#45BBA5;} + .d2-457017616 .stroke-AA5{stroke:#7ACCBD;} + .d2-457017616 .stroke-AB4{stroke:#F1C759;} + .d2-457017616 .stroke-AB5{stroke:#F9E088;} + .d2-457017616 .background-color-N1{background-color:#000410;} + .d2-457017616 .background-color-N2{background-color:#0000B8;} + .d2-457017616 .background-color-N3{background-color:#9499AB;} + .d2-457017616 .background-color-N4{background-color:#CFD2DD;} + .d2-457017616 .background-color-N5{background-color:#C3DEF3;} + .d2-457017616 .background-color-N6{background-color:#EEF1F8;} + .d2-457017616 .background-color-N7{background-color:#FFFFFF;} + .d2-457017616 .background-color-B1{background-color:#000410;} + .d2-457017616 .background-color-B2{background-color:#0000E4;} + .d2-457017616 .background-color-B3{background-color:#5AA4DC;} + .d2-457017616 .background-color-B4{background-color:#E7E9EE;} + .d2-457017616 .background-color-B5{background-color:#F5F6F9;} + .d2-457017616 .background-color-B6{background-color:#FFFFFF;} + .d2-457017616 .background-color-AA2{background-color:#008566;} + .d2-457017616 .background-color-AA4{background-color:#45BBA5;} + .d2-457017616 .background-color-AA5{background-color:#7ACCBD;} + .d2-457017616 .background-color-AB4{background-color:#F1C759;} + .d2-457017616 .background-color-AB5{background-color:#F9E088;} + .d2-457017616 .color-N1{color:#000410;} + .d2-457017616 .color-N2{color:#0000B8;} + .d2-457017616 .color-N3{color:#9499AB;} + .d2-457017616 .color-N4{color:#CFD2DD;} + .d2-457017616 .color-N5{color:#C3DEF3;} + .d2-457017616 .color-N6{color:#EEF1F8;} + .d2-457017616 .color-N7{color:#FFFFFF;} + .d2-457017616 .color-B1{color:#000410;} + .d2-457017616 .color-B2{color:#0000E4;} + .d2-457017616 .color-B3{color:#5AA4DC;} + .d2-457017616 .color-B4{color:#E7E9EE;} + .d2-457017616 .color-B5{color:#F5F6F9;} + .d2-457017616 .color-B6{color:#FFFFFF;} + .d2-457017616 .color-AA2{color:#008566;} + .d2-457017616 .color-AA4{color:#45BBA5;} + .d2-457017616 .color-AA5{color:#7ACCBD;} + .d2-457017616 .color-AB4{color:#F1C759;} + .d2-457017616 .color-AB5{color:#F9E088;}.appendix text.text{fill:#000410}.md{--color-fg-default:#000410;--color-fg-muted:#0000B8;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#000410;--color-border-muted:#0000E4;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0000E4;--color-accent-emphasis:#0000E4;--color-attention-subtle:#0000B8;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-AB4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> @@ -137,14 +137,14 @@ -NETWORKUSERAPI SERVERLOGSCELL TOWERONLINE PORTALDATA PROCESSORSATELLITESTRANSMITTERUISTORAGE SEND SEND SEND PHONE LOGS MAKE CALL ACCESS DISPLAY PERSIST - - - - - - +NETWORKUSERAPI SERVERLOGSCELL TOWERONLINE PORTALDATA PROCESSORSATELLITESTRANSMITTERUISTORAGE SEND SEND SEND PHONE LOGS MAKE CALL ACCESS DISPLAY PERSIST + + + + + + - - + + \ No newline at end of file diff --git a/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf b/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf index 463c4cc7a..23628020d 100644 Binary files a/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf and b/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf differ diff --git a/e2etests/stable_test.go b/e2etests/stable_test.go index ba867da2e..34f5f8b96 100644 --- a/e2etests/stable_test.go +++ b/e2etests/stable_test.go @@ -205,6 +205,12 @@ logs: { shape: page; style.multiple: true } network.data processor -> api server `, }, + { + name: "edge-label-overflow", + script: `student -> committee chair: Apply for appeal +student <- committee chair: Deny. Need more information +committee chair -> committee: Accept appeal`, + }, { name: "mono-edge", script: `direction: right @@ -2527,6 +2533,10 @@ scenarios: { }`, }, loadFromFile(t, "arrowhead_scaling"), + loadFromFile(t, "teleport_grid"), + loadFromFile(t, "dagger_grid"), + loadFromFile(t, "grid_tests"), + loadFromFile(t, "executive_grid"), } runa(t, tcs) diff --git a/e2etests/testdata/files/dagger_grid.d2 b/e2etests/testdata/files/dagger_grid.d2 new file mode 100644 index 000000000..2f6167c06 --- /dev/null +++ b/e2etests/testdata/files/dagger_grid.d2 @@ -0,0 +1,90 @@ +grid-rows: 5 +style.fill: black + +flow1: "" { + width: 120 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow2: "" { + width: 120 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow3: "" { + width: 120 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow4: "" { + width: 120 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow5: "" { + width: 120 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow6: "" { + width: 240 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow7: "" { + width: 80 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow8: "" { + width: 160 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} +flow9: "" { + width: 160 + style: {fill: white; stroke: cornflowerblue; stroke-width: 10} +} + +DAGGER ENGINE: { + width: 800 + style: { + fill: beige + stroke: darkcyan + font-color: blue + stroke-width: 8 + } +} + +ANY DOCKER COMPATIBLE RUNTIME: { + width: 800 + style: { + fill: lightcyan + stroke: darkcyan + font-color: black + stroke-width: 8 + } + icon: https://icons.terrastruct.com/dev%2Fdocker.svg +} + +ANY CI: { + style: { + fill: gold + stroke: maroon + font-color: maroon + stroke-width: 8 + } +} + +WINDOWS.style: { + font-color: white + fill: darkcyan + stroke: black +} +LINUX.style: { + font-color: white + fill: darkcyan + stroke: black +} +MACOS.style: { + font-color: white + fill: darkcyan + stroke: black +} +KUBERNETES.style: { + font-color: white + fill: darkcyan + stroke: black +} diff --git a/e2etests/testdata/files/executive_grid.d2 b/e2etests/testdata/files/executive_grid.d2 new file mode 100644 index 000000000..a5178fbd6 --- /dev/null +++ b/e2etests/testdata/files/executive_grid.d2 @@ -0,0 +1,16 @@ +grid-rows: 3 + +Executive Services.width: 1000 + +I/O\nManager.width: 100 +I/O\nManager.height: 200 +Security\nReference\nMonitor.width: 100 +IPC\nManager.width: 100 +Virtual\nMemory\nManager\n(VMM).width: 100 +Process\nManager.width: 100 +PnP\nManager.width: 100 +Power\nManager.width: 100 +# TODO recursive grids +Window\nManager\n\nGDI.width: 100 + +Object Manager.width: 1000 diff --git a/e2etests/testdata/files/grid_tests.d2 b/e2etests/testdata/files/grid_tests.d2 new file mode 100644 index 000000000..aab1481e9 --- /dev/null +++ b/e2etests/testdata/files/grid_tests.d2 @@ -0,0 +1,134 @@ +rows 1: { + grid-rows: 1 + a + b + c + d + e + f + g +} + +columns 1: { + grid-columns: 1 + a + b + c + d + e + f + g +} + +rows 2: { + grid-rows: 2 + a + b + c + d + e + f + g +} + +columns 2: { + grid-columns: 2 + a + b + c + d + e + f + g +} + +rows 2 columns 2: { + grid-rows: 2 + grid-columns: 2 + + a + b + c + d + e + f + g +} + +columns 2 rows 2: { + grid-columns: 2 + grid-rows: 2 + + a + b + c + d + e + f + g +} + +rows 3 columns 3: { + grid-rows: 3 + grid-columns: 3 + + a + b + c + d + e + f + g +} + +columns 3 rows 3: { + grid-columns: 3 + grid-rows: 3 + + a + b + c + d + e + f + g +} + +rows 3: { + grid-rows: 3 + + a + b + c + d + e + f + g +} + +columns 3: { + grid-columns: 3 + + a + b + c + d + e + f + g +} + +widths heights: { + grid-rows: 3 + grid-columns: 3 + + a w200.width: 200 + b h300.height: 300 + c + d h200.height: 200 + e + f w400.width: 400 + g + h + i +} diff --git a/e2etests/testdata/files/teleport_grid.d2 b/e2etests/testdata/files/teleport_grid.d2 new file mode 100644 index 000000000..d0e737513 --- /dev/null +++ b/e2etests/testdata/files/teleport_grid.d2 @@ -0,0 +1,70 @@ +direction: right + +users -- via -- teleport + +teleport -> jita: "all connections audited and logged" +teleport -> infra + +teleport -> identity provider +teleport <- identity provider + +users: "" { + grid-columns: 1 + + Engineers: { + shape: circle + icon: https://icons.terrastruct.com/essentials%2F365-user.svg + } + Machines: { + shape: circle + icon: https://icons.terrastruct.com/aws%2FCompute%2FCompute.svg + } +} + +via: "" { + grid-columns: 1 + + https: "HTTPS://" + kubectl: "> kubectl" + tsh: "> tsh" + api: "> api" + db clients: "DB Clients" +} + +teleport: Teleport { + grid-rows: 2 + + inp: |md + # Identity Native Proxy + | { + width: 300 + } + + Audit Log.icon: https://icons.terrastruct.com/tech%2Flaptop.svg + Cert Authority.icon: https://icons.terrastruct.com/azure%2FWeb%20Service%20Color%2FApp%20Service%20Certificates.svg +} + +jita: "Just-in-time Access via" { + grid-rows: 1 + + Slack.icon: https://icons.terrastruct.com/dev%2Fslack.svg + Mattermost + Jira + Pagerduty + Email.icon: https://icons.terrastruct.com/aws%2F_General%2FAWS-Email_light-bg.svg +} + +infra: Infrastructure { + grid-rows: 2 + + ssh.icon: https://icons.terrastruct.com/essentials%2F112-server.svg + Kubernetes.icon: https://icons.terrastruct.com/azure%2F_Companies%2FKubernetes.svg + My SQL.icon: https://icons.terrastruct.com/dev%2Fmysql.svg + MongoDB.icon: https://icons.terrastruct.com/dev%2Fmongodb.svg + PSQL.icon: https://icons.terrastruct.com/dev%2Fpostgresql.svg + Windows.icon: https://icons.terrastruct.com/dev%2Fwindows.svg +} + +identity provider: Indentity Provider { + icon: https://icons.terrastruct.com/azure%2FIdentity%20Service%20Color%2FIdentity%20governance.svg +} diff --git a/e2etests/testdata/patterns/real-lines/dagre/board.exp.json b/e2etests/testdata/patterns/real-lines/dagre/board.exp.json index 82f61f9b5..40986c0a6 100644 --- a/e2etests/testdata/patterns/real-lines/dagre/board.exp.json +++ b/e2etests/testdata/patterns/real-lines/dagre/board.exp.json @@ -10,7 +10,7 @@ "x": 0, "y": 41 }, - "width": 334, + "width": 360, "height": 640, "opacity": 1, "strokeDash": 0, @@ -52,7 +52,7 @@ "x": 20, "y": 106 }, - "width": 294, + "width": 320, "height": 545, "opacity": 1, "strokeDash": 0, @@ -91,7 +91,7 @@ "id": "NETWORK.CELL TOWER.satellites", "type": "stored_data", "pos": { - "x": 87, + "x": 100, "y": 195 }, "width": 161, @@ -132,7 +132,7 @@ "id": "NETWORK.CELL TOWER.transmitter", "type": "rectangle", "pos": { - "x": 92, + "x": 105, "y": 496 }, "width": 151, @@ -173,7 +173,7 @@ "id": "costumes", "type": "sql_table", "pos": { - "x": 374, + "x": 401, "y": 100 }, "width": 311, @@ -330,7 +330,7 @@ "id": "monsters", "type": "sql_table", "pos": { - "x": 374, + "x": 401, "y": 401 }, "width": 311, @@ -512,19 +512,19 @@ "labelPercentage": 0, "route": [ { - "x": 151, + "x": 163, "y": 262 }, { - "x": 108, + "x": 114.4, "y": 355.6 }, { - "x": 108.05, + "x": 114.45, "y": 402.6 }, { - "x": 151.25, + "x": 163.25, "y": 497 } ], @@ -561,19 +561,19 @@ "labelPercentage": 0, "route": [ { - "x": 167, + "x": 180, "y": 262 }, { - "x": 167, + "x": 180.2, "y": 355.6 }, { - "x": 167, + "x": 180.25, "y": 402.6 }, { - "x": 167, + "x": 180.25, "y": 497 } ], @@ -610,19 +610,19 @@ "labelPercentage": 0, "route": [ { - "x": 183, + "x": 198, "y": 262 }, { - "x": 226, + "x": 246.2, "y": 355.6 }, { - "x": 225.95, + "x": 246.05, "y": 402.6 }, { - "x": 182.75, + "x": 197.25, "y": 497 } ], @@ -659,19 +659,19 @@ "labelPercentage": 0, "route": [ { - "x": 529.5, + "x": 556, "y": 280 }, { - "x": 529.5, + "x": 556, "y": 328.4 }, { - "x": 529.5, + "x": 556, "y": 352.7 }, { - "x": 529.5, + "x": 556, "y": 401.5 } ], diff --git a/e2etests/testdata/patterns/real-lines/dagre/sketch.exp.svg b/e2etests/testdata/patterns/real-lines/dagre/sketch.exp.svg index 6508e7c12..2ca214a94 100644 --- a/e2etests/testdata/patterns/real-lines/dagre/sketch.exp.svg +++ b/e2etests/testdata/patterns/real-lines/dagre/sketch.exp.svg @@ -1,23 +1,23 @@ -Kubernetesopensvck8s-master1k8s-master2k8s-master3k8s-worker1k8s-worker2k8s-worker3VM1VM2 keycloakheptapodharborvault - - - - - + .d2-3464567729 .fill-N1{fill:#0A0F25;} + .d2-3464567729 .fill-N2{fill:#676C7E;} + .d2-3464567729 .fill-N3{fill:#9499AB;} + .d2-3464567729 .fill-N4{fill:#CFD2DD;} + .d2-3464567729 .fill-N5{fill:#DEE1EB;} + .d2-3464567729 .fill-N6{fill:#EEF1F8;} + .d2-3464567729 .fill-N7{fill:#FFFFFF;} + .d2-3464567729 .fill-B1{fill:#0D32B2;} + .d2-3464567729 .fill-B2{fill:#0D32B2;} + .d2-3464567729 .fill-B3{fill:#E3E9FD;} + .d2-3464567729 .fill-B4{fill:#E3E9FD;} + .d2-3464567729 .fill-B5{fill:#EDF0FD;} + .d2-3464567729 .fill-B6{fill:#F7F8FE;} + .d2-3464567729 .fill-AA2{fill:#4A6FF3;} + .d2-3464567729 .fill-AA4{fill:#EDF0FD;} + .d2-3464567729 .fill-AA5{fill:#F7F8FE;} + .d2-3464567729 .fill-AB4{fill:#EDF0FD;} + .d2-3464567729 .fill-AB5{fill:#F7F8FE;} + .d2-3464567729 .stroke-N1{stroke:#0A0F25;} + .d2-3464567729 .stroke-N2{stroke:#676C7E;} + .d2-3464567729 .stroke-N3{stroke:#9499AB;} + .d2-3464567729 .stroke-N4{stroke:#CFD2DD;} + .d2-3464567729 .stroke-N5{stroke:#DEE1EB;} + .d2-3464567729 .stroke-N6{stroke:#EEF1F8;} + .d2-3464567729 .stroke-N7{stroke:#FFFFFF;} + .d2-3464567729 .stroke-B1{stroke:#0D32B2;} + .d2-3464567729 .stroke-B2{stroke:#0D32B2;} + .d2-3464567729 .stroke-B3{stroke:#E3E9FD;} + .d2-3464567729 .stroke-B4{stroke:#E3E9FD;} + .d2-3464567729 .stroke-B5{stroke:#EDF0FD;} + .d2-3464567729 .stroke-B6{stroke:#F7F8FE;} + .d2-3464567729 .stroke-AA2{stroke:#4A6FF3;} + .d2-3464567729 .stroke-AA4{stroke:#EDF0FD;} + .d2-3464567729 .stroke-AA5{stroke:#F7F8FE;} + .d2-3464567729 .stroke-AB4{stroke:#EDF0FD;} + .d2-3464567729 .stroke-AB5{stroke:#F7F8FE;} + .d2-3464567729 .background-color-N1{background-color:#0A0F25;} + .d2-3464567729 .background-color-N2{background-color:#676C7E;} + .d2-3464567729 .background-color-N3{background-color:#9499AB;} + .d2-3464567729 .background-color-N4{background-color:#CFD2DD;} + .d2-3464567729 .background-color-N5{background-color:#DEE1EB;} + .d2-3464567729 .background-color-N6{background-color:#EEF1F8;} + .d2-3464567729 .background-color-N7{background-color:#FFFFFF;} + .d2-3464567729 .background-color-B1{background-color:#0D32B2;} + .d2-3464567729 .background-color-B2{background-color:#0D32B2;} + .d2-3464567729 .background-color-B3{background-color:#E3E9FD;} + .d2-3464567729 .background-color-B4{background-color:#E3E9FD;} + .d2-3464567729 .background-color-B5{background-color:#EDF0FD;} + .d2-3464567729 .background-color-B6{background-color:#F7F8FE;} + .d2-3464567729 .background-color-AA2{background-color:#4A6FF3;} + .d2-3464567729 .background-color-AA4{background-color:#EDF0FD;} + .d2-3464567729 .background-color-AA5{background-color:#F7F8FE;} + .d2-3464567729 .background-color-AB4{background-color:#EDF0FD;} + .d2-3464567729 .background-color-AB5{background-color:#F7F8FE;} + .d2-3464567729 .color-N1{color:#0A0F25;} + .d2-3464567729 .color-N2{color:#676C7E;} + .d2-3464567729 .color-N3{color:#9499AB;} + .d2-3464567729 .color-N4{color:#CFD2DD;} + .d2-3464567729 .color-N5{color:#DEE1EB;} + .d2-3464567729 .color-N6{color:#EEF1F8;} + .d2-3464567729 .color-N7{color:#FFFFFF;} + .d2-3464567729 .color-B1{color:#0D32B2;} + .d2-3464567729 .color-B2{color:#0D32B2;} + .d2-3464567729 .color-B3{color:#E3E9FD;} + .d2-3464567729 .color-B4{color:#E3E9FD;} + .d2-3464567729 .color-B5{color:#EDF0FD;} + .d2-3464567729 .color-B6{color:#F7F8FE;} + .d2-3464567729 .color-AA2{color:#4A6FF3;} + .d2-3464567729 .color-AA4{color:#EDF0FD;} + .d2-3464567729 .color-AA5{color:#F7F8FE;} + .d2-3464567729 .color-AB4{color:#EDF0FD;} + .d2-3464567729 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>Kubernetesopensvck8s-master1k8s-master2k8s-master3k8s-worker1k8s-worker2k8s-worker3VM1VM2 keycloakheptapodharborvault + + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/chaos2/dagre/board.exp.json b/e2etests/testdata/stable/chaos2/dagre/board.exp.json index 1fb61555f..216ed84ab 100644 --- a/e2etests/testdata/stable/chaos2/dagre/board.exp.json +++ b/e2etests/testdata/stable/chaos2/dagre/board.exp.json @@ -10,7 +10,7 @@ "x": 0, "y": 41 }, - "width": 806, + "width": 834, "height": 1314, "opacity": 1, "strokeDash": 0, @@ -51,7 +51,7 @@ "x": 20, "y": 106 }, - "width": 567, + "width": 595, "height": 1219, "opacity": 1, "strokeDash": 0, @@ -92,7 +92,7 @@ "x": 40, "y": 721 }, - "width": 393, + "width": 421, "height": 572, "opacity": 1, "strokeDash": 0, @@ -252,7 +252,7 @@ "id": "aa.bb.cc.gg", "type": "text", "pos": { - "x": 190, + "x": 187, "y": 1043 }, "width": 17, @@ -292,7 +292,7 @@ "id": "aa.bb.cc.hh", "type": "rectangle", "pos": { - "x": 324, + "x": 334, "y": 1189 }, "width": 63, @@ -336,7 +336,7 @@ "x": 52, "y": 169 }, - "width": 469, + "width": 496, "height": 161, "opacity": 1, "strokeDash": 0, @@ -374,7 +374,7 @@ "id": "aa.bb.ii.jj", "type": "diamond", "pos": { - "x": 431, + "x": 458, "y": 204 }, "width": 50, @@ -415,7 +415,7 @@ "id": "aa.bb.kk", "type": "oval", "pos": { - "x": 474, + "x": 501, "y": 1169 }, "width": 74, @@ -456,7 +456,7 @@ "id": "aa.ll", "type": "rectangle", "pos": { - "x": 670, + "x": 698, "y": 772 }, "width": 54, @@ -497,7 +497,7 @@ "id": "aa.mm", "type": "cylinder", "pos": { - "x": 662, + "x": 689, "y": 433 }, "width": 71, @@ -538,7 +538,7 @@ "id": "aa.nn", "type": "text", "pos": { - "x": 628, + "x": 655, "y": 1178 }, "width": 16, @@ -578,7 +578,7 @@ "id": "aa.oo", "type": "rectangle", "pos": { - "x": 704, + "x": 731, "y": 1155 }, "width": 63, @@ -652,12 +652,12 @@ "y": 910.3 }, { - "x": 132.35, - "y": 995.1959501557633 + "x": 131.8, + "y": 995.1 }, { - "x": 189.75, - "y": 1045.9797507788162 + "x": 187, + "y": 1045.5 } ], "isCurve": true, @@ -693,20 +693,20 @@ "labelPercentage": 0, "route": [ { - "x": 198.25, + "x": 195.5, "y": 1064 }, { - "x": 198.25, + "x": 195.5, "y": 1112.4 }, { - "x": 223.45, - "y": 1140.1 + "x": 223.3, + "y": 1140.3 }, { - "x": 324.25, - "y": 1202.5 + "x": 334.5, + "y": 1203.5 } ], "isCurve": true, @@ -815,12 +815,12 @@ "labelPercentage": 0, "route": [ { - "x": 670.25, - "y": 811.7993675333802 + "x": 697.5, + "y": 811.4285714285714 }, { - "x": 587.25, - "y": 866.7993675333802 + "x": 614.5, + "y": 865.4285714285714 } ], "animated": false, @@ -855,12 +855,12 @@ "labelPercentage": 0, "route": [ { - "x": 662, - "y": 501 + "x": 689, + "y": 500 }, { - "x": 284.79999999999995, - "y": 589.8 + "x": 290.2, + "y": 589.6 }, { "x": 190.5, @@ -904,31 +904,31 @@ "labelPercentage": 0, "route": [ { - "x": 697, + "x": 725, "y": 552 }, { - "x": 697.2, + "x": 724.6, "y": 600 }, { - "x": 697.25, + "x": 724.5, "y": 624.1 }, { - "x": 697.25, + "x": 724.5, "y": 642.25 }, { - "x": 697.25, + "x": 724.5, "y": 660.4 }, { - "x": 697.25, + "x": 724.5, "y": 732.5 }, { - "x": 697.25, + "x": 724.5, "y": 772.5 } ], @@ -965,12 +965,12 @@ "labelPercentage": 0, "route": [ { - "x": 662, + "x": 689, "y": 505 }, { - "x": 587.75, - "y": 568.4633307868602 + "x": 615, + "y": 566.9955817378498 } ], "animated": false, @@ -1005,19 +1005,19 @@ "labelPercentage": 0, "route": [ { - "x": 670.25, - "y": 811.1842105263158 + "x": 697.5, + "y": 810.8167259786477 }, { - "x": 376.45, - "y": 873.0368421052632 + "x": 381.9, + "y": 872.9633451957295 }, { - "x": 283.8, + "x": 283.2, "y": 968.7 }, { - "x": 207, + "x": 204, "y": 1047.5 } ], @@ -1054,19 +1054,19 @@ "labelPercentage": 0, "route": [ { - "x": 662, + "x": 689, "y": 473 }, { - "x": 517.8, + "x": 545, "y": 393 }, { - "x": 481.8, + "x": 509, "y": 364.6 }, { - "x": 482, + "x": 509, "y": 331 } ], @@ -1103,12 +1103,12 @@ "labelPercentage": 0, "route": [ { - "x": 434, + "x": 461, "y": 896.5 }, { - "x": 670, - "y": 813.5 + "x": 697.5, + "y": 812.9328358208955 } ], "animated": false, @@ -1143,56 +1143,56 @@ "labelPercentage": 0, "route": [ { - "x": 454, + "x": 481, "y": 331 }, { - "x": 453.8, + "x": 481, "y": 364.6 }, { - "x": 453.75, + "x": 481, "y": 396.9 }, { - "x": 453.75, + "x": 481, "y": 432.75 }, { - "x": 453.75, + "x": 481, "y": 468.6 }, { - "x": 453.75, + "x": 481, "y": 516.4 }, { - "x": 453.75, + "x": 481, "y": 552.25 }, { - "x": 453.75, + "x": 481, "y": 588.1 }, { - "x": 453.75, + "x": 481, "y": 624.1 }, { - "x": 453.75, + "x": 481, "y": 642.25 }, { - "x": 453.75, + "x": 481, "y": 660.4 }, { - "x": 496.95, - "y": 737.3 + "x": 524.3, + "y": 737.2593429158111 }, { - "x": 669.75, - "y": 796.5 + "x": 697.5, + "y": 796.2967145790554 } ], "isCurve": true, diff --git a/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg b/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg index 2580cdbb6..b7776e4c0 100644 --- a/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg @@ -1,23 +1,23 @@ -aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 - - - - - - - - - +aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 + + + + + + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/dagger_grid/dagre/board.exp.json b/e2etests/testdata/stable/dagger_grid/dagre/board.exp.json new file mode 100644 index 000000000..b94be0069 --- /dev/null +++ b/e2etests/testdata/stable/dagger_grid/dagre/board.exp.json @@ -0,0 +1,716 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "flow1", + "type": "rectangle", + "pos": { + "x": 0, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow2", + "type": "rectangle", + "pos": { + "x": 168, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow3", + "type": "rectangle", + "pos": { + "x": 336, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow4", + "type": "rectangle", + "pos": { + "x": 504, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow5", + "type": "rectangle", + "pos": { + "x": 672, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow6", + "type": "rectangle", + "pos": { + "x": 0, + "y": 140 + }, + "width": 240, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow7", + "type": "rectangle", + "pos": { + "x": 280, + "y": 140 + }, + "width": 120, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow8", + "type": "rectangle", + "pos": { + "x": 440, + "y": 140 + }, + "width": 160, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow9", + "type": "rectangle", + "pos": { + "x": 640, + "y": 140 + }, + "width": 160, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "DAGGER ENGINE", + "type": "rectangle", + "pos": { + "x": 0, + "y": 280 + }, + "width": 800, + "height": 61, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 8, + "borderRadius": 0, + "fill": "beige", + "stroke": "darkcyan", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "DAGGER ENGINE", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "blue", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 114, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "ANY DOCKER COMPATIBLE RUNTIME", + "type": "rectangle", + "pos": { + "x": 0, + "y": 381 + }, + "width": 800, + "height": 87, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 8, + "borderRadius": 0, + "fill": "lightcyan", + "stroke": "darkcyan", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/docker.svg", + "RawPath": "/dev%2Fdocker.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "ANY DOCKER COMPATIBLE RUNTIME", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "black", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 255, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "ANY CI", + "type": "rectangle", + "pos": { + "x": 0, + "y": 508 + }, + "width": 139, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 8, + "borderRadius": 0, + "fill": "gold", + "stroke": "maroon", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "ANY CI", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "maroon", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 46, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "WINDOWS", + "type": "rectangle", + "pos": { + "x": 179, + "y": 508 + }, + "width": 117, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "WINDOWS", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 72, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "LINUX", + "type": "rectangle", + "pos": { + "x": 336, + "y": 508 + }, + "width": 139, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "LINUX", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 43, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "MACOS", + "type": "rectangle", + "pos": { + "x": 515, + "y": 508 + }, + "width": 106, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "MACOS", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 50, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "KUBERNETES", + "type": "rectangle", + "pos": { + "x": 661, + "y": 508 + }, + "width": 139, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "KUBERNETES", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 94, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "black", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/dagger_grid/dagre/sketch.exp.svg b/e2etests/testdata/stable/dagger_grid/dagre/sketch.exp.svg new file mode 100644 index 000000000..cc62b273b --- /dev/null +++ b/e2etests/testdata/stable/dagger_grid/dagre/sketch.exp.svg @@ -0,0 +1,95 @@ +DAGGER ENGINEANY DOCKER COMPATIBLE RUNTIMEANY CIWINDOWSLINUXMACOSKUBERNETES + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/dagger_grid/elk/board.exp.json b/e2etests/testdata/stable/dagger_grid/elk/board.exp.json new file mode 100644 index 000000000..b94be0069 --- /dev/null +++ b/e2etests/testdata/stable/dagger_grid/elk/board.exp.json @@ -0,0 +1,716 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "flow1", + "type": "rectangle", + "pos": { + "x": 0, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow2", + "type": "rectangle", + "pos": { + "x": 168, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow3", + "type": "rectangle", + "pos": { + "x": 336, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow4", + "type": "rectangle", + "pos": { + "x": 504, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow5", + "type": "rectangle", + "pos": { + "x": 672, + "y": 0 + }, + "width": 128, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow6", + "type": "rectangle", + "pos": { + "x": 0, + "y": 140 + }, + "width": 240, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow7", + "type": "rectangle", + "pos": { + "x": 280, + "y": 140 + }, + "width": 120, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow8", + "type": "rectangle", + "pos": { + "x": 440, + "y": 140 + }, + "width": 160, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "flow9", + "type": "rectangle", + "pos": { + "x": 640, + "y": 140 + }, + "width": 160, + "height": 100, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 10, + "borderRadius": 0, + "fill": "white", + "stroke": "cornflowerblue", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "DAGGER ENGINE", + "type": "rectangle", + "pos": { + "x": 0, + "y": 280 + }, + "width": 800, + "height": 61, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 8, + "borderRadius": 0, + "fill": "beige", + "stroke": "darkcyan", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "DAGGER ENGINE", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "blue", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 114, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "ANY DOCKER COMPATIBLE RUNTIME", + "type": "rectangle", + "pos": { + "x": 0, + "y": 381 + }, + "width": 800, + "height": 87, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 8, + "borderRadius": 0, + "fill": "lightcyan", + "stroke": "darkcyan", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/docker.svg", + "RawPath": "/dev%2Fdocker.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "ANY DOCKER COMPATIBLE RUNTIME", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "black", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 255, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "ANY CI", + "type": "rectangle", + "pos": { + "x": 0, + "y": 508 + }, + "width": 139, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 8, + "borderRadius": 0, + "fill": "gold", + "stroke": "maroon", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "ANY CI", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "maroon", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 46, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "WINDOWS", + "type": "rectangle", + "pos": { + "x": 179, + "y": 508 + }, + "width": 117, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "WINDOWS", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 72, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "LINUX", + "type": "rectangle", + "pos": { + "x": 336, + "y": 508 + }, + "width": 139, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "LINUX", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 43, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "MACOS", + "type": "rectangle", + "pos": { + "x": 515, + "y": 508 + }, + "width": 106, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "MACOS", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 50, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "KUBERNETES", + "type": "rectangle", + "pos": { + "x": 661, + "y": 508 + }, + "width": 139, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "darkcyan", + "stroke": "black", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "KUBERNETES", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "white", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 94, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "black", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/dagger_grid/elk/sketch.exp.svg b/e2etests/testdata/stable/dagger_grid/elk/sketch.exp.svg new file mode 100644 index 000000000..cc62b273b --- /dev/null +++ b/e2etests/testdata/stable/dagger_grid/elk/sketch.exp.svg @@ -0,0 +1,95 @@ +DAGGER ENGINEANY DOCKER COMPATIBLE RUNTIMEANY CIWINDOWSLINUXMACOSKUBERNETES + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/edge-label-overflow/dagre/board.exp.json b/e2etests/testdata/stable/edge-label-overflow/dagre/board.exp.json new file mode 100644 index 000000000..447a27946 --- /dev/null +++ b/e2etests/testdata/stable/edge-label-overflow/dagre/board.exp.json @@ -0,0 +1,319 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "student", + "type": "rectangle", + "pos": { + "x": 110, + "y": 0 + }, + "width": 100, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "student", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 55, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "committee chair", + "type": "rectangle", + "pos": { + "x": 79, + "y": 187 + }, + "width": 162, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "committee chair", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 117, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "committee", + "type": "rectangle", + "pos": { + "x": 99, + "y": 374 + }, + "width": 122, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "committee", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 77, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(student -> committee chair)[0]", + "src": "student", + "srcArrow": "none", + "srcLabel": "", + "dst": "committee chair", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "Apply for appeal", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 109, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 126.13235294117646, + "y": 66 + }, + { + "x": 76.82647058823528, + "y": 114.4 + }, + { + "x": 76.9, + "y": 138.7 + }, + { + "x": 126.5, + "y": 187.5 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(student <- committee chair)[0]", + "src": "student", + "srcArrow": "triangle", + "srcLabel": "", + "dst": "committee chair", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "Deny. Need more information", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 192, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 193.36764705882354, + "y": 66 + }, + { + "x": 242.67352941176472, + "y": 114.4 + }, + { + "x": 242.6, + "y": 138.7 + }, + { + "x": 193, + "y": 187.5 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(committee chair -> committee)[0]", + "src": "committee chair", + "srcArrow": "none", + "srcLabel": "", + "dst": "committee", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "Accept appeal", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 94, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 159.75, + "y": 253 + }, + { + "x": 159.75, + "y": 301.4 + }, + { + "x": 159.75, + "y": 325.7 + }, + { + "x": 159.75, + "y": 374.5 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/edge-label-overflow/dagre/sketch.exp.svg b/e2etests/testdata/stable/edge-label-overflow/dagre/sketch.exp.svg new file mode 100644 index 000000000..efcdc3cce --- /dev/null +++ b/e2etests/testdata/stable/edge-label-overflow/dagre/sketch.exp.svg @@ -0,0 +1,104 @@ +studentcommittee chaircommittee Apply for appeal Deny. Need more informationAccept appeal + + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/edge-label-overflow/elk/board.exp.json b/e2etests/testdata/stable/edge-label-overflow/elk/board.exp.json new file mode 100644 index 000000000..f17ddcb63 --- /dev/null +++ b/e2etests/testdata/stable/edge-label-overflow/elk/board.exp.json @@ -0,0 +1,324 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "student", + "type": "rectangle", + "pos": { + "x": 97, + "y": 12 + }, + "width": 100, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "student", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 55, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "committee chair", + "type": "rectangle", + "pos": { + "x": 66, + "y": 259 + }, + "width": 162, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "committee chair", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 117, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "committee", + "type": "rectangle", + "pos": { + "x": 86, + "y": 486 + }, + "width": 122, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "committee", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 77, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(student -> committee chair)[0]", + "src": "student", + "srcArrow": "none", + "srcLabel": "", + "dst": "committee chair", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "Apply for appeal", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 109, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 130.58333333333331, + "y": 78 + }, + { + "x": 130.58333333333331, + "y": 118 + }, + { + "x": 66.5, + "y": 118 + }, + { + "x": 66.5, + "y": 219 + }, + { + "x": 120.25, + "y": 219 + }, + { + "x": 120.25, + "y": 259 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(student <- committee chair)[0]", + "src": "student", + "srcArrow": "triangle", + "srcLabel": "", + "dst": "committee chair", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "Deny. Need more information", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 192, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 163.91666666666666, + "y": 78 + }, + { + "x": 163.91666666666666, + "y": 118 + }, + { + "x": 228, + "y": 118 + }, + { + "x": 228, + "y": 219 + }, + { + "x": 174.25, + "y": 219 + }, + { + "x": 174.25, + "y": 259 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(committee chair -> committee)[0]", + "src": "committee chair", + "srcArrow": "none", + "srcLabel": "", + "dst": "committee", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "Accept appeal", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 94, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 147.25, + "y": 325 + }, + { + "x": 147.25, + "y": 486 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/edge-label-overflow/elk/sketch.exp.svg b/e2etests/testdata/stable/edge-label-overflow/elk/sketch.exp.svg new file mode 100644 index 000000000..fd70eb8b0 --- /dev/null +++ b/e2etests/testdata/stable/edge-label-overflow/elk/sketch.exp.svg @@ -0,0 +1,104 @@ +studentcommittee chaircommittee Apply for appeal Deny. Need more informationAccept appeal + + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/elk_shim/dagre/board.exp.json b/e2etests/testdata/stable/elk_shim/dagre/board.exp.json index f839bf8a2..825a9fef0 100644 --- a/e2etests/testdata/stable/elk_shim/dagre/board.exp.json +++ b/e2etests/testdata/stable/elk_shim/dagre/board.exp.json @@ -10,7 +10,7 @@ "x": 0, "y": 275 }, - "width": 387, + "width": 417, "height": 1215, "opacity": 1, "strokeDash": 0, @@ -51,7 +51,7 @@ "x": 95, "y": 340 }, - "width": 273, + "width": 302, "height": 307, "opacity": 1, "strokeDash": 0, @@ -89,7 +89,7 @@ "id": "network.cell tower.satellites", "type": "stored_data", "pos": { - "x": 161, + "x": 176, "y": 372 }, "width": 140, @@ -130,7 +130,7 @@ "id": "network.cell tower.transmitter", "type": "rectangle", "pos": { - "x": 161, + "x": 176, "y": 554 }, "width": 140, @@ -253,7 +253,7 @@ "id": "network.data processor", "type": "rectangle", "pos": { - "x": 142, + "x": 157, "y": 804 }, "width": 179, @@ -294,7 +294,7 @@ "id": "network.data processor.storage", "type": "cylinder", "pos": { - "x": 182, + "x": 197, "y": 836 }, "width": 99, @@ -335,7 +335,7 @@ "id": "user", "type": "person", "pos": { - "x": 75, + "x": 80, "y": 0 }, "width": 130, @@ -376,7 +376,7 @@ "id": "api server", "type": "rectangle", "pos": { - "x": 428, + "x": 457, "y": 1066 }, "width": 116, @@ -417,7 +417,7 @@ "id": "logs", "type": "page", "pos": { - "x": 449, + "x": 479, "y": 1303 }, "width": 73, @@ -483,19 +483,19 @@ "labelPercentage": 0, "route": [ { - "x": 210, + "x": 221, "y": 434 }, { - "x": 176.4, + "x": 182.6, "y": 482 }, { - "x": 176.4, + "x": 182.8, "y": 506.2 }, { - "x": 210, + "x": 222, "y": 555 } ], @@ -532,19 +532,19 @@ "labelPercentage": 0, "route": [ { - "x": 231, + "x": 246, "y": 434 }, { - "x": 231.2, + "x": 246, "y": 482 }, { - "x": 231.25, + "x": 246, "y": 506.2 }, { - "x": 231.25, + "x": 246, "y": 555 } ], @@ -581,19 +581,19 @@ "labelPercentage": 0, "route": [ { - "x": 253, + "x": 271, "y": 434 }, { - "x": 286.2, + "x": 309.4, "y": 482 }, { - "x": 286.1, + "x": 309.2, "y": 506.2 }, { - "x": 252.5, + "x": 270, "y": 555 } ], @@ -630,31 +630,31 @@ "labelPercentage": 0, "route": [ { - "x": 231.25, + "x": 246, "y": 615.5 }, { - "x": 231.25, + "x": 246, "y": 641.1 }, { - "x": 231.25, + "x": 246, "y": 659.6 }, { - "x": 231.25, + "x": 246, "y": 677.75 }, { - "x": 231.25, + "x": 246, "y": 695.9 }, { - "x": 231.2, + "x": 246, "y": 782.2 }, { - "x": 231, + "x": 246, "y": 837 } ], @@ -691,19 +691,19 @@ "labelPercentage": 0, "route": [ { - "x": 164, + "x": 171, "y": 87 }, { - "x": 217.8, + "x": 231, "y": 156.2 }, { - "x": 231.25, + "x": 246, "y": 248.2 }, { - "x": 231.25, + "x": 246, "y": 305 } ], @@ -740,11 +740,11 @@ "labelPercentage": 0, "route": [ { - "x": 123, + "x": 126, "y": 87 }, { - "x": 84.4, + "x": 85, "y": 156.2 }, { @@ -945,12 +945,12 @@ "labelPercentage": 0, "route": [ { - "x": 427.75, - "y": 1113.8881262868908 + "x": 457.25, + "y": 1112.7726984126984 }, { - "x": 182.75, - "y": 1176.777625257378 + "x": 188.64999999999998, + "y": 1176.5545396825396 }, { "x": 118.2, @@ -994,19 +994,19 @@ "labelPercentage": 0, "route": [ { - "x": 485.75, + "x": 515.25, "y": 1132 }, { - "x": 485.75, + "x": 515.25, "y": 1180.4 }, { - "x": 485.8, + "x": 515.2, "y": 1263 }, { - "x": 486, + "x": 515, "y": 1303 } ], @@ -1043,20 +1043,20 @@ "labelPercentage": 0, "route": [ { - "x": 231.25, + "x": 246, "y": 986.5 }, { - "x": 231.25, + "x": 246, "y": 1010.1 }, { - "x": 270.55, - "y": 1028.8168958742633 + "x": 288.2, + "y": 1029 }, { - "x": 427.75, - "y": 1080.0844793713163 + "x": 457, + "y": 1081 } ], "isCurve": true, diff --git a/e2etests/testdata/stable/elk_shim/dagre/sketch.exp.svg b/e2etests/testdata/stable/elk_shim/dagre/sketch.exp.svg index 6f5a2477e..b7f521821 100644 --- a/e2etests/testdata/stable/elk_shim/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/elk_shim/dagre/sketch.exp.svg @@ -1,23 +1,23 @@ -networkuserapi serverlogscell towerONLINE PORTALLLLdata processorsatellitestransmitteruistorage sendsendsendphone logsmake call accessdisplaypersist - - - - - - - - - + .d2-49621034 .fill-N1{fill:#0A0F25;} + .d2-49621034 .fill-N2{fill:#676C7E;} + .d2-49621034 .fill-N3{fill:#9499AB;} + .d2-49621034 .fill-N4{fill:#CFD2DD;} + .d2-49621034 .fill-N5{fill:#DEE1EB;} + .d2-49621034 .fill-N6{fill:#EEF1F8;} + .d2-49621034 .fill-N7{fill:#FFFFFF;} + .d2-49621034 .fill-B1{fill:#0D32B2;} + .d2-49621034 .fill-B2{fill:#0D32B2;} + .d2-49621034 .fill-B3{fill:#E3E9FD;} + .d2-49621034 .fill-B4{fill:#E3E9FD;} + .d2-49621034 .fill-B5{fill:#EDF0FD;} + .d2-49621034 .fill-B6{fill:#F7F8FE;} + .d2-49621034 .fill-AA2{fill:#4A6FF3;} + .d2-49621034 .fill-AA4{fill:#EDF0FD;} + .d2-49621034 .fill-AA5{fill:#F7F8FE;} + .d2-49621034 .fill-AB4{fill:#EDF0FD;} + .d2-49621034 .fill-AB5{fill:#F7F8FE;} + .d2-49621034 .stroke-N1{stroke:#0A0F25;} + .d2-49621034 .stroke-N2{stroke:#676C7E;} + .d2-49621034 .stroke-N3{stroke:#9499AB;} + .d2-49621034 .stroke-N4{stroke:#CFD2DD;} + .d2-49621034 .stroke-N5{stroke:#DEE1EB;} + .d2-49621034 .stroke-N6{stroke:#EEF1F8;} + .d2-49621034 .stroke-N7{stroke:#FFFFFF;} + .d2-49621034 .stroke-B1{stroke:#0D32B2;} + .d2-49621034 .stroke-B2{stroke:#0D32B2;} + .d2-49621034 .stroke-B3{stroke:#E3E9FD;} + .d2-49621034 .stroke-B4{stroke:#E3E9FD;} + .d2-49621034 .stroke-B5{stroke:#EDF0FD;} + .d2-49621034 .stroke-B6{stroke:#F7F8FE;} + .d2-49621034 .stroke-AA2{stroke:#4A6FF3;} + .d2-49621034 .stroke-AA4{stroke:#EDF0FD;} + .d2-49621034 .stroke-AA5{stroke:#F7F8FE;} + .d2-49621034 .stroke-AB4{stroke:#EDF0FD;} + .d2-49621034 .stroke-AB5{stroke:#F7F8FE;} + .d2-49621034 .background-color-N1{background-color:#0A0F25;} + .d2-49621034 .background-color-N2{background-color:#676C7E;} + .d2-49621034 .background-color-N3{background-color:#9499AB;} + .d2-49621034 .background-color-N4{background-color:#CFD2DD;} + .d2-49621034 .background-color-N5{background-color:#DEE1EB;} + .d2-49621034 .background-color-N6{background-color:#EEF1F8;} + .d2-49621034 .background-color-N7{background-color:#FFFFFF;} + .d2-49621034 .background-color-B1{background-color:#0D32B2;} + .d2-49621034 .background-color-B2{background-color:#0D32B2;} + .d2-49621034 .background-color-B3{background-color:#E3E9FD;} + .d2-49621034 .background-color-B4{background-color:#E3E9FD;} + .d2-49621034 .background-color-B5{background-color:#EDF0FD;} + .d2-49621034 .background-color-B6{background-color:#F7F8FE;} + .d2-49621034 .background-color-AA2{background-color:#4A6FF3;} + .d2-49621034 .background-color-AA4{background-color:#EDF0FD;} + .d2-49621034 .background-color-AA5{background-color:#F7F8FE;} + .d2-49621034 .background-color-AB4{background-color:#EDF0FD;} + .d2-49621034 .background-color-AB5{background-color:#F7F8FE;} + .d2-49621034 .color-N1{color:#0A0F25;} + .d2-49621034 .color-N2{color:#676C7E;} + .d2-49621034 .color-N3{color:#9499AB;} + .d2-49621034 .color-N4{color:#CFD2DD;} + .d2-49621034 .color-N5{color:#DEE1EB;} + .d2-49621034 .color-N6{color:#EEF1F8;} + .d2-49621034 .color-N7{color:#FFFFFF;} + .d2-49621034 .color-B1{color:#0D32B2;} + .d2-49621034 .color-B2{color:#0D32B2;} + .d2-49621034 .color-B3{color:#E3E9FD;} + .d2-49621034 .color-B4{color:#E3E9FD;} + .d2-49621034 .color-B5{color:#EDF0FD;} + .d2-49621034 .color-B6{color:#F7F8FE;} + .d2-49621034 .color-AA2{color:#4A6FF3;} + .d2-49621034 .color-AA4{color:#EDF0FD;} + .d2-49621034 .color-AA5{color:#F7F8FE;} + .d2-49621034 .color-AB4{color:#EDF0FD;} + .d2-49621034 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>networkuserapi serverlogscell towerONLINE PORTALLLLdata processorsatellitestransmitteruistorage sendsendsendphone logsmake call accessdisplaypersist + + + + + + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/executive_grid/dagre/board.exp.json b/e2etests/testdata/stable/executive_grid/dagre/board.exp.json new file mode 100644 index 000000000..6ec7a989f --- /dev/null +++ b/e2etests/testdata/stable/executive_grid/dagre/board.exp.json @@ -0,0 +1,458 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "Executive Services", + "type": "rectangle", + "pos": { + "x": 0, + "y": 0 + }, + "width": 1080, + "height": 61, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Executive Services", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 131, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"I/O\\nManager\"", + "type": "rectangle", + "pos": { + "x": 0, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "I/O\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Security\\nReference\\nMonitor\"", + "type": "rectangle", + "pos": { + "x": 140, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Security\nReference\nMonitor", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 72, + "labelHeight": 53, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"IPC\\nManager\"", + "type": "rectangle", + "pos": { + "x": 280, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "IPC\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Virtual\\nMemory\\nManager\\n(VMM)\"", + "type": "rectangle", + "pos": { + "x": 420, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Virtual\nMemory\nManager\n(VMM)", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 64, + "labelHeight": 69, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Process\\nManager\"", + "type": "rectangle", + "pos": { + "x": 560, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Process\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"PnP\\nManager\"", + "type": "rectangle", + "pos": { + "x": 700, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "PnP\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Power\\nManager\"", + "type": "rectangle", + "pos": { + "x": 840, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Power\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Window\\nManager\\n\\nGDI\"", + "type": "rectangle", + "pos": { + "x": 980, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Window\nManager\n\nGDI", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 63, + "labelHeight": 69, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "Object Manager", + "type": "rectangle", + "pos": { + "x": 0, + "y": 341 + }, + "width": 1080, + "height": 61, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Object Manager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 112, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/executive_grid/dagre/sketch.exp.svg b/e2etests/testdata/stable/executive_grid/dagre/sketch.exp.svg new file mode 100644 index 000000000..8b27b5168 --- /dev/null +++ b/e2etests/testdata/stable/executive_grid/dagre/sketch.exp.svg @@ -0,0 +1,95 @@ +Executive ServicesI/OManagerSecurityReferenceMonitorIPCManagerVirtualMemoryManager(VMM)ProcessManagerPnPManagerPowerManagerWindowManager GDIObject Manager + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/executive_grid/elk/board.exp.json b/e2etests/testdata/stable/executive_grid/elk/board.exp.json new file mode 100644 index 000000000..6ec7a989f --- /dev/null +++ b/e2etests/testdata/stable/executive_grid/elk/board.exp.json @@ -0,0 +1,458 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "Executive Services", + "type": "rectangle", + "pos": { + "x": 0, + "y": 0 + }, + "width": 1080, + "height": 61, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Executive Services", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 131, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"I/O\\nManager\"", + "type": "rectangle", + "pos": { + "x": 0, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "I/O\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Security\\nReference\\nMonitor\"", + "type": "rectangle", + "pos": { + "x": 140, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Security\nReference\nMonitor", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 72, + "labelHeight": 53, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"IPC\\nManager\"", + "type": "rectangle", + "pos": { + "x": 280, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "IPC\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Virtual\\nMemory\\nManager\\n(VMM)\"", + "type": "rectangle", + "pos": { + "x": 420, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Virtual\nMemory\nManager\n(VMM)", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 64, + "labelHeight": 69, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Process\\nManager\"", + "type": "rectangle", + "pos": { + "x": 560, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Process\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"PnP\\nManager\"", + "type": "rectangle", + "pos": { + "x": 700, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "PnP\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Power\\nManager\"", + "type": "rectangle", + "pos": { + "x": 840, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Power\nManager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 37, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "\"Window\\nManager\\n\\nGDI\"", + "type": "rectangle", + "pos": { + "x": 980, + "y": 101 + }, + "width": 100, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Window\nManager\n\nGDI", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 63, + "labelHeight": 69, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "Object Manager", + "type": "rectangle", + "pos": { + "x": 0, + "y": 341 + }, + "width": 1080, + "height": 61, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Object Manager", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 112, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/executive_grid/elk/sketch.exp.svg b/e2etests/testdata/stable/executive_grid/elk/sketch.exp.svg new file mode 100644 index 000000000..8b27b5168 --- /dev/null +++ b/e2etests/testdata/stable/executive_grid/elk/sketch.exp.svg @@ -0,0 +1,95 @@ +Executive ServicesI/OManagerSecurityReferenceMonitorIPCManagerVirtualMemoryManager(VMM)ProcessManagerPnPManagerPowerManagerWindowManager GDIObject Manager + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/grid_tests/dagre/board.exp.json b/e2etests/testdata/stable/grid_tests/dagre/board.exp.json new file mode 100644 index 000000000..15c3df149 --- /dev/null +++ b/e2etests/testdata/stable/grid_tests/dagre/board.exp.json @@ -0,0 +1,3738 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "rows 1", + "type": "rectangle", + "pos": { + "x": 0, + "y": 318 + }, + "width": 731, + "height": 186, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 1", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 74, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 1.a", + "type": "rectangle", + "pos": { + "x": 60, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.b", + "type": "rectangle", + "pos": { + "x": 153, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.c", + "type": "rectangle", + "pos": { + "x": 246, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.d", + "type": "rectangle", + "pos": { + "x": 339, + "y": 378 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.e", + "type": "rectangle", + "pos": { + "x": 433, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.f", + "type": "rectangle", + "pos": { + "x": 526, + "y": 378 + }, + "width": 51, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.g", + "type": "rectangle", + "pos": { + "x": 617, + "y": 378 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1", + "type": "rectangle", + "pos": { + "x": 791, + "y": 0 + }, + "width": 174, + "height": 822, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 1", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 119, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 1.a", + "type": "rectangle", + "pos": { + "x": 851, + "y": 60 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.b", + "type": "rectangle", + "pos": { + "x": 851, + "y": 166 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.c", + "type": "rectangle", + "pos": { + "x": 851, + "y": 272 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.d", + "type": "rectangle", + "pos": { + "x": 851, + "y": 378 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.e", + "type": "rectangle", + "pos": { + "x": 851, + "y": 484 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.f", + "type": "rectangle", + "pos": { + "x": 851, + "y": 590 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.g", + "type": "rectangle", + "pos": { + "x": 851, + "y": 696 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2", + "type": "rectangle", + "pos": { + "x": 1025, + "y": 265 + }, + "width": 452, + "height": 292, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 74, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 2.a", + "type": "rectangle", + "pos": { + "x": 1085, + "y": 325 + }, + "width": 84, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.b", + "type": "rectangle", + "pos": { + "x": 1209, + "y": 325 + }, + "width": 84, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.c", + "type": "rectangle", + "pos": { + "x": 1333, + "y": 325 + }, + "width": 84, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.d", + "type": "rectangle", + "pos": { + "x": 1085, + "y": 431 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.e", + "type": "rectangle", + "pos": { + "x": 1179, + "y": 431 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.f", + "type": "rectangle", + "pos": { + "x": 1272, + "y": 431 + }, + "width": 51, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.g", + "type": "rectangle", + "pos": { + "x": 1363, + "y": 431 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2", + "type": "rectangle", + "pos": { + "x": 1537, + "y": 159 + }, + "width": 268, + "height": 504, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 119, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 2.a", + "type": "rectangle", + "pos": { + "x": 1597, + "y": 219 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.b", + "type": "rectangle", + "pos": { + "x": 1597, + "y": 325 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.c", + "type": "rectangle", + "pos": { + "x": 1597, + "y": 431 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.d", + "type": "rectangle", + "pos": { + "x": 1597, + "y": 537 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.e", + "type": "rectangle", + "pos": { + "x": 1691, + "y": 219 + }, + "width": 54, + "height": 101, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.f", + "type": "rectangle", + "pos": { + "x": 1691, + "y": 360 + }, + "width": 54, + "height": 101, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.g", + "type": "rectangle", + "pos": { + "x": 1691, + "y": 501 + }, + "width": 54, + "height": 101, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2", + "type": "rectangle", + "pos": { + "x": 1865, + "y": 159 + }, + "width": 268, + "height": 504, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 2 columns 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 200, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 2 columns 2.a", + "type": "rectangle", + "pos": { + "x": 1925, + "y": 219 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.b", + "type": "rectangle", + "pos": { + "x": 2019, + "y": 219 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.c", + "type": "rectangle", + "pos": { + "x": 1925, + "y": 325 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.d", + "type": "rectangle", + "pos": { + "x": 2019, + "y": 325 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.e", + "type": "rectangle", + "pos": { + "x": 1925, + "y": 431 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.f", + "type": "rectangle", + "pos": { + "x": 2019, + "y": 431 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.g", + "type": "rectangle", + "pos": { + "x": 1925, + "y": 537 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2", + "type": "rectangle", + "pos": { + "x": 2193, + "y": 265 + }, + "width": 454, + "height": 292, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 2 rows 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 201, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 2 rows 2.a", + "type": "rectangle", + "pos": { + "x": 2253, + "y": 325 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.b", + "type": "rectangle", + "pos": { + "x": 2253, + "y": 431 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.c", + "type": "rectangle", + "pos": { + "x": 2346, + "y": 325 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.d", + "type": "rectangle", + "pos": { + "x": 2346, + "y": 431 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.e", + "type": "rectangle", + "pos": { + "x": 2440, + "y": 325 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.f", + "type": "rectangle", + "pos": { + "x": 2440, + "y": 431 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.g", + "type": "rectangle", + "pos": { + "x": 2533, + "y": 325 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3", + "type": "rectangle", + "pos": { + "x": 2707, + "y": 212 + }, + "width": 360, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 3 columns 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 200, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 3 columns 3.a", + "type": "rectangle", + "pos": { + "x": 2767, + "y": 272 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.b", + "type": "rectangle", + "pos": { + "x": 2861, + "y": 272 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.c", + "type": "rectangle", + "pos": { + "x": 2954, + "y": 272 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.d", + "type": "rectangle", + "pos": { + "x": 2767, + "y": 378 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.e", + "type": "rectangle", + "pos": { + "x": 2861, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.f", + "type": "rectangle", + "pos": { + "x": 2954, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.g", + "type": "rectangle", + "pos": { + "x": 2767, + "y": 484 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3", + "type": "rectangle", + "pos": { + "x": 3127, + "y": 212 + }, + "width": 361, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 3 rows 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 201, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 3 rows 3.a", + "type": "rectangle", + "pos": { + "x": 3187, + "y": 272 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.b", + "type": "rectangle", + "pos": { + "x": 3187, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.c", + "type": "rectangle", + "pos": { + "x": 3187, + "y": 484 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.d", + "type": "rectangle", + "pos": { + "x": 3280, + "y": 272 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.e", + "type": "rectangle", + "pos": { + "x": 3280, + "y": 378 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.f", + "type": "rectangle", + "pos": { + "x": 3280, + "y": 484 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.g", + "type": "rectangle", + "pos": { + "x": 3374, + "y": 272 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3", + "type": "rectangle", + "pos": { + "x": 3548, + "y": 212 + }, + "width": 359, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 74, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 3.a", + "type": "rectangle", + "pos": { + "x": 3608, + "y": 272 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.b", + "type": "rectangle", + "pos": { + "x": 3701, + "y": 272 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.c", + "type": "rectangle", + "pos": { + "x": 3794, + "y": 272 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.d", + "type": "rectangle", + "pos": { + "x": 3608, + "y": 378 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.e", + "type": "rectangle", + "pos": { + "x": 3747, + "y": 378 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.f", + "type": "rectangle", + "pos": { + "x": 3608, + "y": 484 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.g", + "type": "rectangle", + "pos": { + "x": 3747, + "y": 484 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3", + "type": "rectangle", + "pos": { + "x": 3967, + "y": 212 + }, + "width": 361, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 119, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 3.a", + "type": "rectangle", + "pos": { + "x": 4027, + "y": 272 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.b", + "type": "rectangle", + "pos": { + "x": 4027, + "y": 378 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.c", + "type": "rectangle", + "pos": { + "x": 4027, + "y": 484 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.d", + "type": "rectangle", + "pos": { + "x": 4120, + "y": 272 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.e", + "type": "rectangle", + "pos": { + "x": 4120, + "y": 431 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.f", + "type": "rectangle", + "pos": { + "x": 4214, + "y": 272 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.g", + "type": "rectangle", + "pos": { + "x": 4214, + "y": 431 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights", + "type": "rectangle", + "pos": { + "x": 4388, + "y": 28 + }, + "width": 886, + "height": 766, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "widths heights", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 171, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "widths heights.a w200", + "type": "rectangle", + "pos": { + "x": 4448, + "y": 88 + }, + "width": 200, + "height": 300, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a w200", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 49, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.b h300", + "type": "rectangle", + "pos": { + "x": 4688, + "y": 88 + }, + "width": 86, + "height": 300, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b h300", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 46, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.c", + "type": "rectangle", + "pos": { + "x": 4814, + "y": 88 + }, + "width": 400, + "height": 300, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.d h200", + "type": "rectangle", + "pos": { + "x": 4448, + "y": 428 + }, + "width": 200, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d h200", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 47, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.e", + "type": "rectangle", + "pos": { + "x": 4688, + "y": 428 + }, + "width": 86, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.f w400", + "type": "rectangle", + "pos": { + "x": 4814, + "y": 428 + }, + "width": 400, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f w400", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 46, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.g", + "type": "rectangle", + "pos": { + "x": 4448, + "y": 668 + }, + "width": 200, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.h", + "type": "rectangle", + "pos": { + "x": 4688, + "y": 668 + }, + "width": 86, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "h", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.i", + "type": "rectangle", + "pos": { + "x": 4814, + "y": 668 + }, + "width": 400, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "i", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 4, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + } + ], + "connections": [], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/grid_tests/dagre/sketch.exp.svg b/e2etests/testdata/stable/grid_tests/dagre/sketch.exp.svg new file mode 100644 index 000000000..4f6c4484f --- /dev/null +++ b/e2etests/testdata/stable/grid_tests/dagre/sketch.exp.svg @@ -0,0 +1,102 @@ +rows 1columns 1rows 2columns 2rows 2 columns 2columns 2 rows 2rows 3 columns 3columns 3 rows 3rows 3columns 3widths heightsabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefga w200b h300cd h200ef w400ghi + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/grid_tests/elk/board.exp.json b/e2etests/testdata/stable/grid_tests/elk/board.exp.json new file mode 100644 index 000000000..95b4c1c12 --- /dev/null +++ b/e2etests/testdata/stable/grid_tests/elk/board.exp.json @@ -0,0 +1,3738 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "rows 1", + "type": "rectangle", + "pos": { + "x": 12, + "y": 330 + }, + "width": 731, + "height": 186, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 1", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 74, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 1.a", + "type": "rectangle", + "pos": { + "x": 72, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.b", + "type": "rectangle", + "pos": { + "x": 165, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.c", + "type": "rectangle", + "pos": { + "x": 258, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.d", + "type": "rectangle", + "pos": { + "x": 351, + "y": 390 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.e", + "type": "rectangle", + "pos": { + "x": 445, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.f", + "type": "rectangle", + "pos": { + "x": 538, + "y": 390 + }, + "width": 51, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 1.g", + "type": "rectangle", + "pos": { + "x": 629, + "y": 390 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1", + "type": "rectangle", + "pos": { + "x": 763, + "y": 12 + }, + "width": 174, + "height": 822, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 1", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 119, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 1.a", + "type": "rectangle", + "pos": { + "x": 823, + "y": 72 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.b", + "type": "rectangle", + "pos": { + "x": 823, + "y": 178 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.c", + "type": "rectangle", + "pos": { + "x": 823, + "y": 284 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.d", + "type": "rectangle", + "pos": { + "x": 823, + "y": 390 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.e", + "type": "rectangle", + "pos": { + "x": 823, + "y": 496 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.f", + "type": "rectangle", + "pos": { + "x": 823, + "y": 602 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 1.g", + "type": "rectangle", + "pos": { + "x": 823, + "y": 708 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2", + "type": "rectangle", + "pos": { + "x": 957, + "y": 277 + }, + "width": 452, + "height": 292, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 74, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 2.a", + "type": "rectangle", + "pos": { + "x": 1017, + "y": 337 + }, + "width": 84, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.b", + "type": "rectangle", + "pos": { + "x": 1141, + "y": 337 + }, + "width": 84, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.c", + "type": "rectangle", + "pos": { + "x": 1265, + "y": 337 + }, + "width": 84, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.d", + "type": "rectangle", + "pos": { + "x": 1017, + "y": 443 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.e", + "type": "rectangle", + "pos": { + "x": 1111, + "y": 443 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.f", + "type": "rectangle", + "pos": { + "x": 1204, + "y": 443 + }, + "width": 51, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2.g", + "type": "rectangle", + "pos": { + "x": 1295, + "y": 443 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2", + "type": "rectangle", + "pos": { + "x": 1429, + "y": 171 + }, + "width": 268, + "height": 504, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 119, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 2.a", + "type": "rectangle", + "pos": { + "x": 1489, + "y": 231 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.b", + "type": "rectangle", + "pos": { + "x": 1489, + "y": 337 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.c", + "type": "rectangle", + "pos": { + "x": 1489, + "y": 443 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.d", + "type": "rectangle", + "pos": { + "x": 1489, + "y": 549 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.e", + "type": "rectangle", + "pos": { + "x": 1583, + "y": 231 + }, + "width": 54, + "height": 101, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.f", + "type": "rectangle", + "pos": { + "x": 1583, + "y": 372 + }, + "width": 54, + "height": 101, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2.g", + "type": "rectangle", + "pos": { + "x": 1583, + "y": 513 + }, + "width": 54, + "height": 101, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2", + "type": "rectangle", + "pos": { + "x": 1717, + "y": 171 + }, + "width": 268, + "height": 504, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 2 columns 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 200, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 2 columns 2.a", + "type": "rectangle", + "pos": { + "x": 1777, + "y": 231 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.b", + "type": "rectangle", + "pos": { + "x": 1871, + "y": 231 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.c", + "type": "rectangle", + "pos": { + "x": 1777, + "y": 337 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.d", + "type": "rectangle", + "pos": { + "x": 1871, + "y": 337 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.e", + "type": "rectangle", + "pos": { + "x": 1777, + "y": 443 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.f", + "type": "rectangle", + "pos": { + "x": 1871, + "y": 443 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 2 columns 2.g", + "type": "rectangle", + "pos": { + "x": 1777, + "y": 549 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2", + "type": "rectangle", + "pos": { + "x": 2005, + "y": 277 + }, + "width": 454, + "height": 292, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 2 rows 2", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 201, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 2 rows 2.a", + "type": "rectangle", + "pos": { + "x": 2065, + "y": 337 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.b", + "type": "rectangle", + "pos": { + "x": 2065, + "y": 443 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.c", + "type": "rectangle", + "pos": { + "x": 2158, + "y": 337 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.d", + "type": "rectangle", + "pos": { + "x": 2158, + "y": 443 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.e", + "type": "rectangle", + "pos": { + "x": 2252, + "y": 337 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.f", + "type": "rectangle", + "pos": { + "x": 2252, + "y": 443 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 2 rows 2.g", + "type": "rectangle", + "pos": { + "x": 2345, + "y": 337 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3", + "type": "rectangle", + "pos": { + "x": 2479, + "y": 224 + }, + "width": 360, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 3 columns 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 200, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 3 columns 3.a", + "type": "rectangle", + "pos": { + "x": 2539, + "y": 284 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.b", + "type": "rectangle", + "pos": { + "x": 2633, + "y": 284 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.c", + "type": "rectangle", + "pos": { + "x": 2726, + "y": 284 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.d", + "type": "rectangle", + "pos": { + "x": 2539, + "y": 390 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.e", + "type": "rectangle", + "pos": { + "x": 2633, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.f", + "type": "rectangle", + "pos": { + "x": 2726, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3 columns 3.g", + "type": "rectangle", + "pos": { + "x": 2539, + "y": 496 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3", + "type": "rectangle", + "pos": { + "x": 2859, + "y": 224 + }, + "width": 361, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 3 rows 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 201, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 3 rows 3.a", + "type": "rectangle", + "pos": { + "x": 2919, + "y": 284 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.b", + "type": "rectangle", + "pos": { + "x": 2919, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.c", + "type": "rectangle", + "pos": { + "x": 2919, + "y": 496 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.d", + "type": "rectangle", + "pos": { + "x": 3012, + "y": 284 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.e", + "type": "rectangle", + "pos": { + "x": 3012, + "y": 390 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.f", + "type": "rectangle", + "pos": { + "x": 3012, + "y": 496 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3 rows 3.g", + "type": "rectangle", + "pos": { + "x": 3106, + "y": 284 + }, + "width": 54, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3", + "type": "rectangle", + "pos": { + "x": 3240, + "y": 224 + }, + "width": 359, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "rows 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 74, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "rows 3.a", + "type": "rectangle", + "pos": { + "x": 3300, + "y": 284 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.b", + "type": "rectangle", + "pos": { + "x": 3393, + "y": 284 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.c", + "type": "rectangle", + "pos": { + "x": 3486, + "y": 284 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.d", + "type": "rectangle", + "pos": { + "x": 3300, + "y": 390 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.e", + "type": "rectangle", + "pos": { + "x": 3439, + "y": 390 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.f", + "type": "rectangle", + "pos": { + "x": 3300, + "y": 496 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "rows 3.g", + "type": "rectangle", + "pos": { + "x": 3439, + "y": 496 + }, + "width": 99, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3", + "type": "rectangle", + "pos": { + "x": 3619, + "y": 224 + }, + "width": 361, + "height": 398, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "columns 3", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 119, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "columns 3.a", + "type": "rectangle", + "pos": { + "x": 3679, + "y": 284 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.b", + "type": "rectangle", + "pos": { + "x": 3679, + "y": 390 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.c", + "type": "rectangle", + "pos": { + "x": 3679, + "y": 496 + }, + "width": 53, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.d", + "type": "rectangle", + "pos": { + "x": 3772, + "y": 284 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.e", + "type": "rectangle", + "pos": { + "x": 3772, + "y": 443 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.f", + "type": "rectangle", + "pos": { + "x": 3866, + "y": 284 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 6, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "columns 3.g", + "type": "rectangle", + "pos": { + "x": 3866, + "y": 443 + }, + "width": 54, + "height": 119, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights", + "type": "rectangle", + "pos": { + "x": 4000, + "y": 40 + }, + "width": 886, + "height": 766, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "widths heights", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 171, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "widths heights.a w200", + "type": "rectangle", + "pos": { + "x": 4060, + "y": 100 + }, + "width": 200, + "height": 300, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a w200", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 49, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.b h300", + "type": "rectangle", + "pos": { + "x": 4300, + "y": 100 + }, + "width": 86, + "height": 300, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b h300", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 46, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.c", + "type": "rectangle", + "pos": { + "x": 4426, + "y": 100 + }, + "width": 400, + "height": 300, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.d h200", + "type": "rectangle", + "pos": { + "x": 4060, + "y": 440 + }, + "width": 200, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "d h200", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 47, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.e", + "type": "rectangle", + "pos": { + "x": 4300, + "y": 440 + }, + "width": 86, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "e", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.f w400", + "type": "rectangle", + "pos": { + "x": 4426, + "y": 440 + }, + "width": 400, + "height": 200, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "f w400", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 46, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.g", + "type": "rectangle", + "pos": { + "x": 4060, + "y": 680 + }, + "width": 200, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "g", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 9, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.h", + "type": "rectangle", + "pos": { + "x": 4300, + "y": 680 + }, + "width": 86, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "h", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 8, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "widths heights.i", + "type": "rectangle", + "pos": { + "x": 4426, + "y": 680 + }, + "width": 400, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "i", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 4, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + } + ], + "connections": [], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/grid_tests/elk/sketch.exp.svg b/e2etests/testdata/stable/grid_tests/elk/sketch.exp.svg new file mode 100644 index 000000000..f85853334 --- /dev/null +++ b/e2etests/testdata/stable/grid_tests/elk/sketch.exp.svg @@ -0,0 +1,102 @@ +rows 1columns 1rows 2columns 2rows 2 columns 2columns 2 rows 2rows 3 columns 3columns 3 rows 3rows 3columns 3widths heightsabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefga w200b h300cd h200ef w400ghi + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/mono-font/dagre/board.exp.json b/e2etests/testdata/stable/mono-font/dagre/board.exp.json index 81f339d09..26858d406 100644 --- a/e2etests/testdata/stable/mono-font/dagre/board.exp.json +++ b/e2etests/testdata/stable/mono-font/dagre/board.exp.json @@ -7,7 +7,7 @@ "id": "satellites", "type": "stored_data", "pos": { - "x": 0, + "x": 27, "y": 0 }, "width": 161, @@ -48,7 +48,7 @@ "id": "transmitter", "type": "rectangle", "pos": { - "x": 5, + "x": 32, "y": 187 }, "width": 151, @@ -114,19 +114,19 @@ "labelPercentage": 0, "route": [ { - "x": 60, + "x": 79, "y": 66 }, { - "x": 30, + "x": 39, "y": 114.4 }, { - "x": 30.1, + "x": 39, "y": 138.7 }, { - "x": 60.5, + "x": 79, "y": 187.5 } ], @@ -163,19 +163,19 @@ "labelPercentage": 0, "route": [ { - "x": 80, + "x": 107, "y": 66 }, { - "x": 80.4, + "x": 107, "y": 114.4 }, { - "x": 80.5, + "x": 107, "y": 138.7 }, { - "x": 80.5, + "x": 107, "y": 187.5 } ], @@ -212,19 +212,19 @@ "labelPercentage": 0, "route": [ { - "x": 101, + "x": 135, "y": 66 }, { - "x": 131, + "x": 175, "y": 114.4 }, { - "x": 130.9, + "x": 175, "y": 138.7 }, { - "x": 100.5, + "x": 135, "y": 187.5 } ], diff --git a/e2etests/testdata/stable/mono-font/dagre/sketch.exp.svg b/e2etests/testdata/stable/mono-font/dagre/sketch.exp.svg index ce9247380..3a7b425a7 100644 --- a/e2etests/testdata/stable/mono-font/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/mono-font/dagre/sketch.exp.svg @@ -1,16 +1,16 @@ -SATELLITESTRANSMITTER SENDSENDSEND - - - - + .d2-1620692864 .fill-N1{fill:#0A0F25;} + .d2-1620692864 .fill-N2{fill:#676C7E;} + .d2-1620692864 .fill-N3{fill:#9499AB;} + .d2-1620692864 .fill-N4{fill:#CFD2DD;} + .d2-1620692864 .fill-N5{fill:#DEE1EB;} + .d2-1620692864 .fill-N6{fill:#EEF1F8;} + .d2-1620692864 .fill-N7{fill:#FFFFFF;} + .d2-1620692864 .fill-B1{fill:#0D32B2;} + .d2-1620692864 .fill-B2{fill:#0D32B2;} + .d2-1620692864 .fill-B3{fill:#E3E9FD;} + .d2-1620692864 .fill-B4{fill:#E3E9FD;} + .d2-1620692864 .fill-B5{fill:#EDF0FD;} + .d2-1620692864 .fill-B6{fill:#F7F8FE;} + .d2-1620692864 .fill-AA2{fill:#4A6FF3;} + .d2-1620692864 .fill-AA4{fill:#EDF0FD;} + .d2-1620692864 .fill-AA5{fill:#F7F8FE;} + .d2-1620692864 .fill-AB4{fill:#EDF0FD;} + .d2-1620692864 .fill-AB5{fill:#F7F8FE;} + .d2-1620692864 .stroke-N1{stroke:#0A0F25;} + .d2-1620692864 .stroke-N2{stroke:#676C7E;} + .d2-1620692864 .stroke-N3{stroke:#9499AB;} + .d2-1620692864 .stroke-N4{stroke:#CFD2DD;} + .d2-1620692864 .stroke-N5{stroke:#DEE1EB;} + .d2-1620692864 .stroke-N6{stroke:#EEF1F8;} + .d2-1620692864 .stroke-N7{stroke:#FFFFFF;} + .d2-1620692864 .stroke-B1{stroke:#0D32B2;} + .d2-1620692864 .stroke-B2{stroke:#0D32B2;} + .d2-1620692864 .stroke-B3{stroke:#E3E9FD;} + .d2-1620692864 .stroke-B4{stroke:#E3E9FD;} + .d2-1620692864 .stroke-B5{stroke:#EDF0FD;} + .d2-1620692864 .stroke-B6{stroke:#F7F8FE;} + .d2-1620692864 .stroke-AA2{stroke:#4A6FF3;} + .d2-1620692864 .stroke-AA4{stroke:#EDF0FD;} + .d2-1620692864 .stroke-AA5{stroke:#F7F8FE;} + .d2-1620692864 .stroke-AB4{stroke:#EDF0FD;} + .d2-1620692864 .stroke-AB5{stroke:#F7F8FE;} + .d2-1620692864 .background-color-N1{background-color:#0A0F25;} + .d2-1620692864 .background-color-N2{background-color:#676C7E;} + .d2-1620692864 .background-color-N3{background-color:#9499AB;} + .d2-1620692864 .background-color-N4{background-color:#CFD2DD;} + .d2-1620692864 .background-color-N5{background-color:#DEE1EB;} + .d2-1620692864 .background-color-N6{background-color:#EEF1F8;} + .d2-1620692864 .background-color-N7{background-color:#FFFFFF;} + .d2-1620692864 .background-color-B1{background-color:#0D32B2;} + .d2-1620692864 .background-color-B2{background-color:#0D32B2;} + .d2-1620692864 .background-color-B3{background-color:#E3E9FD;} + .d2-1620692864 .background-color-B4{background-color:#E3E9FD;} + .d2-1620692864 .background-color-B5{background-color:#EDF0FD;} + .d2-1620692864 .background-color-B6{background-color:#F7F8FE;} + .d2-1620692864 .background-color-AA2{background-color:#4A6FF3;} + .d2-1620692864 .background-color-AA4{background-color:#EDF0FD;} + .d2-1620692864 .background-color-AA5{background-color:#F7F8FE;} + .d2-1620692864 .background-color-AB4{background-color:#EDF0FD;} + .d2-1620692864 .background-color-AB5{background-color:#F7F8FE;} + .d2-1620692864 .color-N1{color:#0A0F25;} + .d2-1620692864 .color-N2{color:#676C7E;} + .d2-1620692864 .color-N3{color:#9499AB;} + .d2-1620692864 .color-N4{color:#CFD2DD;} + .d2-1620692864 .color-N5{color:#DEE1EB;} + .d2-1620692864 .color-N6{color:#EEF1F8;} + .d2-1620692864 .color-N7{color:#FFFFFF;} + .d2-1620692864 .color-B1{color:#0D32B2;} + .d2-1620692864 .color-B2{color:#0D32B2;} + .d2-1620692864 .color-B3{color:#E3E9FD;} + .d2-1620692864 .color-B4{color:#E3E9FD;} + .d2-1620692864 .color-B5{color:#EDF0FD;} + .d2-1620692864 .color-B6{color:#F7F8FE;} + .d2-1620692864 .color-AA2{color:#4A6FF3;} + .d2-1620692864 .color-AA4{color:#EDF0FD;} + .d2-1620692864 .color-AA5{color:#F7F8FE;} + .d2-1620692864 .color-AB4{color:#EDF0FD;} + .d2-1620692864 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>SATELLITESTRANSMITTER SENDSENDSEND + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/self-referencing/dagre/board.exp.json b/e2etests/testdata/stable/self-referencing/dagre/board.exp.json index 400eed576..f0bffef02 100644 --- a/e2etests/testdata/stable/self-referencing/dagre/board.exp.json +++ b/e2etests/testdata/stable/self-referencing/dagre/board.exp.json @@ -48,7 +48,7 @@ "id": "y", "type": "rectangle", "pos": { - "x": 76, + "x": 96, "y": 166 }, "width": 54, @@ -89,7 +89,7 @@ "id": "z", "type": "rectangle", "pos": { - "x": 153, + "x": 193, "y": 0 }, "width": 52, @@ -156,55 +156,55 @@ "route": [ { "x": 53, - "y": 16.551724137931032 + "y": 18.38440111420613 }, { - "x": 74.33333333333333, - "y": 3.3103448275862064 + "x": 79.66666666666667, + "y": 3.676880222841225 }, { - "x": 81, + "x": 88, "y": 0 }, { - "x": 83, + "x": 90.5, "y": 0 }, { - "x": 85, + "x": 93, "y": 0 }, { - "x": 87.66666666666667, + "x": 96.33333333333333, "y": 6.6000000000000005 }, { - "x": 89.66666666666667, + "x": 98.83333333333333, "y": 16.5 }, { - "x": 91.66666666666667, + "x": 101.33333333333333, "y": 26.400000000000002 }, { - "x": 91.66666666666667, + "x": 101.33333333333333, "y": 39.6 }, { - "x": 89.66666666666667, + "x": 98.83333333333333, "y": 49.5 }, { - "x": 87.66666666666667, + "x": 96.33333333333333, "y": 59.400000000000006 }, { - "x": 74.33333333333333, - "y": 62.689655172413794 + "x": 79.66666666666667, + "y": 62.32311977715877 }, { "x": 53, - "y": 49.44827586206897 + "y": 47.61559888579387 } ], "isCurve": true, @@ -241,55 +241,55 @@ "route": [ { "x": 53, - "y": 19.849624060150376 - }, - { - "x": 85, - "y": 3.969924812030074 - }, - { - "x": 95, - "y": 0 - }, - { - "x": 98, - "y": 0 + "y": 22.890173410404625 }, { "x": 101, + "y": 4.578034682080926 + }, + { + "x": 116, "y": 0 }, { - "x": 105, + "x": 120.5, + "y": 0 + }, + { + "x": 125, + "y": 0 + }, + { + "x": 131, "y": 6.6000000000000005 }, { - "x": 108, + "x": 135.5, "y": 16.5 }, { - "x": 111, + "x": 140, "y": 26.400000000000002 }, { - "x": 111, + "x": 140, "y": 39.6 }, { - "x": 108, + "x": 135.5, "y": 49.5 }, { - "x": 105, + "x": 131, "y": 59.400000000000006 }, { - "x": 85, - "y": 62.03007518796993 + "x": 101, + "y": 61.421965317919074 }, { "x": 53, - "y": 46.150375939849624 + "y": 43.10982658959537 } ], "isCurve": true, @@ -333,12 +333,12 @@ "y": 106 }, { - "x": 36.35, - "y": 126.72196721311475 + "x": 40.35, + "y": 127.94337662337662 }, { - "x": 75.75, - "y": 169.60983606557377 + "x": 95.75, + "y": 175.7168831168831 } ], "isCurve": true, @@ -374,20 +374,20 @@ "labelPercentage": 0, "route": [ { - "x": 179, + "x": 219, "y": 66 }, { - "x": 179, + "x": 219, "y": 106 }, { - "x": 169.2, - "y": 126.6 + "x": 205.2, + "y": 128 }, { - "x": 130, - "y": 169 + "x": 150, + "y": 176 } ], "isCurve": true, @@ -423,56 +423,56 @@ "labelPercentage": 0, "route": [ { - "x": 205, - "y": 19.523560209424083 + "x": 245, + "y": 19.52356020942409 }, { - "x": 235.13333333333333, - "y": 3.9047120418848156 + "x": 275.1333333333333, + "y": 3.9047120418848174 }, { - "x": 244.54999999999998, + "x": 284.55, "y": 0 }, { - "x": 247.375, + "x": 287.375, "y": 0 }, { - "x": 250.20000000000002, + "x": 290.2, "y": 0 }, { - "x": 253.96666666666667, + "x": 293.96666666666664, "y": 6.6000000000000005 }, { - "x": 256.7916666666667, + "x": 296.79166666666663, "y": 16.5 }, { - "x": 259.6166666666667, + "x": 299.6166666666667, "y": 26.400000000000002 }, { - "x": 259.6166666666667, + "x": 299.6166666666667, "y": 39.6 }, { - "x": 256.7916666666667, + "x": 296.79166666666663, "y": 49.5 }, { - "x": 253.96666666666667, + "x": 293.96666666666664, "y": 59.400000000000006 }, { - "x": 235.13333333333333, - "y": 62.095287958115186 + "x": 275.1333333333333, + "y": 62.09528795811518 }, { - "x": 205, - "y": 46.47643979057592 + "x": 245, + "y": 46.47643979057591 } ], "isCurve": true, diff --git a/e2etests/testdata/stable/self-referencing/dagre/sketch.exp.svg b/e2etests/testdata/stable/self-referencing/dagre/sketch.exp.svg index f20e33297..57476f28f 100644 --- a/e2etests/testdata/stable/self-referencing/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/self-referencing/dagre/sketch.exp.svg @@ -1,16 +1,16 @@ -xyz hello - - + .d2-4144856773 .fill-N1{fill:#0A0F25;} + .d2-4144856773 .fill-N2{fill:#676C7E;} + .d2-4144856773 .fill-N3{fill:#9499AB;} + .d2-4144856773 .fill-N4{fill:#CFD2DD;} + .d2-4144856773 .fill-N5{fill:#DEE1EB;} + .d2-4144856773 .fill-N6{fill:#EEF1F8;} + .d2-4144856773 .fill-N7{fill:#FFFFFF;} + .d2-4144856773 .fill-B1{fill:#0D32B2;} + .d2-4144856773 .fill-B2{fill:#0D32B2;} + .d2-4144856773 .fill-B3{fill:#E3E9FD;} + .d2-4144856773 .fill-B4{fill:#E3E9FD;} + .d2-4144856773 .fill-B5{fill:#EDF0FD;} + .d2-4144856773 .fill-B6{fill:#F7F8FE;} + .d2-4144856773 .fill-AA2{fill:#4A6FF3;} + .d2-4144856773 .fill-AA4{fill:#EDF0FD;} + .d2-4144856773 .fill-AA5{fill:#F7F8FE;} + .d2-4144856773 .fill-AB4{fill:#EDF0FD;} + .d2-4144856773 .fill-AB5{fill:#F7F8FE;} + .d2-4144856773 .stroke-N1{stroke:#0A0F25;} + .d2-4144856773 .stroke-N2{stroke:#676C7E;} + .d2-4144856773 .stroke-N3{stroke:#9499AB;} + .d2-4144856773 .stroke-N4{stroke:#CFD2DD;} + .d2-4144856773 .stroke-N5{stroke:#DEE1EB;} + .d2-4144856773 .stroke-N6{stroke:#EEF1F8;} + .d2-4144856773 .stroke-N7{stroke:#FFFFFF;} + .d2-4144856773 .stroke-B1{stroke:#0D32B2;} + .d2-4144856773 .stroke-B2{stroke:#0D32B2;} + .d2-4144856773 .stroke-B3{stroke:#E3E9FD;} + .d2-4144856773 .stroke-B4{stroke:#E3E9FD;} + .d2-4144856773 .stroke-B5{stroke:#EDF0FD;} + .d2-4144856773 .stroke-B6{stroke:#F7F8FE;} + .d2-4144856773 .stroke-AA2{stroke:#4A6FF3;} + .d2-4144856773 .stroke-AA4{stroke:#EDF0FD;} + .d2-4144856773 .stroke-AA5{stroke:#F7F8FE;} + .d2-4144856773 .stroke-AB4{stroke:#EDF0FD;} + .d2-4144856773 .stroke-AB5{stroke:#F7F8FE;} + .d2-4144856773 .background-color-N1{background-color:#0A0F25;} + .d2-4144856773 .background-color-N2{background-color:#676C7E;} + .d2-4144856773 .background-color-N3{background-color:#9499AB;} + .d2-4144856773 .background-color-N4{background-color:#CFD2DD;} + .d2-4144856773 .background-color-N5{background-color:#DEE1EB;} + .d2-4144856773 .background-color-N6{background-color:#EEF1F8;} + .d2-4144856773 .background-color-N7{background-color:#FFFFFF;} + .d2-4144856773 .background-color-B1{background-color:#0D32B2;} + .d2-4144856773 .background-color-B2{background-color:#0D32B2;} + .d2-4144856773 .background-color-B3{background-color:#E3E9FD;} + .d2-4144856773 .background-color-B4{background-color:#E3E9FD;} + .d2-4144856773 .background-color-B5{background-color:#EDF0FD;} + .d2-4144856773 .background-color-B6{background-color:#F7F8FE;} + .d2-4144856773 .background-color-AA2{background-color:#4A6FF3;} + .d2-4144856773 .background-color-AA4{background-color:#EDF0FD;} + .d2-4144856773 .background-color-AA5{background-color:#F7F8FE;} + .d2-4144856773 .background-color-AB4{background-color:#EDF0FD;} + .d2-4144856773 .background-color-AB5{background-color:#F7F8FE;} + .d2-4144856773 .color-N1{color:#0A0F25;} + .d2-4144856773 .color-N2{color:#676C7E;} + .d2-4144856773 .color-N3{color:#9499AB;} + .d2-4144856773 .color-N4{color:#CFD2DD;} + .d2-4144856773 .color-N5{color:#DEE1EB;} + .d2-4144856773 .color-N6{color:#EEF1F8;} + .d2-4144856773 .color-N7{color:#FFFFFF;} + .d2-4144856773 .color-B1{color:#0D32B2;} + .d2-4144856773 .color-B2{color:#0D32B2;} + .d2-4144856773 .color-B3{color:#E3E9FD;} + .d2-4144856773 .color-B4{color:#E3E9FD;} + .d2-4144856773 .color-B5{color:#EDF0FD;} + .d2-4144856773 .color-B6{color:#F7F8FE;} + .d2-4144856773 .color-AA2{color:#4A6FF3;} + .d2-4144856773 .color-AA4{color:#EDF0FD;} + .d2-4144856773 .color-AA5{color:#F7F8FE;} + .d2-4144856773 .color-AB4{color:#EDF0FD;} + .d2-4144856773 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>xyz hello + + \ No newline at end of file diff --git a/e2etests/testdata/stable/teleport_grid/dagre/board.exp.json b/e2etests/testdata/stable/teleport_grid/dagre/board.exp.json new file mode 100644 index 000000000..6b5f7d1ad --- /dev/null +++ b/e2etests/testdata/stable/teleport_grid/dagre/board.exp.json @@ -0,0 +1,1606 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "users", + "type": "rectangle", + "pos": { + "x": 0, + "y": 204 + }, + "width": 272, + "height": 461, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "via", + "type": "rectangle", + "pos": { + "x": 543, + "y": 130 + }, + "width": 236, + "height": 610, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "teleport", + "type": "rectangle", + "pos": { + "x": 1050, + "y": 283 + }, + "width": 473, + "height": 303, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Teleport", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 101, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "jita", + "type": "rectangle", + "pos": { + "x": 2025, + "y": 0 + }, + "width": 820, + "height": 212, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Just-in-time Access via", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 266, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "infra", + "type": "rectangle", + "pos": { + "x": 2144, + "y": 232 + }, + "width": 582, + "height": 344, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Infrastructure", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 160, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "identity provider", + "type": "rectangle", + "pos": { + "x": 2335, + "y": 596 + }, + "width": 201, + "height": 118, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/azure/Identity Service Color/Identity governance.svg", + "RawPath": "/azure%2FIdentity%20Service%20Color%2FIdentity%20governance.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Indentity Provider", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 130, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "users.Engineers", + "type": "oval", + "pos": { + "x": 60, + "y": 264 + }, + "width": 152, + "height": 152, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/essentials/365-user.svg", + "RawPath": "/essentials%2F365-user.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Engineers", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 69, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "users.Machines", + "type": "oval", + "pos": { + "x": 60, + "y": 456 + }, + "width": 152, + "height": 149, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/aws/Compute/Compute.svg", + "RawPath": "/aws%2FCompute%2FCompute.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Machines", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 66, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.https", + "type": "rectangle", + "pos": { + "x": 603, + "y": 190 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "HTTPS://", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.kubectl", + "type": "rectangle", + "pos": { + "x": 603, + "y": 296 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "> kubectl", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 66, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.tsh", + "type": "rectangle", + "pos": { + "x": 603, + "y": 402 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "> tsh", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 34, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.api", + "type": "rectangle", + "pos": { + "x": 603, + "y": 508 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "> api", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 34, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.db clients", + "type": "rectangle", + "pos": { + "x": 603, + "y": 614 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "DB Clients", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 71, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "teleport.inp", + "type": "text", + "pos": { + "x": 1110, + "y": 343 + }, + "width": 353, + "height": 51, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "N1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "# Identity Native Proxy", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 302, + "labelHeight": 51, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "teleport.Audit Log", + "type": "rectangle", + "pos": { + "x": 1110, + "y": 434 + }, + "width": 140, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/tech/laptop.svg", + "RawPath": "/tech%2Flaptop.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Audit Log", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 69, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "teleport.Cert Authority", + "type": "rectangle", + "pos": { + "x": 1290, + "y": 434 + }, + "width": 173, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/azure/Web Service Color/App Service Certificates.svg", + "RawPath": "/azure%2FWeb%20Service%20Color%2FApp%20Service%20Certificates.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Cert Authority", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 102, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Slack", + "type": "rectangle", + "pos": { + "x": 2085, + "y": 60 + }, + "width": 110, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/slack.svg", + "RawPath": "/dev%2Fslack.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Slack", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 39, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Mattermost", + "type": "rectangle", + "pos": { + "x": 2235, + "y": 60 + }, + "width": 128, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Mattermost", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 83, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Jira", + "type": "rectangle", + "pos": { + "x": 2403, + "y": 60 + }, + "width": 72, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Jira", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 27, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Pagerduty", + "type": "rectangle", + "pos": { + "x": 2515, + "y": 60 + }, + "width": 119, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Pagerduty", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 74, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Email", + "type": "rectangle", + "pos": { + "x": 2674, + "y": 60 + }, + "width": 111, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/aws/_General/AWS-Email_light-bg.svg", + "RawPath": "/aws%2F_General%2FAWS-Email_light-bg.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Email", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 40, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.ssh", + "type": "rectangle", + "pos": { + "x": 2204, + "y": 292 + }, + "width": 108, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/essentials/112-server.svg", + "RawPath": "/essentials%2F112-server.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "ssh", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 24, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.Kubernetes", + "type": "rectangle", + "pos": { + "x": 2352, + "y": 292 + }, + "width": 152, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/azure/_Companies/Kubernetes.svg", + "RawPath": "/azure%2F_Companies%2FKubernetes.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Kubernetes", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 81, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.My SQL", + "type": "rectangle", + "pos": { + "x": 2544, + "y": 292 + }, + "width": 122, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/mysql.svg", + "RawPath": "/dev%2Fmysql.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "My SQL", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 51, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.MongoDB", + "type": "rectangle", + "pos": { + "x": 2204, + "y": 424 + }, + "width": 138, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/mongodb.svg", + "RawPath": "/dev%2Fmongodb.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "MongoDB", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 67, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.PSQL", + "type": "rectangle", + "pos": { + "x": 2382, + "y": 424 + }, + "width": 108, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/postgresql.svg", + "RawPath": "/dev%2Fpostgresql.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "PSQL", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 37, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.Windows", + "type": "rectangle", + "pos": { + "x": 2530, + "y": 424 + }, + "width": 136, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/windows.svg", + "RawPath": "/dev%2Fwindows.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Windows", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 65, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + } + ], + "connections": [ + { + "id": "(users -- via)[0]", + "src": "users", + "srcArrow": "none", + "srcLabel": "", + "dst": "via", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 272, + "y": 434.5 + }, + { + "x": 380.4, + "y": 434.5 + }, + { + "x": 434.7, + "y": 434.5 + }, + { + "x": 543.5, + "y": 434.5 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(via -- teleport)[0]", + "src": "via", + "srcArrow": "none", + "srcLabel": "", + "dst": "teleport", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 779, + "y": 434.5 + }, + { + "x": 887.4, + "y": 434.5 + }, + { + "x": 941.7, + "y": 434.5 + }, + { + "x": 1050.5, + "y": 434.5 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport -> jita)[0]", + "src": "teleport", + "srcArrow": "none", + "srcLabel": "", + "dst": "jita", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "all connections audited and logged", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 231, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 1511.3287671232877, + "y": 283 + }, + { + "x": 1721.4657534246576, + "y": 141.4 + }, + { + "x": 1824.2, + "y": 106 + }, + { + "x": 2025, + "y": 106 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport -> infra)[0]", + "src": "teleport", + "srcArrow": "none", + "srcLabel": "", + "dst": "infra", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1523, + "y": 419.70358974358976 + }, + { + "x": 1723.8, + "y": 407.14071794871796 + }, + { + "x": 1848, + "y": 404 + }, + { + "x": 2144, + "y": 404 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport -> identity provider)[0]", + "src": "teleport", + "srcArrow": "none", + "srcLabel": "", + "dst": "identity provider", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1523, + "y": 495.38358974358977 + }, + { + "x": 1723.8, + "y": 547.0767179487179 + }, + { + "x": 1886.1, + "y": 576.1111951588503 + }, + { + "x": 2334.5, + "y": 640.5559757942511 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport <- identity provider)[0]", + "src": "teleport", + "srcArrow": "triangle", + "srcLabel": "", + "dst": "identity provider", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1523, + "y": 556.2671794871795 + }, + { + "x": 1723.8, + "y": 659.6534358974359 + }, + { + "x": 1886.1, + "y": 680.3274583963691 + }, + { + "x": 2334.5, + "y": 659.6372919818457 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/teleport_grid/dagre/sketch.exp.svg b/e2etests/testdata/stable/teleport_grid/dagre/sketch.exp.svg new file mode 100644 index 000000000..1d2b16607 --- /dev/null +++ b/e2etests/testdata/stable/teleport_grid/dagre/sketch.exp.svg @@ -0,0 +1,852 @@ +TeleportJust-in-time Access viaInfrastructureIndentity ProviderEngineersMachinesHTTPS://> kubectl> tsh> apiDB Clients

Identity Native Proxy

+
Audit LogCert AuthoritySlackMattermostJiraPagerdutyEmailsshKubernetesMy SQLMongoDBPSQLWindows all connections audited and logged + + +
\ No newline at end of file diff --git a/e2etests/testdata/stable/teleport_grid/elk/board.exp.json b/e2etests/testdata/stable/teleport_grid/elk/board.exp.json new file mode 100644 index 000000000..3c2b5f426 --- /dev/null +++ b/e2etests/testdata/stable/teleport_grid/elk/board.exp.json @@ -0,0 +1,1576 @@ +{ + "name": "", + "isFolderOnly": false, + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "users", + "type": "rectangle", + "pos": { + "x": 12, + "y": 196 + }, + "width": 272, + "height": 461, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "via", + "type": "rectangle", + "pos": { + "x": 354, + "y": 122 + }, + "width": 236, + "height": 610, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "teleport", + "type": "rectangle", + "pos": { + "x": 660, + "y": 275 + }, + "width": 473, + "height": 303, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Teleport", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 101, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "jita", + "type": "rectangle", + "pos": { + "x": 1915, + "y": 12 + }, + "width": 820, + "height": 212, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Just-in-time Access via", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 266, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "infra", + "type": "rectangle", + "pos": { + "x": 1263, + "y": 150 + }, + "width": 582, + "height": 344, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B4", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Infrastructure", + "fontSize": 28, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 160, + "labelHeight": 36, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "identity provider", + "type": "rectangle", + "pos": { + "x": 1263, + "y": 514 + }, + "width": 201, + "height": 118, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B6", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/azure/Identity Service Color/Identity governance.svg", + "RawPath": "/azure%2FIdentity%20Service%20Color%2FIdentity%20governance.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Indentity Provider", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 130, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "users.Engineers", + "type": "oval", + "pos": { + "x": 72, + "y": 256 + }, + "width": 152, + "height": 152, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/essentials/365-user.svg", + "RawPath": "/essentials%2F365-user.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Engineers", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 69, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "users.Machines", + "type": "oval", + "pos": { + "x": 72, + "y": 448 + }, + "width": 152, + "height": 149, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/aws/Compute/Compute.svg", + "RawPath": "/aws%2FCompute%2FCompute.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Machines", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 66, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.https", + "type": "rectangle", + "pos": { + "x": 414, + "y": 182 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "HTTPS://", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 62, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.kubectl", + "type": "rectangle", + "pos": { + "x": 414, + "y": 288 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "> kubectl", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 66, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.tsh", + "type": "rectangle", + "pos": { + "x": 414, + "y": 394 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "> tsh", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 34, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.api", + "type": "rectangle", + "pos": { + "x": 414, + "y": 500 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "> api", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 34, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "via.db clients", + "type": "rectangle", + "pos": { + "x": 414, + "y": 606 + }, + "width": 116, + "height": 66, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "DB Clients", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 71, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "teleport.inp", + "type": "text", + "pos": { + "x": 720, + "y": 335 + }, + "width": 353, + "height": 51, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "transparent", + "stroke": "N1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "# Identity Native Proxy", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "markdown", + "color": "N1", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 302, + "labelHeight": 51, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "teleport.Audit Log", + "type": "rectangle", + "pos": { + "x": 720, + "y": 426 + }, + "width": 140, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/tech/laptop.svg", + "RawPath": "/tech%2Flaptop.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Audit Log", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 69, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "teleport.Cert Authority", + "type": "rectangle", + "pos": { + "x": 900, + "y": 426 + }, + "width": 173, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/azure/Web Service Color/App Service Certificates.svg", + "RawPath": "/azure%2FWeb%20Service%20Color%2FApp%20Service%20Certificates.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Cert Authority", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 102, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Slack", + "type": "rectangle", + "pos": { + "x": 1975, + "y": 72 + }, + "width": 110, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/slack.svg", + "RawPath": "/dev%2Fslack.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Slack", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 39, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Mattermost", + "type": "rectangle", + "pos": { + "x": 2125, + "y": 72 + }, + "width": 128, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Mattermost", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 83, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Jira", + "type": "rectangle", + "pos": { + "x": 2293, + "y": 72 + }, + "width": 72, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Jira", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 27, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Pagerduty", + "type": "rectangle", + "pos": { + "x": 2405, + "y": 72 + }, + "width": 119, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Pagerduty", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 74, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "jita.Email", + "type": "rectangle", + "pos": { + "x": 2564, + "y": 72 + }, + "width": 111, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/aws/_General/AWS-Email_light-bg.svg", + "RawPath": "/aws%2F_General%2FAWS-Email_light-bg.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Email", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 40, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.ssh", + "type": "rectangle", + "pos": { + "x": 1323, + "y": 210 + }, + "width": 108, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/essentials/112-server.svg", + "RawPath": "/essentials%2F112-server.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "ssh", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 24, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.Kubernetes", + "type": "rectangle", + "pos": { + "x": 1471, + "y": 210 + }, + "width": 152, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/azure/_Companies/Kubernetes.svg", + "RawPath": "/azure%2F_Companies%2FKubernetes.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Kubernetes", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 81, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.My SQL", + "type": "rectangle", + "pos": { + "x": 1663, + "y": 210 + }, + "width": 122, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/mysql.svg", + "RawPath": "/dev%2Fmysql.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "My SQL", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 51, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.MongoDB", + "type": "rectangle", + "pos": { + "x": 1323, + "y": 342 + }, + "width": 138, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/mongodb.svg", + "RawPath": "/dev%2Fmongodb.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "MongoDB", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 67, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.PSQL", + "type": "rectangle", + "pos": { + "x": 1501, + "y": 342 + }, + "width": 108, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/postgresql.svg", + "RawPath": "/dev%2Fpostgresql.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "PSQL", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 37, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + }, + { + "id": "infra.Windows", + "type": "rectangle", + "pos": { + "x": 1649, + "y": 342 + }, + "width": 136, + "height": 92, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "B5", + "stroke": "B1", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/dev/windows.svg", + "RawPath": "/dev%2Fwindows.svg", + "OmitHost": false, + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "Windows", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N1", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 65, + "labelHeight": 21, + "labelPosition": "INSIDE_TOP_CENTER", + "zIndex": 0, + "level": 2 + } + ], + "connections": [ + { + "id": "(users -- via)[0]", + "src": "users", + "srcArrow": "none", + "srcLabel": "", + "dst": "via", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 284, + "y": 427.0333333333333 + }, + { + "x": 354, + "y": 427.0333333333333 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(via -- teleport)[0]", + "src": "via", + "srcArrow": "none", + "srcLabel": "", + "dst": "teleport", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 590, + "y": 427.0333333333333 + }, + { + "x": 660, + "y": 427.0333333333333 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport -> jita)[0]", + "src": "teleport", + "srcArrow": "none", + "srcLabel": "", + "dst": "jita", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "all connections audited and logged", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 231, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 1133, + "y": 336.1333333333333 + }, + { + "x": 1173, + "y": 336.1333333333333 + }, + { + "x": 1173, + "y": 118 + }, + { + "x": 1915, + "y": 118 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport -> infra)[0]", + "src": "teleport", + "srcArrow": "none", + "srcLabel": "", + "dst": "infra", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1133, + "y": 396.7333333333333 + }, + { + "x": 1263, + "y": 396.7333333333333 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport -> identity provider)[0]", + "src": "teleport", + "srcArrow": "none", + "srcLabel": "", + "dst": "identity provider", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1133, + "y": 457.3333333333333 + }, + { + "x": 1223, + "y": 457.3333333333333 + }, + { + "x": 1223, + "y": 553.3333333333333 + }, + { + "x": 1263, + "y": 553.3333333333333 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + }, + { + "id": "(teleport <- identity provider)[0]", + "src": "teleport", + "srcArrow": "triangle", + "srcLabel": "", + "dst": "identity provider", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "B1", + "borderRadius": 10, + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "N2", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1133, + "y": 517.9333333333333 + }, + { + "x": 1173, + "y": 517.9333333333333 + }, + { + "x": 1173, + "y": 592.6666666666666 + }, + { + "x": 1263, + "y": 592.6666666666666 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ], + "root": { + "id": "", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 0, + "height": 0, + "opacity": 0, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "N7", + "stroke": "", + "shadow": false, + "3d": false, + "multiple": false, + "double-border": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "zIndex": 0, + "level": 0 + } +} diff --git a/e2etests/testdata/stable/teleport_grid/elk/sketch.exp.svg b/e2etests/testdata/stable/teleport_grid/elk/sketch.exp.svg new file mode 100644 index 000000000..f5b39beb8 --- /dev/null +++ b/e2etests/testdata/stable/teleport_grid/elk/sketch.exp.svg @@ -0,0 +1,852 @@ +TeleportJust-in-time Access viaInfrastructureIndentity ProviderEngineersMachinesHTTPS://> kubectl> tsh> apiDB Clients

Identity Native Proxy

+
Audit LogCert AuthoritySlackMattermostJiraPagerdutyEmailsshKubernetesMy SQLMongoDBPSQLWindows all connections audited and logged + + +
\ No newline at end of file diff --git a/e2etests/testdata/themes/origami/dagre/board.exp.json b/e2etests/testdata/themes/origami/dagre/board.exp.json index d317916d9..a0f45ac09 100644 --- a/e2etests/testdata/themes/origami/dagre/board.exp.json +++ b/e2etests/testdata/themes/origami/dagre/board.exp.json @@ -10,7 +10,7 @@ "x": 0, "y": 275 }, - "width": 351, + "width": 399, "height": 1225, "opacity": 1, "strokeDash": 0, @@ -52,7 +52,7 @@ "x": 95, "y": 340 }, - "width": 237, + "width": 284, "height": 317, "opacity": 1, "strokeDash": 0, @@ -91,7 +91,7 @@ "id": "network.cell tower.satellites", "type": "stored_data", "pos": { - "x": 161, + "x": 185, "y": 372 }, "width": 104, @@ -133,7 +133,7 @@ "id": "network.cell tower.transmitter", "type": "rectangle", "pos": { - "x": 161, + "x": 185, "y": 559 }, "width": 104, @@ -259,7 +259,7 @@ "id": "network.data processor", "type": "rectangle", "pos": { - "x": 121, + "x": 145, "y": 814 }, "width": 184, @@ -301,7 +301,7 @@ "id": "network.data processor.storage", "type": "cylinder", "pos": { - "x": 161, + "x": 185, "y": 846 }, "width": 104, @@ -343,7 +343,7 @@ "id": "user", "type": "person", "pos": { - "x": 66, + "x": 80, "y": 0 }, "width": 130, @@ -385,7 +385,7 @@ "id": "api server", "type": "rectangle", "pos": { - "x": 392, + "x": 439, "y": 1076 }, "width": 153, @@ -427,7 +427,7 @@ "id": "logs", "type": "page", "pos": { - "x": 426, + "x": 474, "y": 1313 }, "width": 84, @@ -493,19 +493,19 @@ "labelPercentage": 0, "route": [ { - "x": 194, + "x": 211, "y": 439 }, { - "x": 166, + "x": 173.4, "y": 487 }, { - "x": 166, + "x": 173.4, "y": 511.2 }, { - "x": 194, + "x": 211, "y": 560 } ], @@ -541,19 +541,19 @@ "labelPercentage": 0, "route": [ { - "x": 213, + "x": 237, "y": 439 }, { - "x": 213.2, + "x": 237, "y": 487 }, { - "x": 213.25, + "x": 237, "y": 511.2 }, { - "x": 213.25, + "x": 237, "y": 560 } ], @@ -589,19 +589,19 @@ "labelPercentage": 0, "route": [ { - "x": 233, + "x": 263, "y": 439 }, { - "x": 260.6, + "x": 300.6, "y": 487 }, { - "x": 260.5, + "x": 300.6, "y": 511.2 }, { - "x": 232.5, + "x": 263, "y": 560 } ], @@ -637,31 +637,31 @@ "labelPercentage": 0, "route": [ { - "x": 213.25, + "x": 237, "y": 625.5 }, { - "x": 213.25, + "x": 237, "y": 651.1 }, { - "x": 213.25, + "x": 237, "y": 669.6 }, { - "x": 213.25, + "x": 237, "y": 687.75 }, { - "x": 213.25, + "x": 237, "y": 705.9 }, { - "x": 213.2, + "x": 237, "y": 792.2 }, { - "x": 213, + "x": 237, "y": 847 } ], @@ -697,19 +697,19 @@ "labelPercentage": 0, "route": [ { - "x": 152, + "x": 169, "y": 87 }, { - "x": 201, + "x": 223.4, "y": 156.2 }, { - "x": 213.25, + "x": 237, "y": 248.2 }, { - "x": 213.25, + "x": 237, "y": 305 } ], @@ -745,11 +745,11 @@ "labelPercentage": 0, "route": [ { - "x": 116, + "x": 126, "y": 87 }, { - "x": 83, + "x": 85, "y": 156.2 }, { @@ -949,12 +949,12 @@ "labelPercentage": 0, "route": [ { - "x": 391.75, - "y": 1129.4949856733524 + "x": 439.25, + "y": 1127.0397225725094 }, { - "x": 173.75, - "y": 1187.8989971346705 + "x": 183.25, + "y": 1187.4079445145019 }, { "x": 116, @@ -997,19 +997,19 @@ "labelPercentage": 0, "route": [ { - "x": 468.25, + "x": 515.75, "y": 1142 }, { - "x": 468.25, + "x": 515.75, "y": 1190.4 }, { - "x": 468.2, + "x": 515.8, "y": 1273 }, { - "x": 468, + "x": 516, "y": 1313 } ], @@ -1045,20 +1045,20 @@ "labelPercentage": 0, "route": [ { - "x": 213.25, + "x": 237, "y": 996.5 }, { - "x": 213.25, + "x": 237, "y": 1020.1 }, { - "x": 248.95, - "y": 1037.62 + "x": 277.4, + "y": 1038 }, { - "x": 391.75, - "y": 1084.1 + "x": 439, + "y": 1086 } ], "isCurve": true, diff --git a/e2etests/testdata/themes/origami/dagre/sketch.exp.svg b/e2etests/testdata/themes/origami/dagre/sketch.exp.svg index 56d38cf2e..a580bee19 100644 --- a/e2etests/testdata/themes/origami/dagre/sketch.exp.svg +++ b/e2etests/testdata/themes/origami/dagre/sketch.exp.svg @@ -1,23 +1,23 @@ - \ No newline at end of file diff --git a/e2etests/testdata/themes/terminal_grayscale/dagre/board.exp.json b/e2etests/testdata/themes/terminal_grayscale/dagre/board.exp.json index aaff0b214..6777766c6 100644 --- a/e2etests/testdata/themes/terminal_grayscale/dagre/board.exp.json +++ b/e2etests/testdata/themes/terminal_grayscale/dagre/board.exp.json @@ -10,7 +10,7 @@ "x": 0, "y": 275 }, - "width": 410, + "width": 436, "height": 1225, "opacity": 1, "strokeDash": 0, @@ -52,7 +52,7 @@ "x": 96, "y": 340 }, - "width": 294, + "width": 320, "height": 317, "opacity": 1, "strokeDash": 0, @@ -91,7 +91,7 @@ "id": "network.cell tower.satellites", "type": "stored_data", "pos": { - "x": 163, + "x": 176, "y": 372 }, "width": 161, @@ -132,7 +132,7 @@ "id": "network.cell tower.transmitter", "type": "rectangle", "pos": { - "x": 168, + "x": 181, "y": 559 }, "width": 151, @@ -176,7 +176,7 @@ "x": 20, "y": 1319 }, - "width": 157, + "width": 154, "height": 151, "opacity": 1, "strokeDash": 0, @@ -215,7 +215,7 @@ "id": "network.online portal.ui", "type": "hexagon", "pos": { - "x": 71, + "x": 69, "y": 1360 }, "width": 65, @@ -256,7 +256,7 @@ "id": "network.data processor", "type": "rectangle", "pos": { - "x": 147, + "x": 161, "y": 814 }, "width": 192, @@ -298,7 +298,7 @@ "id": "network.data processor.storage", "type": "cylinder", "pos": { - "x": 187, + "x": 201, "y": 846 }, "width": 112, @@ -339,7 +339,7 @@ "id": "user", "type": "person", "pos": { - "x": 82, + "x": 85, "y": 0 }, "width": 130, @@ -380,7 +380,7 @@ "id": "api server", "type": "rectangle", "pos": { - "x": 450, + "x": 477, "y": 1076 }, "width": 142, @@ -421,7 +421,7 @@ "id": "logs", "type": "page", "pos": { - "x": 480, + "x": 507, "y": 1313 }, "width": 82, @@ -486,19 +486,19 @@ "labelPercentage": 0, "route": [ { - "x": 218, + "x": 229, "y": 439 }, { - "x": 182.4, + "x": 188.6, "y": 487 }, { - "x": 182.5, + "x": 188.5, "y": 511.2 }, { - "x": 218.5, + "x": 228.5, "y": 560 } ], @@ -534,19 +534,19 @@ "labelPercentage": 0, "route": [ { - "x": 243, + "x": 256, "y": 439 }, { - "x": 243.2, + "x": 256.4, "y": 487 }, { - "x": 243.25, + "x": 256.5, "y": 511.2 }, { - "x": 243.25, + "x": 256.5, "y": 560 } ], @@ -582,19 +582,19 @@ "labelPercentage": 0, "route": [ { - "x": 268, + "x": 284, "y": 439 }, { - "x": 304, + "x": 324.4, "y": 487 }, { - "x": 304, + "x": 324.5, "y": 511.2 }, { - "x": 268, + "x": 284.5, "y": 560 } ], @@ -630,31 +630,31 @@ "labelPercentage": 0, "route": [ { - "x": 243.25, + "x": 256.5, "y": 625.5 }, { - "x": 243.25, + "x": 256.5, "y": 651.1 }, { - "x": 243.25, + "x": 256.5, "y": 669.6 }, { - "x": 243.25, + "x": 256.5, "y": 687.75 }, { - "x": 243.25, + "x": 256.5, "y": 705.9 }, { - "x": 243.2, + "x": 256.6, "y": 792.2 }, { - "x": 243, + "x": 257, "y": 847 } ], @@ -690,19 +690,19 @@ "labelPercentage": 0, "route": [ { - "x": 172, + "x": 178, "y": 87 }, { - "x": 229, + "x": 240.8, "y": 156.2 }, { - "x": 243.25, + "x": 256.5, "y": 248.2 }, { - "x": 243.25, + "x": 256.5, "y": 305 } ], @@ -738,11 +738,11 @@ "labelPercentage": 0, "route": [ { - "x": 128, + "x": 131, "y": 87 }, { - "x": 86.6, + "x": 87.19999999999999, "y": 156.2 }, { @@ -902,11 +902,11 @@ "y": 1183.8 }, { - "x": 79.6, + "x": 79.4, "y": 1282.6 }, { - "x": 93, + "x": 92, "y": 1361 } ], @@ -942,19 +942,19 @@ "labelPercentage": 0, "route": [ { - "x": 450.25, - "y": 1126 + "x": 476.75, + "y": 1124.9196642685852 }, { - "x": 194.64999999999998, - "y": 1187.2 + "x": 199.95, + "y": 1186.983932853717 }, { - "x": 127.4, + "x": 127, "y": 1282.6 }, { - "x": 114, + "x": 112, "y": 1361 } ], @@ -990,19 +990,19 @@ "labelPercentage": 0, "route": [ { - "x": 521.25, + "x": 547.75, "y": 1142 }, { - "x": 521.25, + "x": 547.75, "y": 1190.4 }, { - "x": 521.2, + "x": 547.8, "y": 1273 }, { - "x": 521, + "x": 548, "y": 1313 } ], @@ -1038,20 +1038,20 @@ "labelPercentage": 0, "route": [ { - "x": 243.25, + "x": 256.5, "y": 996.5 }, { - "x": 243.25, + "x": 256.5, "y": 1020.1 }, { - "x": 284.65, - "y": 1038.4 + "x": 300.55, + "y": 1038.5533047210301 }, { - "x": 450.25, - "y": 1088 + "x": 476.75, + "y": 1088.7665236051503 } ], "isCurve": true, diff --git a/e2etests/testdata/themes/terminal_grayscale/dagre/sketch.exp.svg b/e2etests/testdata/themes/terminal_grayscale/dagre/sketch.exp.svg index 234bf36dc..e76c544c7 100644 --- a/e2etests/testdata/themes/terminal_grayscale/dagre/sketch.exp.svg +++ b/e2etests/testdata/themes/terminal_grayscale/dagre/sketch.exp.svg @@ -1,16 +1,16 @@ -