Merge branch 'master' into pdf-link-overlay

This commit is contained in:
Bernard Xie 2023-02-28 10:19:04 -08:00
commit 202575cb83
No known key found for this signature in database
GPG key ID: 3C3E0036CE0F892C
23 changed files with 3636 additions and 112 deletions

View file

@ -24,24 +24,24 @@ https://user-images.githubusercontent.com/3120367/206125010-bd1fea8e-248a-43e7-8
# Table of Contents
<!-- toc -->
- <a href="#what-does-d2-look-like" id="toc-what-does-d2-look-like">What does D2 look like?</a>
- <a href="#quickstart" id="toc-quickstart">Quickstart</a>
- <a href="#install" id="toc-install">Install</a>
- <a href="#d2-as-a-library" id="toc-d2-as-a-library">D2 as a library</a>
- <a href="#themes" id="toc-themes">Themes</a>
- <a href="#fonts" id="toc-fonts">Fonts</a>
- <a href="#export-file-types" id="toc-export-file-types">Export file types</a>
- <a href="#language-tooling" id="toc-language-tooling">Language tooling</a>
- <a href="#plugins" id="toc-plugins">Plugins</a>
- <a href="#comparison" id="toc-comparison">Comparison</a>
- <a href="#contributing" id="toc-contributing">Contributing</a>
- <a href="#license" id="toc-license">License</a>
- <a href="#related" id="toc-related">Related</a>
- <a href="#official-plugins" id="toc-official-plugins">Official plugins</a>
- <a href="#community-plugins" id="toc-community-plugins">Community plugins</a>
- <a href="#misc" id="toc-misc">Misc</a>
- <a href="#faq" id="toc-faq">FAQ</a>
- <a href="#open-source-projects-documenting-with-d2" id="toc-open-source-projects-documenting-with-d2">Open-source projects documenting with D2</a>
- [What does D2 look like?](#what-does-d2-look-like)
- [Quickstart](#quickstart)
- [Install](#install)
- [D2 as a library](#d2-as-a-library)
- [Themes](#themes)
- [Fonts](#fonts)
- [Export file types](#export-file-types)
- [Language tooling](#language-tooling)
- [Plugins](#plugins)
- [Comparison](#comparison)
- [Contributing](#contributing)
- [License](#license)
- [Related](#related)
- [Official plugins](#official-plugins)
- [Community plugins](#community-plugins)
- [Misc](#misc)
- [FAQ](#faq)
- [Open-source projects documenting with D2](#open-source-projects-documenting-with-d2)
## What does D2 look like?

View file

@ -346,10 +346,10 @@ if [ "\$(uname -m)" = aarch64 ]; then
docker context create ci-d2-linux-amd64 --docker "host=ssh://$CI_D2_LINUX_AMD64"
fi
if ! docker buildx ls | grep -qF 'd2 *'; then
docker buildx create --use --name d2 default
docker buildx create --use --name d2 --platform linux/arm64 default
fi
if ! docker buildx inspect d2 | grep -qF ci-d2-linux-amd64; then
docker buildx create --append --name d2 ci-d2-linux-amd64
docker buildx create --append --name d2 --platform linux/amd64 ci-d2-linux-amd64
fi
fi

View file

@ -1,22 +1,5 @@
#### Features 🚀
- PDF exports are now supported. [#120](https://github.com/terrastruct/d2/issues/120)
- Diagram background can be styled. [#910](https://github.com/terrastruct/d2/issues/910)
- 3D Hexagons are now supported. [#869](https://github.com/terrastruct/d2/issues/869)
- The arm64 docker container now supports rendering diagrams to pngs. [#917](https://github.com/terrastruct/d2/pull/917)
#### Improvements 🧹
- `near` key set to sequence diagram children get an appropriate error message. [#899](https://github.com/terrastruct/d2/issues/899)
- `class` and `sql_table` shape respect `font-color` styling as header font color. [#899](https://github.com/terrastruct/d2/issues/899)
- SVG fits to screen by default in both watch mode and as a standalone SVG (this time with just CSS, no JS). [#725](https://github.com/terrastruct/d2/issues/725)
- Only chromium is installed when rendering png diagrams instead of also installing webkit and firefox. [#835](https://github.com/terrastruct/d2/issues/835)
- Multiboard output is now self-contained and less confusing. See [#923](https://github.com/terrastruct/d2/pull/923)
#### Bugfixes ⛑️
- Error reported when no actors are declared in sequence diagram. [#886](https://github.com/terrastruct/d2/pull/886)
- Fixed img bundling on image shapes. [#889](https://github.com/terrastruct/d2/issues/889)
- `class` shape as sequence diagram actors had wrong colors. [#899](https://github.com/terrastruct/d2/issues/899)
- Fix regression in last release where some hex codes were not working. [#922](https://github.com/terrastruct/d2/pull/922)
- Fixes low resolution pngs. [#931](https://github.com/terrastruct/d2/pull/931)

View file

@ -0,0 +1,32 @@
`style` keywords now apply at the root level, letting you style the diagram background and frame like so:
![chilly](https://user-images.githubusercontent.com/3120367/221755385-22e9078e-a8db-418d-81e4-282c8b33f1d7.svg)
[playground link](https://play.d2lang.com/?script=tFRdaxs7EH3fXzEP15cErry-GwJFlIC9cdJAXIL9kJeCUbSTtchacqVZ56P4v5eRd9d2k9LkofjFGo1mzplzdmIVCT8SAJ6mhBGaEhOAbT8J58o_jKp6F9pCkPApATjQRgL5GpNNkpChtmgcrIQvplxAhWuswNh7rwL5WlPtY1memATCJ0oAeMwSyK2ERkvoY98OI0AnpITT0wRgww3VY5BQB4EqkPg_Zh4-itTIKxtWyqOlGN2btIRtrQQgr1xd3HtnqX3NZpGwIFoFmaZ8Cn1C37Loa7dM1WNIvyI9Ov9gbNnLBv_2skHuLKGlXjY4x8qs0T-nw6V6cVbEJhfcZF6xH8Vd2Q_rsoG1h_wNlA1OgNvhxS7tvSBnqGtv6Pm_Xja4KtBS83-Ld7mqjLIa0-HtTNwOL16j27yeE4gzmCj_gGRsCcEQ8v2fIvwqn05iqemkJdKYYYFPqnR2N4_-SdH4q2k_O_moPDNyXpXYSjA7EZeV0gb9ryTfoMfdAikyGlQISIFTsLqTML4ewdG1UwXcqYpH54__gm3GlQpktOBGYhQbGVuK8fVo3jwXFV-1GN5BKaIf3lyBx-81ho4S343zjE_jPOt0OTRluxQ7TbbGeD_p-aV39Yo9yCnpOM-EsYEYvNDOkjL2NyyGNS1ghn5tdHSVR15ovH4mSGqNPiBMmxgcffuHf8cNG-bW5u-FWN1LJNA18U7HOIpc6QV-yGMvtcd0zh-RsgZDOuQA68mVetlgioUJvWxw411Ra9aXC-2--631zVKVnctbsPBZnIHmOiySjqgPBrFJkni-8W5tCvQhLsX-fk73ZpfzMwAA__8%3D&)
(also showcases a little 3d hexagon, newly supported thanks to our newest contributor @JettChenT !)
PDF is also now supported as an export format:
[demo.pdf](https://github.com/terrastruct/d2/files/10846644/demo.pdf)
#### Features 🚀
- PDF exports. See [docs](https://d2lang.com/tour/exports#pdf). [#120](https://github.com/terrastruct/d2/issues/120)
- Diagram background and frame can be added and styled. See [docs](https://d2lang.com/tour/style#root). [#910](https://github.com/terrastruct/d2/pull/910)
- `3d` works on `hexagon` shapes. [#869](https://github.com/terrastruct/d2/issues/869)
- The arm64 docker container supports rendering diagrams to PNGs. [#917](https://github.com/terrastruct/d2/pull/917)
#### Improvements 🧹
- `near` key set to sequence diagram children get an appropriate error message. [#899](https://github.com/terrastruct/d2/pull/899)
- `class` and `sql_table` shape respect `font-color` styling as header font color. [#899](https://github.com/terrastruct/d2/pull/899)
- SVG fits to screen by default in both watch mode and as a standalone SVG (this time with just CSS, no JS). [#725](https://github.com/terrastruct/d2/pull/725)
- Only chromium is installed when rendering png diagrams instead of also installing webkit and firefox. [#835](https://github.com/terrastruct/d2/issues/835)
- Multiboard output is now self-contained and less confusing. See [#923](https://github.com/terrastruct/d2/pull/923)
#### Bugfixes ⛑️
- Error reported when no actors are declared in sequence diagram. [#886](https://github.com/terrastruct/d2/pull/886)
- Fixes img bundling on image shapes. [#889](https://github.com/terrastruct/d2/issues/889)
- `class` shape as sequence diagram actors had wrong colors. [#899](https://github.com/terrastruct/d2/pull/899)
- Fixes regression in last release where some hex codes were not working. [#922](https://github.com/terrastruct/d2/pull/922)

2
ci/sub

@ -1 +1 @@
Subproject commit cb8a9993d7e1d91815650c5baade7658622189b9
Subproject commit 5198280010adc30aabb611579579916abfe20a45

View file

@ -463,8 +463,9 @@ func renderPDF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, ske
// diagram.Root.Fill = "transparent"
svg, err = d2svg.Render(diagram, &d2svg.RenderOpts{
Pad: int(pad),
Sketch: sketch,
Pad: int(pad),
Sketch: sketch,
SetDimensions: true,
})
if err != nil {
return nil, err

View file

@ -300,26 +300,9 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
// If the edge is connected to two descendants that are about to be downshifted, their whole route gets downshifted
movedEdges := make(map[*d2graph.Edge]struct{})
for _, e := range g.Edges {
currSrc := e.Src
currDst := e.Dst
isSrcDesc := e.Src.IsDescendantOf(obj)
isDstDesc := e.Dst.IsDescendantOf(obj)
isSrcDesc := false
isDstDesc := false
for currSrc != nil {
if currSrc == obj {
isSrcDesc = true
break
}
currSrc = currSrc.Parent
}
for currDst != nil {
if currDst == obj {
isDstDesc = true
break
}
currDst = currDst.Parent
}
if isSrcDesc && isDstDesc {
stepSize := subtract
if e.Src != obj || e.Dst != obj {
@ -332,45 +315,74 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
}
}
// Downshift descendents and edges that have one endpoint connected to a descendant
q := []*d2graph.Object{obj}
// Downshift descendants and edges that have one endpoint connected to a descendant
for len(q) > 0 {
curr := q[0]
q = q[1:]
stepSize := subtract
// The object itself needs to move down the height it was just subtracted
// all descendents move half, to maintain vertical padding
// all descendants move half, to maintain vertical padding
if curr != obj {
stepSize /= 2.
}
curr.TopLeft.Y += stepSize
almostEqual := func(a, b float64) bool {
return b-1 <= a && a <= b+1
}
shouldMove := func(p *geo.Point) bool {
if curr != obj {
return true
}
// Edge should only move if it's not connected to the bottom side of the shrinking container
// Give some margin for error
return !(obj.TopLeft.Y+obj.Height-1 <= p.Y && obj.TopLeft.Y+obj.Height+1 >= p.Y && p.X != obj.TopLeft.X && p.X != (obj.TopLeft.X+obj.Width))
if isHorizontal {
// Only move horizontal edges if they are connected to the top side of the shrinking container
return almostEqual(p.Y, obj.TopLeft.Y-stepSize)
} else {
// Edge should only move if it's not connected to the bottom side of the shrinking container
return !almostEqual(p.Y, obj.TopLeft.Y+obj.Height)
}
}
for _, e := range g.Edges {
if _, ok := movedEdges[e]; ok {
continue
}
moveWholeEdge := false
if e.Src == curr {
// Don't move src points on side of container
if almostEqual(e.Route[0].X, obj.TopLeft.X) || almostEqual(e.Route[0].X, obj.TopLeft.X+obj.Width) {
// Unless the dst is also on a container
if e.Dst.LabelHeight == nil || len(e.Dst.ChildrenArray) <= 0 {
continue
}
}
if shouldMove(e.Route[0]) {
e.Route[0].Y += stepSize
if isHorizontal && e.Src.Parent != g.Root && e.Dst.Parent != g.Root {
moveWholeEdge = true
} else {
e.Route[0].Y += stepSize
}
}
}
if e.Dst == curr {
if !moveWholeEdge && e.Dst == curr {
if shouldMove(e.Route[len(e.Route)-1]) {
e.Route[len(e.Route)-1].Y += stepSize
if isHorizontal && e.Dst.Parent != g.Root && e.Src.Parent != g.Root {
moveWholeEdge = true
} else {
e.Route[len(e.Route)-1].Y += stepSize
}
}
}
if moveWholeEdge {
for _, p := range e.Route {
p.Y += stepSize / 2.
}
movedEdges[e] = struct{}{}
}
}
for _, c := range curr.ChildrenArray {
q = append(q, c)
}
q = append(q, curr.ChildrenArray...)
}
}

View file

@ -1,14 +1,14 @@
# Contributing
<!-- toc -->
- <a href="#welcome" id="toc-welcome">Welcome</a>
- <a href="#ci" id="toc-ci">CI</a>
- <a href="#logistics" id="toc-logistics">Logistics</a>
- <a href="#dev" id="toc-dev">Dev</a>
- <a href="#content" id="toc-content">Content</a>
- <a href="#tests" id="toc-tests">Tests</a>
- <a href="#documentation" id="toc-documentation">Documentation</a>
- <a href="#questions" id="toc-questions">Questions</a>
- [Welcome](#welcome)
- [CI](#ci)
- [Logistics](#logistics)
- [Dev](#dev)
- [Content](#content)
- [Tests](#tests)
- [Documentation](#documentation)
- [Questions](#questions)
## Welcome

View file

@ -3,21 +3,21 @@
You may install `d2` through any of the following methods.
<!-- toc -->
- <a href="#installsh" id="toc-installsh">install.sh</a>
- <a href="#security" id="toc-security">Security</a>
- <a href="#macos-homebrew" id="toc-macos-homebrew">macOS (Homebrew)</a>
- <a href="#linux" id="toc-linux">Linux</a>
- <a href="#void-linux" id="toc-void-linux">Void Linux</a>
- <a href="#standalone" id="toc-standalone">Standalone</a>
- <a href="#manual" id="toc-manual">Manual</a>
- <a href="#prefix" id="toc-prefix">PREFIX</a>
- <a href="#from-source" id="toc-from-source">From source</a>
- <a href="#source-release" id="toc-source-release">Source Release</a>
- <a href="#windows" id="toc-windows">Windows</a>
- <a href="#release-archives" id="toc-release-archives">Release archives</a>
- <a href="#wsl" id="toc-wsl">WSL</a>
- <a href="#docker" id="toc-docker">Docker</a>
- <a href="#coming-soon" id="toc-coming-soon">Coming soon</a>
- [install.sh](#installsh)
- [Security](#security)
- [macOS (Homebrew)](#macos-homebrew)
- [Linux](#linux)
- [Void Linux](#void-linux)
- [Standalone](#standalone)
- [Manual](#manual)
- [PREFIX](#prefix)
- [From source](#from-source)
- [Source Release](#source-release)
- [Windows](#windows)
- [Release archives](#release-archives)
- [WSL](#wsl)
- [Docker](#docker)
- [Coming soon](#coming-soon)
## install.sh

View file

@ -582,6 +582,66 @@ b
`,
},
loadFromFile(t, "unconnected"),
{
name: "straight_hierarchy_container_direction_right",
script: `
direction: right
a
c
b
l1: {
b
a
c
}
b -> l1.b
a -> l1.a
c -> l1.c
l2c1: {
a
}
l1.a -> l2c1.a
l2c3: {
c
}
l1.c -> l2c3.c
l2c2: {
b
}
l1.b -> l2c2.b
l3c1: {
a
b
}
l2c1.a -> l3c1.a
l2c2.b -> l3c1.b
l3c2: {
c
}
l2c3.c -> l3c2.c
l4: {
c1: {
a
}
c2: {
b
}
c3: {
c
}
}
l3c1.a -> l4.c1.a
l3c1.b -> l4.c2.b
l3c2.c -> l4.c3.c`,
},
}
runa(t, tcs)

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 662 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 661 KiB

View file

@ -692,11 +692,11 @@
},
{
"x": 599,
"y": 300.2
"y": 292
},
{
"x": 639,
"y": 333
"y": 292
}
],
"isCurve": true,
@ -1088,11 +1088,11 @@
},
{
"x": 599,
"y": 373.2
"y": 365
},
{
"x": 639,
"y": 406
"y": 365
}
],
"isCurve": true,
@ -1136,11 +1136,11 @@
},
{
"x": 599,
"y": 499.2
"y": 491
},
{
"x": 639,
"y": 532
"y": 491
}
],
"isCurve": true,

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid meet" viewBox="0 0 1513 605"><svg id="d2-svg" width="1513" height="605" viewBox="-1 -72 1513 605"><rect x="-1.000000" y="-72.000000" width="1513.000000" height="605.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" preserveAspectRatio="xMidYMid meet" viewBox="0 0 1513 597"><svg id="d2-svg" width="1513" height="597" viewBox="-1 -72 1513 597"><rect x="-1.000000" y="-72.000000" width="1513.000000" height="597.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}
@ -772,7 +772,7 @@
<li>Staging</li>
<li>Dispatch to Site</li>
</ul>
</div></foreignObject></g></g><g id="Customer Site.Installation"><g class="shape" ><rect x="55.000000" y="60.000000" width="126.000000" height="66.000000" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="118.000000" y="98.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Installation</text></g><g id="Customer Site.Support"><g class="shape" ><rect x="66.000000" y="186.000000" width="103.000000" height="66.000000" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="117.500000" y="224.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Support</text></g><g id="(OEM Factory -&gt; OEM Warehouse)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 186.992796 360.914281 C 225.000000 364.148936 299.500000 365.000000 353.500000 365.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="(OEM Factory -&gt; Distributor Warehouse)[0]"><path d="M 147.318559 389.513396 C 217.202206 470.400000 295.000000 491.000000 331.000000 491.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="(OEM Factory -&gt; Gos Warehouse)[0]"><path d="M 180.810244 321.054933 C 223.809524 298.000000 245.000000 292.000000 260.000000 292.000000 C 275.000000 292.000000 315.400000 292.000000 361.000000 292.000000 C 406.600000 292.000000 599.000000 300.200000 635.906929 330.463682" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="Gos Warehouse.(Master -&gt; Regional-1)[0]"><path d="M 782.450980 384.197777 C 822.569863 414.200000 843.000000 422.000000 879.000000 422.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="Gos Warehouse.(Master -&gt; Regional-2)[0]"><path d="M 780.846867 314.786926 C 822.251351 283.200000 855.000000 275.000000 888.000000 275.000000 C 921.000000 275.000000 1063.000000 277.400000 1099.110451 286.066508" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="Gos Warehouse.(Master -&gt; Regional-N)[0]"><path d="M 763.818430 314.442054 C 818.912863 246.000000 855.000000 228.500000 888.000000 228.500000 C 921.000000 228.500000 965.000000 228.500000 998.000000 228.500000 C 1031.000000 228.500000 1075.000000 228.500000 1108.000000 228.500000 C 1141.000000 228.500000 1284.600000 234.500000 1327.447129 256.662308" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="Gos Warehouse.(Regional-1 -&gt; Regional-2)[0]"><path d="M 1004.836125 395.298037 C 1043.000000 378.818182 1065.000000 366.500000 1109.671799 336.718801" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="Gos Warehouse.(Regional-2 -&gt; Regional-N)[0]"><path d="M 1225.000000 301.500000 C 1263.000000 301.500000 1284.600000 300.500000 1327.014781 296.843553" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="Gos Warehouse.(Regional-N -&gt; Regional-1)[0]"><path d="M 1365.942336 325.097570 C 1291.829114 423.500000 1251.000000 448.500000 1218.000000 448.500000 C 1185.000000 448.500000 1043.000000 446.100000 1006.889549 437.433492" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="(OEM Warehouse -&gt; Gos Warehouse)[0]"><path d="M 519.500000 365.000000 C 574.700000 365.000000 599.000000 373.200000 635.906929 403.463682" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><g id="(Distributor Warehouse -&gt; Gos Warehouse)[0]"><path d="M 541.000000 491.000000 C 579.000000 491.000000 599.000000 499.200000 635.906929 529.463682" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#745835176)" /></g><mask id="745835176" maskUnits="userSpaceOnUse" x="-1" y="-72" width="1513" height="605">
<rect x="-1" y="-72" width="1513" height="605" fill="white"></rect>
</div></foreignObject></g></g><g id="Customer Site.Installation"><g class="shape" ><rect x="55.000000" y="60.000000" width="126.000000" height="66.000000" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="118.000000" y="98.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Installation</text></g><g id="Customer Site.Support"><g class="shape" ><rect x="66.000000" y="186.000000" width="103.000000" height="66.000000" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="117.500000" y="224.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Support</text></g><g id="(OEM Factory -&gt; OEM Warehouse)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 186.992796 360.914281 C 225.000000 364.148936 299.500000 365.000000 353.500000 365.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="(OEM Factory -&gt; Distributor Warehouse)[0]"><path d="M 147.318559 389.513396 C 217.202206 470.400000 295.000000 491.000000 331.000000 491.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="(OEM Factory -&gt; Gos Warehouse)[0]"><path d="M 180.810244 321.054933 C 223.809524 298.000000 245.000000 292.000000 260.000000 292.000000 C 275.000000 292.000000 315.400000 292.000000 361.000000 292.000000 C 406.600000 292.000000 599.000000 292.000000 635.000000 292.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="Gos Warehouse.(Master -&gt; Regional-1)[0]"><path d="M 782.450980 384.197777 C 822.569863 414.200000 843.000000 422.000000 879.000000 422.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="Gos Warehouse.(Master -&gt; Regional-2)[0]"><path d="M 780.846867 314.786926 C 822.251351 283.200000 855.000000 275.000000 888.000000 275.000000 C 921.000000 275.000000 1063.000000 277.400000 1099.110451 286.066508" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="Gos Warehouse.(Master -&gt; Regional-N)[0]"><path d="M 763.818430 314.442054 C 818.912863 246.000000 855.000000 228.500000 888.000000 228.500000 C 921.000000 228.500000 965.000000 228.500000 998.000000 228.500000 C 1031.000000 228.500000 1075.000000 228.500000 1108.000000 228.500000 C 1141.000000 228.500000 1284.600000 234.500000 1327.447129 256.662308" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="Gos Warehouse.(Regional-1 -&gt; Regional-2)[0]"><path d="M 1004.836125 395.298037 C 1043.000000 378.818182 1065.000000 366.500000 1109.671799 336.718801" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="Gos Warehouse.(Regional-2 -&gt; Regional-N)[0]"><path d="M 1225.000000 301.500000 C 1263.000000 301.500000 1284.600000 300.500000 1327.014781 296.843553" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="Gos Warehouse.(Regional-N -&gt; Regional-1)[0]"><path d="M 1365.942336 325.097570 C 1291.829114 423.500000 1251.000000 448.500000 1218.000000 448.500000 C 1185.000000 448.500000 1043.000000 446.100000 1006.889549 437.433492" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="(OEM Warehouse -&gt; Gos Warehouse)[0]"><path d="M 519.500000 365.000000 C 574.700000 365.000000 599.000000 365.000000 635.000000 365.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><g id="(Distributor Warehouse -&gt; Gos Warehouse)[0]"><path d="M 541.000000 491.000000 C 579.000000 491.000000 599.000000 491.000000 635.000000 491.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#319647009)" /></g><mask id="319647009" maskUnits="userSpaceOnUse" x="-1" y="-72" width="1513" height="597">
<rect x="-1" y="-72" width="1513" height="597" fill="white"></rect>
</mask></svg></svg>

Before

Width:  |  Height:  |  Size: 669 KiB

After

Width:  |  Height:  |  Size: 669 KiB

View file

@ -1414,7 +1414,7 @@
"route": [
{
"x": 1112.75,
"y": 385
"y": 344
},
{
"x": 1302.75,
@ -1549,7 +1549,7 @@
"route": [
{
"x": 1112.75,
"y": 407
"y": 366
},
{
"x": 1160.75,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 662 KiB

After

Width:  |  Height:  |  Size: 662 KiB

View file

@ -695,7 +695,7 @@
"route": [
{
"x": 297.75,
"y": 464
"y": 423
},
{
"x": 337.75,
@ -878,7 +878,7 @@
"route": [
{
"x": 163.5,
"y": 637.5
"y": 601.5
},
{
"x": 204.5,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 658 KiB

After

Width:  |  Height:  |  Size: 658 KiB

2
go.mod generated
View file

@ -23,7 +23,7 @@ require (
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
gonum.org/v1/plot v0.12.0
nhooyr.io/websocket v1.8.7
oss.terrastruct.com/util-go v0.0.0-20230224133755-305bb6ab7844
oss.terrastruct.com/util-go v0.0.0-20230228050345-d1fed4d6be62
)
require (

4
go.sum generated
View file

@ -277,6 +277,6 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
oss.terrastruct.com/util-go v0.0.0-20230224133755-305bb6ab7844 h1:VPvvOad7FchgCtBw9p2R1/0KQAl2ot/HoeYFpb9C82I=
oss.terrastruct.com/util-go v0.0.0-20230224133755-305bb6ab7844/go.mod h1:Fwy72FDIOOM4K8F96ScXkxHHppR1CPfUyo9+x9c1PBU=
oss.terrastruct.com/util-go v0.0.0-20230228050345-d1fed4d6be62 h1:XQZNMkHQr2q1eJIcHcgja29X04oDG8SqqdICCgxe5Bk=
oss.terrastruct.com/util-go v0.0.0-20230228050345-d1fed4d6be62/go.mod h1:Fwy72FDIOOM4K8F96ScXkxHHppR1CPfUyo9+x9c1PBU=
rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=

View file

@ -1,4 +1,4 @@
package version
// Pre-built binaries will have version set correctly during build time.
var Version = "v0.2.1-HEAD"
var Version = "v0.2.2-HEAD"