From 5b55e4d81826a7d830e7474d2aec1146ab6e8005 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 13 Mar 2025 19:24:54 -0600 Subject: [PATCH] Revert "update" This reverts commit e9760389142ec2c5e2569596d2ff40bc0ecca435. --- .../c4-person-label/dagre/board.exp.json | 519 +-------------- .../c4-person-label/dagre/sketch.exp.svg | 584 ++++++++--------- .../txtar/c4-person-label/elk/board.exp.json | 421 +----------- .../txtar/c4-person-label/elk/sketch.exp.svg | 584 ++++++++--------- .../c4-person-shape/dagre/board.exp.json | 58 +- .../c4-person-shape/dagre/sketch.exp.svg | 578 ++++++++--------- .../txtar/c4-person-shape/elk/board.exp.json | 42 +- .../txtar/c4-person-shape/elk/sketch.exp.svg | 578 ++++++++--------- .../txtar/c4-theme/dagre/board.exp.json | 172 ++--- .../txtar/c4-theme/dagre/sketch.exp.svg | 612 +++++++++--------- .../txtar/c4-theme/elk/board.exp.json | 86 +-- .../txtar/c4-theme/elk/sketch.exp.svg | 612 +++++++++--------- .../small-c4-person/dagre/board.exp.json | 2 +- .../small-c4-person/dagre/sketch.exp.svg | 156 ++--- .../txtar/small-c4-person/elk/board.exp.json | 2 +- .../txtar/small-c4-person/elk/sketch.exp.svg | 156 ++--- e2etests/txtar.txt | 44 -- lib/shape/shape_c4_person.go | 76 +-- 18 files changed, 2147 insertions(+), 3135 deletions(-) diff --git a/e2etests/testdata/txtar/c4-person-label/dagre/board.exp.json b/e2etests/testdata/txtar/c4-person-label/dagre/board.exp.json index f0edbecf7..d164ab8a8 100644 --- a/e2etests/testdata/txtar/c4-person-label/dagre/board.exp.json +++ b/e2etests/testdata/txtar/c4-person-label/dagre/board.exp.json @@ -16,10 +16,10 @@ "type": "c4-person", "pos": { "x": 0, - "y": 8 + "y": 0 }, "width": 410, - "height": 284, + "height": 390, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -58,10 +58,10 @@ "type": "c4-person", "pos": { "x": 470, - "y": 8 + "y": 0 }, "width": 410, - "height": 284, + "height": 390, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -100,10 +100,10 @@ "type": "c4-person", "pos": { "x": 940, - "y": 8 + "y": 0 }, "width": 410, - "height": 284, + "height": 390, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -136,514 +136,9 @@ "labelPosition": "INSIDE_BOTTOM_CENTER", "zIndex": 0, "level": 1 - }, - { - "id": "customer1", - "type": "c4-person", - "pos": { - "x": 1410, - "y": 0 - }, - "width": 448, - "height": 299, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customer\n[person]\n\nA customer of the bank, with pekkrsonal bank ccountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 388, - "labelHeight": 119, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - }, - { - "id": "customer2", - "type": "c4-person", - "pos": { - "x": 1137, - "y": 399 - }, - "width": 457, - "height": 378, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customerk\n[person]\n\nA customer of the bank, with pekkrsonal bank accountskks.\n\nA customer of the bank, with pekkrsonal bank accountskks.\n\nA customer of the bank, with pekkrsonal bank accountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 396, - "labelHeight": 199, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - }, - { - "id": "customer3", - "type": "c4-person", - "pos": { - "x": 1147, - "y": 877 - }, - "width": 457, - "height": 304, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customer\n[person]\n\nA customer of the bank, with pekkrsonal bank accountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 396, - "labelHeight": 119, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - }, - { - "id": "customer4", - "type": "c4-person", - "pos": { - "x": 1426, - "y": 1281 - }, - "width": 457, - "height": 304, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customer\n[person]\n\nA customer of the bank, with pekkrsonal bank accountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 396, - "labelHeight": 119, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - } - ], - "connections": [ - { - "id": "(customer1 -> customer2)[0]", - "src": "customer1", - "srcArrow": "none", - "dst": "customer2", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1436, - "y": 297 - }, - { - "x": 1379.5999755859375, - "y": 338.6000061035156 - }, - { - "x": 1365.5999755859375, - "y": 359 - }, - { - "x": 1366, - "y": 399 - } - ], - "isCurve": true, - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer2 -> customer3)[0]", - "src": "customer2", - "srcArrow": "none", - "dst": "customer3", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1358, - "y": 777 - }, - { - "x": 1356, - "y": 817 - }, - { - "x": 1356.5999755859375, - "y": 837.2000122070312 - }, - { - "x": 1361, - "y": 878 - } - ], - "isCurve": true, - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer3 -> customer4)[0]", - "src": "customer3", - "srcArrow": "none", - "dst": "customer4", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1375, - "y": 1181 - }, - { - "x": 1375.4000244140625, - "y": 1221 - }, - { - "x": 1415, - "y": 1259.5999755859375 - }, - { - "x": 1573, - "y": 1374 - } - ], - "isCurve": true, - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer4 -> customer1)[0]", - "src": "customer4", - "srcArrow": "none", - "dst": "customer1", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1654, - "y": 1281 - }, - { - "x": 1654, - "y": 1241 - }, - { - "x": 1654, - "y": 1190.5999755859375 - }, - { - "x": 1654, - "y": 1130 - }, - { - "x": 1654, - "y": 1069.4000244140625 - }, - { - "x": 1654, - "y": 988.5999755859375 - }, - { - "x": 1654, - "y": 928 - }, - { - "x": 1654, - "y": 867.4000244140625 - }, - { - "x": 1654, - "y": 779.2000122070312 - }, - { - "x": 1654, - "y": 707.5 - }, - { - "x": 1654, - "y": 635.7999877929688 - }, - { - "x": 1653, - "y": 339 - }, - { - "x": 1649, - "y": 299 - } - ], - "isCurve": true, - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer1 -> customer3)[0]", - "src": "customer1", - "srcArrow": "none", - "dst": "customer3", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1634, - "y": 299 - }, - { - "x": 1634, - "y": 339 - }, - { - "x": 1634, - "y": 396.79998779296875 - }, - { - "x": 1634, - "y": 468.5 - }, - { - "x": 1634, - "y": 540.2000122070312 - }, - { - "x": 1598.800048828125, - "y": 854.5999755859375 - }, - { - "x": 1458, - "y": 965 - } - ], - "isCurve": true, - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer3 -> customer2)[0]", - "src": "customer3", - "srcArrow": "none", - "dst": "customer2", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1442, - "y": 911 - }, - { - "x": 1480.199951171875, - "y": 843.7999877929688 - }, - { - "x": 1484.5999755859375, - "y": 817 - }, - { - "x": 1464, - "y": 777 - } - ], - "isCurve": true, - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 } ], + "connections": [], "root": { "id": "", "type": "", diff --git a/e2etests/testdata/txtar/c4-person-label/dagre/sketch.exp.svg b/e2etests/testdata/txtar/c4-person-label/dagre/sketch.exp.svg index 7c7343d0c..bab515547 100644 --- a/e2etests/testdata/txtar/c4-person-label/dagre/sketch.exp.svg +++ b/e2etests/testdata/txtar/c4-person-label/dagre/sketch.exp.svg @@ -1,14 +1,14 @@ -

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts

-

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts

-

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts

-

Personal Banking Customer

-

[person]

-

A customer of the bank, with pekkrsonal bank ccountskks.

-

Personal Banking Customerk

-

[person]

-

A customer of the bank, with pekkrsonal bank accountskks.

-

A customer of the bank, with pekkrsonal bank accountskks.

-

A customer of the bank, with pekkrsonal bank accountskks.

-

Personal Banking Customer

-

[person]

-

A customer of the bank, with pekkrsonal bank accountskks.

-

Personal Banking Customer

-

[person]

-

A customer of the bank, with pekkrsonal bank accountskks.

-
- - - - - - - - +
+ + + +
\ No newline at end of file diff --git a/e2etests/testdata/txtar/c4-person-label/elk/board.exp.json b/e2etests/testdata/txtar/c4-person-label/elk/board.exp.json index f55b84f10..636de29e5 100644 --- a/e2etests/testdata/txtar/c4-person-label/elk/board.exp.json +++ b/e2etests/testdata/txtar/c4-person-label/elk/board.exp.json @@ -16,10 +16,10 @@ "type": "c4-person", "pos": { "x": 12, - "y": 19 + "y": 12 }, "width": 410, - "height": 284, + "height": 390, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -57,11 +57,11 @@ "id": "c4mdperson2", "type": "c4-person", "pos": { - "x": 441, - "y": 19 + "x": 442, + "y": 12 }, "width": 410, - "height": 284, + "height": 390, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -99,11 +99,11 @@ "id": "c4mdperson3", "type": "c4-person", "pos": { - "x": 871, - "y": 19 + "x": 872, + "y": 12 }, "width": 410, - "height": 284, + "height": 390, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -136,412 +136,9 @@ "labelPosition": "INSIDE_BOTTOM_CENTER", "zIndex": 0, "level": 1 - }, - { - "id": "customer1", - "type": "c4-person", - "pos": { - "x": 1301, - "y": 12 - }, - "width": 448, - "height": 299, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customer\n[person]\n\nA customer of the bank, with pekkrsonal bank ccountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 388, - "labelHeight": 119, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - }, - { - "id": "customer2", - "type": "c4-person", - "pos": { - "x": 1028, - "y": 391 - }, - "width": 457, - "height": 378, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customerk\n[person]\n\nA customer of the bank, with pekkrsonal bank accountskks.\n\nA customer of the bank, with pekkrsonal bank accountskks.\n\nA customer of the bank, with pekkrsonal bank accountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 396, - "labelHeight": 199, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - }, - { - "id": "customer3", - "type": "c4-person", - "pos": { - "x": 1123, - "y": 849 - }, - "width": 457, - "height": 304, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customer\n[person]\n\nA customer of the bank, with pekkrsonal bank accountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 396, - "labelHeight": 119, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - }, - { - "id": "customer4", - "type": "c4-person", - "pos": { - "x": 1313, - "y": 1233 - }, - "width": 457, - "height": 304, - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "borderRadius": 0, - "fill": "B3", - "stroke": "B1", - "animated": false, - "shadow": false, - "3d": false, - "multiple": false, - "double-border": false, - "tooltip": "", - "link": "", - "icon": null, - "iconPosition": "", - "blend": false, - "fields": null, - "methods": null, - "columns": null, - "label": "## Personal Banking Customer\n[person]\n\nA customer of the bank, with pekkrsonal bank accountskks.", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "markdown", - "color": "N1", - "italic": false, - "bold": true, - "underline": false, - "labelWidth": 396, - "labelHeight": 119, - "labelPosition": "INSIDE_MIDDLE_CENTER", - "zIndex": 0, - "level": 1 - } - ], - "connections": [ - { - "id": "(customer1 -> customer2)[0]", - "src": "customer1", - "srcArrow": "none", - "dst": "customer2", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1414, - "y": 311 - }, - { - "x": 1414, - "y": 540 - } - ], - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer2 -> customer3)[0]", - "src": "customer2", - "srcArrow": "none", - "dst": "customer3", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1237, - "y": 769 - }, - { - "x": 1237, - "y": 997 - } - ], - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer3 -> customer4)[0]", - "src": "customer3", - "srcArrow": "none", - "dst": "customer4", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1465, - "y": 1153 - }, - { - "x": 1466, - "y": 1284 - } - ], - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer4 -> customer1)[0]", - "src": "customer4", - "srcArrow": "none", - "dst": "customer1", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1620, - "y": 1290 - }, - { - "x": 1620, - "y": 311 - } - ], - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer1 -> customer3)[0]", - "src": "customer1", - "srcArrow": "none", - "dst": "customer3", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1526, - "y": 311 - }, - { - "x": 1526, - "y": 997 - } - ], - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 - }, - { - "id": "(customer3 -> customer2)[0]", - "src": "customer3", - "srcArrow": "none", - "dst": "customer2", - "dstArrow": "triangle", - "opacity": 1, - "strokeDash": 0, - "strokeWidth": 2, - "stroke": "B1", - "borderRadius": 10, - "label": "", - "fontSize": 16, - "fontFamily": "DEFAULT", - "language": "", - "color": "N2", - "italic": true, - "bold": false, - "underline": false, - "labelWidth": 0, - "labelHeight": 0, - "labelPosition": "", - "labelPercentage": 0, - "link": "", - "route": [ - { - "x": 1334, - "y": 851 - }, - { - "x": 1334, - "y": 769 - } - ], - "animated": false, - "tooltip": "", - "icon": null, - "zIndex": 0 } ], + "connections": [], "root": { "id": "", "type": "", diff --git a/e2etests/testdata/txtar/c4-person-label/elk/sketch.exp.svg b/e2etests/testdata/txtar/c4-person-label/elk/sketch.exp.svg index aafc758b9..bfadee541 100644 --- a/e2etests/testdata/txtar/c4-person-label/elk/sketch.exp.svg +++ b/e2etests/testdata/txtar/c4-person-label/elk/sketch.exp.svg @@ -1,14 +1,14 @@ -

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts

-

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts

-

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts

-

Personal Banking Customer

-

[person]

-

A customer of the bank, with pekkrsonal bank ccountskks.

-

Personal Banking Customerk

-

[person]

-

A customer of the bank, with pekkrsonal bank accountskks.

-

A customer of the bank, with pekkrsonal bank accountskks.

-

A customer of the bank, with pekkrsonal bank accountskks.

-

Personal Banking Customer

-

[person]

-

A customer of the bank, with pekkrsonal bank accountskks.

-

Personal Banking Customer

-

[person]

-

A customer of the bank, with pekkrsonal bank accountskks.

-
- - - - - - - - +
+ + + +
\ No newline at end of file diff --git a/e2etests/testdata/txtar/c4-person-shape/dagre/board.exp.json b/e2etests/testdata/txtar/c4-person-shape/dagre/board.exp.json index 196f6f710..279169e81 100644 --- a/e2etests/testdata/txtar/c4-person-shape/dagre/board.exp.json +++ b/e2etests/testdata/txtar/c4-person-shape/dagre/board.exp.json @@ -16,10 +16,10 @@ "type": "c4-person", "pos": { "x": 0, - "y": 469 + "y": 504 }, "width": 336, - "height": 286, + "height": 328, "opacity": 1, "strokeDash": 0, "strokeWidth": 1, @@ -61,7 +61,7 @@ "y": 0 }, "width": 139, - "height": 107, + "height": 132, "opacity": 1, "strokeDash": 0, "strokeWidth": 1, @@ -100,7 +100,7 @@ "type": "person", "pos": { "x": 101, - "y": 279 + "y": 309 }, "width": 134, "height": 89, @@ -142,10 +142,10 @@ "type": "rectangle", "pos": { "x": 386, - "y": 248 + "y": 273 }, "width": 210, - "height": 484, + "height": 515, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -184,10 +184,10 @@ "type": "c4-person", "pos": { "x": 449, - "y": 278 + "y": 303 }, "width": 84, - "height": 91, + "height": 101, "opacity": 1, "strokeDash": 0, "strokeWidth": 1, @@ -226,7 +226,7 @@ "type": "c4-person", "pos": { "x": 416, - "y": 522 + "y": 578 }, "width": 150, "height": 180, @@ -292,19 +292,19 @@ "route": [ { "x": 168, - "y": 394 + "y": 424 }, { "x": 168, - "y": 414 + "y": 448 }, { "x": 168, - "y": 429 + "y": 461 }, { "x": 168, - "y": 469 + "y": 489 } ], "isCurve": true, @@ -339,20 +339,20 @@ "link": "", "route": [ { - "x": 263, - "y": 100 + "x": 262, + "y": 119 }, { - "x": 187, - "y": 154 + "x": 186.8000030517578, + "y": 177.8000030517578 }, { "x": 168, - "y": 238.1999969482422 + "y": 264.20001220703125 }, { "x": 168, - "y": 279 + "y": 309 } ], "isCurve": true, @@ -387,20 +387,20 @@ "link": "", "route": [ { - "x": 395, - "y": 100 + "x": 397, + "y": 119 }, { - "x": 471.79998779296875, - "y": 154 + "x": 472.20001220703125, + "y": 177.8000030517578 }, { "x": 491, - "y": 238 + "y": 263 }, { "x": 491, - "y": 278 + "y": 303 } ], "isCurve": true, @@ -436,19 +436,19 @@ "route": [ { "x": 491, - "y": 369 + "y": 405 }, { "x": 491, - "y": 409 + "y": 444.20001220703125 }, { "x": 491, - "y": 439.6000061035156 + "y": 478.6000061035156 }, { "x": 491, - "y": 522 + "y": 577 } ], "isCurve": true, diff --git a/e2etests/testdata/txtar/c4-person-shape/dagre/sketch.exp.svg b/e2etests/testdata/txtar/c4-person-shape/dagre/sketch.exp.svg index e3498e842..65e12a1b3 100644 --- a/e2etests/testdata/txtar/c4-person-shape/dagre/sketch.exp.svg +++ b/e2etests/testdata/txtar/c4-person-shape/dagre/sketch.exp.svg @@ -1,27 +1,27 @@ -

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with
personal bank accounts

-
C4 Style PersonStandard Personstylingc4styledCustom Size Compare shapes - - - - - - - - +
C4 Style PersonStandard Personstylingc4styledCustom Size Compare shapes + + + + + + + +
\ No newline at end of file diff --git a/e2etests/testdata/txtar/c4-person-shape/elk/board.exp.json b/e2etests/testdata/txtar/c4-person-shape/elk/board.exp.json index 7c1686a85..95cb99c31 100644 --- a/e2etests/testdata/txtar/c4-person-shape/elk/board.exp.json +++ b/e2etests/testdata/txtar/c4-person-shape/elk/board.exp.json @@ -16,10 +16,10 @@ "type": "c4-person", "pos": { "x": 12, - "y": 900 + "y": 935 }, "width": 336, - "height": 286, + "height": 328, "opacity": 1, "strokeDash": 0, "strokeWidth": 1, @@ -61,7 +61,7 @@ "y": 12 }, "width": 139, - "height": 107, + "height": 132, "opacity": 1, "strokeDash": 0, "strokeWidth": 1, @@ -100,7 +100,7 @@ "type": "person", "pos": { "x": 113, - "y": 715 + "y": 750 }, "width": 134, "height": 89, @@ -142,10 +142,10 @@ "type": "rectangle", "pos": { "x": 256, - "y": 204 + "y": 229 }, "width": 250, - "height": 441, + "height": 451, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -184,10 +184,10 @@ "type": "c4-person", "pos": { "x": 339, - "y": 254 + "y": 279 }, "width": 84, - "height": 91, + "height": 101, "opacity": 1, "strokeDash": 0, "strokeWidth": 1, @@ -226,7 +226,7 @@ "type": "c4-person", "pos": { "x": 306, - "y": 415 + "y": 450 }, "width": 150, "height": 180, @@ -292,11 +292,11 @@ "route": [ { "x": 180, - "y": 830 + "y": 865 }, { "x": 180, - "y": 900 + "y": 920 } ], "animated": false, @@ -331,19 +331,19 @@ "route": [ { "x": 258, - "y": 119 + "y": 144 }, { "x": 257.5830078125, - "y": 159 + "y": 184 }, { "x": 180, - "y": 159 + "y": 184 }, { "x": 180, - "y": 715 + "y": 750 } ], "animated": false, @@ -378,19 +378,19 @@ "route": [ { "x": 304, - "y": 119 + "y": 144 }, { "x": 303.9159851074219, - "y": 159 + "y": 184 }, { "x": 381.5, - "y": 159 + "y": 184 }, { "x": 382, - "y": 254 + "y": 279 } ], "animated": false, @@ -425,11 +425,11 @@ "route": [ { "x": 381, - "y": 345 + "y": 381 }, { "x": 382, - "y": 415 + "y": 449 } ], "animated": false, diff --git a/e2etests/testdata/txtar/c4-person-shape/elk/sketch.exp.svg b/e2etests/testdata/txtar/c4-person-shape/elk/sketch.exp.svg index ec77604b2..d7fdb9e74 100644 --- a/e2etests/testdata/txtar/c4-person-shape/elk/sketch.exp.svg +++ b/e2etests/testdata/txtar/c4-person-shape/elk/sketch.exp.svg @@ -1,27 +1,27 @@ -

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with
personal bank accounts

-
C4 Style PersonStandard Personstylingc4styledCustom Size Compare shapes - - - - - - - - +
C4 Style PersonStandard Personstylingc4styledCustom Size Compare shapes + + + + + + + +
\ No newline at end of file diff --git a/e2etests/testdata/txtar/c4-theme/dagre/board.exp.json b/e2etests/testdata/txtar/c4-theme/dagre/board.exp.json index 9f035283b..e462c9a73 100644 --- a/e2etests/testdata/txtar/c4-theme/dagre/board.exp.json +++ b/e2etests/testdata/txtar/c4-theme/dagre/board.exp.json @@ -19,7 +19,7 @@ "y": 0 }, "width": 415, - "height": 285, + "height": 394, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -58,7 +58,7 @@ "type": "rectangle", "pos": { "x": 147, - "y": 442 + "y": 551 }, "width": 2407, "height": 915, @@ -100,7 +100,7 @@ "type": "rectangle", "pos": { "x": 177, - "y": 472 + "y": 581 }, "width": 550, "height": 164, @@ -142,7 +142,7 @@ "type": "rectangle", "pos": { "x": 390, - "y": 757 + "y": 866 }, "width": 609, "height": 164, @@ -184,7 +184,7 @@ "type": "rectangle", "pos": { "x": 1123, - "y": 757 + "y": 866 }, "width": 707, "height": 164, @@ -226,7 +226,7 @@ "type": "rectangle", "pos": { "x": 1246, - "y": 1058 + "y": 1167 }, "width": 461, "height": 164, @@ -268,7 +268,7 @@ "type": "rectangle", "pos": { "x": 1890, - "y": 757 + "y": 866 }, "width": 634, "height": 164, @@ -310,7 +310,7 @@ "type": "rectangle", "pos": { "x": 2410, - "y": 1494 + "y": 1603 }, "width": 360, "height": 164, @@ -352,7 +352,7 @@ "type": "rectangle", "pos": { "x": 0, - "y": 1494 + "y": 1603 }, "width": 629, "height": 164, @@ -418,19 +418,19 @@ "route": [ { "x": 1089, - "y": 194 + "y": 262 }, { "x": 579.4000244140625, - "y": 321.6000061035156 + "y": 422.3999938964844 }, { "x": 452, - "y": 432 + "y": 541 }, { "x": 452, - "y": 472 + "y": 581 } ], "isCurve": true, @@ -466,19 +466,19 @@ "route": [ { "x": 452, - "y": 635.5 + "y": 744.5 }, { "x": 452, - "y": 684.2999877929688 + "y": 793.2999877929688 }, { "x": 472.3999938964844, - "y": 708.7000122070312 + "y": 817.7000122070312 }, { "x": 554, - "y": 757.5 + "y": 866.5 } ], "isCurve": true, @@ -513,44 +513,44 @@ "link": "", "route": [ { - "x": 1093, - "y": 262 + "x": 1092, + "y": 348 }, { - "x": 968.2000122070312, - "y": 335.20001220703125 + "x": 968, + "y": 439.6000061035156 }, { "x": 937, - "y": 367.20001220703125 + "y": 476.20001220703125 }, { "x": 937, - "y": 387.75 + "y": 496.75 }, { "x": 937, - "y": 408.29998779296875 + "y": 517.2990112304688 }, { "x": 937, - "y": 448.3999938964844 + "y": 557.4000244140625 }, { "x": 937, - "y": 488 + "y": 597 }, { "x": 937, - "y": 527.5999755859375 + "y": 636.5999755859375 }, { "x": 916.5999755859375, - "y": 708.7000122070312 + "y": 817.7000122070312 }, { "x": 835, - "y": 757.5 + "y": 866.5 } ], "isCurve": true, @@ -585,44 +585,44 @@ "link": "", "route": [ { - "x": 1418, - "y": 285 + "x": 1430, + "y": 394 }, { - "x": 1464.4000244140625, - "y": 339.79998779296875 + "x": 1466.800048828125, + "y": 448.79998779296875 }, { "x": 1476, - "y": 367.20001220703125 + "y": 476.20001220703125 }, { "x": 1476, - "y": 387.75 + "y": 496.75 }, { "x": 1476, - "y": 408.29998779296875 + "y": 517.2990112304688 }, { "x": 1476, - "y": 448.3999938964844 + "y": 557.4000244140625 }, { "x": 1476, - "y": 488 + "y": 597 }, { "x": 1476, - "y": 527.5999755859375 + "y": 636.5999755859375 }, { "x": 1476, - "y": 708.7000122070312 + "y": 817.7000122070312 }, { "x": 1476, - "y": 757.5 + "y": 866.5 } ], "isCurve": true, @@ -658,19 +658,19 @@ "route": [ { "x": 694.5, - "y": 920.5 + "y": 1029.5 }, { "x": 694.5, - "y": 975.7000122070312 + "y": 1084.699951171875 }, { "x": 804.7000122070312, - "y": 1010.7219848632812 + "y": 1119.7220458984375 }, { "x": 1245.5, - "y": 1095.6099853515625 + "y": 1204.6099853515625 } ], "isCurve": true, @@ -706,19 +706,19 @@ "route": [ { "x": 1476, - "y": 920.5 + "y": 1029.5 }, { "x": 1476, - "y": 975.7000122070312 + "y": 1084.699951171875 }, { "x": 1476, - "y": 1003.2999877929688 + "y": 1112.300048828125 }, { "x": 1476, - "y": 1058.5 + "y": 1167.5 } ], "isCurve": true, @@ -754,19 +754,19 @@ "route": [ { "x": 1245.5, - "y": 1166.1949462890625 + "y": 1275.1949462890625 }, { "x": 500.6990051269531, - "y": 1318.8389892578125 + "y": 1427.8389892578125 }, { "x": 314.5, - "y": 1439.300048828125 + "y": 1548.300048828125 }, { "x": 314.5, - "y": 1494.5 + "y": 1603.5 } ], "isCurve": true, @@ -802,103 +802,103 @@ "route": [ { "x": 1505, - "y": 175 + "y": 238 }, { "x": 2410.60009765625, - "y": 317.79998779296875 + "y": 417.6000061035156 }, { "x": 2637, - "y": 367.20001220703125 + "y": 476.20001220703125 }, { "x": 2637, - "y": 387.75 + "y": 496.75 }, { "x": 2637, - "y": 408.29998779296875 + "y": 517.2990112304688 }, { "x": 2637, - "y": 448.3999938964844 + "y": 557.4000244140625 }, { "x": 2637, - "y": 488 + "y": 597 }, { "x": 2637, - "y": 527.5999755859375 + "y": 636.5999755859375 }, { "x": 2637, - "y": 582.5 + "y": 691.5 }, { "x": 2637, - "y": 625.25 + "y": 734.25 }, { "x": 2637, - "y": 668 + "y": 777 }, { "x": 2637, - "y": 725 + "y": 834 }, { "x": 2637, - "y": 767.75 + "y": 876.75 }, { "x": 2637, - "y": 810.5 + "y": 919.5 }, { "x": 2637, - "y": 869.0999755859375 + "y": 978.0999755859375 }, { "x": 2637, - "y": 914.25 + "y": 1023.25 }, { "x": 2637, - "y": 959.4000244140625 + "y": 1068.4000244140625 }, { "x": 2637, - "y": 1019.5999755859375 + "y": 1128.5999755859375 }, { "x": 2637, - "y": 1064.75 + "y": 1173.75 }, { "x": 2637, - "y": 1109.9000244140625 + "y": 1218.9000244140625 }, { "x": 2637, - "y": 1183.4000244140625 + "y": 1292.4000244140625 }, { "x": 2637, - "y": 1248.5 + "y": 1357.5 }, { "x": 2637, - "y": 1313.5999755859375 + "y": 1422.5999755859375 }, { "x": 2632.800048828125, - "y": 1439.300048828125 + "y": 1548.300048828125 }, { "x": 2616, - "y": 1494.5 + "y": 1603.5 } ], "isCurve": true, @@ -934,19 +934,19 @@ "route": [ { "x": 1707.5, - "y": 1173.843994140625 + "y": 1282.843994140625 }, { "x": 2241.5, - "y": 1320.3680419921875 + "y": 1429.3680419921875 }, { "x": 2394.39990234375, - "y": 1439.300048828125 + "y": 1548.300048828125 }, { "x": 2472, - "y": 1494.5 + "y": 1603.5 } ], "isCurve": true, @@ -982,19 +982,19 @@ "route": [ { "x": 2206.5, - "y": 920.5 + "y": 1029.5 }, { "x": 2206.5, - "y": 975.7000122070312 + "y": 1084.699951171875 }, { "x": 2106.5, - "y": 1010.0999755859375 + "y": 1119.0999755859375 }, { "x": 1706.5, - "y": 1092.5 + "y": 1201.5 } ], "isCurve": true, diff --git a/e2etests/testdata/txtar/c4-theme/dagre/sketch.exp.svg b/e2etests/testdata/txtar/c4-theme/dagre/sketch.exp.svg index 4e4ff9f84..2613fb8b3 100644 --- a/e2etests/testdata/txtar/c4-theme/dagre/sketch.exp.svg +++ b/e2etests/testdata/txtar/c4-theme/dagre/sketch.exp.svg @@ -1,20 +1,20 @@ -

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts.

-

Internet Banking System

+

Internet Banking System

[Software System]

-

E-mail System

+

E-mail System

[Software System]

The internal Microsoft Exchange e-mail system.

-

Mainframe Banking System

+

Mainframe Banking System

[Software System]

Stores all of the core banking information about customers, accounts, transactions, etc.

-

Web Application

+

Web Application

[Container: Java and Spring MVC]

Delivers the static content and the Internet banking single page application.

-

Single-Page Application

+

Single-Page Application

[Container: JavaScript and Angular]

Provides all of the Internet banking functionality to customers via their web browser.

-

Mobile App

+

Mobile App

[Container: Xamarin]

Provides a limited subset of the Internet banking functionality to customers via their mobile device.

-

API Application

+

API Application

[Container: Java and Spring MVC]

Provides Internet banking functionality via a JSON/HTTPS API.

-

Database

+

Database

[Container: Oracle Database Schema]

Stores user registration information, hashed authentication credentials, access logs, etc.

-
Visits bigbank.com/ib using[HTTPS]Delivers to the customer's web browserViews account balances, and makes payments usingViews account balances, and makes payments usingMakes API calls to[JSON/HTTPS]Makes API calls to[JSON/HTTPS]Makes API calls to[XML/HTTPS]Sends e-mails toSends e-mail using Reads from and writes to[SQL/TCP] - - - - - - - - - - - - - - - - - - - - +
Visits bigbank.com/ib using[HTTPS]Delivers to the customer's web browserViews account balances, and makes payments usingViews account balances, and makes payments usingMakes API calls to[JSON/HTTPS]Makes API calls to[JSON/HTTPS]Makes API calls to[XML/HTTPS]Sends e-mails toSends e-mail using Reads from and writes to[SQL/TCP] + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/e2etests/testdata/txtar/c4-theme/elk/board.exp.json b/e2etests/testdata/txtar/c4-theme/elk/board.exp.json index 3d9b2d3b7..4d6d3ccd8 100644 --- a/e2etests/testdata/txtar/c4-theme/elk/board.exp.json +++ b/e2etests/testdata/txtar/c4-theme/elk/board.exp.json @@ -19,7 +19,7 @@ "y": 12 }, "width": 415, - "height": 285, + "height": 394, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -58,7 +58,7 @@ "type": "rectangle", "pos": { "x": 12, - "y": 549 + "y": 658 }, "width": 2218, "height": 1035, @@ -100,7 +100,7 @@ "type": "rectangle", "pos": { "x": 62, - "y": 599 + "y": 708 }, "width": 550, "height": 164, @@ -142,7 +142,7 @@ "type": "rectangle", "pos": { "x": 190, - "y": 934 + "y": 1043 }, "width": 609, "height": 164, @@ -184,7 +184,7 @@ "type": "rectangle", "pos": { "x": 819, - "y": 934 + "y": 1043 }, "width": 707, "height": 164, @@ -226,7 +226,7 @@ "type": "rectangle", "pos": { "x": 942, - "y": 1285 + "y": 1394 }, "width": 461, "height": 164, @@ -268,7 +268,7 @@ "type": "rectangle", "pos": { "x": 1546, - "y": 934 + "y": 1043 }, "width": 634, "height": 164, @@ -310,7 +310,7 @@ "type": "rectangle", "pos": { "x": 1746, - "y": 1786 + "y": 1895 }, "width": 360, "height": 164, @@ -352,7 +352,7 @@ "type": "rectangle", "pos": { "x": 781, - "y": 1786 + "y": 1895 }, "width": 629, "height": 164, @@ -418,19 +418,19 @@ "route": [ { "x": 788, - "y": 297 + "y": 406 }, { "x": 787.75, - "y": 337 + "y": 446 }, { "x": 359.25, - "y": 337 + "y": 446 }, { "x": 359.25, - "y": 599 + "y": 708 } ], "animated": false, @@ -465,11 +465,11 @@ "route": [ { "x": 393, - "y": 763 + "y": 872 }, { "x": 393, - "y": 934 + "y": 1043 } ], "animated": false, @@ -504,19 +504,19 @@ "route": [ { "x": 871, - "y": 297 + "y": 406 }, { "x": 870.75, - "y": 387 + "y": 496 }, { "x": 652, - "y": 387 + "y": 496 }, { "x": 652, - "y": 934 + "y": 1043 } ], "animated": false, @@ -551,11 +551,11 @@ "route": [ { "x": 954, - "y": 297 + "y": 406 }, { "x": 953.75, - "y": 934 + "y": 1043 } ], "animated": false, @@ -590,19 +590,19 @@ "route": [ { "x": 494.5, - "y": 1098 + "y": 1207 }, { "x": 494.5, - "y": 1245 + "y": 1354 }, { "x": 1057.25, - "y": 1245 + "y": 1354 }, { "x": 1057.25, - "y": 1285 + "y": 1394 } ], "animated": false, @@ -637,11 +637,11 @@ "route": [ { "x": 1172.5, - "y": 1098 + "y": 1207 }, { "x": 1172.5, - "y": 1285 + "y": 1394 } ], "animated": false, @@ -676,11 +676,11 @@ "route": [ { "x": 1095.666015625, - "y": 1449 + "y": 1558 }, { "x": 1095.666015625, - "y": 1786 + "y": 1895 } ], "animated": false, @@ -715,27 +715,27 @@ "route": [ { "x": 1037, - "y": 297 + "y": 406 }, { "x": 1036.75, - "y": 337 + "y": 446 }, { "x": 2303.5, - "y": 337 + "y": 446 }, { "x": 2303.5, - "y": 1746 + "y": 1855 }, { "x": 1986.8330078125, - "y": 1746 + "y": 1855 }, { "x": 1986.8330078125, - "y": 1786 + "y": 1895 } ], "animated": false, @@ -770,19 +770,19 @@ "route": [ { "x": 1249.3330078125, - "y": 1449 + "y": 1558 }, { "x": 1249.3330078125, - "y": 1746 + "y": 1855 }, { "x": 1866.8330078125, - "y": 1746 + "y": 1855 }, { "x": 1866.8330078125, - "y": 1786 + "y": 1895 } ], "animated": false, @@ -817,19 +817,19 @@ "route": [ { "x": 1863, - "y": 1098 + "y": 1207 }, { "x": 1863, - "y": 1245 + "y": 1354 }, { "x": 1287.75, - "y": 1245 + "y": 1354 }, { "x": 1287.75, - "y": 1285 + "y": 1394 } ], "animated": false, diff --git a/e2etests/testdata/txtar/c4-theme/elk/sketch.exp.svg b/e2etests/testdata/txtar/c4-theme/elk/sketch.exp.svg index dc7185d81..31b06adcb 100644 --- a/e2etests/testdata/txtar/c4-theme/elk/sketch.exp.svg +++ b/e2etests/testdata/txtar/c4-theme/elk/sketch.exp.svg @@ -1,20 +1,20 @@ -

Personal Banking Customer

+

Personal Banking Customer

[person]

A customer of the bank, with personal bank accounts.

-

Internet Banking System

+

Internet Banking System

[Software System]

-

E-mail System

+

E-mail System

[Software System]

The internal Microsoft Exchange e-mail system.

-

Mainframe Banking System

+

Mainframe Banking System

[Software System]

Stores all of the core banking information about customers, accounts, transactions, etc.

-

Web Application

+

Web Application

[Container: Java and Spring MVC]

Delivers the static content and the Internet banking single page application.

-

Single-Page Application

+

Single-Page Application

[Container: JavaScript and Angular]

Provides all of the Internet banking functionality to customers via their web browser.

-

Mobile App

+

Mobile App

[Container: Xamarin]

Provides a limited subset of the Internet banking functionality to customers via their mobile device.

-

API Application

+

API Application

[Container: Java and Spring MVC]

Provides Internet banking functionality via a JSON/HTTPS API.

-

Database

+

Database

[Container: Oracle Database Schema]

Stores user registration information, hashed authentication credentials, access logs, etc.

-
Visits bigbank.com/ib using[HTTPS]Delivers to the customer's web browserViews account balances, and makes payments usingViews account balances, and makes payments usingMakes API calls to[JSON/HTTPS]Makes API calls to[JSON/HTTPS]Makes API calls to[XML/HTTPS]Sends e-mails toSends e-mail using Reads from and writes to[SQL/TCP] - - - - - - - - - - - - - - - - - - - - +
Visits bigbank.com/ib using[HTTPS]Delivers to the customer's web browserViews account balances, and makes payments usingViews account balances, and makes payments usingMakes API calls to[JSON/HTTPS]Makes API calls to[JSON/HTTPS]Makes API calls to[XML/HTTPS]Sends e-mails toSends e-mail using Reads from and writes to[SQL/TCP] + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/e2etests/testdata/txtar/small-c4-person/dagre/board.exp.json b/e2etests/testdata/txtar/small-c4-person/dagre/board.exp.json index 3b7bdaf8e..e0d8c0959 100644 --- a/e2etests/testdata/txtar/small-c4-person/dagre/board.exp.json +++ b/e2etests/testdata/txtar/small-c4-person/dagre/board.exp.json @@ -19,7 +19,7 @@ "y": 0 }, "width": 180, - "height": 85, + "height": 94, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, diff --git a/e2etests/testdata/txtar/small-c4-person/dagre/sketch.exp.svg b/e2etests/testdata/txtar/small-c4-person/dagre/sketch.exp.svg index 6f92c0949..009c53f4e 100644 --- a/e2etests/testdata/txtar/small-c4-person/dagre/sketch.exp.svg +++ b/e2etests/testdata/txtar/small-c4-person/dagre/sketch.exp.svg @@ -1,9 +1,9 @@ -c4-person - - + .d2-4248901620 .fill-N1{fill:#0A0F25;} + .d2-4248901620 .fill-N2{fill:#676C7E;} + .d2-4248901620 .fill-N3{fill:#9499AB;} + .d2-4248901620 .fill-N4{fill:#CFD2DD;} + .d2-4248901620 .fill-N5{fill:#DEE1EB;} + .d2-4248901620 .fill-N6{fill:#EEF1F8;} + .d2-4248901620 .fill-N7{fill:#FFFFFF;} + .d2-4248901620 .fill-B1{fill:#0D32B2;} + .d2-4248901620 .fill-B2{fill:#0D32B2;} + .d2-4248901620 .fill-B3{fill:#E3E9FD;} + .d2-4248901620 .fill-B4{fill:#E3E9FD;} + .d2-4248901620 .fill-B5{fill:#EDF0FD;} + .d2-4248901620 .fill-B6{fill:#F7F8FE;} + .d2-4248901620 .fill-AA2{fill:#4A6FF3;} + .d2-4248901620 .fill-AA4{fill:#EDF0FD;} + .d2-4248901620 .fill-AA5{fill:#F7F8FE;} + .d2-4248901620 .fill-AB4{fill:#EDF0FD;} + .d2-4248901620 .fill-AB5{fill:#F7F8FE;} + .d2-4248901620 .stroke-N1{stroke:#0A0F25;} + .d2-4248901620 .stroke-N2{stroke:#676C7E;} + .d2-4248901620 .stroke-N3{stroke:#9499AB;} + .d2-4248901620 .stroke-N4{stroke:#CFD2DD;} + .d2-4248901620 .stroke-N5{stroke:#DEE1EB;} + .d2-4248901620 .stroke-N6{stroke:#EEF1F8;} + .d2-4248901620 .stroke-N7{stroke:#FFFFFF;} + .d2-4248901620 .stroke-B1{stroke:#0D32B2;} + .d2-4248901620 .stroke-B2{stroke:#0D32B2;} + .d2-4248901620 .stroke-B3{stroke:#E3E9FD;} + .d2-4248901620 .stroke-B4{stroke:#E3E9FD;} + .d2-4248901620 .stroke-B5{stroke:#EDF0FD;} + .d2-4248901620 .stroke-B6{stroke:#F7F8FE;} + .d2-4248901620 .stroke-AA2{stroke:#4A6FF3;} + .d2-4248901620 .stroke-AA4{stroke:#EDF0FD;} + .d2-4248901620 .stroke-AA5{stroke:#F7F8FE;} + .d2-4248901620 .stroke-AB4{stroke:#EDF0FD;} + .d2-4248901620 .stroke-AB5{stroke:#F7F8FE;} + .d2-4248901620 .background-color-N1{background-color:#0A0F25;} + .d2-4248901620 .background-color-N2{background-color:#676C7E;} + .d2-4248901620 .background-color-N3{background-color:#9499AB;} + .d2-4248901620 .background-color-N4{background-color:#CFD2DD;} + .d2-4248901620 .background-color-N5{background-color:#DEE1EB;} + .d2-4248901620 .background-color-N6{background-color:#EEF1F8;} + .d2-4248901620 .background-color-N7{background-color:#FFFFFF;} + .d2-4248901620 .background-color-B1{background-color:#0D32B2;} + .d2-4248901620 .background-color-B2{background-color:#0D32B2;} + .d2-4248901620 .background-color-B3{background-color:#E3E9FD;} + .d2-4248901620 .background-color-B4{background-color:#E3E9FD;} + .d2-4248901620 .background-color-B5{background-color:#EDF0FD;} + .d2-4248901620 .background-color-B6{background-color:#F7F8FE;} + .d2-4248901620 .background-color-AA2{background-color:#4A6FF3;} + .d2-4248901620 .background-color-AA4{background-color:#EDF0FD;} + .d2-4248901620 .background-color-AA5{background-color:#F7F8FE;} + .d2-4248901620 .background-color-AB4{background-color:#EDF0FD;} + .d2-4248901620 .background-color-AB5{background-color:#F7F8FE;} + .d2-4248901620 .color-N1{color:#0A0F25;} + .d2-4248901620 .color-N2{color:#676C7E;} + .d2-4248901620 .color-N3{color:#9499AB;} + .d2-4248901620 .color-N4{color:#CFD2DD;} + .d2-4248901620 .color-N5{color:#DEE1EB;} + .d2-4248901620 .color-N6{color:#EEF1F8;} + .d2-4248901620 .color-N7{color:#FFFFFF;} + .d2-4248901620 .color-B1{color:#0D32B2;} + .d2-4248901620 .color-B2{color:#0D32B2;} + .d2-4248901620 .color-B3{color:#E3E9FD;} + .d2-4248901620 .color-B4{color:#E3E9FD;} + .d2-4248901620 .color-B5{color:#EDF0FD;} + .d2-4248901620 .color-B6{color:#F7F8FE;} + .d2-4248901620 .color-AA2{color:#4A6FF3;} + .d2-4248901620 .color-AA4{color:#EDF0FD;} + .d2-4248901620 .color-AA5{color:#F7F8FE;} + .d2-4248901620 .color-AB4{color:#EDF0FD;} + .d2-4248901620 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-4248901620);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-4248901620);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-4248901620);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-4248901620);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-4248901620);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-4248901620);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-4248901620);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-4248901620);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>c4-person + + \ No newline at end of file diff --git a/e2etests/testdata/txtar/small-c4-person/elk/board.exp.json b/e2etests/testdata/txtar/small-c4-person/elk/board.exp.json index 342178f5f..56a15e872 100644 --- a/e2etests/testdata/txtar/small-c4-person/elk/board.exp.json +++ b/e2etests/testdata/txtar/small-c4-person/elk/board.exp.json @@ -19,7 +19,7 @@ "y": 12 }, "width": 180, - "height": 85, + "height": 94, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, diff --git a/e2etests/testdata/txtar/small-c4-person/elk/sketch.exp.svg b/e2etests/testdata/txtar/small-c4-person/elk/sketch.exp.svg index d41c6027d..4de020608 100644 --- a/e2etests/testdata/txtar/small-c4-person/elk/sketch.exp.svg +++ b/e2etests/testdata/txtar/small-c4-person/elk/sketch.exp.svg @@ -1,9 +1,9 @@ -c4-person - - + .d2-108552620 .fill-N1{fill:#0A0F25;} + .d2-108552620 .fill-N2{fill:#676C7E;} + .d2-108552620 .fill-N3{fill:#9499AB;} + .d2-108552620 .fill-N4{fill:#CFD2DD;} + .d2-108552620 .fill-N5{fill:#DEE1EB;} + .d2-108552620 .fill-N6{fill:#EEF1F8;} + .d2-108552620 .fill-N7{fill:#FFFFFF;} + .d2-108552620 .fill-B1{fill:#0D32B2;} + .d2-108552620 .fill-B2{fill:#0D32B2;} + .d2-108552620 .fill-B3{fill:#E3E9FD;} + .d2-108552620 .fill-B4{fill:#E3E9FD;} + .d2-108552620 .fill-B5{fill:#EDF0FD;} + .d2-108552620 .fill-B6{fill:#F7F8FE;} + .d2-108552620 .fill-AA2{fill:#4A6FF3;} + .d2-108552620 .fill-AA4{fill:#EDF0FD;} + .d2-108552620 .fill-AA5{fill:#F7F8FE;} + .d2-108552620 .fill-AB4{fill:#EDF0FD;} + .d2-108552620 .fill-AB5{fill:#F7F8FE;} + .d2-108552620 .stroke-N1{stroke:#0A0F25;} + .d2-108552620 .stroke-N2{stroke:#676C7E;} + .d2-108552620 .stroke-N3{stroke:#9499AB;} + .d2-108552620 .stroke-N4{stroke:#CFD2DD;} + .d2-108552620 .stroke-N5{stroke:#DEE1EB;} + .d2-108552620 .stroke-N6{stroke:#EEF1F8;} + .d2-108552620 .stroke-N7{stroke:#FFFFFF;} + .d2-108552620 .stroke-B1{stroke:#0D32B2;} + .d2-108552620 .stroke-B2{stroke:#0D32B2;} + .d2-108552620 .stroke-B3{stroke:#E3E9FD;} + .d2-108552620 .stroke-B4{stroke:#E3E9FD;} + .d2-108552620 .stroke-B5{stroke:#EDF0FD;} + .d2-108552620 .stroke-B6{stroke:#F7F8FE;} + .d2-108552620 .stroke-AA2{stroke:#4A6FF3;} + .d2-108552620 .stroke-AA4{stroke:#EDF0FD;} + .d2-108552620 .stroke-AA5{stroke:#F7F8FE;} + .d2-108552620 .stroke-AB4{stroke:#EDF0FD;} + .d2-108552620 .stroke-AB5{stroke:#F7F8FE;} + .d2-108552620 .background-color-N1{background-color:#0A0F25;} + .d2-108552620 .background-color-N2{background-color:#676C7E;} + .d2-108552620 .background-color-N3{background-color:#9499AB;} + .d2-108552620 .background-color-N4{background-color:#CFD2DD;} + .d2-108552620 .background-color-N5{background-color:#DEE1EB;} + .d2-108552620 .background-color-N6{background-color:#EEF1F8;} + .d2-108552620 .background-color-N7{background-color:#FFFFFF;} + .d2-108552620 .background-color-B1{background-color:#0D32B2;} + .d2-108552620 .background-color-B2{background-color:#0D32B2;} + .d2-108552620 .background-color-B3{background-color:#E3E9FD;} + .d2-108552620 .background-color-B4{background-color:#E3E9FD;} + .d2-108552620 .background-color-B5{background-color:#EDF0FD;} + .d2-108552620 .background-color-B6{background-color:#F7F8FE;} + .d2-108552620 .background-color-AA2{background-color:#4A6FF3;} + .d2-108552620 .background-color-AA4{background-color:#EDF0FD;} + .d2-108552620 .background-color-AA5{background-color:#F7F8FE;} + .d2-108552620 .background-color-AB4{background-color:#EDF0FD;} + .d2-108552620 .background-color-AB5{background-color:#F7F8FE;} + .d2-108552620 .color-N1{color:#0A0F25;} + .d2-108552620 .color-N2{color:#676C7E;} + .d2-108552620 .color-N3{color:#9499AB;} + .d2-108552620 .color-N4{color:#CFD2DD;} + .d2-108552620 .color-N5{color:#DEE1EB;} + .d2-108552620 .color-N6{color:#EEF1F8;} + .d2-108552620 .color-N7{color:#FFFFFF;} + .d2-108552620 .color-B1{color:#0D32B2;} + .d2-108552620 .color-B2{color:#0D32B2;} + .d2-108552620 .color-B3{color:#E3E9FD;} + .d2-108552620 .color-B4{color:#E3E9FD;} + .d2-108552620 .color-B5{color:#EDF0FD;} + .d2-108552620 .color-B6{color:#F7F8FE;} + .d2-108552620 .color-AA2{color:#4A6FF3;} + .d2-108552620 .color-AA4{color:#EDF0FD;} + .d2-108552620 .color-AA5{color:#F7F8FE;} + .d2-108552620 .color-AB4{color:#EDF0FD;} + .d2-108552620 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-108552620);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-108552620);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-108552620);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-108552620);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-108552620);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-108552620);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-108552620);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-108552620);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>c4-person + + \ No newline at end of file diff --git a/e2etests/txtar.txt b/e2etests/txtar.txt index 1b7eaca96..89d18ce17 100644 --- a/e2etests/txtar.txt +++ b/e2etests/txtar.txt @@ -1221,47 +1221,3 @@ A customer of the bank, with personal bank accounts shape: c4-person label.near: bottom-center } - - customer1: |md - ## Personal Banking Customer - [person] - - A customer of the bank, with pekkrsonal bank ccountskks. -| { - shape: c4-person -} - -customer2: |md - ## Personal Banking Customerk - [person] - - A customer of the bank, with pekkrsonal bank accountskks. - - A customer of the bank, with pekkrsonal bank accountskks. - - A customer of the bank, with pekkrsonal bank accountskks. -| { - shape: c4-person -} - -customer3: |md - ## Personal Banking Customer - [person] - - A customer of the bank, with pekkrsonal bank accountskks. -| { - shape: c4-person -} - -customer4: |md - ## Personal Banking Customer - [person] - - A customer of the bank, with pekkrsonal bank accountskks. -| { - shape: c4-person -} - -customer1 -> customer2 -> customer3 -> customer4 -customer4 -> customer1 -> customer3 -> customer2 - diff --git a/lib/shape/shape_c4_person.go b/lib/shape/shape_c4_person.go index a9b7b9560..99d47b07d 100644 --- a/lib/shape/shape_c4_person.go +++ b/lib/shape/shape_c4_person.go @@ -32,24 +32,26 @@ const ( func (s shapeC4Person) GetInnerBox() *geo.Box { width := s.Box.Width + height := s.Box.Height - // Reduce head radius from 22% to 18% of width - headRadius := width * 0.18 - headCenterY := headRadius + headRadius := width * 0.22 + headCenterY := height * 0.18 bodyTop := headCenterY + headRadius*0.8 - // Horizontal padding = 5% of width - horizontalPadding := width * 0.05 - - // Vertical padding = 3% of width (not height) - vertPadding := width * 0.03 + // Use a small fixed percentage instead of the full corner radius + horizontalPadding := width * 0.05 // 5% padding tl := s.Box.TopLeft.Copy() tl.X += horizontalPadding - tl.Y += bodyTop + vertPadding + // Add vertical padding + tl.Y += bodyTop + height*0.03 + + // Width minus padding on both sides innerWidth := width - (horizontalPadding * 2) - innerHeight := s.Box.Height - bodyTop - (vertPadding * 2) + + // Add bottom padding + innerHeight := height - (tl.Y - s.Box.TopLeft.Y) - (height * 0.03) return geo.NewBox(tl, innerWidth, innerHeight) } @@ -60,10 +62,8 @@ func bodyPath(box *geo.Box) *svg.SvgPathContext { pc := svg.NewSVGPathContext(box.TopLeft, 1, 1) - // Reduce head radius from 22% to 18% of width - headRadius := width * 0.18 - // Adjust headCenterY to ensure head fits within box - headCenterY := headRadius + headRadius := width * 0.22 + headCenterY := height * 0.18 bodyTop := headCenterY + headRadius*0.8 bodyWidth := width bodyHeight := height - bodyTop @@ -88,13 +88,13 @@ func bodyPath(box *geo.Box) *svg.SvgPathContext { func headPath(box *geo.Box) *svg.SvgPathContext { width := box.Width + height := box.Height + pc := svg.NewSVGPathContext(box.TopLeft, 1, 1) - // Reduce head radius from 22% to 18% of width - headRadius := width * 0.18 + headRadius := width * 0.22 headCenterX := width / 2 - // Adjust headCenterY to ensure head fits within box - headCenterY := headRadius + headCenterY := height * 0.18 pc.StartAt(pc.Absolute(headCenterX, headCenterY-headRadius)) @@ -123,13 +123,13 @@ func headPath(box *geo.Box) *svg.SvgPathContext { func (s shapeC4Person) Perimeter() []geo.Intersectable { width := s.Box.Width + height := s.Box.Height bodyPerimeter := bodyPath(s.Box).Path - // Reduce head radius from 22% to 18% of width - headRadius := width * 0.18 + headRadius := width * 0.22 headCenterX := s.Box.TopLeft.X + width/2 - headCenterY := s.Box.TopLeft.Y + headRadius + headCenterY := s.Box.TopLeft.Y + height*0.18 headCenter := geo.NewPoint(headCenterX, headCenterY) headEllipse := geo.NewEllipse(headCenter, headRadius, headRadius) @@ -145,28 +145,28 @@ func (s shapeC4Person) GetSVGPathData() []string { } func (s shapeC4Person) GetDimensionsToFit(width, height, paddingX, paddingY float64) (float64, float64) { - // Start with content dimensions + padding - totalWidth := width + paddingX - totalHeight := height + paddingY + contentWidth := width + paddingX + contentHeight := height + paddingY - // Reduce head radius from 22% to 18% of width - headRadius := totalWidth * 0.18 + // Account for 10% total horizontal padding (5% on each side) + totalWidth := contentWidth / 0.9 + headRadius := totalWidth * 0.22 + headCenterY := totalWidth * 0.18 + bodyTop := headCenterY + headRadius*0.8 - // Head center is now at headRadius from the top - headCenterY := headRadius + // Include vertical padding from GetInnerBox + verticalPadding := totalWidth * 0.06 // 3% top + 3% bottom + totalHeight := contentHeight + bodyTop + verticalPadding - // Body starts at headCenterY + headRadius*0.8 - bodyTopPosition := headCenterY + headRadius*0.8 + // Calculate minimum height based on actual proportions + // Head height: 2 * headRadius = 0.44 * width + // Body should be at least half the width + minHeight := totalWidth * 0.95 // Reduced from 1.2 + if totalHeight < minHeight { + totalHeight = minHeight + } - // Add space for body (head is now fully contained) - totalHeight += bodyTopPosition - - // Horizontal padding is handled in GetInnerBox (5% on each side) - totalWidth /= 0.9 - - // Prevent the shape's aspect ratio from becoming too extreme totalWidth, totalHeight = LimitAR(totalWidth, totalHeight, C4_PERSON_AR_LIMIT) - return math.Ceil(totalWidth), math.Ceil(totalHeight) }