diff --git a/d2layouts/d2dagrelayout/layout.go b/d2layouts/d2dagrelayout/layout.go index b6dd281ad..3b6885bf8 100644 --- a/d2layouts/d2dagrelayout/layout.go +++ b/d2layouts/d2dagrelayout/layout.go @@ -150,7 +150,7 @@ func Layout(ctx context.Context, g *d2graph.Graph) (err error) { if obj.LabelWidth != nil && obj.LabelHeight != nil { if len(obj.ChildrenArray) > 0 { obj.LabelPosition = go2.Pointer(string(label.InsideTopCenter)) - } else if obj.Attributes.Shape.Value == d2target.ShapeImage { + } else if obj.Attributes.Shape.Value == d2target.ShapeImage || obj.Attributes.Icon != nil { obj.LabelPosition = go2.Pointer(string(label.OutsideTopCenter)) } else { obj.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter)) diff --git a/d2layouts/d2elklayout/layout.go b/d2layouts/d2elklayout/layout.go index 94a0e7ebd..2449a9751 100644 --- a/d2layouts/d2elklayout/layout.go +++ b/d2layouts/d2elklayout/layout.go @@ -247,7 +247,7 @@ func Layout(ctx context.Context, g *d2graph.Graph) (err error) { if obj.LabelWidth != nil && obj.LabelHeight != nil { if len(obj.ChildrenArray) > 0 { obj.LabelPosition = go2.Pointer(string(label.InsideTopCenter)) - } else if obj.Attributes.Shape.Value == d2target.ShapeImage { + } else if obj.Attributes.Shape.Value == d2target.ShapeImage || obj.Attributes.Icon != nil { obj.LabelPosition = go2.Pointer(string(label.OutsideTopCenter)) } else { obj.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter)) diff --git a/e2etests/stable_test.go b/e2etests/stable_test.go index 2b3451fb9..306838bd4 100644 --- a/e2etests/stable_test.go +++ b/e2etests/stable_test.go @@ -1222,7 +1222,7 @@ foo baz -> hello script: `shape: sequence_diagram a: "a label" { - shape: callout + shape: callout } b: "b\nlabels" { shape: circle @@ -1233,7 +1233,7 @@ c: "a class" { -private() int } d: "cloudyyyy" { - shape: cloud + shape: cloud } e: |go a := 5 @@ -1241,47 +1241,47 @@ e: |go fmt.Printf("%d", b) | f: "cyl" { - shape: cylinder + shape: cylinder } g: "dia" { - shape: diamond + shape: diamond } h: "docs" { - shape: document + shape: document } i: "six corners" { - shape: hexagon + shape: hexagon } j: "a random icon" { shape: image icon: https://icons.terrastruct.com/essentials/004-picture.svg } k: "over" { - shape: oval + shape: oval } l: "pack" { - shape: package + shape: package } m: "docs page" { - shape: page + shape: page } n: "too\nhard\to say" { - shape: parallelogram + shape: parallelogram } o: "single\nperson" { - shape: person + shape: person } p: "a queue" { - shape: queue + shape: queue } q: "a square" { - shape: square + shape: square } r: "a step at a time" { - shape: step + shape: step } s: "data" { - shape: stored_data + shape: stored_data } t: "users" { @@ -1324,6 +1324,14 @@ s -> t`, script: `x -> x -> x -> y z -> y z -> z: hello +`, + }, + { + name: "icon-label", + script: `ww: { + label: hello + icon: https://icons.terrastruct.com/essentials/time.svg +} `, }, } diff --git a/e2etests/testdata/stable/icon-label/dagre/board.exp.json b/e2etests/testdata/stable/icon-label/dagre/board.exp.json new file mode 100644 index 000000000..904236370 --- /dev/null +++ b/e2etests/testdata/stable/icon-label/dagre/board.exp.json @@ -0,0 +1,56 @@ +{ + "name": "", + "shapes": [ + { + "id": "ww", + "type": "", + "pos": { + "x": 0, + "y": 0 + }, + "width": 140, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/essentials/time.svg", + "RawPath": "", + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "fields": null, + "methods": null, + "columns": null, + "label": "hello", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 40, + "labelHeight": 26, + "labelPosition": "OUTSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [] +} diff --git a/e2etests/testdata/stable/icon-label/dagre/sketch.exp.svg b/e2etests/testdata/stable/icon-label/dagre/sketch.exp.svg new file mode 100644 index 000000000..8c106d59b --- /dev/null +++ b/e2etests/testdata/stable/icon-label/dagre/sketch.exp.svg @@ -0,0 +1,24 @@ + +hello \ No newline at end of file diff --git a/e2etests/testdata/stable/icon-label/elk/board.exp.json b/e2etests/testdata/stable/icon-label/elk/board.exp.json new file mode 100644 index 000000000..69239466c --- /dev/null +++ b/e2etests/testdata/stable/icon-label/elk/board.exp.json @@ -0,0 +1,56 @@ +{ + "name": "", + "shapes": [ + { + "id": "ww", + "type": "", + "pos": { + "x": 12, + "y": 12 + }, + "width": 140, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#F7F8FE", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": { + "Scheme": "https", + "Opaque": "", + "User": null, + "Host": "icons.terrastruct.com", + "Path": "/essentials/time.svg", + "RawPath": "", + "ForceQuery": false, + "RawQuery": "", + "Fragment": "", + "RawFragment": "" + }, + "iconPosition": "INSIDE_MIDDLE_CENTER", + "fields": null, + "methods": null, + "columns": null, + "label": "hello", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 40, + "labelHeight": 26, + "labelPosition": "OUTSIDE_TOP_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [] +} diff --git a/e2etests/testdata/stable/icon-label/elk/sketch.exp.svg b/e2etests/testdata/stable/icon-label/elk/sketch.exp.svg new file mode 100644 index 000000000..666ab0135 --- /dev/null +++ b/e2etests/testdata/stable/icon-label/elk/sketch.exp.svg @@ -0,0 +1,24 @@ + +hello \ No newline at end of file diff --git a/e2etests/testdata/stable/investigate/dagre/board.exp.json b/e2etests/testdata/stable/investigate/dagre/board.exp.json index d175c156a..7867b18b2 100644 --- a/e2etests/testdata/stable/investigate/dagre/board.exp.json +++ b/e2etests/testdata/stable/investigate/dagre/board.exp.json @@ -476,7 +476,7 @@ "underline": false, "labelWidth": 31, "labelHeight": 26, - "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPosition": "OUTSIDE_TOP_CENTER", "zIndex": 0, "level": 1 }, @@ -565,7 +565,7 @@ "underline": false, "labelWidth": 20, "labelHeight": 26, - "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPosition": "OUTSIDE_TOP_CENTER", "zIndex": 0, "level": 2 }, diff --git a/e2etests/testdata/stable/investigate/dagre/sketch.exp.svg b/e2etests/testdata/stable/investigate/dagre/sketch.exp.svg index 28f10d6c7..1fa552280 100644 --- a/e2etests/testdata/stable/investigate/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/investigate/dagre/sketch.exp.svg @@ -14,7 +14,7 @@ width="1011" height="4426" viewBox="-100 -100 1011 4426">aabbccddllffwwyynniijjkkssuurmeemmmmgghhzzooppqqrrttvvxxabac +aabbccddllffwwyynniijjkkssuurmeemmmmgghhzzooppqqrrttvvxxabac 1 diff --git a/e2etests/testdata/stable/investigate/elk/board.exp.json b/e2etests/testdata/stable/investigate/elk/board.exp.json index f01c5d9b1..a037d9fbe 100644 --- a/e2etests/testdata/stable/investigate/elk/board.exp.json +++ b/e2etests/testdata/stable/investigate/elk/board.exp.json @@ -476,7 +476,7 @@ "underline": false, "labelWidth": 31, "labelHeight": 26, - "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPosition": "OUTSIDE_TOP_CENTER", "zIndex": 0, "level": 1 }, @@ -565,7 +565,7 @@ "underline": false, "labelWidth": 20, "labelHeight": 26, - "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPosition": "OUTSIDE_TOP_CENTER", "zIndex": 0, "level": 2 }, diff --git a/e2etests/testdata/stable/investigate/elk/sketch.exp.svg b/e2etests/testdata/stable/investigate/elk/sketch.exp.svg index 828f96556..6bf6cda3a 100644 --- a/e2etests/testdata/stable/investigate/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/investigate/elk/sketch.exp.svg @@ -14,7 +14,7 @@ width="860" height="4868" viewBox="-82 -88 860 4868">aabbccddllffwwyynniijjkkssuurmeemmmmgghhzzooppqqrrttvvxxabac +aabbccddllffwwyynniijjkkssuurmeemmmmgghhzzooppqqrrttvvxxabac 1