font: mono

This commit is contained in:
Alexander Wang 2023-03-06 22:21:23 -08:00
parent e02f1c38d9
commit ba282b5f96
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
26 changed files with 2953 additions and 194 deletions

View file

@ -1,5 +1,7 @@
#### Features 🚀
- `style.font: mono` to use a monospaced font for the text/label [#1010](https://github.com/terrastruct/d2/pull/1010)
#### Improvements 🧹
- `dagre` layouts that have a connection where one endpoint is a container is much improved. [#1011](https://github.com/terrastruct/d2/pull/1011)

View file

@ -252,10 +252,10 @@ func (s *Style) Apply(key, value string) error {
if s.Font == nil {
break
}
if !go2.Contains(systemFonts, strings.ToUpper(value)) {
if _, ok := d2fonts.D2_FONT_TO_FAMILY[strings.ToLower(value)]; !ok {
return fmt.Errorf(`"%v" is not a valid font in our system`, value)
}
s.Font.Value = strings.ToUpper(value)
s.Font.Value = strings.ToLower(value)
case "font-size":
if s.FontSize == nil {
break
@ -793,6 +793,11 @@ func (obj *Object) AppendReferences(ida []string, ref Reference, unresolvedObj *
func (obj *Object) GetLabelSize(mtexts []*d2target.MText, ruler *textmeasure.Ruler, fontFamily *d2fonts.FontFamily) (*d2target.TextDimensions, error) {
shapeType := strings.ToLower(obj.Attributes.Shape.Value)
if obj.Attributes.Style.Font != nil {
f := d2fonts.D2_FONT_TO_FAMILY[obj.Attributes.Style.Font.Value]
fontFamily = &f
}
var dims *d2target.TextDimensions
switch shapeType {
case d2target.ShapeText:

View file

@ -1,10 +0,0 @@
package d2graph
var systemFonts = []string{
"DEFAULT",
"SERIOUS",
"DIGITAL",
"EDUCATIONAL",
"NEWSPAPER",
"MONO",
}

View file

@ -211,3 +211,8 @@ func init() {
Style: FONT_STYLE_BOLD,
}] = b
}
var D2_FONT_TO_FAMILY = map[string]FontFamily{
"default": SourceSansPro,
"mono": SourceCodePro,
}

View file

@ -1186,10 +1186,14 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
)
fontClass := "text"
if targetShape.Bold {
fontClass += "-bold"
} else if targetShape.Italic {
fontClass += "-italic"
if targetShape.FontFamily == "mono" {
fontClass = "text-mono"
} else {
if targetShape.Bold {
fontClass += "-bold"
} else if targetShape.Italic {
fontClass += "-italic"
}
}
if targetShape.Underline {
fontClass += " text-underline"
@ -1476,7 +1480,7 @@ func embedFonts(buf *bytes.Buffer, source string, fontFamily *d2fonts.FontFamily
buf,
source,
[]string{
`class="text-mono-bold"`,
`class="text-mono-bold`,
},
fmt.Sprintf(`
.text-mono-bold {
@ -1494,43 +1498,7 @@ func embedFonts(buf *bytes.Buffer, source string, fontFamily *d2fonts.FontFamily
buf,
source,
[]string{
`class="text-mono-italic"`,
},
fmt.Sprintf(`
.text-mono-italic {
font-family: "font-mono-italic";
}
@font-face {
font-family: font-mono-italic;
src: url("%s");
}`,
d2fonts.FontEncodings[d2fonts.SourceCodePro.Font(0, d2fonts.FONT_STYLE_ITALIC)],
),
)
appendOnTrigger(
buf,
source,
[]string{
`class="text-mono-bold"`,
},
fmt.Sprintf(`
.text-mono-bold {
font-family: "font-mono-bold";
}
@font-face {
font-family: font-mono-bold;
src: url("%s");
}`,
d2fonts.FontEncodings[d2fonts.SourceCodePro.Font(0, d2fonts.FONT_STYLE_BOLD)],
),
)
appendOnTrigger(
buf,
source,
[]string{
`class="text-mono-italic"`,
`class="text-mono-italic`,
},
fmt.Sprintf(`
.text-mono-italic {

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 578 KiB

After

Width:  |  Height:  |  Size: 413 KiB

View file

@ -38,6 +38,77 @@ func testStable(t *testing.T) {
}
`,
},
{
name: "mono-font",
script: `direction: down
PRODUCER: {
style: {
underline: true
font-color: white
fill: blue
border-radius: 4
font: mono
}
}
PRODUCER -> api
api: API DESIGN & DEVELOPMENT {
shape: text
style.font: mono
}
schema: "" {
style.fill: "#e4f4fc"
style.stroke-width: 0
PROTOBUF SCHEMA: {
icon: https://icons.terrastruct.com/essentials%2F257-file.svg
shape: image
style.font: mono
}
assets: {
label: BUF SUPPORT AND\nGENERATED ASSETS
style.font: mono
style.fill: white
style.font-color: blue
style.stroke-width: 0
width: 400
}
PROTOBUF SCHEMA -> assets: {
style.opacity: 0
}
}
api -> schema.PROTOBUF SCHEMA
schema -> CONSUMER A
schema -> CONSUMER B
schema -> CONSUMER C
# Could really use some classes!
CONSUMER A: {
style.font: mono
style.fill: "#000047"
style.border-radius: 4
style.font-color: white
style.stroke-width: 0
}
CONSUMER B: {
style.font: mono
style.fill: "#000047"
style.border-radius: 4
style.font-color: white
style.stroke-width: 0
}
CONSUMER C: {
style.font: mono
style.fill: "#000047"
style.border-radius: 4
style.font-color: white
style.stroke-width: 0
}
`,
},
{
name: "connected_container",
script: `a.b -> c.d -> f.h.g

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 523 KiB

After

Width:  |  Height:  |  Size: 358 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 523 KiB

After

Width:  |  Height:  |  Size: 358 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 694 KiB

After

Width:  |  Height:  |  Size: 606 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 694 KiB

After

Width:  |  Height:  |  Size: 606 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 845 KiB

After

Width:  |  Height:  |  Size: 680 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 845 KiB

After

Width:  |  Height:  |  Size: 680 KiB

680
e2etests/testdata/stable/mono-font/dagre/board.exp.json generated vendored Normal file
View file

@ -0,0 +1,680 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "PRODUCER",
"type": "rectangle",
"pos": {
"x": 212,
"y": 0
},
"width": 122,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 4,
"fill": "blue",
"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": "PRODUCER",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": true,
"labelWidth": 77,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "api",
"type": "text",
"pos": {
"x": 158,
"y": 166
},
"width": 230,
"height": 21,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "transparent",
"stroke": "N1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "API DESIGN & DEVELOPMENT",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 230,
"labelHeight": 21,
"zIndex": 0,
"level": 1
},
{
"id": "schema",
"type": "rectangle",
"pos": {
"x": 31,
"y": 287
},
"width": 481,
"height": 431,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "#e4f4fc",
"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,
"zIndex": 0,
"level": 1
},
{
"id": "schema.PROTOBUF SCHEMA",
"type": "image",
"pos": {
"x": 209,
"y": 337
},
"width": 128,
"height": 128,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "N7",
"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/257-file.svg",
"RawPath": "/essentials%2F257-file.svg",
"ForceQuery": false,
"RawQuery": "",
"Fragment": "",
"RawFragment": ""
},
"iconPosition": "INSIDE_MIDDLE_CENTER",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "PROTOBUF SCHEMA",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 144,
"labelHeight": 21,
"labelPosition": "OUTSIDE_BOTTOM_CENTER",
"zIndex": 0,
"level": 2
},
{
"id": "schema.assets",
"type": "rectangle",
"pos": {
"x": 73,
"y": 591
},
"width": 400,
"height": 77,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "white",
"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": "BUF SUPPORT AND\nGENERATED ASSETS",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "blue",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 153,
"labelHeight": 37,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 2
},
{
"id": "CONSUMER A",
"type": "rectangle",
"pos": {
"x": 0,
"y": 818
},
"width": 142,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 4,
"fill": "#000047",
"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": "CONSUMER A",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 97,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "CONSUMER B",
"type": "rectangle",
"pos": {
"x": 202,
"y": 818
},
"width": 141,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 4,
"fill": "#000047",
"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": "CONSUMER B",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 96,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "CONSUMER C",
"type": "rectangle",
"pos": {
"x": 412,
"y": 818
},
"width": 142,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 4,
"fill": "#000047",
"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": "CONSUMER C",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 97,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}
],
"connections": [
{
"id": "(PRODUCER -> api)[0]",
"src": "PRODUCER",
"srcArrow": "none",
"srcLabel": "",
"dst": "api",
"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": 272.5,
"y": 66
},
{
"x": 272.5,
"y": 106
},
{
"x": 272.5,
"y": 126
},
{
"x": 272.5,
"y": 166
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "schema.(PROTOBUF SCHEMA -> assets)[0]",
"src": "schema.PROTOBUF SCHEMA",
"srcArrow": "none",
"srcLabel": "",
"dst": "schema.assets",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 0,
"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.5,
"y": 491
},
{
"x": 272.5,
"y": 531
},
{
"x": 272.5,
"y": 551
},
{
"x": 272.5,
"y": 591
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(api -> schema.PROTOBUF SCHEMA)[0]",
"src": "api",
"srcArrow": "none",
"srcLabel": "",
"dst": "schema.PROTOBUF SCHEMA",
"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": 272.5,
"y": 187
},
{
"x": 272.5,
"y": 227
},
{
"x": 272.5,
"y": 297
},
{
"x": 272.5,
"y": 337
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(schema -> CONSUMER A)[0]",
"src": "schema",
"srcArrow": "none",
"srcLabel": "",
"dst": "CONSUMER A",
"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": 71,
"y": 718
},
{
"x": 71,
"y": 758
},
{
"x": 71,
"y": 778
},
{
"x": 71,
"y": 818
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(schema -> CONSUMER B)[0]",
"src": "schema",
"srcArrow": "none",
"srcLabel": "",
"dst": "CONSUMER B",
"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": 272.5,
"y": 718
},
{
"x": 272.5,
"y": 758
},
{
"x": 272.5,
"y": 778
},
{
"x": 272.5,
"y": 818
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(schema -> CONSUMER C)[0]",
"src": "schema",
"srcArrow": "none",
"srcLabel": "",
"dst": "CONSUMER C",
"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": 483.25,
"y": 718
},
{
"x": 483.25,
"y": 758
},
{
"x": 483.25,
"y": 778
},
{
"x": 483.25,
"y": 818
}
],
"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
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 200 KiB

642
e2etests/testdata/stable/mono-font/elk/board.exp.json generated vendored Normal file
View file

@ -0,0 +1,642 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "PRODUCER",
"type": "rectangle",
"pos": {
"x": 222,
"y": 12
},
"width": 122,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 4,
"fill": "blue",
"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": "PRODUCER",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": true,
"labelWidth": 77,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "api",
"type": "text",
"pos": {
"x": 168,
"y": 148
},
"width": 230,
"height": 21,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "transparent",
"stroke": "N1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "API DESIGN & DEVELOPMENT",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 230,
"labelHeight": 21,
"zIndex": 0,
"level": 1
},
{
"id": "schema",
"type": "rectangle",
"pos": {
"x": 33,
"y": 244
},
"width": 500,
"height": 401,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "#e4f4fc",
"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,
"zIndex": 0,
"level": 1
},
{
"id": "schema.PROTOBUF SCHEMA",
"type": "image",
"pos": {
"x": 211,
"y": 294
},
"width": 144,
"height": 128,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "N7",
"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/257-file.svg",
"RawPath": "/essentials%2F257-file.svg",
"ForceQuery": false,
"RawQuery": "",
"Fragment": "",
"RawFragment": ""
},
"iconPosition": "INSIDE_MIDDLE_CENTER",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "PROTOBUF SCHEMA",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 144,
"labelHeight": 21,
"labelPosition": "OUTSIDE_BOTTOM_CENTER",
"zIndex": 0,
"level": 2
},
{
"id": "schema.assets",
"type": "rectangle",
"pos": {
"x": 83,
"y": 518
},
"width": 400,
"height": 77,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "white",
"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": "BUF SUPPORT AND\nGENERATED ASSETS",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "blue",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 153,
"labelHeight": 37,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 2
},
{
"id": "CONSUMER A",
"type": "rectangle",
"pos": {
"x": 12,
"y": 775
},
"width": 142,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 4,
"fill": "#000047",
"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": "CONSUMER A",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 97,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "CONSUMER B",
"type": "rectangle",
"pos": {
"x": 174,
"y": 775
},
"width": 141,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 4,
"fill": "#000047",
"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": "CONSUMER B",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 96,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "CONSUMER C",
"type": "rectangle",
"pos": {
"x": 335,
"y": 775
},
"width": 142,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 4,
"fill": "#000047",
"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": "CONSUMER C",
"fontSize": 16,
"fontFamily": "mono",
"language": "",
"color": "white",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 97,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}
],
"connections": [
{
"id": "(PRODUCER -> api)[0]",
"src": "PRODUCER",
"srcArrow": "none",
"srcLabel": "",
"dst": "api",
"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": 283,
"y": 78
},
{
"x": 283,
"y": 148
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "schema.(PROTOBUF SCHEMA -> assets)[0]",
"src": "schema.PROTOBUF SCHEMA",
"srcArrow": "none",
"srcLabel": "",
"dst": "schema.assets",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 0,
"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": 283,
"y": 448
},
{
"x": 283,
"y": 518
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(api -> schema.PROTOBUF SCHEMA)[0]",
"src": "api",
"srcArrow": "none",
"srcLabel": "",
"dst": "schema.PROTOBUF SCHEMA",
"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": 283,
"y": 169
},
{
"x": 283,
"y": 294
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(schema -> CONSUMER A)[0]",
"src": "schema",
"srcArrow": "none",
"srcLabel": "",
"dst": "CONSUMER A",
"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": 83,
"y": 645
},
{
"x": 83,
"y": 775
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(schema -> CONSUMER B)[0]",
"src": "schema",
"srcArrow": "none",
"srcLabel": "",
"dst": "CONSUMER B",
"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": 93,
"y": 645
},
{
"x": 93,
"y": 735
},
{
"x": 244.5,
"y": 735
},
{
"x": 244.5,
"y": 775
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(schema -> CONSUMER C)[0]",
"src": "schema",
"srcArrow": "none",
"srcLabel": "",
"dst": "CONSUMER C",
"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": 103,
"y": 645
},
{
"x": 103,
"y": 685
},
{
"x": 406,
"y": 685
},
{
"x": 406,
"y": 775
}
],
"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
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 200 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 850 KiB

After

Width:  |  Height:  |  Size: 761 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 850 KiB

After

Width:  |  Height:  |  Size: 761 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 695 KiB

After

Width:  |  Height:  |  Size: 606 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 695 KiB

After

Width:  |  Height:  |  Size: 606 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 695 KiB

After

Width:  |  Height:  |  Size: 606 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 695 KiB

After

Width:  |  Height:  |  Size: 606 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 947 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 947 KiB