Merge pull request #1594 from gavin-ts/fix-nested-empty-grid

Fix nested empty grid
This commit is contained in:
gavin-ts 2023-09-20 13:09:46 -07:00 committed by GitHub
commit 68901fa205
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 482 additions and 10 deletions

View file

@ -15,3 +15,4 @@
- Fixes Markdown cropping last element in mixed-element blocks (e.g. em and strong) [#1543](https://github.com/terrastruct/d2/issues/1543) - Fixes Markdown cropping last element in mixed-element blocks (e.g. em and strong) [#1543](https://github.com/terrastruct/d2/issues/1543)
- Fixes missing compile error for non-blockstring empty labels [#1590](https://github.com/terrastruct/d2/issues/1590) - Fixes missing compile error for non-blockstring empty labels [#1590](https://github.com/terrastruct/d2/issues/1590)
- Fixes multiple constant nears overlapping in some cases [#1591](https://github.com/terrastruct/d2/issues/1591) - Fixes multiple constant nears overlapping in some cases [#1591](https://github.com/terrastruct/d2/issues/1591)
- Fixes error with an empty nested grid [#1594](https://github.com/terrastruct/d2/issues/1594)

View file

@ -64,11 +64,14 @@ func withoutGridDiagrams(ctx context.Context, g *d2graph.Graph, layout d2graph.L
var processGrid func(obj *d2graph.Object) error var processGrid func(obj *d2graph.Object) error
processGrid = func(obj *d2graph.Object) error { processGrid = func(obj *d2graph.Object) error {
for _, child := range obj.ChildrenArray { for _, child := range obj.ChildrenArray {
if len(child.ChildrenArray) == 0 {
continue
}
if child.IsGridDiagram() { if child.IsGridDiagram() {
if err := processGrid(child); err != nil { if err := processGrid(child); err != nil {
return err return err
} }
} else if len(child.ChildrenArray) > 0 { } else {
tempGraph := g.ExtractAsNestedGraph(child) tempGraph := g.ExtractAsNestedGraph(child)
if err := layout(ctx, tempGraph); err != nil { if err := layout(ctx, tempGraph); err != nil {
return err return err
@ -701,20 +704,14 @@ func (gd *gridDiagram) getBestLayout(targetSize float64, columns bool) [][]*d2gr
// if multiple nodes are too big, it isn't ok. but a single node can't shrink so only check here // if multiple nodes are too big, it isn't ok. but a single node can't shrink so only check here
if rowSize > okThreshold*targetSize { if rowSize > okThreshold*targetSize {
skipCount++ skipCount++
if skipCount >= SKIP_LIMIT {
// there may even be too many to skip // there may even be too many to skip
return true return skipCount >= SKIP_LIMIT
}
return false
} }
} }
// row is too small to be good overall // row is too small to be good overall
if rowSize < targetSize/okThreshold { if rowSize < targetSize/okThreshold {
skipCount++ skipCount++
if skipCount >= SKIP_LIMIT { return skipCount >= SKIP_LIMIT
return true
}
return false
} }
return true return true
} }

View file

@ -1040,6 +1040,7 @@ cf many required: {
loadFromFile(t, "outside_grid_label_position"), loadFromFile(t, "outside_grid_label_position"),
loadFromFile(t, "arrowhead_font_color"), loadFromFile(t, "arrowhead_font_color"),
loadFromFile(t, "multiple_constant_nears"), loadFromFile(t, "multiple_constant_nears"),
loadFromFile(t, "empty_nested_grid"),
} }
runa(t, tcs) runa(t, tcs)

View file

@ -0,0 +1,7 @@
outer: {
grid-rows: 1
inner: {
grid-rows: 1
# empty
}
}

View file

@ -0,0 +1,130 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "outer",
"type": "rectangle",
"pos": {
"x": 0,
"y": 0
},
"width": 221,
"height": 196,
"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": "outer",
"fontSize": 28,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 63,
"labelHeight": 36,
"labelPosition": "INSIDE_TOP_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "outer.inner",
"type": "rectangle",
"pos": {
"x": 60,
"y": 60
},
"width": 101,
"height": 76,
"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": "inner",
"fontSize": 24,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 56,
"labelHeight": 31,
"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
}
}

View file

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.6.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 223 198"><svg id="d2-svg" class="d2-1529025200" width="223" height="198" viewBox="-1 -1 223 198"><rect x="-1.000000" y="-1.000000" width="223.000000" height="198.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-1529025200 .text {
font-family: "d2-1529025200-font-regular";
}
@font-face {
font-family: d2-1529025200-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-1529025200 .text-bold {
font-family: "d2-1529025200-font-bold";
}
@font-face {
font-family: d2-1529025200-font-bold;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
stroke-linejoin: round;
}
.connection {
stroke-linecap: round;
stroke-linejoin: round;
}
.blend {
mix-blend-mode: multiply;
opacity: 0.5;
}
.d2-1529025200 .fill-N1{fill:#0A0F25;}
.d2-1529025200 .fill-N2{fill:#676C7E;}
.d2-1529025200 .fill-N3{fill:#9499AB;}
.d2-1529025200 .fill-N4{fill:#CFD2DD;}
.d2-1529025200 .fill-N5{fill:#DEE1EB;}
.d2-1529025200 .fill-N6{fill:#EEF1F8;}
.d2-1529025200 .fill-N7{fill:#FFFFFF;}
.d2-1529025200 .fill-B1{fill:#0D32B2;}
.d2-1529025200 .fill-B2{fill:#0D32B2;}
.d2-1529025200 .fill-B3{fill:#E3E9FD;}
.d2-1529025200 .fill-B4{fill:#E3E9FD;}
.d2-1529025200 .fill-B5{fill:#EDF0FD;}
.d2-1529025200 .fill-B6{fill:#F7F8FE;}
.d2-1529025200 .fill-AA2{fill:#4A6FF3;}
.d2-1529025200 .fill-AA4{fill:#EDF0FD;}
.d2-1529025200 .fill-AA5{fill:#F7F8FE;}
.d2-1529025200 .fill-AB4{fill:#EDF0FD;}
.d2-1529025200 .fill-AB5{fill:#F7F8FE;}
.d2-1529025200 .stroke-N1{stroke:#0A0F25;}
.d2-1529025200 .stroke-N2{stroke:#676C7E;}
.d2-1529025200 .stroke-N3{stroke:#9499AB;}
.d2-1529025200 .stroke-N4{stroke:#CFD2DD;}
.d2-1529025200 .stroke-N5{stroke:#DEE1EB;}
.d2-1529025200 .stroke-N6{stroke:#EEF1F8;}
.d2-1529025200 .stroke-N7{stroke:#FFFFFF;}
.d2-1529025200 .stroke-B1{stroke:#0D32B2;}
.d2-1529025200 .stroke-B2{stroke:#0D32B2;}
.d2-1529025200 .stroke-B3{stroke:#E3E9FD;}
.d2-1529025200 .stroke-B4{stroke:#E3E9FD;}
.d2-1529025200 .stroke-B5{stroke:#EDF0FD;}
.d2-1529025200 .stroke-B6{stroke:#F7F8FE;}
.d2-1529025200 .stroke-AA2{stroke:#4A6FF3;}
.d2-1529025200 .stroke-AA4{stroke:#EDF0FD;}
.d2-1529025200 .stroke-AA5{stroke:#F7F8FE;}
.d2-1529025200 .stroke-AB4{stroke:#EDF0FD;}
.d2-1529025200 .stroke-AB5{stroke:#F7F8FE;}
.d2-1529025200 .background-color-N1{background-color:#0A0F25;}
.d2-1529025200 .background-color-N2{background-color:#676C7E;}
.d2-1529025200 .background-color-N3{background-color:#9499AB;}
.d2-1529025200 .background-color-N4{background-color:#CFD2DD;}
.d2-1529025200 .background-color-N5{background-color:#DEE1EB;}
.d2-1529025200 .background-color-N6{background-color:#EEF1F8;}
.d2-1529025200 .background-color-N7{background-color:#FFFFFF;}
.d2-1529025200 .background-color-B1{background-color:#0D32B2;}
.d2-1529025200 .background-color-B2{background-color:#0D32B2;}
.d2-1529025200 .background-color-B3{background-color:#E3E9FD;}
.d2-1529025200 .background-color-B4{background-color:#E3E9FD;}
.d2-1529025200 .background-color-B5{background-color:#EDF0FD;}
.d2-1529025200 .background-color-B6{background-color:#F7F8FE;}
.d2-1529025200 .background-color-AA2{background-color:#4A6FF3;}
.d2-1529025200 .background-color-AA4{background-color:#EDF0FD;}
.d2-1529025200 .background-color-AA5{background-color:#F7F8FE;}
.d2-1529025200 .background-color-AB4{background-color:#EDF0FD;}
.d2-1529025200 .background-color-AB5{background-color:#F7F8FE;}
.d2-1529025200 .color-N1{color:#0A0F25;}
.d2-1529025200 .color-N2{color:#676C7E;}
.d2-1529025200 .color-N3{color:#9499AB;}
.d2-1529025200 .color-N4{color:#CFD2DD;}
.d2-1529025200 .color-N5{color:#DEE1EB;}
.d2-1529025200 .color-N6{color:#EEF1F8;}
.d2-1529025200 .color-N7{color:#FFFFFF;}
.d2-1529025200 .color-B1{color:#0D32B2;}
.d2-1529025200 .color-B2{color:#0D32B2;}
.d2-1529025200 .color-B3{color:#E3E9FD;}
.d2-1529025200 .color-B4{color:#E3E9FD;}
.d2-1529025200 .color-B5{color:#EDF0FD;}
.d2-1529025200 .color-B6{color:#F7F8FE;}
.d2-1529025200 .color-AA2{color:#4A6FF3;}
.d2-1529025200 .color-AA4{color:#EDF0FD;}
.d2-1529025200 .color-AA5{color:#F7F8FE;}
.d2-1529025200 .color-AB4{color:#EDF0FD;}
.d2-1529025200 .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}]]></style><g id="outer"><g class="shape" ><rect x="0.000000" y="0.000000" width="221.000000" height="196.000000" class=" stroke-B1 fill-B4" style="stroke-width:2;" /></g><text x="110.500000" y="33.000000" class="text fill-N1" style="text-anchor:middle;font-size:28px">outer</text></g><g id="outer.inner"><g class="shape" ><rect x="60.000000" y="60.000000" width="101.000000" height="76.000000" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="110.500000" y="106.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:24px">inner</text></g><mask id="d2-1529025200" maskUnits="userSpaceOnUse" x="-1" y="-1" width="223" height="198">
<rect x="-1" y="-1" width="223" height="198" fill="white"></rect>
<rect x="79.000000" y="5.000000" width="63" height="36" fill="rgba(0,0,0,0.75)"></rect>
<rect x="82.500000" y="82.500000" width="56" height="31" fill="rgba(0,0,0,0.75)"></rect>
</mask></svg></svg>

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,130 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "outer",
"type": "rectangle",
"pos": {
"x": 12,
"y": 12
},
"width": 221,
"height": 196,
"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": "outer",
"fontSize": 28,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 63,
"labelHeight": 36,
"labelPosition": "INSIDE_TOP_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "outer.inner",
"type": "rectangle",
"pos": {
"x": 72,
"y": 72
},
"width": 101,
"height": 76,
"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": "inner",
"fontSize": 24,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 56,
"labelHeight": 31,
"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
}
}

View file

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.6.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 223 198"><svg id="d2-svg" class="d2-3484725982" width="223" height="198" viewBox="11 11 223 198"><rect x="11.000000" y="11.000000" width="223.000000" height="198.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-3484725982 .text {
font-family: "d2-3484725982-font-regular";
}
@font-face {
font-family: d2-3484725982-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-3484725982 .text-bold {
font-family: "d2-3484725982-font-bold";
}
@font-face {
font-family: d2-3484725982-font-bold;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
stroke-linejoin: round;
}
.connection {
stroke-linecap: round;
stroke-linejoin: round;
}
.blend {
mix-blend-mode: multiply;
opacity: 0.5;
}
.d2-3484725982 .fill-N1{fill:#0A0F25;}
.d2-3484725982 .fill-N2{fill:#676C7E;}
.d2-3484725982 .fill-N3{fill:#9499AB;}
.d2-3484725982 .fill-N4{fill:#CFD2DD;}
.d2-3484725982 .fill-N5{fill:#DEE1EB;}
.d2-3484725982 .fill-N6{fill:#EEF1F8;}
.d2-3484725982 .fill-N7{fill:#FFFFFF;}
.d2-3484725982 .fill-B1{fill:#0D32B2;}
.d2-3484725982 .fill-B2{fill:#0D32B2;}
.d2-3484725982 .fill-B3{fill:#E3E9FD;}
.d2-3484725982 .fill-B4{fill:#E3E9FD;}
.d2-3484725982 .fill-B5{fill:#EDF0FD;}
.d2-3484725982 .fill-B6{fill:#F7F8FE;}
.d2-3484725982 .fill-AA2{fill:#4A6FF3;}
.d2-3484725982 .fill-AA4{fill:#EDF0FD;}
.d2-3484725982 .fill-AA5{fill:#F7F8FE;}
.d2-3484725982 .fill-AB4{fill:#EDF0FD;}
.d2-3484725982 .fill-AB5{fill:#F7F8FE;}
.d2-3484725982 .stroke-N1{stroke:#0A0F25;}
.d2-3484725982 .stroke-N2{stroke:#676C7E;}
.d2-3484725982 .stroke-N3{stroke:#9499AB;}
.d2-3484725982 .stroke-N4{stroke:#CFD2DD;}
.d2-3484725982 .stroke-N5{stroke:#DEE1EB;}
.d2-3484725982 .stroke-N6{stroke:#EEF1F8;}
.d2-3484725982 .stroke-N7{stroke:#FFFFFF;}
.d2-3484725982 .stroke-B1{stroke:#0D32B2;}
.d2-3484725982 .stroke-B2{stroke:#0D32B2;}
.d2-3484725982 .stroke-B3{stroke:#E3E9FD;}
.d2-3484725982 .stroke-B4{stroke:#E3E9FD;}
.d2-3484725982 .stroke-B5{stroke:#EDF0FD;}
.d2-3484725982 .stroke-B6{stroke:#F7F8FE;}
.d2-3484725982 .stroke-AA2{stroke:#4A6FF3;}
.d2-3484725982 .stroke-AA4{stroke:#EDF0FD;}
.d2-3484725982 .stroke-AA5{stroke:#F7F8FE;}
.d2-3484725982 .stroke-AB4{stroke:#EDF0FD;}
.d2-3484725982 .stroke-AB5{stroke:#F7F8FE;}
.d2-3484725982 .background-color-N1{background-color:#0A0F25;}
.d2-3484725982 .background-color-N2{background-color:#676C7E;}
.d2-3484725982 .background-color-N3{background-color:#9499AB;}
.d2-3484725982 .background-color-N4{background-color:#CFD2DD;}
.d2-3484725982 .background-color-N5{background-color:#DEE1EB;}
.d2-3484725982 .background-color-N6{background-color:#EEF1F8;}
.d2-3484725982 .background-color-N7{background-color:#FFFFFF;}
.d2-3484725982 .background-color-B1{background-color:#0D32B2;}
.d2-3484725982 .background-color-B2{background-color:#0D32B2;}
.d2-3484725982 .background-color-B3{background-color:#E3E9FD;}
.d2-3484725982 .background-color-B4{background-color:#E3E9FD;}
.d2-3484725982 .background-color-B5{background-color:#EDF0FD;}
.d2-3484725982 .background-color-B6{background-color:#F7F8FE;}
.d2-3484725982 .background-color-AA2{background-color:#4A6FF3;}
.d2-3484725982 .background-color-AA4{background-color:#EDF0FD;}
.d2-3484725982 .background-color-AA5{background-color:#F7F8FE;}
.d2-3484725982 .background-color-AB4{background-color:#EDF0FD;}
.d2-3484725982 .background-color-AB5{background-color:#F7F8FE;}
.d2-3484725982 .color-N1{color:#0A0F25;}
.d2-3484725982 .color-N2{color:#676C7E;}
.d2-3484725982 .color-N3{color:#9499AB;}
.d2-3484725982 .color-N4{color:#CFD2DD;}
.d2-3484725982 .color-N5{color:#DEE1EB;}
.d2-3484725982 .color-N6{color:#EEF1F8;}
.d2-3484725982 .color-N7{color:#FFFFFF;}
.d2-3484725982 .color-B1{color:#0D32B2;}
.d2-3484725982 .color-B2{color:#0D32B2;}
.d2-3484725982 .color-B3{color:#E3E9FD;}
.d2-3484725982 .color-B4{color:#E3E9FD;}
.d2-3484725982 .color-B5{color:#EDF0FD;}
.d2-3484725982 .color-B6{color:#F7F8FE;}
.d2-3484725982 .color-AA2{color:#4A6FF3;}
.d2-3484725982 .color-AA4{color:#EDF0FD;}
.d2-3484725982 .color-AA5{color:#F7F8FE;}
.d2-3484725982 .color-AB4{color:#EDF0FD;}
.d2-3484725982 .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}]]></style><g id="outer"><g class="shape" ><rect x="12.000000" y="12.000000" width="221.000000" height="196.000000" class=" stroke-B1 fill-B4" style="stroke-width:2;" /></g><text x="122.500000" y="45.000000" class="text fill-N1" style="text-anchor:middle;font-size:28px">outer</text></g><g id="outer.inner"><g class="shape" ><rect x="72.000000" y="72.000000" width="101.000000" height="76.000000" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="122.500000" y="118.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:24px">inner</text></g><mask id="d2-3484725982" maskUnits="userSpaceOnUse" x="11" y="11" width="223" height="198">
<rect x="11" y="11" width="223" height="198" fill="white"></rect>
<rect x="91.000000" y="17.000000" width="63" height="36" fill="rgba(0,0,0,0.75)"></rect>
<rect x="94.500000" y="94.500000" width="56" height="31" fill="rgba(0,0,0,0.75)"></rect>
</mask></svg></svg>

After

Width:  |  Height:  |  Size: 12 KiB