cli: Improve multiboard output

- Boards with subboards are now selfcontained folders with index.svg/png as
  the root board render.
- Boards that are only containers of other boards are not rendered. For example a
  scenario with no modifications and only steps only has its steps
  rendered.
- Boards with sibling boards of another type are rendered under a
  subdirectory indicating their type to separate them. For example a
  board with layers and scenarios has its layers rendered into subfolder
  layers and scenarios into subfolder scenarios.

cc @berniexie see BoardContainer field on d2target.Board for the field
you were looking for to skip renders for PDFs too.
This commit is contained in:
Anmol Sethi 2023-02-27 13:34:03 -08:00
parent 6b70ebe00c
commit e4fac7840f
No known key found for this signature in database
GPG key ID: 25BC68888A99A8BA
646 changed files with 2534 additions and 37 deletions

2
ci/sub

@ -1 +1 @@
Subproject commit cb8a9993d7e1d91815650c5baade7658622189b9 Subproject commit 512bad5a958c5e33ba9b3e89dfac1bfd6002f98c

View file

@ -71,6 +71,11 @@ func (c *compiler) compileBoard(g *d2graph.Graph, ir *d2ir.Map) *d2graph.Graph {
c.compileBoardsField(g, ir, "layers") c.compileBoardsField(g, ir, "layers")
c.compileBoardsField(g, ir, "scenarios") c.compileBoardsField(g, ir, "scenarios")
c.compileBoardsField(g, ir, "steps") c.compileBoardsField(g, ir, "steps")
if d2ir.ParentMap(ir).CopyBase(nil).Equal(ir.CopyBase(nil)) {
if len(g.Layers) > 0 || len(g.Scenarios) > 0 || len(g.Steps) > 0 {
g.BoardContainer = true
}
}
return g return g
} }

View file

@ -2099,9 +2099,9 @@ layers: {
} }
} }
`, "") `, "")
assert.JSON(t, 2, len(g.Layers)) assert.Equal(t, 2, len(g.Layers))
assert.JSON(t, "one", g.Layers[0].Name) assert.Equal(t, "one", g.Layers[0].Name)
assert.JSON(t, "two", g.Layers[1].Name) assert.Equal(t, "two", g.Layers[1].Name)
}, },
}, },
{ {
@ -2132,6 +2132,37 @@ layers: {
assert.Equal(t, 2, len(g.Layers[1].Steps)) assert.Equal(t, 2, len(g.Layers[1].Steps))
}, },
}, },
{
name: "boardContainer",
run: func(t *testing.T) {
g := assertCompile(t, `
layers: {
one: {
santa
}
two: {
clause
scenarios: {
seinfeld: {
}
missoula: {
steps: {
missus: one two three
}
}
}
}
}
`, "")
assert.True(t, g.BoardContainer)
assert.Equal(t, 2, len(g.Layers))
assert.Equal(t, "one", g.Layers[0].Name)
assert.Equal(t, "two", g.Layers[1].Name)
assert.Equal(t, 2, len(g.Layers[1].Scenarios))
assert.False(t, g.Layers[1].Scenarios[0].BoardContainer)
assert.False(t, g.Layers[1].Scenarios[1].BoardContainer)
},
},
{ {
name: "errs/duplicate_board", name: "errs/duplicate_board",
run: func(t *testing.T) { run: func(t *testing.T) {

View file

@ -16,6 +16,7 @@ func Export(ctx context.Context, g *d2graph.Graph, fontFamily *d2fonts.FontFamil
diagram := d2target.NewDiagram() diagram := d2target.NewDiagram()
applyStyles(&diagram.Root, g.Root) applyStyles(&diagram.Root, g.Root)
diagram.Name = g.Name diagram.Name = g.Name
diagram.BoardContainer = g.BoardContainer
if fontFamily == nil { if fontFamily == nil {
fontFamily = go2.Pointer(d2fonts.SourceSansPro) fontFamily = go2.Pointer(d2fonts.SourceSansPro)
} }

View file

@ -28,8 +28,13 @@ const DEFAULT_SHAPE_SIZE = 100.
const MIN_SHAPE_SIZE = 5 const MIN_SHAPE_SIZE = 5
type Graph struct { type Graph struct {
Name string `json:"name"` Name string `json:"name"`
AST *d2ast.Map `json:"ast"` // A BoardContainer is a board or scenario itself contains nothing
// but its base and more boards, scenarios or steps.
// boardContainers do not have a render and are used purely for organizing the board
// tree.
BoardContainer bool `json:"boardContainer"`
AST *d2ast.Map `json:"ast"`
Root *Object `json:"root"` Root *Object `json:"root"`
Edges []*Edge `json:"edges"` Edges []*Edge `json:"edges"`

View file

@ -23,6 +23,7 @@ type Node interface {
Parent() Node Parent() Node
Primary() *Scalar Primary() *Scalar
Map() *Map Map() *Map
Equal(n2 Node) bool
ast() d2ast.Node ast() d2ast.Node
fmt.Stringer fmt.Stringer
@ -139,7 +140,8 @@ func (s *Scalar) Copy(newParent Node) Node {
return s return s
} }
func (s *Scalar) Equal(s2 *Scalar) bool { func (s *Scalar) Equal(n2 Node) bool {
s2 := n2.(*Scalar)
if _, ok := s.Value.(d2ast.String); ok { if _, ok := s.Value.(d2ast.String); ok {
if _, ok = s2.Value.(d2ast.String); ok { if _, ok = s2.Value.(d2ast.String); ok {
return s.Value.ScalarString() == s2.Value.ScalarString() return s.Value.ScalarString() == s2.Value.ScalarString()
@ -187,6 +189,10 @@ func (m *Map) Copy(newParent Node) Node {
// CopyBase copies the map m without layers/scenarios/steps. // CopyBase copies the map m without layers/scenarios/steps.
func (m *Map) CopyBase(newParent Node) *Map { func (m *Map) CopyBase(newParent Node) *Map {
if m == nil {
return (&Map{}).Copy(newParent).(*Map)
}
layers := m.DeleteField("layers") layers := m.DeleteField("layers")
scenarios := m.DeleteField("scenarios") scenarios := m.DeleteField("scenarios")
steps := m.DeleteField("steps") steps := m.DeleteField("steps")
@ -1054,3 +1060,73 @@ func reverseIDA(ida []string) {
ida[len(ida)-i-1] = tmp ida[len(ida)-i-1] = tmp
} }
} }
func (f *Field) Equal(n2 Node) bool {
f2 := n2.(*Field)
if f.Name != f2.Name {
return false
}
if !f.Primary_.Equal(f2.Primary_) {
return false
}
if !f.Composite.Equal(f2.Composite) {
return false
}
return true
}
func (e *Edge) Equal(n2 Node) bool {
e2 := n2.(*Edge)
if !e.ID.Match(e2.ID) {
return false
}
if !e.Primary_.Equal(e2.Primary_) {
return false
}
if !e.Map_.Equal(e2.Map_) {
return false
}
return true
}
func (a *Array) Equal(n2 Node) bool {
a2 := n2.(*Array)
if len(a.Values) != len(a2.Values) {
return false
}
for i := range a.Values {
if !a.Values[i].Equal(a2.Values[i]) {
return false
}
}
return true
}
func (m *Map) Equal(n2 Node) bool {
m2 := n2.(*Map)
if len(m.Fields) != len(m2.Fields) {
return false
}
if len(m.Edges) != len(m2.Edges) {
return false
}
for i := range m.Fields {
if !m.Fields[i].Equal(m2.Fields[i]) {
return false
}
}
for i := range m.Edges {
if !m.Edges[i].Equal(m2.Edges[i]) {
return false
}
}
return true
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 247 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 247 KiB

View file

@ -34,9 +34,11 @@ const (
var BorderOffset = geo.NewVector(5, 5) var BorderOffset = geo.NewVector(5, 5)
type Diagram struct { type Diagram struct {
Name string `json:"name"` Name string `json:"name"`
Description string `json:"description,omitempty"` // See docs on the same field in d2graph to understand what it means.
FontFamily *d2fonts.FontFamily `json:"fontFamily,omitempty"` BoardContainer bool `json:"boardContainer"`
Description string `json:"description,omitempty"`
FontFamily *d2fonts.FontFamily `json:"fontFamily,omitempty"`
Shapes []Shape `json:"shapes"` Shapes []Shape `json:"shapes"`
Connections []Connection `json:"connections"` Connections []Connection `json:"connections"`

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [], "shapes": [],
"connections": [], "connections": [],

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [], "shapes": [],
"connections": [], "connections": [],

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

View file

@ -1,5 +1,6 @@
{ {
"name": "", "name": "",
"boardContainer": false,
"fontFamily": "SourceSansPro", "fontFamily": "SourceSansPro",
"shapes": [ "shapes": [
{ {

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