diff --git a/d2layouts/d2sequence/constants.go b/d2layouts/d2sequence/constants.go index a29578d5a..95de80681 100644 --- a/d2layouts/d2sequence/constants.go +++ b/d2layouts/d2sequence/constants.go @@ -6,7 +6,7 @@ const HORIZONTAL_PAD = 50. // leaves at least 25 units of space on the top/bottom when computing the space required between messages const VERTICAL_PAD = 50. -const MIN_ACTOR_DISTANCE = 70. +const MIN_ACTOR_DISTANCE = 250. const MIN_ACTOR_WIDTH = 150. diff --git a/d2layouts/d2sequence/sequence_diagram.go b/d2layouts/d2sequence/sequence_diagram.go index 277474be5..feedea323 100644 --- a/d2layouts/d2sequence/sequence_diagram.go +++ b/d2layouts/d2sequence/sequence_diagram.go @@ -32,6 +32,10 @@ type sequenceDiagram struct { firstMessage map[*d2graph.Object]*d2graph.Edge lastMessage map[*d2graph.Object]*d2graph.Edge + // the distance from actor[i] center to actor[i+1] center + // every neighbor actors need different distances depending on the message labels between them + actorXStep []float64 + yStep float64 maxActorHeight float64 @@ -72,9 +76,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se curr := queue[0] groups = append(groups, curr) queue = queue[1:] - for _, c := range curr.ChildrenArray { - queue = append(queue, c) - } + queue = append(queue, curr.ChildrenArray...) } } else { actors = append(actors, obj) @@ -91,6 +93,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se objectRank: make(map[*d2graph.Object]int), firstMessage: make(map[*d2graph.Object]*d2graph.Edge), lastMessage: make(map[*d2graph.Object]*d2graph.Edge), + actorXStep: make([]float64, len(actors)-1), yStep: MIN_MESSAGE_DISTANCE, maxActorHeight: 0., verticalIndices: make(map[string]int), @@ -107,6 +110,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se queue := make([]*d2graph.Object, len(actor.ChildrenArray)) copy(queue, actor.ChildrenArray) + maxNoteWidth := 0. for len(queue) > 0 { child := queue[0] queue = queue[1:] @@ -120,6 +124,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se sd.notes = append(sd.notes, child) sd.objectRank[child] = rank child.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter)) + maxNoteWidth = math.Max(maxNoteWidth, child.Width) } else { // spans have no labels // TODO why not? Spans should be able to @@ -131,12 +136,29 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se queue = append(queue, child.ChildrenArray...) } + + if rank != len(actors)-1 { + actorHW := actor.Width / 2. + nextActorHW := actors[rank+1].Width / 2. + sd.actorXStep[rank] = math.Max(actorHW+nextActorHW+HORIZONTAL_PAD, MIN_ACTOR_DISTANCE) + sd.actorXStep[rank] = math.Max(maxNoteWidth/2.+HORIZONTAL_PAD, sd.actorXStep[rank]) + } } for _, message := range sd.messages { sd.verticalIndices[message.AbsID()] = getEdgeEarliestLineNum(message) sd.yStep = math.Max(sd.yStep, float64(message.LabelDimensions.Height)) + // ensures that long labels, spanning over multiple actors, don't make for large gaps between actors + // by distributing the label length across the actors rank difference + rankDiff := math.Abs(float64(sd.objectRank[message.Src]) - float64(sd.objectRank[message.Dst])) + if rankDiff != 0 { + // rankDiff = 0 for self edges + distributedLabelWidth := float64(message.LabelDimensions.Width) / rankDiff + for rank := sd.objectRank[message.Src]; rank <= sd.objectRank[message.Dst]-1; rank++ { + sd.actorXStep[rank] = math.Max(sd.actorXStep[rank], distributedLabelWidth+HORIZONTAL_PAD) + } + } sd.lastMessage[message.Src] = message if _, exists := sd.firstMessage[message.Src]; !exists { sd.firstMessage[message.Src] = message @@ -242,10 +264,10 @@ func (sd *sequenceDiagram) placeGroup(group *d2graph.Object) { ) } -// placeActors places actors bottom aligned, side by side +// placeActors places actors bottom aligned, side by side with centers spaced by sd.actorXStep func (sd *sequenceDiagram) placeActors() { - x := 0. - for _, actor := range sd.actors { + centerX := sd.actors[0].Width / 2. + for rank, actor := range sd.actors { shape := actor.Attributes.Shape.Value var yOffset float64 if shape == d2target.ShapeImage || shape == d2target.ShapePerson { @@ -258,8 +280,11 @@ func (sd *sequenceDiagram) placeActors() { actor.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter)) yOffset = sd.maxActorHeight - actor.Height } - actor.TopLeft = geo.NewPoint(x, yOffset) - x += actor.Width + MIN_ACTOR_DISTANCE + halfWidth := actor.Width / 2. + actor.TopLeft = geo.NewPoint(math.Round(centerX-halfWidth), yOffset) + if rank != len(sd.actors)-1 { + centerX += sd.actorXStep[rank] + } } } diff --git a/e2etests/stable_test.go b/e2etests/stable_test.go index a577ccc18..22d6b86ec 100644 --- a/e2etests/stable_test.go +++ b/e2etests/stable_test.go @@ -1451,6 +1451,27 @@ c: "just an actor" d2exporter.export -> CLI: resulting SVG } `, + }, { + name: "sequence_diagram_actor_distance", + script: `shape: sequence_diagram +a: "an actor with a really long label that will break everything" +c: "an\nactor\nwith\na\nreally\nlong\nlabel\nthat\nwill\nbreak\neverything" +d: "simple" +e: "a short one" +b: "far away" +f: "what if there were no labels between this actor and the previous one" +a -> b: "short" +a -> b: "long label for testing purposes and it must be really, really long" +c -> d: "short" +a -> d: "this should span many actors lifelines so we know how it will look like when redering a long label over many actors" +d -> e: "long label for testing purposes and it must be really, really long" +a -> f`, + }, { + name: "sequence_diagram_long_note", + script: `shape: sequence_diagram +a -> b +b.note: "a note here to remember that padding must consider notes too" +a.note: "just\na\nlong\nnote\nhere"`, }, } diff --git a/e2etests/testdata/stable/sequence_diagram_actor_distance/dagre/board.exp.json b/e2etests/testdata/stable/sequence_diagram_actor_distance/dagre/board.exp.json new file mode 100644 index 000000000..775f8b93e --- /dev/null +++ b/e2etests/testdata/stable/sequence_diagram_actor_distance/dagre/board.exp.json @@ -0,0 +1,715 @@ +{ + "name": "", + "shapes": [ + { + "id": "a", + "type": "", + "pos": { + "x": 0, + "y": 210 + }, + "width": 487, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "an actor with a really long label that will break everything", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 387, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "c", + "type": "", + "pos": { + "x": 578, + "y": 50 + }, + "width": 177, + "height": 286, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "an\nactor\nwith\na\nreally\nlong\nlabel\nthat\nwill\nbreak\neverything", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 77, + "labelHeight": 186, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "d", + "type": "", + "pos": { + "x": 1014, + "y": 210 + }, + "width": 150, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "simple", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 50, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "e", + "type": "", + "pos": { + "x": 1460, + "y": 210 + }, + "width": 180, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a short one", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 80, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "b", + "type": "", + "pos": { + "x": 1718, + "y": 210 + }, + "width": 163, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "far away", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 63, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "f", + "type": "", + "pos": { + "x": 1931, + "y": 210 + }, + "width": 561, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "what if there were no labels between this actor and the previous one", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 461, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(a -> b)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "short", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 36, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 466 + }, + { + "x": 1799.5, + "y": 466 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> b)[1]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "long label for testing purposes and it must be really, really long", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 411, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 596 + }, + { + "x": 1799.5, + "y": 596 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(c -> d)[0]", + "src": "c", + "srcArrow": "none", + "srcLabel": "", + "dst": "d", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "short", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 36, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 666.5, + "y": 726 + }, + { + "x": 1089, + "y": 726 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> d)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "d", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "this should span many actors lifelines so we know how it will look like when redering a long label over many actors", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 745, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 856 + }, + { + "x": 1089, + "y": 856 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(d -> e)[0]", + "src": "d", + "srcArrow": "none", + "srcLabel": "", + "dst": "e", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "long label for testing purposes and it must be really, really long", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 411, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 1089, + "y": 986 + }, + { + "x": 1550, + "y": 986 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> f)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "f", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 1116 + }, + { + "x": 2211.5, + "y": 1116 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -- )[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "a-lifeline-end-2251863791", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 336 + }, + { + "x": 243.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(c -- )[0]", + "src": "c", + "srcArrow": "none", + "srcLabel": "", + "dst": "c-lifeline-end-955173837", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 666.5, + "y": 336 + }, + { + "x": 666.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(d -- )[0]", + "src": "d", + "srcArrow": "none", + "srcLabel": "", + "dst": "d-lifeline-end-2106864010", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1089, + "y": 336 + }, + { + "x": 1089, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(e -- )[0]", + "src": "e", + "srcArrow": "none", + "srcLabel": "", + "dst": "e-lifeline-end-2214352275", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1550, + "y": 336 + }, + { + "x": 1550, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(b -- )[0]", + "src": "b", + "srcArrow": "none", + "srcLabel": "", + "dst": "b-lifeline-end-668380428", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1799.5, + "y": 336 + }, + { + "x": 1799.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(f -- )[0]", + "src": "f", + "srcArrow": "none", + "srcLabel": "", + "dst": "f-lifeline-end-865917984", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 2211.5, + "y": 336 + }, + { + "x": 2211.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + } + ] +} diff --git a/e2etests/testdata/stable/sequence_diagram_actor_distance/dagre/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_actor_distance/dagre/sketch.exp.svg new file mode 100644 index 000000000..a2518e2ba --- /dev/null +++ b/e2etests/testdata/stable/sequence_diagram_actor_distance/dagre/sketch.exp.svg @@ -0,0 +1,42 @@ + +an actor with a really long label that will break everythinganactorwithareallylonglabelthatwillbreakeverythingsimplea short onefar awaywhat if there were no labels between this actor and the previous one shortlong label for testing purposes and it must be really, really longshortthis should span many actors lifelines so we know how it will look like when redering a long label over many actorslong label for testing purposes and it must be really, really long + + + + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/sequence_diagram_actor_distance/elk/board.exp.json b/e2etests/testdata/stable/sequence_diagram_actor_distance/elk/board.exp.json new file mode 100644 index 000000000..775f8b93e --- /dev/null +++ b/e2etests/testdata/stable/sequence_diagram_actor_distance/elk/board.exp.json @@ -0,0 +1,715 @@ +{ + "name": "", + "shapes": [ + { + "id": "a", + "type": "", + "pos": { + "x": 0, + "y": 210 + }, + "width": 487, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "an actor with a really long label that will break everything", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 387, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "c", + "type": "", + "pos": { + "x": 578, + "y": 50 + }, + "width": 177, + "height": 286, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "an\nactor\nwith\na\nreally\nlong\nlabel\nthat\nwill\nbreak\neverything", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 77, + "labelHeight": 186, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "d", + "type": "", + "pos": { + "x": 1014, + "y": 210 + }, + "width": 150, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "simple", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 50, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "e", + "type": "", + "pos": { + "x": 1460, + "y": 210 + }, + "width": 180, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a short one", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 80, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "b", + "type": "", + "pos": { + "x": 1718, + "y": 210 + }, + "width": 163, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "far away", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 63, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "f", + "type": "", + "pos": { + "x": 1931, + "y": 210 + }, + "width": 561, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "what if there were no labels between this actor and the previous one", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 461, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(a -> b)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "short", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 36, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 466 + }, + { + "x": 1799.5, + "y": 466 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> b)[1]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "long label for testing purposes and it must be really, really long", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 411, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 596 + }, + { + "x": 1799.5, + "y": 596 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(c -> d)[0]", + "src": "c", + "srcArrow": "none", + "srcLabel": "", + "dst": "d", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "short", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 36, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 666.5, + "y": 726 + }, + { + "x": 1089, + "y": 726 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> d)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "d", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "this should span many actors lifelines so we know how it will look like when redering a long label over many actors", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 745, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 856 + }, + { + "x": 1089, + "y": 856 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(d -> e)[0]", + "src": "d", + "srcArrow": "none", + "srcLabel": "", + "dst": "e", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "long label for testing purposes and it must be really, really long", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 411, + "labelHeight": 21, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "labelPercentage": 0, + "route": [ + { + "x": 1089, + "y": 986 + }, + { + "x": 1550, + "y": 986 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> f)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "f", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 1116 + }, + { + "x": 2211.5, + "y": 1116 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -- )[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "a-lifeline-end-2251863791", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 243.5, + "y": 336 + }, + { + "x": 243.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(c -- )[0]", + "src": "c", + "srcArrow": "none", + "srcLabel": "", + "dst": "c-lifeline-end-955173837", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 666.5, + "y": 336 + }, + { + "x": 666.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(d -- )[0]", + "src": "d", + "srcArrow": "none", + "srcLabel": "", + "dst": "d-lifeline-end-2106864010", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1089, + "y": 336 + }, + { + "x": 1089, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(e -- )[0]", + "src": "e", + "srcArrow": "none", + "srcLabel": "", + "dst": "e-lifeline-end-2214352275", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1550, + "y": 336 + }, + { + "x": 1550, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(b -- )[0]", + "src": "b", + "srcArrow": "none", + "srcLabel": "", + "dst": "b-lifeline-end-668380428", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 1799.5, + "y": 336 + }, + { + "x": 1799.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(f -- )[0]", + "src": "f", + "srcArrow": "none", + "srcLabel": "", + "dst": "f-lifeline-end-865917984", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 2211.5, + "y": 336 + }, + { + "x": 2211.5, + "y": 1246 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + } + ] +} diff --git a/e2etests/testdata/stable/sequence_diagram_actor_distance/elk/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_actor_distance/elk/sketch.exp.svg new file mode 100644 index 000000000..a2518e2ba --- /dev/null +++ b/e2etests/testdata/stable/sequence_diagram_actor_distance/elk/sketch.exp.svg @@ -0,0 +1,42 @@ + +an actor with a really long label that will break everythinganactorwithareallylonglabelthatwillbreakeverythingsimplea short onefar awaywhat if there were no labels between this actor and the previous one shortlong label for testing purposes and it must be really, really longshortthis should span many actors lifelines so we know how it will look like when redering a long label over many actorslong label for testing purposes and it must be really, really long + + + + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/board.exp.json b/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/board.exp.json index 590f243d9..8e0bfe6a8 100644 --- a/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/board.exp.json +++ b/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/board.exp.json @@ -45,7 +45,7 @@ "id": "b", "type": "oval", "pos": { - "x": 220, + "x": 257, "y": 90 }, "width": 150, @@ -85,7 +85,7 @@ "id": "c", "type": "class", "pos": { - "x": 440, + "x": 462, "y": 50 }, "width": 241, @@ -136,7 +136,7 @@ "id": "d", "type": "cloud", "pos": { - "x": 751, + "x": 753, "y": 108 }, "width": 174, @@ -176,7 +176,7 @@ "id": "e", "type": "code", "pos": { - "x": 995, + "x": 992, "y": 164 }, "width": 196, @@ -216,7 +216,7 @@ "id": "f", "type": "cylinder", "pos": { - "x": 1261, + "x": 1265, "y": 108 }, "width": 150, @@ -256,7 +256,7 @@ "id": "g", "type": "diamond", "pos": { - "x": 1481, + "x": 1515, "y": 108 }, "width": 150, @@ -296,7 +296,7 @@ "id": "h", "type": "document", "pos": { - "x": 1701, + "x": 1765, "y": 108 }, "width": 150, @@ -336,7 +336,7 @@ "id": "i", "type": "hexagon", "pos": { - "x": 1921, + "x": 2001, "y": 108 }, "width": 177, @@ -376,7 +376,7 @@ "id": "j", "type": "image", "pos": { - "x": 2168, + "x": 2265, "y": 85 }, "width": 150, @@ -427,7 +427,7 @@ "id": "k", "type": "oval", "pos": { - "x": 2388, + "x": 2515, "y": 108 }, "width": 150, @@ -467,7 +467,7 @@ "id": "l", "type": "package", "pos": { - "x": 2608, + "x": 2765, "y": 108 }, "width": 150, @@ -507,7 +507,7 @@ "id": "m", "type": "page", "pos": { - "x": 2828, + "x": 3003, "y": 108 }, "width": 173, @@ -547,7 +547,7 @@ "id": "n", "type": "parallelogram", "pos": { - "x": 3071, + "x": 3251, "y": 92 }, "width": 177, @@ -587,7 +587,7 @@ "id": "o", "type": "person", "pos": { - "x": 3318, + "x": 3514, "y": 55 }, "width": 151, @@ -627,7 +627,7 @@ "id": "p", "type": "queue", "pos": { - "x": 3539, + "x": 3760, "y": 108 }, "width": 159, @@ -667,7 +667,7 @@ "id": "q", "type": "rectangle", "pos": { - "x": 3768, + "x": 4008, "y": 71 }, "width": 163, @@ -707,7 +707,7 @@ "id": "r", "type": "step", "pos": { - "x": 4001, + "x": 4236, "y": 108 }, "width": 207, @@ -747,7 +747,7 @@ "id": "s", "type": "stored_data", "pos": { - "x": 4278, + "x": 4515, "y": 108 }, "width": 150, @@ -787,7 +787,7 @@ "id": "t", "type": "sql_table", "pos": { - "x": 4498, + "x": 4735, "y": 126 }, "width": 210, @@ -868,7 +868,7 @@ "y": 364 }, { - "x": 295, + "x": 332, "y": 364 } ], @@ -903,11 +903,11 @@ "labelPercentage": 0, "route": [ { - "x": 295, + "x": 332, "y": 494 }, { - "x": 560.5, + "x": 582.5, "y": 494 } ], @@ -942,11 +942,11 @@ "labelPercentage": 0, "route": [ { - "x": 560.5, + "x": 582.5, "y": 624 }, { - "x": 838, + "x": 840, "y": 624 } ], @@ -981,11 +981,11 @@ "labelPercentage": 0, "route": [ { - "x": 838, + "x": 840, "y": 754 }, { - "x": 1093, + "x": 1090, "y": 754 } ], @@ -1020,11 +1020,11 @@ "labelPercentage": 0, "route": [ { - "x": 1093, + "x": 1090, "y": 884 }, { - "x": 1336, + "x": 1340, "y": 884 } ], @@ -1059,11 +1059,11 @@ "labelPercentage": 0, "route": [ { - "x": 1336, + "x": 1340, "y": 1014 }, { - "x": 1556, + "x": 1590, "y": 1014 } ], @@ -1098,11 +1098,11 @@ "labelPercentage": 0, "route": [ { - "x": 1556, + "x": 1590, "y": 1144 }, { - "x": 1776, + "x": 1840, "y": 1144 } ], @@ -1137,11 +1137,11 @@ "labelPercentage": 0, "route": [ { - "x": 1776, + "x": 1840, "y": 1274 }, { - "x": 2009.5, + "x": 2089.5, "y": 1274 } ], @@ -1176,11 +1176,11 @@ "labelPercentage": 0, "route": [ { - "x": 2009.5, + "x": 2089.5, "y": 1404 }, { - "x": 2243, + "x": 2340, "y": 1404 } ], @@ -1215,11 +1215,11 @@ "labelPercentage": 0, "route": [ { - "x": 2243, + "x": 2340, "y": 1534 }, { - "x": 2463, + "x": 2590, "y": 1534 } ], @@ -1254,11 +1254,11 @@ "labelPercentage": 0, "route": [ { - "x": 2463, + "x": 2590, "y": 1664 }, { - "x": 2683, + "x": 2840, "y": 1664 } ], @@ -1293,11 +1293,11 @@ "labelPercentage": 0, "route": [ { - "x": 2683, + "x": 2840, "y": 1794 }, { - "x": 2914.5, + "x": 3089.5, "y": 1794 } ], @@ -1332,11 +1332,11 @@ "labelPercentage": 0, "route": [ { - "x": 2914.5, + "x": 3089.5, "y": 1924 }, { - "x": 3159.5, + "x": 3339.5, "y": 1924 } ], @@ -1371,11 +1371,11 @@ "labelPercentage": 0, "route": [ { - "x": 3159.5, + "x": 3339.5, "y": 2054 }, { - "x": 3393.5, + "x": 3589.5, "y": 2054 } ], @@ -1410,11 +1410,11 @@ "labelPercentage": 0, "route": [ { - "x": 3393.5, + "x": 3589.5, "y": 2184 }, { - "x": 3618.5, + "x": 3839.5, "y": 2184 } ], @@ -1449,11 +1449,11 @@ "labelPercentage": 0, "route": [ { - "x": 3618.5, + "x": 3839.5, "y": 2314 }, { - "x": 3849.5, + "x": 4089.5, "y": 2314 } ], @@ -1488,11 +1488,11 @@ "labelPercentage": 0, "route": [ { - "x": 3849.5, + "x": 4089.5, "y": 2444 }, { - "x": 4104.5, + "x": 4339.5, "y": 2444 } ], @@ -1527,11 +1527,11 @@ "labelPercentage": 0, "route": [ { - "x": 4104.5, + "x": 4339.5, "y": 2574 }, { - "x": 4353, + "x": 4590, "y": 2574 } ], @@ -1566,11 +1566,11 @@ "labelPercentage": 0, "route": [ { - "x": 4353, + "x": 4590, "y": 2704 }, { - "x": 4603, + "x": 4840, "y": 2704 } ], @@ -1644,11 +1644,11 @@ "labelPercentage": 0, "route": [ { - "x": 295, + "x": 332, "y": 234 }, { - "x": 295, + "x": 332, "y": 2834 } ], @@ -1683,11 +1683,11 @@ "labelPercentage": 0, "route": [ { - "x": 560.5, + "x": 582.5, "y": 234 }, { - "x": 560.5, + "x": 582.5, "y": 2834 } ], @@ -1722,11 +1722,11 @@ "labelPercentage": 0, "route": [ { - "x": 838, + "x": 840, "y": 234 }, { - "x": 838, + "x": 840, "y": 2834 } ], @@ -1761,11 +1761,11 @@ "labelPercentage": 0, "route": [ { - "x": 1093, + "x": 1090, "y": 234 }, { - "x": 1093, + "x": 1090, "y": 2834 } ], @@ -1800,11 +1800,11 @@ "labelPercentage": 0, "route": [ { - "x": 1336, + "x": 1340, "y": 234 }, { - "x": 1336, + "x": 1340, "y": 2834 } ], @@ -1839,11 +1839,11 @@ "labelPercentage": 0, "route": [ { - "x": 1556, + "x": 1590, "y": 234 }, { - "x": 1556, + "x": 1590, "y": 2834 } ], @@ -1878,11 +1878,11 @@ "labelPercentage": 0, "route": [ { - "x": 1776, + "x": 1840, "y": 234 }, { - "x": 1776, + "x": 1840, "y": 2834 } ], @@ -1917,11 +1917,11 @@ "labelPercentage": 0, "route": [ { - "x": 2009.5, + "x": 2089.5, "y": 234 }, { - "x": 2009.5, + "x": 2089.5, "y": 2834 } ], @@ -1956,11 +1956,11 @@ "labelPercentage": 0, "route": [ { - "x": 2243, + "x": 2340, "y": 239 }, { - "x": 2243, + "x": 2340, "y": 2834 } ], @@ -1995,11 +1995,11 @@ "labelPercentage": 0, "route": [ { - "x": 2463, + "x": 2590, "y": 234 }, { - "x": 2463, + "x": 2590, "y": 2834 } ], @@ -2034,11 +2034,11 @@ "labelPercentage": 0, "route": [ { - "x": 2683, + "x": 2840, "y": 234 }, { - "x": 2683, + "x": 2840, "y": 2834 } ], @@ -2073,11 +2073,11 @@ "labelPercentage": 0, "route": [ { - "x": 2914.5, + "x": 3089.5, "y": 234 }, { - "x": 2914.5, + "x": 3089.5, "y": 2834 } ], @@ -2112,11 +2112,11 @@ "labelPercentage": 0, "route": [ { - "x": 3159.5, + "x": 3339.5, "y": 234 }, { - "x": 3159.5, + "x": 3339.5, "y": 2834 } ], @@ -2151,11 +2151,11 @@ "labelPercentage": 0, "route": [ { - "x": 3393.5, + "x": 3589.5, "y": 239 }, { - "x": 3393.5, + "x": 3589.5, "y": 2834 } ], @@ -2190,11 +2190,11 @@ "labelPercentage": 0, "route": [ { - "x": 3618.5, + "x": 3839.5, "y": 234 }, { - "x": 3618.5, + "x": 3839.5, "y": 2834 } ], @@ -2229,11 +2229,11 @@ "labelPercentage": 0, "route": [ { - "x": 3849.5, + "x": 4089.5, "y": 234 }, { - "x": 3849.5, + "x": 4089.5, "y": 2834 } ], @@ -2268,11 +2268,11 @@ "labelPercentage": 0, "route": [ { - "x": 4104.5, + "x": 4339.5, "y": 234 }, { - "x": 4104.5, + "x": 4339.5, "y": 2834 } ], @@ -2307,11 +2307,11 @@ "labelPercentage": 0, "route": [ { - "x": 4353, + "x": 4590, "y": 234 }, { - "x": 4353, + "x": 4590, "y": 2834 } ], @@ -2346,11 +2346,11 @@ "labelPercentage": 0, "route": [ { - "x": 4603, + "x": 4840, "y": 234 }, { - "x": 4603, + "x": 4840, "y": 2834 } ], diff --git a/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/sketch.exp.svg index da326d978..ed0985a85 100644 --- a/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/sketch.exp.svg @@ -2,7 +2,7 @@ a labelblabelsa class+ +public() bool +void- +private() int +voidcloudyyyy:= 5 := a + 7 -fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid -int -name -varchar - result := callThisFunction(obj, 5) midthis sideother side - - - +fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid +int +name +varchar + result := callThisFunction(obj, 5) midthis sideother side + + + a labelblabelsa class+ -public() bool -void- -private() int -voidcloudyyyy:= 5 +a labelblabelsa class+ +public() bool +void- +private() int +voidcloudyyyy:= 5 := a + 7 -fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid -int -name -varchar - result := callThisFunction(obj, 5) midthis sideother side - - - +fmt.Printf("%d", b)cyldiadocssix cornersa random iconoverpackdocs pagetoohard o saysinglepersona queuea squarea step at a timedatausersid +int +name +varchar + result := callThisFunction(obj, 5) midthis sideother side + + + abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note - - - - - +abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note + + + + + abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note - - - - - +abcdggggroup 1group bchoonested guy lalaeyokayokaywhat would arnold saythis note + + + + + ba a note here to remember that padding must consider notes toojustalongnotehere \ No newline at end of file diff --git a/e2etests/testdata/stable/sequence_diagram_long_note/elk/board.exp.json b/e2etests/testdata/stable/sequence_diagram_long_note/elk/board.exp.json new file mode 100644 index 000000000..c34da0a7d --- /dev/null +++ b/e2etests/testdata/stable/sequence_diagram_long_note/elk/board.exp.json @@ -0,0 +1,284 @@ +{ + "name": "", + "shapes": [ + { + "id": "b", + "type": "", + "pos": { + "x": 0, + "y": 50 + }, + "width": 150, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 13, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "b.note", + "type": "rectangle", + "pos": { + "x": -187, + "y": 436 + }, + "width": 525, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#FFFFFF", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a note here to remember that padding must consider notes too", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 425, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 5, + "level": 2 + }, + { + "id": "a", + "type": "", + "pos": { + "x": 313, + "y": 50 + }, + "width": 150, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 12, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "a.note", + "type": "rectangle", + "pos": { + "x": 319, + "y": 692 + }, + "width": 137, + "height": 190, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#FFFFFF", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "just\na\nlong\nnote\nhere", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 37, + "labelHeight": 90, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 5, + "level": 2 + } + ], + "connections": [ + { + "id": "(a -> b)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 388, + "y": 306 + }, + { + "x": 75, + "y": 306 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(b -- )[0]", + "src": "b", + "srcArrow": "none", + "srcLabel": "", + "dst": "b-lifeline-end-668380428", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 75, + "y": 176 + }, + { + "x": 75, + "y": 1012 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(a -- )[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "a-lifeline-end-2251863791", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 388, + "y": 176 + }, + { + "x": 388, + "y": 1012 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + } + ] +} diff --git a/e2etests/testdata/stable/sequence_diagram_long_note/elk/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_long_note/elk/sketch.exp.svg new file mode 100644 index 000000000..2f7c49368 --- /dev/null +++ b/e2etests/testdata/stable/sequence_diagram_long_note/elk/sketch.exp.svg @@ -0,0 +1,28 @@ + +ba a note here to remember that padding must consider notes toojustalongnotehere \ No newline at end of file diff --git a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json index 8186c7b98..fee70ce79 100644 --- a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json +++ b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/board.exp.json @@ -8,7 +8,7 @@ "x": -121, "y": 266 }, - "width": 562, + "width": 592, "height": 952, "opacity": 1, "strokeDash": 0, @@ -47,7 +47,7 @@ "x": -97, "y": 396 }, - "width": 514, + "width": 544, "height": 798, "opacity": 1, "strokeDash": 0, @@ -86,7 +86,7 @@ "x": -73, "y": 526 }, - "width": 466, + "width": 496, "height": 644, "opacity": 1, "strokeDash": 0, @@ -125,7 +125,7 @@ "x": -49, "y": 656 }, - "width": 418, + "width": 448, "height": 490, "opacity": 1, "strokeDash": 0, @@ -244,7 +244,7 @@ "x": 25, "y": 1042 }, - "width": 320, + "width": 350, "height": 80, "opacity": 1, "strokeDash": 0, @@ -280,10 +280,10 @@ "id": "alt", "type": "", "pos": { - "x": 221, + "x": 251, "y": 1148 }, - "width": 388, + "width": 461, "height": 518, "opacity": 1, "strokeDash": 0, @@ -319,10 +319,10 @@ "id": "alt.case 1", "type": "", "pos": { - "x": 245, + "x": 275, "y": 1172 }, - "width": 340, + "width": 413, "height": 80, "opacity": 1, "strokeDash": 0, @@ -358,10 +358,10 @@ "id": "alt.case 2", "type": "", "pos": { - "x": 245, + "x": 275, "y": 1302 }, - "width": 340, + "width": 413, "height": 80, "opacity": 1, "strokeDash": 0, @@ -397,10 +397,10 @@ "id": "alt.case 3", "type": "", "pos": { - "x": 245, + "x": 275, "y": 1432 }, - "width": 340, + "width": 413, "height": 80, "opacity": 1, "strokeDash": 0, @@ -436,10 +436,10 @@ "id": "alt.case 4", "type": "", "pos": { - "x": 245, + "x": 275, "y": 1562 }, - "width": 340, + "width": 413, "height": 80, "opacity": 1, "strokeDash": 0, @@ -475,7 +475,7 @@ "id": "b", "type": "", "pos": { - "x": 220, + "x": 250, "y": 50 }, "width": 150, @@ -515,7 +515,7 @@ "id": "b.note", "type": "rectangle", "pos": { - "x": 32, + "x": 62, "y": 2052 }, "width": 525, @@ -595,7 +595,7 @@ "id": "c", "type": "", "pos": { - "x": 440, + "x": 543, "y": 50 }, "width": 190, @@ -663,7 +663,7 @@ "y": 306 }, { - "x": 295, + "x": 325, "y": 306 } ], @@ -702,7 +702,7 @@ "y": 436 }, { - "x": 295, + "x": 325, "y": 436 } ], @@ -741,7 +741,7 @@ "y": 566 }, { - "x": 295, + "x": 325, "y": 566 } ], @@ -780,7 +780,7 @@ "y": 952 }, { - "x": 295, + "x": 325, "y": 952 } ], @@ -819,7 +819,7 @@ "y": 1082 }, { - "x": 295, + "x": 325, "y": 1082 } ], @@ -854,11 +854,11 @@ "labelPercentage": 0, "route": [ { - "x": 295, + "x": 325, "y": 1212 }, { - "x": 535, + "x": 638, "y": 1212 } ], @@ -893,11 +893,11 @@ "labelPercentage": 0, "route": [ { - "x": 295, + "x": 325, "y": 1342 }, { - "x": 535, + "x": 638, "y": 1342 } ], @@ -932,11 +932,11 @@ "labelPercentage": 0, "route": [ { - "x": 295, + "x": 325, "y": 1472 }, { - "x": 535, + "x": 638, "y": 1472 } ], @@ -971,11 +971,11 @@ "labelPercentage": 0, "route": [ { - "x": 295, + "x": 325, "y": 1602 }, { - "x": 535, + "x": 638, "y": 1602 } ], @@ -1049,11 +1049,11 @@ "labelPercentage": 0, "route": [ { - "x": 295, + "x": 325, "y": 176 }, { - "x": 295, + "x": 325, "y": 2308 } ], @@ -1088,11 +1088,11 @@ "labelPercentage": 0, "route": [ { - "x": 535, + "x": 638, "y": 176 }, { - "x": 535, + "x": 638, "y": 2308 } ], diff --git a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg index 0a12d265e..d5d231a05 100644 --- a/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg @@ -2,7 +2,7 @@ abcd okayexplanationanother explanationSome one who believes imaginary things appear right before your i's.The earth is like a tiny grain of sand, only much, much heavier + + abcd okayexplanationanother explanationSome one who believes imaginary things appear right before your i's.The earth is like a tiny grain of sand, only much, much heavier - - +abcd okayexplanationanother explanationSome one who believes imaginary things appear right before your i's.The earth is like a tiny grain of sand, only much, much heavier + + How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place - - - - - - - - - - - - - - +How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place + + + + + + + + + + + + + + How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place - - - - - - - - - - - - - - +How this is renderedCLId2astd2compilerd2layoutd2exporterd2themesd2rendererd2sequencelayoutd2dagrelayoutonly if root is not sequence 'How this is rendered: {...}'tokenized ASTcompile ASTobjects and edgesrun layout enginesrun engine on shape: sequence_diagram, temporarily removerun core engine on rest add back in sequence diagramsdiagram with correct positions and dimensionsexport diagram with chosen theme and rendererget theme stylesrender to SVGresulting SVGmeasurements also take place + + + + + + + + + + + + + + ab a self edge herebetween actorsto descendantto deeper descendantto parentactor - +ab a self edge herebetween actorsto descendantto deeper descendantto parentactor + - - - - - + + + + + ab a self edge herebetween actorsto descendantto deeper descendantto parentactor - +ab a self edge herebetween actorsto descendantto deeper descendantto parentactor + - - - - - + + + + + AlicelinebreakerBobdbqueueanoddservicewithanameinmultiple lines Authentication Requestmake request for something that is quite far away and requires a really long label to take all the space between the objectsvalidate credentialsAuthentication ResponseAnother authentication Requestdo it later storedAnother authentication Response - - - - - - - - - +AlicelinebreakerBobdbqueueanoddservicewithanameinmultiple lines Authentication Requestmake request for something that is quite far away and requires a really long label to take all the space between the objectsvalidate credentialsAuthentication ResponseAnother authentication Requestdo it later storedAnother authentication Response + + + + + + + + + AlicelinebreakerBobdbqueueanoddservicewithanameinmultiple lines Authentication Requestmake request for something that is quite far away and requires a really long label to take all the space between the objectsvalidate credentialsAuthentication ResponseAnother authentication Requestdo it later storedAnother authentication Response - - - - - - - - - +AlicelinebreakerBobdbqueueanoddservicewithanameinmultiple lines Authentication Requestmake request for something that is quite far away and requires a really long label to take all the space between the objectsvalidate credentialsAuthentication ResponseAnother authentication Requestdo it later storedAnother authentication Response + + + + + + + + + scoreritemResponseitemessayRubricconceptitemOutcome getItem() itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) - - - - - - - - - - - - - +scoreritemResponseitemessayRubricconceptitemOutcome getItem() itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) + + + + + + + + + + + + + scoreritemResponseitemessayRubricconceptitemOutcome getItem() itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) - - - - - - - - - - - - - +scoreritemResponseitemessayRubricconceptitemOutcome getItem() itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) + + + + + + + + + + + + + a_shapea_sequenceanotherfinallysequencesequencesequencescoreritemResponseitemessayRubricconceptitemOutcomescorerconceptessayRubricitemitemOutcomeitemResponsescoreritemResponseitemessayRubricconceptitemOutcome getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts)getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) - - - - - - - - - - - - - - - - - - - - - - - - - +a_shapea_sequenceanotherfinallysequencesequencesequencescoreritemResponseitemessayRubricconceptitemOutcomescorerconceptessayRubricitemitemOutcomeitemResponsescoreritemResponseitemessayRubricconceptitemOutcome getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts)getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) + + + + + + + + + + + + + + + + + + + + + + + + + a_shapea_sequenceanotherfinallysequencesequencesequencescoreritemResponseitemessayRubricconceptitemOutcomescorerconceptessayRubricitemitemOutcomeitemResponsescoreritemResponseitemessayRubricconceptitemOutcome getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts)getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) - - - - - - - - - - - - - - - - - - - - - - - - - +a_shapea_sequenceanotherfinallysequencesequencesequencescoreritemResponseitemessayRubricconceptitemOutcomescorerconceptessayRubricitemitemOutcomeitemResponsescoreritemResponseitemessayRubricconceptitemOutcome getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts)getItem()itemgetRubric()rubricapplyTo(essayResp)match(essayResponse)scorenewgetNormalMinimum()getNormalMaximum()setScore(score)setFeedback(missingConcepts) + + + + + + + + + + + + + + + + + + + + + + + + + bacthis is a message groupand this is a nested message groupwhat about more nestingyoyo \ No newline at end of file diff --git a/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/elk/board.exp.json b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/elk/board.exp.json new file mode 100644 index 000000000..cf833fad1 --- /dev/null +++ b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/elk/board.exp.json @@ -0,0 +1,673 @@ +{ + "name": "", + "shapes": [ + { + "id": "b", + "type": "", + "pos": { + "x": 0, + "y": 50 + }, + "width": 150, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "b", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 13, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "a", + "type": "", + "pos": { + "x": 250, + "y": 50 + }, + "width": 150, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "a", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 12, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "c", + "type": "", + "pos": { + "x": 500, + "y": 50 + }, + "width": 150, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#EDF0FD", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "c", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 12, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "this is a message group", + "type": "", + "pos": { + "x": -71, + "y": 396 + }, + "width": 542, + "height": 696, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "#DEE1EB", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": true, + "fields": null, + "methods": null, + "columns": null, + "label": "this is a message group", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 160, + "labelHeight": 26, + "zIndex": 3, + "level": 1 + }, + { + "id": "this is a message group.and this is a nested message group", + "type": "", + "pos": { + "x": -47, + "y": 526 + }, + "width": 494, + "height": 542, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "#DEE1EB", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": true, + "fields": null, + "methods": null, + "columns": null, + "label": "and this is a nested message group", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 238, + "labelHeight": 26, + "zIndex": 3, + "level": 2 + }, + { + "id": "this is a message group.and this is a nested message group.what about more nesting", + "type": "", + "pos": { + "x": -23, + "y": 656 + }, + "width": 446, + "height": 388, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "#DEE1EB", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": true, + "fields": null, + "methods": null, + "columns": null, + "label": "what about more nesting", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 173, + "labelHeight": 26, + "zIndex": 3, + "level": 3 + }, + { + "id": "this is a message group.and this is a nested message group.what about more nesting.yo", + "type": "", + "pos": { + "x": 1, + "y": 786 + }, + "width": 398, + "height": 234, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "#DEE1EB", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": true, + "fields": null, + "methods": null, + "columns": null, + "label": "yo", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 21, + "labelHeight": 26, + "zIndex": 3, + "level": 4 + }, + { + "id": "this is a message group.and this is a nested message group.what about more nesting.yo.yo", + "type": "", + "pos": { + "x": 25, + "y": 916 + }, + "width": 350, + "height": 80, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "#DEE1EB", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": true, + "fields": null, + "methods": null, + "columns": null, + "label": "yo", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 21, + "labelHeight": 26, + "zIndex": 3, + "level": 5 + } + ], + "connections": [ + { + "id": "(b -> c)[0]", + "src": "b", + "srcArrow": "none", + "srcLabel": "", + "dst": "c", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 75, + "y": 306 + }, + { + "x": 575, + "y": 306 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> b)[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 325, + "y": 436 + }, + { + "x": 75, + "y": 436 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> b)[1]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 325, + "y": 566 + }, + { + "x": 75, + "y": 566 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> b)[2]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 325, + "y": 696 + }, + { + "x": 75, + "y": 696 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> b)[3]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 325, + "y": 826 + }, + { + "x": 75, + "y": 826 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(a -> b)[4]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "b", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 325, + "y": 956 + }, + { + "x": 75, + "y": 956 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 4 + }, + { + "id": "(b -- )[0]", + "src": "b", + "srcArrow": "none", + "srcLabel": "", + "dst": "b-lifeline-end-668380428", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 75, + "y": 176 + }, + { + "x": 75, + "y": 1086 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(a -- )[0]", + "src": "a", + "srcArrow": "none", + "srcLabel": "", + "dst": "a-lifeline-end-2251863791", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 325, + "y": 176 + }, + { + "x": 325, + "y": 1086 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + }, + { + "id": "(c -- )[0]", + "src": "c", + "srcArrow": "none", + "srcLabel": "", + "dst": "c-lifeline-end-955173837", + "dstArrow": "none", + "dstLabel": "", + "opacity": 1, + "strokeDash": 6, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 575, + "y": 176 + }, + { + "x": 575, + "y": 1086 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 1 + } + ] +} diff --git a/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/elk/sketch.exp.svg b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/elk/sketch.exp.svg new file mode 100644 index 000000000..a50c69347 --- /dev/null +++ b/e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/elk/sketch.exp.svg @@ -0,0 +1,28 @@ + +bacthis is a message groupand this is a nested message groupwhat about more nestingyoyo \ No newline at end of file diff --git a/e2etests/todo_test.go b/e2etests/todo_test.go index a0cecce13..cc15f14ec 100644 --- a/e2etests/todo_test.go +++ b/e2etests/todo_test.go @@ -66,6 +66,29 @@ ninety nine: { } } `, + }, { + // as nesting gets deeper, the groups advance towards `c` and may overlap its lifeline + // needs to consider the group size when computing the distance from `a` to `c` + // a similar effect can be seen for spans + name: "sequence_diagram_actor_padding_nested_groups", + script: `shape: sequence_diagram +b;a;c +b -> c +this is a message group: { + _.a -> _.b + and this is a nested message group: { + _._.a -> _._.b + what about more nesting: { + _._._.a -> _._._.b + yo: { + _._._._.a -> _._._._.b + yo: { + _._._._._.a -> _._._._._.b + } + } + } + } +}`, }, } diff --git a/testdata/d2exporter/TestExport/connection/arrowhead.exp.json b/testdata/d2exporter/TestExport/connection/arrowhead.exp.json index 60ac88668..09b26f2db 100644 --- a/testdata/d2exporter/TestExport/connection/arrowhead.exp.json +++ b/testdata/d2exporter/TestExport/connection/arrowhead.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/connection/basic.exp.json b/testdata/d2exporter/TestExport/connection/basic.exp.json index 726218c9c..50d65855d 100644 --- a/testdata/d2exporter/TestExport/connection/basic.exp.json +++ b/testdata/d2exporter/TestExport/connection/basic.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/connection/stroke-dash.exp.json b/testdata/d2exporter/TestExport/connection/stroke-dash.exp.json index 4d68e010d..aa483fe31 100644 --- a/testdata/d2exporter/TestExport/connection/stroke-dash.exp.json +++ b/testdata/d2exporter/TestExport/connection/stroke-dash.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/connection/theme_stroke-dash.exp.json b/testdata/d2exporter/TestExport/connection/theme_stroke-dash.exp.json index e97b648ac..d1add431f 100644 --- a/testdata/d2exporter/TestExport/connection/theme_stroke-dash.exp.json +++ b/testdata/d2exporter/TestExport/connection/theme_stroke-dash.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/label/basic_shape.exp.json b/testdata/d2exporter/TestExport/label/basic_shape.exp.json index 931fe4753..f017e35f5 100644 --- a/testdata/d2exporter/TestExport/label/basic_shape.exp.json +++ b/testdata/d2exporter/TestExport/label/basic_shape.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/label/connection_font_color.exp.json b/testdata/d2exporter/TestExport/label/connection_font_color.exp.json index 748ca5390..62cf2719e 100644 --- a/testdata/d2exporter/TestExport/label/connection_font_color.exp.json +++ b/testdata/d2exporter/TestExport/label/connection_font_color.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/label/shape_font_color.exp.json b/testdata/d2exporter/TestExport/label/shape_font_color.exp.json index e0985129a..00b3d298e 100644 --- a/testdata/d2exporter/TestExport/label/shape_font_color.exp.json +++ b/testdata/d2exporter/TestExport/label/shape_font_color.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/shape/basic.exp.json b/testdata/d2exporter/TestExport/shape/basic.exp.json index ec233aa08..226cbb94e 100644 --- a/testdata/d2exporter/TestExport/shape/basic.exp.json +++ b/testdata/d2exporter/TestExport/shape/basic.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/shape/border-radius.exp.json b/testdata/d2exporter/TestExport/shape/border-radius.exp.json index 6b9a69075..0a934ec54 100644 --- a/testdata/d2exporter/TestExport/shape/border-radius.exp.json +++ b/testdata/d2exporter/TestExport/shape/border-radius.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/shape/image_dimensions.exp.json b/testdata/d2exporter/TestExport/shape/image_dimensions.exp.json index f33f6473d..637bd91e8 100644 --- a/testdata/d2exporter/TestExport/shape/image_dimensions.exp.json +++ b/testdata/d2exporter/TestExport/shape/image_dimensions.exp.json @@ -34,6 +34,7 @@ "RawFragment": "" }, "iconPosition": "INSIDE_MIDDLE_CENTER", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/shape/synonyms.exp.json b/testdata/d2exporter/TestExport/shape/synonyms.exp.json index b67ca940a..dc02f5a8f 100644 --- a/testdata/d2exporter/TestExport/shape/synonyms.exp.json +++ b/testdata/d2exporter/TestExport/shape/synonyms.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/shape/text_color.exp.json b/testdata/d2exporter/TestExport/shape/text_color.exp.json index db7273d5a..dc35c0b97 100644 --- a/testdata/d2exporter/TestExport/shape/text_color.exp.json +++ b/testdata/d2exporter/TestExport/shape/text_color.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/theme/connection_with_bold.exp.json b/testdata/d2exporter/TestExport/theme/connection_with_bold.exp.json index cf2e7cf34..c0f461b9a 100644 --- a/testdata/d2exporter/TestExport/theme/connection_with_bold.exp.json +++ b/testdata/d2exporter/TestExport/theme/connection_with_bold.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/theme/connection_with_italic.exp.json b/testdata/d2exporter/TestExport/theme/connection_with_italic.exp.json index b3d780bb9..629847c8f 100644 --- a/testdata/d2exporter/TestExport/theme/connection_with_italic.exp.json +++ b/testdata/d2exporter/TestExport/theme/connection_with_italic.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/theme/connection_without_italic.exp.json b/testdata/d2exporter/TestExport/theme/connection_without_italic.exp.json index b1d30b075..dd3636dc0 100644 --- a/testdata/d2exporter/TestExport/theme/connection_without_italic.exp.json +++ b/testdata/d2exporter/TestExport/theme/connection_without_italic.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -61,6 +62,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/theme/shape_with_italic.exp.json b/testdata/d2exporter/TestExport/theme/shape_with_italic.exp.json index 73a0eab3c..7672ab131 100644 --- a/testdata/d2exporter/TestExport/theme/shape_with_italic.exp.json +++ b/testdata/d2exporter/TestExport/theme/shape_with_italic.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/testdata/d2exporter/TestExport/theme/shape_without_bold.exp.json b/testdata/d2exporter/TestExport/theme/shape_without_bold.exp.json index e136a4d38..c8b3c3d9f 100644 --- a/testdata/d2exporter/TestExport/theme/shape_without_bold.exp.json +++ b/testdata/d2exporter/TestExport/theme/shape_without_bold.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null,