diff --git a/e2etests/stable_test.go b/e2etests/stable_test.go
index ae6f36ac0..6b01e1076 100644
--- a/e2etests/stable_test.go
+++ b/e2etests/stable_test.go
@@ -2833,6 +2833,7 @@ y: profits {
loadFromFile(t, "overlapping_child_label"),
loadFromFile(t, "dagre_spacing"),
loadFromFile(t, "dagre_spacing_right"),
+ loadFromFile(t, "simple_grid_edges"),
}
runa(t, tcs)
diff --git a/e2etests/testdata/files/simple_grid_edges.d2 b/e2etests/testdata/files/simple_grid_edges.d2
new file mode 100644
index 000000000..2ff20bf96
--- /dev/null
+++ b/e2etests/testdata/files/simple_grid_edges.d2
@@ -0,0 +1,106 @@
+grid-rows: 3
+grid-columns: 5
+horizontal-gap: 20
+
+*.class: [text; blue]
+
+npm: {
+ label: "npm i -g\n@forge/cli"
+ style: {
+ fill: "#30304c"
+ stroke: transparent
+ font-color: white
+ font: mono
+ font-size: 10
+ bold: false
+ }
+}
+
+b: {
+ label: "Set up an\nAtlassian site"
+ class: [text; gray]
+}
+c.class: empty
+d: {
+ label: "View the hello\nworld app"
+ class: [text; gray]
+}
+e: forge\ntunnel
+f: forge\nlogin
+g: forge\ncreate
+h: forge\ndeploy
+i: forge\ninstall
+j: {
+ shape: diamond
+ label: "Hot reload\nchanges?"
+ class: [text; gray]
+}
+k: "" {
+ grid-rows: 3
+ grid-columns: 1
+ grid-gap: 0
+
+ class: []
+
+ style: {
+ fill: transparent
+ stroke: transparent
+ }
+
+ *.style: {
+ fill: transparent
+ stroke: transparent
+ font-color: "#30304c"
+ font-size: 10
+ bold: false
+ }
+ *.label.near: center-left
+ *.height: 20
+ a: ⬤ Forge CLI {
+ style.font-color: "#0033cc"
+ }
+
+ b: ⬤ Required {
+ style.font-color: "#30304c"
+ }
+ c: ⬤ Optional {
+ style.font-color: "#cecece"
+ }
+}
+l.class: empty
+m.class: empty
+n.class: empty
+o: forge\ndeploy
+
+classes: {
+ text.style: {
+ stroke: transparent
+ font-color: white
+ font: mono
+ font-size: 10
+ bold: false
+ }
+ text: {
+ width: 100
+ height: 60
+ }
+ blue.style: {
+ fill: "#0033cc"
+ stroke: "#0033cc"
+ border-radius: 10
+ }
+ gray.style: {
+ fill: "#cecece"
+ stroke: "#cecece"
+ border-radius: 10
+ }
+ empty: {
+ label: ""
+ width: 50
+ height: 50
+ style: {
+ fill: transparent
+ stroke: transparent
+ }
+ }
+}
diff --git a/e2etests/testdata/stable/simple_grid_edges/dagre/board.exp.json b/e2etests/testdata/stable/simple_grid_edges/dagre/board.exp.json
new file mode 100644
index 000000000..e89bdc344
--- /dev/null
+++ b/e2etests/testdata/stable/simple_grid_edges/dagre/board.exp.json
@@ -0,0 +1,838 @@
+{
+ "name": "",
+ "isFolderOnly": false,
+ "fontFamily": "SourceSansPro",
+ "shapes": [
+ {
+ "id": "npm",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 0,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#30304c",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "npm i -g\n@forge/cli",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 59,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "b",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "gray"
+ ],
+ "pos": {
+ "x": 120,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#cecece",
+ "stroke": "#cecece",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "Set up an\nAtlassian site",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 84,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "c",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 240,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "d",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "gray"
+ ],
+ "pos": {
+ "x": 360,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#cecece",
+ "stroke": "#cecece",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "View the hello\nworld app",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 84,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "e",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 480,
+ "y": 0
+ },
+ "width": 120,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ntunnel",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "f",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 0,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\nlogin",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 30,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "g",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 120,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ncreate",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "h",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 240,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ndeploy",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "i",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 360,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ninstall",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 42,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "j",
+ "type": "diamond",
+ "classes": [
+ "text",
+ "gray"
+ ],
+ "pos": {
+ "x": 480,
+ "y": 100
+ },
+ "width": 120,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#cecece",
+ "stroke": "#cecece",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "Hot reload\nchanges?",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 60,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "k",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 28,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_TOP_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "k.a",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 200
+ },
+ "width": 91,
+ "height": 20,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "⬤ Forge CLI",
+ "fontSize": 10,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "#0033cc",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 51,
+ "labelHeight": 13,
+ "labelPosition": "INSIDE_MIDDLE_LEFT",
+ "zIndex": 0,
+ "level": 2
+ },
+ {
+ "id": "k.b",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 220
+ },
+ "width": 91,
+ "height": 20,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "⬤ Required",
+ "fontSize": 10,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "#30304c",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 50,
+ "labelHeight": 13,
+ "labelPosition": "INSIDE_MIDDLE_LEFT",
+ "zIndex": 0,
+ "level": 2
+ },
+ {
+ "id": "k.c",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 240
+ },
+ "width": 91,
+ "height": 20,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "⬤ Optional",
+ "fontSize": 10,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "#cecece",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 48,
+ "labelHeight": 13,
+ "labelPosition": "INSIDE_MIDDLE_LEFT",
+ "zIndex": 0,
+ "level": 2
+ },
+ {
+ "id": "l",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 120,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "m",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 240,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "n",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 360,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "o",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 480,
+ "y": 200
+ },
+ "width": 120,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ndeploy",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ }
+ ],
+ "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
+ }
+}
diff --git a/e2etests/testdata/stable/simple_grid_edges/dagre/sketch.exp.svg b/e2etests/testdata/stable/simple_grid_edges/dagre/sketch.exp.svg
new file mode 100644
index 000000000..458a96dfc
--- /dev/null
+++ b/e2etests/testdata/stable/simple_grid_edges/dagre/sketch.exp.svg
@@ -0,0 +1,114 @@
+
\ No newline at end of file
diff --git a/e2etests/testdata/stable/simple_grid_edges/elk/board.exp.json b/e2etests/testdata/stable/simple_grid_edges/elk/board.exp.json
new file mode 100644
index 000000000..e89bdc344
--- /dev/null
+++ b/e2etests/testdata/stable/simple_grid_edges/elk/board.exp.json
@@ -0,0 +1,838 @@
+{
+ "name": "",
+ "isFolderOnly": false,
+ "fontFamily": "SourceSansPro",
+ "shapes": [
+ {
+ "id": "npm",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 0,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#30304c",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "npm i -g\n@forge/cli",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 59,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "b",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "gray"
+ ],
+ "pos": {
+ "x": 120,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#cecece",
+ "stroke": "#cecece",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "Set up an\nAtlassian site",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 84,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "c",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 240,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "d",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "gray"
+ ],
+ "pos": {
+ "x": 360,
+ "y": 0
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#cecece",
+ "stroke": "#cecece",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "View the hello\nworld app",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 84,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "e",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 480,
+ "y": 0
+ },
+ "width": 120,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ntunnel",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "f",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 0,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\nlogin",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 30,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "g",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 120,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ncreate",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "h",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 240,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ndeploy",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "i",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 360,
+ "y": 100
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ninstall",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 42,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "j",
+ "type": "diamond",
+ "classes": [
+ "text",
+ "gray"
+ ],
+ "pos": {
+ "x": 480,
+ "y": 100
+ },
+ "width": 120,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#cecece",
+ "stroke": "#cecece",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "Hot reload\nchanges?",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 60,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "k",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 28,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_TOP_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "k.a",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 200
+ },
+ "width": 91,
+ "height": 20,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "⬤ Forge CLI",
+ "fontSize": 10,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "#0033cc",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 51,
+ "labelHeight": 13,
+ "labelPosition": "INSIDE_MIDDLE_LEFT",
+ "zIndex": 0,
+ "level": 2
+ },
+ {
+ "id": "k.b",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 220
+ },
+ "width": 91,
+ "height": 20,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "⬤ Required",
+ "fontSize": 10,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "#30304c",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 50,
+ "labelHeight": 13,
+ "labelPosition": "INSIDE_MIDDLE_LEFT",
+ "zIndex": 0,
+ "level": 2
+ },
+ {
+ "id": "k.c",
+ "type": "rectangle",
+ "pos": {
+ "x": 0,
+ "y": 240
+ },
+ "width": 91,
+ "height": 20,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "⬤ Optional",
+ "fontSize": 10,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "#cecece",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 48,
+ "labelHeight": 13,
+ "labelPosition": "INSIDE_MIDDLE_LEFT",
+ "zIndex": 0,
+ "level": 2
+ },
+ {
+ "id": "l",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 120,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "m",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 240,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "n",
+ "type": "rectangle",
+ "classes": [
+ "empty"
+ ],
+ "pos": {
+ "x": 360,
+ "y": 200
+ },
+ "width": 100,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 0,
+ "fill": "transparent",
+ "stroke": "transparent",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "",
+ "fontSize": 16,
+ "fontFamily": "DEFAULT",
+ "language": "",
+ "color": "N1",
+ "italic": false,
+ "bold": true,
+ "underline": false,
+ "labelWidth": 0,
+ "labelHeight": 0,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ },
+ {
+ "id": "o",
+ "type": "rectangle",
+ "classes": [
+ "text",
+ "blue"
+ ],
+ "pos": {
+ "x": 480,
+ "y": 200
+ },
+ "width": 120,
+ "height": 60,
+ "opacity": 1,
+ "strokeDash": 0,
+ "strokeWidth": 2,
+ "borderRadius": 10,
+ "fill": "#0033cc",
+ "stroke": "#0033cc",
+ "shadow": false,
+ "3d": false,
+ "multiple": false,
+ "double-border": false,
+ "tooltip": "",
+ "link": "",
+ "icon": null,
+ "iconPosition": "",
+ "blend": false,
+ "fields": null,
+ "methods": null,
+ "columns": null,
+ "label": "forge\ndeploy",
+ "fontSize": 10,
+ "fontFamily": "mono",
+ "language": "",
+ "color": "white",
+ "italic": false,
+ "bold": false,
+ "underline": false,
+ "labelWidth": 36,
+ "labelHeight": 23,
+ "labelPosition": "INSIDE_MIDDLE_CENTER",
+ "zIndex": 0,
+ "level": 1
+ }
+ ],
+ "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
+ }
+}
diff --git a/e2etests/testdata/stable/simple_grid_edges/elk/sketch.exp.svg b/e2etests/testdata/stable/simple_grid_edges/elk/sketch.exp.svg
new file mode 100644
index 000000000..458a96dfc
--- /dev/null
+++ b/e2etests/testdata/stable/simple_grid_edges/elk/sketch.exp.svg
@@ -0,0 +1,114 @@
+npm i -g@forge/cliSet up anAtlassian siteView the helloworld appforgetunnelforgeloginforgecreateforgedeployforgeinstallHot reloadchanges?forgedeploy⬤ Forge CLI⬤ Required⬤ Optional
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file