d2compiler: disallow invalid board links

This commit is contained in:
Alexander Wang 2024-09-25 09:53:46 -06:00
parent a3fd4ec3ae
commit 420fa3d184
No known key found for this signature in database
GPG key ID: BE3937D0D52D8927
15 changed files with 1956 additions and 2266 deletions

View file

@ -32,4 +32,5 @@
- CLI: fixes scale flag not being passed to animated SVG outputs [#2071](https://github.com/terrastruct/d2/pull/2071)
- CLI: pptx exports use theme flags correctly [#2099](https://github.com/terrastruct/d2/pull/2099)
- Imports: importing files with url links is fixed [#2105](https://github.com/terrastruct/d2/pull/2105)
- Vars: substitutions consistently appear in the specified order [#216](https://github.com/terrastruct/d2/pull/2116)
- Vars: substitutions consistently appear in the specified order [#2116](https://github.com/terrastruct/d2/pull/2116)
- Composition: linking to invalid boards no longer produces an invalid link [#2118](https://github.com/terrastruct/d2/pull/2118)

View file

@ -3,6 +3,7 @@ package d2compiler
import (
"encoding/xml"
"fmt"
"html"
"io"
"io/fs"
"net/url"
@ -1204,7 +1205,14 @@ func (c *compiler) validateBoardLinks(g *d2graph.Graph) {
continue
}
u, err := url.Parse(html.UnescapeString(obj.Link.Value))
isRemote := err == nil && strings.HasPrefix(u.Scheme, "http")
if isRemote {
continue
}
if linkKey.Path[0].Unbox().ScalarString() != "root" {
obj.Link = nil
continue
}

View file

@ -1607,22 +1607,6 @@ b: {
}
},
},
{
name: "path_link",
text: `x: {
link: Overview.Untitled board 7.zzzzz
}
`,
assertions: func(t *testing.T, g *d2graph.Graph) {
if len(g.Objects) != 1 {
t.Fatal(g.Objects)
}
if g.Objects[0].Link.Value != "Overview.Untitled board 7.zzzzz" {
t.Fatal(g.Objects[0].Link.Value)
}
},
},
{
name: "near_constant",
@ -2334,13 +2318,33 @@ scenarios: {
},
},
{
name: "link-board-not-found",
name: "link-board-not-found-1",
text: `x.link: layers.x
`,
assertions: func(t *testing.T, g *d2graph.Graph) {
tassert.Equal(t, (*d2graph.Scalar)(nil), g.Objects[0].Link)
},
},
{
name: "link-board-not-found-2",
text: `layers: {
one: {
ping: {
link: two
}
}
two: {
pong: {
link: one
}
}
}
`,
assertions: func(t *testing.T, g *d2graph.Graph) {
tassert.Equal(t, (*d2graph.Scalar)(nil), g.Layers[0].Objects[0].Link)
tassert.Equal(t, (*d2graph.Scalar)(nil), g.Layers[1].Objects[0].Link)
},
},
{
name: "link-board-not-board",
text: `zzz

View file

@ -1033,12 +1033,9 @@ layers: {
name: "watch-ok-link",
serial: true,
run: func(t *testing.T, ctx context.Context, dir string, env *xos.Env) {
// This link technically works because D2 interprets it as a URL,
// and on local filesystem, that is whe path where the compilation happens
// to output it to.
writeFile(t, dir, "index.d2", `
a -> b
b.link: cream
b.link: layers.cream
layers: {
cream: {
@ -1201,58 +1198,6 @@ layers: {
assert.Success(t, err)
},
},
{
name: "watch-bad-link",
serial: true,
run: func(t *testing.T, ctx context.Context, dir string, env *xos.Env) {
// Just verify we don't crash even with a bad link (it's treated as a URL, which users might have locally)
writeFile(t, dir, "index.d2", `
a -> b
b.link: dream
layers: {
cream: {
c -> b
}
}`)
stderr := &stderrWrapper{}
tms := testMain(dir, env, "--watch", "--browser=0", "index.d2")
tms.Stderr = stderr
tms.Start(t, ctx)
defer func() {
// Manually close, since watcher is daemon
err := tms.Signal(ctx, os.Interrupt)
assert.Success(t, err)
}()
// Wait for watch server to spin up and listen
urlRE := regexp.MustCompile(`127.0.0.1:([0-9]+)`)
watchURL, err := waitLogs(ctx, stderr, urlRE)
assert.Success(t, err)
stderr.Reset()
// Start a client
c, _, err := websocket.Dial(ctx, fmt.Sprintf("ws://%s/watch", watchURL), nil)
assert.Success(t, err)
defer c.CloseNow()
// Get the link
_, msg, err := c.Read(ctx)
assert.Success(t, err)
aRE := regexp.MustCompile(`href=\\"([^\"]*)\\"`)
match := aRE.FindSubmatch(msg)
assert.Equal(t, 2, len(match))
linkedPath := match[1]
err = getWatchPage(ctx, t, fmt.Sprintf("http://%s/%s", watchURL, linkedPath))
assert.Success(t, err)
successRE := regexp.MustCompile(`broadcasting update to 1 client`)
_, err = waitLogs(ctx, stderr, successRE)
assert.Success(t, err)
},
},
{
name: "watch-imported-file",
serial: true,

View file

@ -13,7 +13,7 @@
"x": 0,
"y": 0
},
"width": 191,
"width": 159,
"height": 66,
"opacity": 1,
"strokeDash": 0,
@ -26,8 +26,7 @@
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "example.com",
"prettyLink": "example.com",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
@ -55,7 +54,7 @@
"YELLOW"
],
"pos": {
"x": 191,
"x": 159,
"y": 0
},
"width": 80,
@ -102,7 +101,7 @@
"x": 0,
"y": 66
},
"width": 191,
"width": 159,
"height": 66,
"opacity": 1,
"strokeDash": 0,
@ -115,8 +114,7 @@
"multiple": false,
"double-border": false,
"tooltip": "tooltip",
"link": "example.com",
"prettyLink": "example.com",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
@ -144,7 +142,7 @@
"GREEN"
],
"pos": {
"x": 191,
"x": 159,
"y": 66
},
"width": 80,

View file

@ -1,13 +1,13 @@
<?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.6-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 273 151"><svg id="d2-svg" class="d2-2017066640" width="273" height="151" viewBox="-1 -18 273 151"><rect x="-1.000000" y="-18.000000" width="273.000000" height="151.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
<?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.6-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 241 134"><svg id="d2-svg" class="d2-913231368" width="241" height="134" viewBox="-1 -1 241 134"><rect x="-1.000000" y="-1.000000" width="241.000000" height="134.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.appendix-icon {
filter: drop-shadow(0px 0px 32px rgba(31, 36, 58, 0.1));
}
.d2-2017066640 .text-bold {
font-family: "d2-2017066640-font-bold";
.d2-913231368 .text-bold {
font-family: "d2-913231368-font-bold";
}
@font-face {
font-family: d2-2017066640-font-bold;
src: url("data:application/font-woff;base64,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");
font-family: d2-913231368-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;
@ -21,90 +21,78 @@
opacity: 0.5;
}
.d2-2017066640 .fill-N1{fill:#0A0F25;}
.d2-2017066640 .fill-N2{fill:#676C7E;}
.d2-2017066640 .fill-N3{fill:#9499AB;}
.d2-2017066640 .fill-N4{fill:#CFD2DD;}
.d2-2017066640 .fill-N5{fill:#DEE1EB;}
.d2-2017066640 .fill-N6{fill:#EEF1F8;}
.d2-2017066640 .fill-N7{fill:#FFFFFF;}
.d2-2017066640 .fill-B1{fill:#0D32B2;}
.d2-2017066640 .fill-B2{fill:#0D32B2;}
.d2-2017066640 .fill-B3{fill:#E3E9FD;}
.d2-2017066640 .fill-B4{fill:#E3E9FD;}
.d2-2017066640 .fill-B5{fill:#EDF0FD;}
.d2-2017066640 .fill-B6{fill:#F7F8FE;}
.d2-2017066640 .fill-AA2{fill:#4A6FF3;}
.d2-2017066640 .fill-AA4{fill:#EDF0FD;}
.d2-2017066640 .fill-AA5{fill:#F7F8FE;}
.d2-2017066640 .fill-AB4{fill:#EDF0FD;}
.d2-2017066640 .fill-AB5{fill:#F7F8FE;}
.d2-2017066640 .stroke-N1{stroke:#0A0F25;}
.d2-2017066640 .stroke-N2{stroke:#676C7E;}
.d2-2017066640 .stroke-N3{stroke:#9499AB;}
.d2-2017066640 .stroke-N4{stroke:#CFD2DD;}
.d2-2017066640 .stroke-N5{stroke:#DEE1EB;}
.d2-2017066640 .stroke-N6{stroke:#EEF1F8;}
.d2-2017066640 .stroke-N7{stroke:#FFFFFF;}
.d2-2017066640 .stroke-B1{stroke:#0D32B2;}
.d2-2017066640 .stroke-B2{stroke:#0D32B2;}
.d2-2017066640 .stroke-B3{stroke:#E3E9FD;}
.d2-2017066640 .stroke-B4{stroke:#E3E9FD;}
.d2-2017066640 .stroke-B5{stroke:#EDF0FD;}
.d2-2017066640 .stroke-B6{stroke:#F7F8FE;}
.d2-2017066640 .stroke-AA2{stroke:#4A6FF3;}
.d2-2017066640 .stroke-AA4{stroke:#EDF0FD;}
.d2-2017066640 .stroke-AA5{stroke:#F7F8FE;}
.d2-2017066640 .stroke-AB4{stroke:#EDF0FD;}
.d2-2017066640 .stroke-AB5{stroke:#F7F8FE;}
.d2-2017066640 .background-color-N1{background-color:#0A0F25;}
.d2-2017066640 .background-color-N2{background-color:#676C7E;}
.d2-2017066640 .background-color-N3{background-color:#9499AB;}
.d2-2017066640 .background-color-N4{background-color:#CFD2DD;}
.d2-2017066640 .background-color-N5{background-color:#DEE1EB;}
.d2-2017066640 .background-color-N6{background-color:#EEF1F8;}
.d2-2017066640 .background-color-N7{background-color:#FFFFFF;}
.d2-2017066640 .background-color-B1{background-color:#0D32B2;}
.d2-2017066640 .background-color-B2{background-color:#0D32B2;}
.d2-2017066640 .background-color-B3{background-color:#E3E9FD;}
.d2-2017066640 .background-color-B4{background-color:#E3E9FD;}
.d2-2017066640 .background-color-B5{background-color:#EDF0FD;}
.d2-2017066640 .background-color-B6{background-color:#F7F8FE;}
.d2-2017066640 .background-color-AA2{background-color:#4A6FF3;}
.d2-2017066640 .background-color-AA4{background-color:#EDF0FD;}
.d2-2017066640 .background-color-AA5{background-color:#F7F8FE;}
.d2-2017066640 .background-color-AB4{background-color:#EDF0FD;}
.d2-2017066640 .background-color-AB5{background-color:#F7F8FE;}
.d2-2017066640 .color-N1{color:#0A0F25;}
.d2-2017066640 .color-N2{color:#676C7E;}
.d2-2017066640 .color-N3{color:#9499AB;}
.d2-2017066640 .color-N4{color:#CFD2DD;}
.d2-2017066640 .color-N5{color:#DEE1EB;}
.d2-2017066640 .color-N6{color:#EEF1F8;}
.d2-2017066640 .color-N7{color:#FFFFFF;}
.d2-2017066640 .color-B1{color:#0D32B2;}
.d2-2017066640 .color-B2{color:#0D32B2;}
.d2-2017066640 .color-B3{color:#E3E9FD;}
.d2-2017066640 .color-B4{color:#E3E9FD;}
.d2-2017066640 .color-B5{color:#EDF0FD;}
.d2-2017066640 .color-B6{color:#F7F8FE;}
.d2-2017066640 .color-AA2{color:#4A6FF3;}
.d2-2017066640 .color-AA4{color:#EDF0FD;}
.d2-2017066640 .color-AA5{color:#F7F8FE;}
.d2-2017066640 .color-AB4{color:#EDF0FD;}
.d2-2017066640 .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><a href="example.com" xlink:href="example.com"><g id="1" class="RED"><g class="shape" ><rect x="0.000000" y="0.000000" width="191.000000" height="66.000000" stroke="#d14d28" fill="#d14d28" style="stroke-width:2;" /></g><text x="95.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link</text></g></a><g id="2" class="YELLOW"><g class="shape" ><rect x="191.000000" y="0.000000" width="80.000000" height="66.000000" stroke="#f5df65" fill="#f5df65" style="stroke-width:2;" /></g><text x="231.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><a href="example.com" xlink:href="example.com"><g id="3" class="BLUE"><g class="shape" ><rect x="0.000000" y="66.000000" width="191.000000" height="66.000000" stroke="#59c8df" fill="#59c8df" style="stroke-width:2;" /></g><text x="95.500000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link, tooltip</text><title>tooltip</title></g></a><g id="4" class="GREEN"><g class="shape" ><rect x="191.000000" y="66.000000" width="80.000000" height="66.000000" stroke="#2b9464" fill="#2b9464" style="stroke-width:2;" /></g><text x="231.000000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><g transform="translate(175 -16)" class="appendix-icon"><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3440_35088111)">
<path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
<path d="M14.3909 16.7965C14.7364 17.2584 15.1772 17.6406 15.6834 17.9171C16.1896 18.1938 16.7494 18.3582 17.3248 18.3993C17.9001 18.4405 18.4777 18.3575 19.0181 18.1559C19.5586 17.9543 20.0492 17.6389 20.4571 17.2309L22.8708 14.8173C23.6036 14.0586 24.0089 13.0425 23.9998 11.9877C23.9906 10.933 23.5676 9.92404 22.8217 9.17821C22.0759 8.43237 21.067 8.00931 20.0123 8.00015C18.9575 7.99098 17.9413 8.39644 17.1827 9.1292L15.7988 10.505" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.609 15.1874C17.2635 14.7255 16.8227 14.3433 16.3165 14.0667C15.8103 13.7902 15.2505 13.6257 14.6752 13.5845C14.0998 13.5433 13.5223 13.6263 12.9819 13.8279C12.4414 14.0295 11.9506 14.345 11.5428 14.753L9.1292 17.1666C8.39644 17.9252 7.99098 18.9414 8.00015 19.9962C8.00931 21.0509 8.43237 22.0598 9.17821 22.8056C9.92405 23.5515 10.933 23.9745 11.9877 23.9837C13.0425 23.9928 14.0586 23.5875 14.8173 22.8547L16.193 21.4788" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_3440_35088111">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>
</g><g transform="translate(175 50)" class="appendix-icon"><title>tooltip</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
.d2-913231368 .fill-N1{fill:#0A0F25;}
.d2-913231368 .fill-N2{fill:#676C7E;}
.d2-913231368 .fill-N3{fill:#9499AB;}
.d2-913231368 .fill-N4{fill:#CFD2DD;}
.d2-913231368 .fill-N5{fill:#DEE1EB;}
.d2-913231368 .fill-N6{fill:#EEF1F8;}
.d2-913231368 .fill-N7{fill:#FFFFFF;}
.d2-913231368 .fill-B1{fill:#0D32B2;}
.d2-913231368 .fill-B2{fill:#0D32B2;}
.d2-913231368 .fill-B3{fill:#E3E9FD;}
.d2-913231368 .fill-B4{fill:#E3E9FD;}
.d2-913231368 .fill-B5{fill:#EDF0FD;}
.d2-913231368 .fill-B6{fill:#F7F8FE;}
.d2-913231368 .fill-AA2{fill:#4A6FF3;}
.d2-913231368 .fill-AA4{fill:#EDF0FD;}
.d2-913231368 .fill-AA5{fill:#F7F8FE;}
.d2-913231368 .fill-AB4{fill:#EDF0FD;}
.d2-913231368 .fill-AB5{fill:#F7F8FE;}
.d2-913231368 .stroke-N1{stroke:#0A0F25;}
.d2-913231368 .stroke-N2{stroke:#676C7E;}
.d2-913231368 .stroke-N3{stroke:#9499AB;}
.d2-913231368 .stroke-N4{stroke:#CFD2DD;}
.d2-913231368 .stroke-N5{stroke:#DEE1EB;}
.d2-913231368 .stroke-N6{stroke:#EEF1F8;}
.d2-913231368 .stroke-N7{stroke:#FFFFFF;}
.d2-913231368 .stroke-B1{stroke:#0D32B2;}
.d2-913231368 .stroke-B2{stroke:#0D32B2;}
.d2-913231368 .stroke-B3{stroke:#E3E9FD;}
.d2-913231368 .stroke-B4{stroke:#E3E9FD;}
.d2-913231368 .stroke-B5{stroke:#EDF0FD;}
.d2-913231368 .stroke-B6{stroke:#F7F8FE;}
.d2-913231368 .stroke-AA2{stroke:#4A6FF3;}
.d2-913231368 .stroke-AA4{stroke:#EDF0FD;}
.d2-913231368 .stroke-AA5{stroke:#F7F8FE;}
.d2-913231368 .stroke-AB4{stroke:#EDF0FD;}
.d2-913231368 .stroke-AB5{stroke:#F7F8FE;}
.d2-913231368 .background-color-N1{background-color:#0A0F25;}
.d2-913231368 .background-color-N2{background-color:#676C7E;}
.d2-913231368 .background-color-N3{background-color:#9499AB;}
.d2-913231368 .background-color-N4{background-color:#CFD2DD;}
.d2-913231368 .background-color-N5{background-color:#DEE1EB;}
.d2-913231368 .background-color-N6{background-color:#EEF1F8;}
.d2-913231368 .background-color-N7{background-color:#FFFFFF;}
.d2-913231368 .background-color-B1{background-color:#0D32B2;}
.d2-913231368 .background-color-B2{background-color:#0D32B2;}
.d2-913231368 .background-color-B3{background-color:#E3E9FD;}
.d2-913231368 .background-color-B4{background-color:#E3E9FD;}
.d2-913231368 .background-color-B5{background-color:#EDF0FD;}
.d2-913231368 .background-color-B6{background-color:#F7F8FE;}
.d2-913231368 .background-color-AA2{background-color:#4A6FF3;}
.d2-913231368 .background-color-AA4{background-color:#EDF0FD;}
.d2-913231368 .background-color-AA5{background-color:#F7F8FE;}
.d2-913231368 .background-color-AB4{background-color:#EDF0FD;}
.d2-913231368 .background-color-AB5{background-color:#F7F8FE;}
.d2-913231368 .color-N1{color:#0A0F25;}
.d2-913231368 .color-N2{color:#676C7E;}
.d2-913231368 .color-N3{color:#9499AB;}
.d2-913231368 .color-N4{color:#CFD2DD;}
.d2-913231368 .color-N5{color:#DEE1EB;}
.d2-913231368 .color-N6{color:#EEF1F8;}
.d2-913231368 .color-N7{color:#FFFFFF;}
.d2-913231368 .color-B1{color:#0D32B2;}
.d2-913231368 .color-B2{color:#0D32B2;}
.d2-913231368 .color-B3{color:#E3E9FD;}
.d2-913231368 .color-B4{color:#E3E9FD;}
.d2-913231368 .color-B5{color:#EDF0FD;}
.d2-913231368 .color-B6{color:#F7F8FE;}
.d2-913231368 .color-AA2{color:#4A6FF3;}
.d2-913231368 .color-AA4{color:#EDF0FD;}
.d2-913231368 .color-AA5{color:#F7F8FE;}
.d2-913231368 .color-AB4{color:#EDF0FD;}
.d2-913231368 .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="1" class="RED"><g class="shape" ><rect x="0.000000" y="0.000000" width="159.000000" height="66.000000" stroke="#d14d28" fill="#d14d28" style="stroke-width:2;" /></g><text x="79.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link</text></g><g id="2" class="YELLOW"><g class="shape" ><rect x="159.000000" y="0.000000" width="80.000000" height="66.000000" stroke="#f5df65" fill="#f5df65" style="stroke-width:2;" /></g><text x="199.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><g id="3" class="BLUE"><g class="shape" ><rect x="0.000000" y="66.000000" width="159.000000" height="66.000000" stroke="#59c8df" fill="#59c8df" style="stroke-width:2;" /></g><text x="79.500000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link, tooltip</text><title>tooltip</title></g><g id="4" class="GREEN"><g class="shape" ><rect x="159.000000" y="66.000000" width="80.000000" height="66.000000" stroke="#2b9464" fill="#2b9464" style="stroke-width:2;" /></g><text x="199.000000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><g transform="translate(143 50)" class="appendix-icon"><title>tooltip</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3427_35082111)">
<path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
<path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
@ -117,22 +105,10 @@
</clipPath>
</defs>
</svg>
</g><g transform="translate(143 50)" class="appendix-icon"><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3440_35088111)">
<path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
<path d="M14.3909 16.7965C14.7364 17.2584 15.1772 17.6406 15.6834 17.9171C16.1896 18.1938 16.7494 18.3582 17.3248 18.3993C17.9001 18.4405 18.4777 18.3575 19.0181 18.1559C19.5586 17.9543 20.0492 17.6389 20.4571 17.2309L22.8708 14.8173C23.6036 14.0586 24.0089 13.0425 23.9998 11.9877C23.9906 10.933 23.5676 9.92404 22.8217 9.17821C22.0759 8.43237 21.067 8.00931 20.0123 8.00015C18.9575 7.99098 17.9413 8.39644 17.1827 9.1292L15.7988 10.505" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.609 15.1874C17.2635 14.7255 16.8227 14.3433 16.3165 14.0667C15.8103 13.7902 15.2505 13.6257 14.6752 13.5845C14.0998 13.5433 13.5223 13.6263 12.9819 13.8279C12.4414 14.0295 11.9506 14.345 11.5428 14.753L9.1292 17.1666C8.39644 17.9252 7.99098 18.9414 8.00015 19.9962C8.00931 21.0509 8.43237 22.0598 9.17821 22.8056C9.92405 23.5515 10.933 23.9745 11.9877 23.9837C13.0425 23.9928 14.0586 23.5875 14.8173 22.8547L16.193 21.4788" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_3440_35088111">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>
</g><mask id="d2-2017066640" maskUnits="userSpaceOnUse" x="-1" y="-18" width="273" height="151">
<rect x="-1" y="-18" width="273" height="151" fill="white"></rect>
<rect x="82.000000" y="22.500000" width="27" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="213.500000" y="22.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="54.500000" y="88.500000" width="82" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="213.500000" y="88.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
</g><mask id="d2-913231368" maskUnits="userSpaceOnUse" x="-1" y="-1" width="241" height="134">
<rect x="-1" y="-1" width="241" height="134" fill="white"></rect>
<rect x="66.000000" y="22.500000" width="27" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="181.500000" y="22.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="38.500000" y="88.500000" width="82" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="181.500000" y="88.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
</mask></svg></svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -13,7 +13,7 @@
"x": 0,
"y": 0
},
"width": 191,
"width": 159,
"height": 66,
"opacity": 1,
"strokeDash": 0,
@ -26,8 +26,7 @@
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "example.com",
"prettyLink": "example.com",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
@ -55,7 +54,7 @@
"YELLOW"
],
"pos": {
"x": 191,
"x": 159,
"y": 0
},
"width": 80,
@ -102,7 +101,7 @@
"x": 0,
"y": 66
},
"width": 191,
"width": 159,
"height": 66,
"opacity": 1,
"strokeDash": 0,
@ -115,8 +114,7 @@
"multiple": false,
"double-border": false,
"tooltip": "tooltip",
"link": "example.com",
"prettyLink": "example.com",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
@ -144,7 +142,7 @@
"GREEN"
],
"pos": {
"x": 191,
"x": 159,
"y": 66
},
"width": 80,

View file

@ -1,13 +1,13 @@
<?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.6-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 273 151"><svg id="d2-svg" class="d2-2017066640" width="273" height="151" viewBox="-1 -18 273 151"><rect x="-1.000000" y="-18.000000" width="273.000000" height="151.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
<?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.6-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 241 134"><svg id="d2-svg" class="d2-913231368" width="241" height="134" viewBox="-1 -1 241 134"><rect x="-1.000000" y="-1.000000" width="241.000000" height="134.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.appendix-icon {
filter: drop-shadow(0px 0px 32px rgba(31, 36, 58, 0.1));
}
.d2-2017066640 .text-bold {
font-family: "d2-2017066640-font-bold";
.d2-913231368 .text-bold {
font-family: "d2-913231368-font-bold";
}
@font-face {
font-family: d2-2017066640-font-bold;
src: url("data:application/font-woff;base64,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");
font-family: d2-913231368-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;
@ -21,90 +21,78 @@
opacity: 0.5;
}
.d2-2017066640 .fill-N1{fill:#0A0F25;}
.d2-2017066640 .fill-N2{fill:#676C7E;}
.d2-2017066640 .fill-N3{fill:#9499AB;}
.d2-2017066640 .fill-N4{fill:#CFD2DD;}
.d2-2017066640 .fill-N5{fill:#DEE1EB;}
.d2-2017066640 .fill-N6{fill:#EEF1F8;}
.d2-2017066640 .fill-N7{fill:#FFFFFF;}
.d2-2017066640 .fill-B1{fill:#0D32B2;}
.d2-2017066640 .fill-B2{fill:#0D32B2;}
.d2-2017066640 .fill-B3{fill:#E3E9FD;}
.d2-2017066640 .fill-B4{fill:#E3E9FD;}
.d2-2017066640 .fill-B5{fill:#EDF0FD;}
.d2-2017066640 .fill-B6{fill:#F7F8FE;}
.d2-2017066640 .fill-AA2{fill:#4A6FF3;}
.d2-2017066640 .fill-AA4{fill:#EDF0FD;}
.d2-2017066640 .fill-AA5{fill:#F7F8FE;}
.d2-2017066640 .fill-AB4{fill:#EDF0FD;}
.d2-2017066640 .fill-AB5{fill:#F7F8FE;}
.d2-2017066640 .stroke-N1{stroke:#0A0F25;}
.d2-2017066640 .stroke-N2{stroke:#676C7E;}
.d2-2017066640 .stroke-N3{stroke:#9499AB;}
.d2-2017066640 .stroke-N4{stroke:#CFD2DD;}
.d2-2017066640 .stroke-N5{stroke:#DEE1EB;}
.d2-2017066640 .stroke-N6{stroke:#EEF1F8;}
.d2-2017066640 .stroke-N7{stroke:#FFFFFF;}
.d2-2017066640 .stroke-B1{stroke:#0D32B2;}
.d2-2017066640 .stroke-B2{stroke:#0D32B2;}
.d2-2017066640 .stroke-B3{stroke:#E3E9FD;}
.d2-2017066640 .stroke-B4{stroke:#E3E9FD;}
.d2-2017066640 .stroke-B5{stroke:#EDF0FD;}
.d2-2017066640 .stroke-B6{stroke:#F7F8FE;}
.d2-2017066640 .stroke-AA2{stroke:#4A6FF3;}
.d2-2017066640 .stroke-AA4{stroke:#EDF0FD;}
.d2-2017066640 .stroke-AA5{stroke:#F7F8FE;}
.d2-2017066640 .stroke-AB4{stroke:#EDF0FD;}
.d2-2017066640 .stroke-AB5{stroke:#F7F8FE;}
.d2-2017066640 .background-color-N1{background-color:#0A0F25;}
.d2-2017066640 .background-color-N2{background-color:#676C7E;}
.d2-2017066640 .background-color-N3{background-color:#9499AB;}
.d2-2017066640 .background-color-N4{background-color:#CFD2DD;}
.d2-2017066640 .background-color-N5{background-color:#DEE1EB;}
.d2-2017066640 .background-color-N6{background-color:#EEF1F8;}
.d2-2017066640 .background-color-N7{background-color:#FFFFFF;}
.d2-2017066640 .background-color-B1{background-color:#0D32B2;}
.d2-2017066640 .background-color-B2{background-color:#0D32B2;}
.d2-2017066640 .background-color-B3{background-color:#E3E9FD;}
.d2-2017066640 .background-color-B4{background-color:#E3E9FD;}
.d2-2017066640 .background-color-B5{background-color:#EDF0FD;}
.d2-2017066640 .background-color-B6{background-color:#F7F8FE;}
.d2-2017066640 .background-color-AA2{background-color:#4A6FF3;}
.d2-2017066640 .background-color-AA4{background-color:#EDF0FD;}
.d2-2017066640 .background-color-AA5{background-color:#F7F8FE;}
.d2-2017066640 .background-color-AB4{background-color:#EDF0FD;}
.d2-2017066640 .background-color-AB5{background-color:#F7F8FE;}
.d2-2017066640 .color-N1{color:#0A0F25;}
.d2-2017066640 .color-N2{color:#676C7E;}
.d2-2017066640 .color-N3{color:#9499AB;}
.d2-2017066640 .color-N4{color:#CFD2DD;}
.d2-2017066640 .color-N5{color:#DEE1EB;}
.d2-2017066640 .color-N6{color:#EEF1F8;}
.d2-2017066640 .color-N7{color:#FFFFFF;}
.d2-2017066640 .color-B1{color:#0D32B2;}
.d2-2017066640 .color-B2{color:#0D32B2;}
.d2-2017066640 .color-B3{color:#E3E9FD;}
.d2-2017066640 .color-B4{color:#E3E9FD;}
.d2-2017066640 .color-B5{color:#EDF0FD;}
.d2-2017066640 .color-B6{color:#F7F8FE;}
.d2-2017066640 .color-AA2{color:#4A6FF3;}
.d2-2017066640 .color-AA4{color:#EDF0FD;}
.d2-2017066640 .color-AA5{color:#F7F8FE;}
.d2-2017066640 .color-AB4{color:#EDF0FD;}
.d2-2017066640 .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><a href="example.com" xlink:href="example.com"><g id="1" class="RED"><g class="shape" ><rect x="0.000000" y="0.000000" width="191.000000" height="66.000000" stroke="#d14d28" fill="#d14d28" style="stroke-width:2;" /></g><text x="95.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link</text></g></a><g id="2" class="YELLOW"><g class="shape" ><rect x="191.000000" y="0.000000" width="80.000000" height="66.000000" stroke="#f5df65" fill="#f5df65" style="stroke-width:2;" /></g><text x="231.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><a href="example.com" xlink:href="example.com"><g id="3" class="BLUE"><g class="shape" ><rect x="0.000000" y="66.000000" width="191.000000" height="66.000000" stroke="#59c8df" fill="#59c8df" style="stroke-width:2;" /></g><text x="95.500000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link, tooltip</text><title>tooltip</title></g></a><g id="4" class="GREEN"><g class="shape" ><rect x="191.000000" y="66.000000" width="80.000000" height="66.000000" stroke="#2b9464" fill="#2b9464" style="stroke-width:2;" /></g><text x="231.000000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><g transform="translate(175 -16)" class="appendix-icon"><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3440_35088111)">
<path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
<path d="M14.3909 16.7965C14.7364 17.2584 15.1772 17.6406 15.6834 17.9171C16.1896 18.1938 16.7494 18.3582 17.3248 18.3993C17.9001 18.4405 18.4777 18.3575 19.0181 18.1559C19.5586 17.9543 20.0492 17.6389 20.4571 17.2309L22.8708 14.8173C23.6036 14.0586 24.0089 13.0425 23.9998 11.9877C23.9906 10.933 23.5676 9.92404 22.8217 9.17821C22.0759 8.43237 21.067 8.00931 20.0123 8.00015C18.9575 7.99098 17.9413 8.39644 17.1827 9.1292L15.7988 10.505" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.609 15.1874C17.2635 14.7255 16.8227 14.3433 16.3165 14.0667C15.8103 13.7902 15.2505 13.6257 14.6752 13.5845C14.0998 13.5433 13.5223 13.6263 12.9819 13.8279C12.4414 14.0295 11.9506 14.345 11.5428 14.753L9.1292 17.1666C8.39644 17.9252 7.99098 18.9414 8.00015 19.9962C8.00931 21.0509 8.43237 22.0598 9.17821 22.8056C9.92405 23.5515 10.933 23.9745 11.9877 23.9837C13.0425 23.9928 14.0586 23.5875 14.8173 22.8547L16.193 21.4788" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_3440_35088111">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>
</g><g transform="translate(175 50)" class="appendix-icon"><title>tooltip</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
.d2-913231368 .fill-N1{fill:#0A0F25;}
.d2-913231368 .fill-N2{fill:#676C7E;}
.d2-913231368 .fill-N3{fill:#9499AB;}
.d2-913231368 .fill-N4{fill:#CFD2DD;}
.d2-913231368 .fill-N5{fill:#DEE1EB;}
.d2-913231368 .fill-N6{fill:#EEF1F8;}
.d2-913231368 .fill-N7{fill:#FFFFFF;}
.d2-913231368 .fill-B1{fill:#0D32B2;}
.d2-913231368 .fill-B2{fill:#0D32B2;}
.d2-913231368 .fill-B3{fill:#E3E9FD;}
.d2-913231368 .fill-B4{fill:#E3E9FD;}
.d2-913231368 .fill-B5{fill:#EDF0FD;}
.d2-913231368 .fill-B6{fill:#F7F8FE;}
.d2-913231368 .fill-AA2{fill:#4A6FF3;}
.d2-913231368 .fill-AA4{fill:#EDF0FD;}
.d2-913231368 .fill-AA5{fill:#F7F8FE;}
.d2-913231368 .fill-AB4{fill:#EDF0FD;}
.d2-913231368 .fill-AB5{fill:#F7F8FE;}
.d2-913231368 .stroke-N1{stroke:#0A0F25;}
.d2-913231368 .stroke-N2{stroke:#676C7E;}
.d2-913231368 .stroke-N3{stroke:#9499AB;}
.d2-913231368 .stroke-N4{stroke:#CFD2DD;}
.d2-913231368 .stroke-N5{stroke:#DEE1EB;}
.d2-913231368 .stroke-N6{stroke:#EEF1F8;}
.d2-913231368 .stroke-N7{stroke:#FFFFFF;}
.d2-913231368 .stroke-B1{stroke:#0D32B2;}
.d2-913231368 .stroke-B2{stroke:#0D32B2;}
.d2-913231368 .stroke-B3{stroke:#E3E9FD;}
.d2-913231368 .stroke-B4{stroke:#E3E9FD;}
.d2-913231368 .stroke-B5{stroke:#EDF0FD;}
.d2-913231368 .stroke-B6{stroke:#F7F8FE;}
.d2-913231368 .stroke-AA2{stroke:#4A6FF3;}
.d2-913231368 .stroke-AA4{stroke:#EDF0FD;}
.d2-913231368 .stroke-AA5{stroke:#F7F8FE;}
.d2-913231368 .stroke-AB4{stroke:#EDF0FD;}
.d2-913231368 .stroke-AB5{stroke:#F7F8FE;}
.d2-913231368 .background-color-N1{background-color:#0A0F25;}
.d2-913231368 .background-color-N2{background-color:#676C7E;}
.d2-913231368 .background-color-N3{background-color:#9499AB;}
.d2-913231368 .background-color-N4{background-color:#CFD2DD;}
.d2-913231368 .background-color-N5{background-color:#DEE1EB;}
.d2-913231368 .background-color-N6{background-color:#EEF1F8;}
.d2-913231368 .background-color-N7{background-color:#FFFFFF;}
.d2-913231368 .background-color-B1{background-color:#0D32B2;}
.d2-913231368 .background-color-B2{background-color:#0D32B2;}
.d2-913231368 .background-color-B3{background-color:#E3E9FD;}
.d2-913231368 .background-color-B4{background-color:#E3E9FD;}
.d2-913231368 .background-color-B5{background-color:#EDF0FD;}
.d2-913231368 .background-color-B6{background-color:#F7F8FE;}
.d2-913231368 .background-color-AA2{background-color:#4A6FF3;}
.d2-913231368 .background-color-AA4{background-color:#EDF0FD;}
.d2-913231368 .background-color-AA5{background-color:#F7F8FE;}
.d2-913231368 .background-color-AB4{background-color:#EDF0FD;}
.d2-913231368 .background-color-AB5{background-color:#F7F8FE;}
.d2-913231368 .color-N1{color:#0A0F25;}
.d2-913231368 .color-N2{color:#676C7E;}
.d2-913231368 .color-N3{color:#9499AB;}
.d2-913231368 .color-N4{color:#CFD2DD;}
.d2-913231368 .color-N5{color:#DEE1EB;}
.d2-913231368 .color-N6{color:#EEF1F8;}
.d2-913231368 .color-N7{color:#FFFFFF;}
.d2-913231368 .color-B1{color:#0D32B2;}
.d2-913231368 .color-B2{color:#0D32B2;}
.d2-913231368 .color-B3{color:#E3E9FD;}
.d2-913231368 .color-B4{color:#E3E9FD;}
.d2-913231368 .color-B5{color:#EDF0FD;}
.d2-913231368 .color-B6{color:#F7F8FE;}
.d2-913231368 .color-AA2{color:#4A6FF3;}
.d2-913231368 .color-AA4{color:#EDF0FD;}
.d2-913231368 .color-AA5{color:#F7F8FE;}
.d2-913231368 .color-AB4{color:#EDF0FD;}
.d2-913231368 .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="1" class="RED"><g class="shape" ><rect x="0.000000" y="0.000000" width="159.000000" height="66.000000" stroke="#d14d28" fill="#d14d28" style="stroke-width:2;" /></g><text x="79.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link</text></g><g id="2" class="YELLOW"><g class="shape" ><rect x="159.000000" y="0.000000" width="80.000000" height="66.000000" stroke="#f5df65" fill="#f5df65" style="stroke-width:2;" /></g><text x="199.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><g id="3" class="BLUE"><g class="shape" ><rect x="0.000000" y="66.000000" width="159.000000" height="66.000000" stroke="#59c8df" fill="#59c8df" style="stroke-width:2;" /></g><text x="79.500000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">link, tooltip</text><title>tooltip</title></g><g id="4" class="GREEN"><g class="shape" ><rect x="159.000000" y="66.000000" width="80.000000" height="66.000000" stroke="#2b9464" fill="#2b9464" style="stroke-width:2;" /></g><text x="199.000000" y="104.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">none</text></g><g transform="translate(143 50)" class="appendix-icon"><title>tooltip</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3427_35082111)">
<path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
<path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
@ -117,22 +105,10 @@
</clipPath>
</defs>
</svg>
</g><g transform="translate(143 50)" class="appendix-icon"><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3440_35088111)">
<path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
<path d="M14.3909 16.7965C14.7364 17.2584 15.1772 17.6406 15.6834 17.9171C16.1896 18.1938 16.7494 18.3582 17.3248 18.3993C17.9001 18.4405 18.4777 18.3575 19.0181 18.1559C19.5586 17.9543 20.0492 17.6389 20.4571 17.2309L22.8708 14.8173C23.6036 14.0586 24.0089 13.0425 23.9998 11.9877C23.9906 10.933 23.5676 9.92404 22.8217 9.17821C22.0759 8.43237 21.067 8.00931 20.0123 8.00015C18.9575 7.99098 17.9413 8.39644 17.1827 9.1292L15.7988 10.505" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.609 15.1874C17.2635 14.7255 16.8227 14.3433 16.3165 14.0667C15.8103 13.7902 15.2505 13.6257 14.6752 13.5845C14.0998 13.5433 13.5223 13.6263 12.9819 13.8279C12.4414 14.0295 11.9506 14.345 11.5428 14.753L9.1292 17.1666C8.39644 17.9252 7.99098 18.9414 8.00015 19.9962C8.00931 21.0509 8.43237 22.0598 9.17821 22.8056C9.92405 23.5515 10.933 23.9745 11.9877 23.9837C13.0425 23.9928 14.0586 23.5875 14.8173 22.8547L16.193 21.4788" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_3440_35088111">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>
</g><mask id="d2-2017066640" maskUnits="userSpaceOnUse" x="-1" y="-18" width="273" height="151">
<rect x="-1" y="-18" width="273" height="151" fill="white"></rect>
<rect x="82.000000" y="22.500000" width="27" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="213.500000" y="22.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="54.500000" y="88.500000" width="82" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="213.500000" y="88.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
</g><mask id="d2-913231368" maskUnits="userSpaceOnUse" x="-1" y="-1" width="241" height="134">
<rect x="-1" y="-1" width="241" height="134" fill="white"></rect>
<rect x="66.000000" y="22.500000" width="27" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="181.500000" y="22.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="38.500000" y="88.500000" width="82" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="181.500000" y="88.500000" width="35" height="21" fill="rgba(0,0,0,0.75)"></rect>
</mask></svg></svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 86 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View file

@ -0,0 +1,138 @@
{
"graph": {
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:0:0-1:0:17",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:0:0-0:16:16",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:0:0-0:6:6",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:2:2-0:6:6",
"value": [
{
"string": "link",
"raw_string": "link"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:8:8-0:16:16",
"value": [
{
"string": "layers.x",
"raw_string": "layers.x"
}
]
}
}
}
}
]
},
"root": {
"id": "",
"id_val": "",
"attributes": {
"label": {
"value": ""
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": ""
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
},
"edges": null,
"objects": [
{
"id": "x",
"id_val": "x",
"references": [
{
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:0:0-0:6:6",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-1.d2,0:2:2-0:6:6",
"value": [
{
"string": "link",
"raw_string": "link"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "x"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
}
]
},
"err": null
}

View file

@ -0,0 +1,530 @@
{
"graph": {
"name": "",
"isFolderOnly": true,
"ast": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,0:0:0-12:0:142",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,0:0:0-11:1:141",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,0:0:0-0:6:6",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,0:0:0-0:6:6",
"value": [
{
"string": "layers",
"raw_string": "layers"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,0:8:8-11:1:141",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,1:4:14-5:5:74",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,1:4:14-1:7:17",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,1:4:14-1:7:17",
"value": [
{
"string": "one",
"raw_string": "one"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,1:9:19-5:5:74",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,2:8:29-4:9:68",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,2:8:29-2:12:33",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,2:8:29-2:12:33",
"value": [
{
"string": "ping",
"raw_string": "ping"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,2:14:35-4:9:68",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,3:12:49-3:21:58",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,3:12:49-3:16:53",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,3:12:49-3:16:53",
"value": [
{
"string": "link",
"raw_string": "link"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,3:18:55-3:21:58",
"value": [
{
"string": "two",
"raw_string": "two"
}
]
}
}
}
}
]
}
}
}
}
]
}
}
}
},
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,6:4:79-10:5:139",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,6:4:79-6:7:82",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,6:4:79-6:7:82",
"value": [
{
"string": "two",
"raw_string": "two"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,6:9:84-10:5:139",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,7:8:94-9:9:133",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,7:8:94-7:12:98",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,7:8:94-7:12:98",
"value": [
{
"string": "pong",
"raw_string": "pong"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,7:14:100-9:9:133",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,8:12:114-8:21:123",
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,8:12:114-8:16:118",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,8:12:114-8:16:118",
"value": [
{
"string": "link",
"raw_string": "link"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,8:18:120-8:21:123",
"value": [
{
"string": "one",
"raw_string": "one"
}
]
}
}
}
}
]
}
}
}
}
]
}
}
}
}
]
}
}
}
}
]
},
"root": {
"id": "",
"id_val": "",
"attributes": {
"label": {
"value": ""
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": ""
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
},
"edges": null,
"objects": null,
"layers": [
{
"name": "one",
"isFolderOnly": false,
"ast": {
"range": ",0:0:0-1:0:0",
"nodes": [
{
"map_key": {
"range": ",0:0:0-0:0:0",
"key": {
"range": ",0:0:0-0:0:0",
"path": [
{
"unquoted_string": {
"range": ",0:0:0-0:0:0",
"value": [
{
"string": "ping"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": ",0:0:0-1:0:0",
"nodes": [
{
"map_key": {
"range": ",0:0:0-0:0:0",
"key": {
"range": ",0:0:0-0:0:0",
"path": [
{
"unquoted_string": {
"range": ",0:0:0-0:0:0",
"value": [
{
"string": "link"
}
]
}
}
]
},
"primary": {
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,3:18:55-3:21:58",
"value": [
{
"string": "two",
"raw_string": "two"
}
]
}
},
"value": {}
}
}
]
}
}
}
}
]
},
"root": {
"id": "",
"id_val": "",
"attributes": {
"label": {
"value": ""
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": ""
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
},
"edges": null,
"objects": [
{
"id": "ping",
"id_val": "ping",
"references": [
{
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,2:8:29-2:12:33",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,2:8:29-2:12:33",
"value": [
{
"string": "ping",
"raw_string": "ping"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "ping"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
}
]
},
{
"name": "two",
"isFolderOnly": false,
"ast": {
"range": ",0:0:0-1:0:0",
"nodes": [
{
"map_key": {
"range": ",0:0:0-0:0:0",
"key": {
"range": ",0:0:0-0:0:0",
"path": [
{
"unquoted_string": {
"range": ",0:0:0-0:0:0",
"value": [
{
"string": "pong"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": ",0:0:0-1:0:0",
"nodes": [
{
"map_key": {
"range": ",0:0:0-0:0:0",
"key": {
"range": ",0:0:0-0:0:0",
"path": [
{
"unquoted_string": {
"range": ",0:0:0-0:0:0",
"value": [
{
"string": "link"
}
]
}
}
]
},
"primary": {
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,8:18:120-8:21:123",
"value": [
{
"string": "one",
"raw_string": "one"
}
]
}
},
"value": {}
}
}
]
}
}
}
}
]
},
"root": {
"id": "",
"id_val": "",
"attributes": {
"label": {
"value": ""
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": ""
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
},
"edges": null,
"objects": [
{
"id": "pong",
"id_val": "pong",
"references": [
{
"key": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,7:8:94-7:12:98",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2compiler/TestCompile/link-board-not-found-2.d2,7:8:94-7:12:98",
"value": [
{
"string": "pong",
"raw_string": "pong"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "pong"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
}
]
}
]
},
"err": null
}