Skip to content

Instantly share code, notes, and snippets.

@awhiteside1
Created July 14, 2023 15:54
Show Gist options
  • Save awhiteside1/c8f08ccd44c06b672c2e4c132bbda683 to your computer and use it in GitHub Desktop.
Save awhiteside1/c8f08ccd44c06b672c2e4c132bbda683 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<title>dependency graph</title>
<style>
.node:active path,
.node:hover path,
.node.current path,
.node:active polygon,
.node:hover polygon,
.node.current polygon {
stroke: fuchsia;
stroke-width: 2;
}
.edge:active path,
.edge:hover path,
.edge.current path,
.edge:active ellipse,
.edge:hover ellipse,
.edge.current ellipse {
stroke: fuchsia;
stroke-width: 3;
stroke-opacity: 1;
}
.edge:active polygon,
.edge:hover polygon,
.edge.current polygon {
stroke: fuchsia;
stroke-width: 3;
fill: fuchsia;
stroke-opacity: 1;
fill-opacity: 1;
}
.edge:active text,
.edge:hover text {
fill: fuchsia;
}
.cluster path {
stroke-width: 3;
}
.cluster:active path,
.cluster:hover path {
fill: #ffff0011;
}
div.hint {
background-color: #000000aa;
color: white;
font-family: Arial, Helvetica, sans-serif;
border-radius: 1rem;
position: fixed;
top: calc(50% - 4em);
right: calc(50% - 10em);
border: none;
padding: 1em 3em 1em 1em;
}
.hint button {
position: absolute;
font-weight: bolder;
right: 0.6em;
top: 0.6em;
color: inherit;
background-color: inherit;
border: 1px solid currentColor;
border-radius: 1em;
margin-left: 0.6em;
}
.hint a {
color: inherit;
}
#button_help {
color: white;
background-color: #00000011;
border-radius: 1em;
position: fixed;
top: 1em;
right: 1em;
font-size: 24pt;
font-weight: bolder;
width: 2em;
height: 2em;
border: none;
}
#button_help:hover {
cursor: pointer;
background-color: #00000077;
}
@media print {
#button_help {
display: none;
}
div.hint {
display: none;
}
}
</style>
</head>
<body>
<button id="button_help">?</button>
<div id="hints" class="hint" style="display: none">
<button id="close-hints">x</button>
<span id="hint-text"></span>
<ul>
<li><b>Hover</b> - highlight</li>
<li><b>Right-click</b> - pin highlight</li>
<li><b>ESC</b> - clear</li>
</ul>
</div>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 8.0.5 (20230430.1635)
-->
<!-- Title: dependency&#45;cruiser output Pages: 1 -->
<svg width="1776pt" height="943pt"
viewBox="0.00 0.00 1776.00 943.27" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 939.27)">
<title>dependency&#45;cruiser output</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-939.27 1772,-939.27 1772,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_src</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M20,-8C20,-8 1748,-8 1748,-8 1754,-8 1760,-14 1760,-20 1760,-20 1760,-915.27 1760,-915.27 1760,-921.27 1754,-927.27 1748,-927.27 1748,-927.27 20,-927.27 20,-927.27 14,-927.27 8,-921.27 8,-915.27 8,-915.27 8,-20 8,-20 8,-14 14,-8 20,-8"/>
<text text-anchor="middle" x="884" y="-914.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">src</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_src/components</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M978,-273.6C978,-273.6 1632,-273.6 1632,-273.6 1638,-273.6 1644,-279.6 1644,-285.6 1644,-285.6 1644,-601.77 1644,-601.77 1644,-607.77 1638,-613.77 1632,-613.77 1632,-613.77 978,-613.77 978,-613.77 972,-613.77 966,-607.77 966,-601.77 966,-601.77 966,-285.6 966,-285.6 966,-279.6 972,-273.6 978,-273.6"/>
<text text-anchor="middle" x="1305" y="-601.23" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">components</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_src/components/content</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1360,-398.85C1360,-398.85 1530,-398.85 1530,-398.85 1536,-398.85 1542,-404.85 1542,-410.85 1542,-410.85 1542,-576.02 1542,-576.02 1542,-582.02 1536,-588.02 1530,-588.02 1530,-588.02 1360,-588.02 1360,-588.02 1354,-588.02 1348,-582.02 1348,-576.02 1348,-576.02 1348,-410.85 1348,-410.85 1348,-404.85 1354,-398.85 1360,-398.85"/>
<text text-anchor="start" x="1428.88" y="-575.48" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">content</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_src/components/content/icons</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1368,-406.85C1368,-406.85 1414,-406.85 1414,-406.85 1420,-406.85 1426,-412.85 1426,-418.85 1426,-418.85 1426,-550.27 1426,-550.27 1426,-556.27 1420,-562.27 1414,-562.27 1414,-562.27 1368,-562.27 1368,-562.27 1362,-562.27 1356,-556.27 1356,-550.27 1356,-550.27 1356,-418.85 1356,-418.85 1356,-412.85 1362,-406.85 1368,-406.85"/>
<text text-anchor="start" x="1379.38" y="-549.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">icons</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_src/components/elements</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1562,-517.85C1562,-517.85 1624,-517.85 1624,-517.85 1630,-517.85 1636,-523.85 1636,-529.85 1636,-529.85 1636,-557.35 1636,-557.35 1636,-563.35 1630,-569.35 1624,-569.35 1624,-569.35 1562,-569.35 1562,-569.35 1556,-569.35 1550,-563.35 1550,-557.35 1550,-557.35 1550,-529.85 1550,-529.85 1550,-523.85 1556,-517.85 1562,-517.85"/>
<text text-anchor="middle" x="1593" y="-556.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">elements</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_src/components/layout</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1282,-406.85C1282,-406.85 1328,-406.85 1328,-406.85 1334,-406.85 1340,-412.85 1340,-418.85 1340,-418.85 1340,-550.27 1340,-550.27 1340,-556.27 1334,-562.27 1328,-562.27 1328,-562.27 1282,-562.27 1282,-562.27 1276,-562.27 1270,-556.27 1270,-550.27 1270,-550.27 1270,-418.85 1270,-418.85 1270,-412.85 1276,-406.85 1282,-406.85"/>
<text text-anchor="start" x="1291.88" y="-549.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">layout</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_src/components/patterns</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M986,-281.6C986,-281.6 1250,-281.6 1250,-281.6 1256,-281.6 1262,-287.6 1262,-293.6 1262,-293.6 1262,-497.85 1262,-497.85 1262,-503.85 1256,-509.85 1250,-509.85 1250,-509.85 986,-509.85 986,-509.85 980,-509.85 974,-503.85 974,-497.85 974,-497.85 974,-293.6 974,-293.6 974,-287.6 980,-281.6 986,-281.6"/>
<text text-anchor="middle" x="1118" y="-497.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">patterns</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_src/components/patterns/icons</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1084,-289.6C1084,-289.6 1242,-289.6 1242,-289.6 1248,-289.6 1254,-295.6 1254,-301.6 1254,-301.6 1254,-472.1 1254,-472.1 1254,-478.1 1248,-484.1 1242,-484.1 1242,-484.1 1084,-484.1 1084,-484.1 1078,-484.1 1072,-478.1 1072,-472.1 1072,-472.1 1072,-301.6 1072,-301.6 1072,-295.6 1078,-289.6 1084,-289.6"/>
<text text-anchor="start" x="1151.38" y="-471.55" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">icons</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_src/components/patterns/icons/svg&#45;tools</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1170,-297.6C1170,-297.6 1234,-297.6 1234,-297.6 1240,-297.6 1246,-303.6 1246,-309.6 1246,-309.6 1246,-446.35 1246,-446.35 1246,-452.35 1240,-458.35 1234,-458.35 1234,-458.35 1170,-458.35 1170,-458.35 1164,-458.35 1158,-452.35 1158,-446.35 1158,-446.35 1158,-309.6 1158,-309.6 1158,-303.6 1164,-297.6 1170,-297.6"/>
<text text-anchor="middle" x="1202" y="-445.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">svg&#45;tools</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_src/components/patterns/suspense</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1006,-297.6C1006,-297.6 1052,-297.6 1052,-297.6 1058,-297.6 1064,-303.6 1064,-309.6 1064,-309.6 1064,-439.28 1064,-439.28 1064,-445.28 1058,-451.28 1052,-451.28 1052,-451.28 1006,-451.28 1006,-451.28 1000,-451.28 994,-445.28 994,-439.28 994,-439.28 994,-309.6 994,-309.6 994,-303.6 1000,-297.6 1006,-297.6"/>
<text text-anchor="start" x="1008" y="-438.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">suspense</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_src/experiences</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M395,-382.85C395,-382.85 878,-382.85 878,-382.85 884,-382.85 890,-388.85 890,-394.85 890,-394.85 890,-721.7 890,-721.7 890,-727.7 884,-733.7 878,-733.7 878,-733.7 395,-733.7 395,-733.7 389,-733.7 383,-727.7 383,-721.7 383,-721.7 383,-394.85 383,-394.85 383,-388.85 389,-382.85 395,-382.85"/>
<text text-anchor="middle" x="636.5" y="-721.15" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">experiences</text>
</g>
<g id="clust12" class="cluster">
<title>cluster_src/experiences/savings</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M415,-390.85C415,-390.85 870,-390.85 870,-390.85 876,-390.85 882,-396.85 882,-402.85 882,-402.85 882,-695.95 882,-695.95 882,-701.95 876,-707.95 870,-707.95 870,-707.95 415,-707.95 415,-707.95 409,-707.95 403,-701.95 403,-695.95 403,-695.95 403,-402.85 403,-402.85 403,-396.85 409,-390.85 415,-390.85"/>
<text text-anchor="start" x="625.62" y="-695.4" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">savings</text>
</g>
<g id="clust13" class="cluster">
<title>cluster_src/experiences/savings/Header</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M485,-517.85C485,-517.85 531,-517.85 531,-517.85 537,-517.85 543,-523.85 543,-529.85 543,-529.85 543,-670.2 543,-670.2 543,-676.2 537,-682.2 531,-682.2 531,-682.2 485,-682.2 485,-682.2 479,-682.2 473,-676.2 473,-670.2 473,-670.2 473,-529.85 473,-529.85 473,-523.85 479,-517.85 485,-517.85"/>
<text text-anchor="start" x="492.25" y="-669.65" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">Header</text>
</g>
<g id="clust14" class="cluster">
<title>cluster_src/experiences/savings/Results</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M569,-398.85C569,-398.85 716,-398.85 716,-398.85 722,-398.85 728,-404.85 728,-410.85 728,-410.85 728,-670.2 728,-670.2 728,-676.2 722,-682.2 716,-682.2 716,-682.2 569,-682.2 569,-682.2 563,-682.2 557,-676.2 557,-670.2 557,-670.2 557,-410.85 557,-410.85 557,-404.85 563,-398.85 569,-398.85"/>
<text text-anchor="start" x="626" y="-669.65" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">Results</text>
</g>
<g id="clust15" class="cluster">
<title>cluster_src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M639,-406.85C639,-406.85 708,-406.85 708,-406.85 714,-406.85 720,-412.85 720,-418.85 720,-418.85 720,-550.27 720,-550.27 720,-556.27 714,-562.27 708,-562.27 708,-562.27 639,-562.27 639,-562.27 633,-562.27 627,-556.27 627,-550.27 627,-550.27 627,-418.85 627,-418.85 627,-412.85 633,-406.85 639,-406.85"/>
<text text-anchor="start" x="634.88" y="-549.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">SavingsOfferCard</text>
</g>
<g id="clust34" class="cluster">
<title>cluster_src/ui</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M188,-24C188,-24 384,-24 384,-24 390,-24 396,-30 396,-36 396,-36 396,-362.85 396,-362.85 396,-368.85 390,-374.85 384,-374.85 384,-374.85 188,-374.85 188,-374.85 182,-374.85 176,-368.85 176,-362.85 176,-362.85 176,-36 176,-36 176,-30 182,-24 188,-24"/>
<text text-anchor="middle" x="286" y="-362.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">ui</text>
</g>
<g id="clust35" class="cluster">
<title>cluster_src/ui/navigation</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M208,-297.6C208,-297.6 270,-297.6 270,-297.6 276,-297.6 282,-303.6 282,-309.6 282,-309.6 282,-337.1 282,-337.1 282,-343.1 276,-349.1 270,-349.1 270,-349.1 208,-349.1 208,-349.1 202,-349.1 196,-343.1 196,-337.1 196,-337.1 196,-309.6 196,-309.6 196,-303.6 202,-297.6 208,-297.6"/>
<text text-anchor="middle" x="239" y="-336.55" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">navigation</text>
</g>
<g id="clust36" class="cluster">
<title>cluster_src/ui/primitives</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M302,-91.5C302,-91.5 376,-91.5 376,-91.5 382,-91.5 388,-97.5 388,-103.5 388,-103.5 388,-330.03 388,-330.03 388,-336.03 382,-342.03 376,-342.03 376,-342.03 302,-342.03 302,-342.03 296,-342.03 290,-336.03 290,-330.03 290,-330.03 290,-103.5 290,-103.5 290,-97.5 296,-91.5 302,-91.5"/>
<text text-anchor="start" x="317.62" y="-329.48" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">primitives</text>
</g>
<g id="clust37" class="cluster">
<title>cluster_src/ui/typography</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M200,-91.5C200,-91.5 260,-91.5 260,-91.5 266,-91.5 272,-97.5 272,-103.5 272,-103.5 272,-246.53 272,-246.53 272,-252.53 266,-258.53 260,-258.53 260,-258.53 200,-258.53 200,-258.53 194,-258.53 188,-252.53 188,-246.53 188,-246.53 188,-103.5 188,-103.5 188,-97.5 194,-91.5 200,-91.5"/>
<text text-anchor="start" x="205.62" y="-245.98" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">typography</text>
</g>
<g id="clust33" class="cluster">
<title>cluster_src/types</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M837,-24C837,-24 899,-24 899,-24 905,-24 911,-30 911,-36 911,-36 911,-63.5 911,-63.5 911,-69.5 905,-75.5 899,-75.5 899,-75.5 837,-75.5 837,-75.5 831,-75.5 825,-69.5 825,-63.5 825,-63.5 825,-36 825,-36 825,-30 831,-24 837,-24"/>
<text text-anchor="start" x="856" y="-62.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">types</text>
</g>
<g id="clust30" class="cluster">
<title>cluster_src/shared</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1612,-621.77C1612,-621.77 1730,-621.77 1730,-621.77 1736,-621.77 1742,-627.77 1742,-633.77 1742,-633.77 1742,-728.77 1742,-728.77 1742,-734.77 1736,-740.77 1730,-740.77 1730,-740.77 1612,-740.77 1612,-740.77 1606,-740.77 1600,-734.77 1600,-728.77 1600,-728.77 1600,-633.77 1600,-633.77 1600,-627.77 1606,-621.77 1612,-621.77"/>
<text text-anchor="middle" x="1671" y="-728.23" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">shared</text>
</g>
<g id="clust31" class="cluster">
<title>cluster_src/shared/layout</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1632,-629.77C1632,-629.77 1722,-629.77 1722,-629.77 1728,-629.77 1734,-635.77 1734,-641.77 1734,-641.77 1734,-703.02 1734,-703.02 1734,-709.02 1728,-715.02 1722,-715.02 1722,-715.02 1632,-715.02 1632,-715.02 1626,-715.02 1620,-709.02 1620,-703.02 1620,-703.02 1620,-641.77 1620,-641.77 1620,-635.77 1626,-629.77 1632,-629.77"/>
<text text-anchor="start" x="1663.88" y="-702.48" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">layout</text>
</g>
<g id="clust32" class="cluster">
<title>cluster_src/shared/layout/CustomHead</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1652,-637.77C1652,-637.77 1714,-637.77 1714,-637.77 1720,-637.77 1726,-643.77 1726,-649.77 1726,-649.77 1726,-677.27 1726,-677.27 1726,-683.27 1720,-689.27 1714,-689.27 1714,-689.27 1652,-689.27 1652,-689.27 1646,-689.27 1640,-683.27 1640,-677.27 1640,-677.27 1640,-649.77 1640,-649.77 1640,-643.77 1646,-637.77 1652,-637.77"/>
<text text-anchor="start" x="1654.88" y="-676.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">CustomHead</text>
</g>
<g id="clust25" class="cluster">
<title>cluster_src/services</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M474,-83.5C474,-83.5 888,-83.5 888,-83.5 894,-83.5 900,-89.5 900,-95.5 900,-95.5 900,-362.85 900,-362.85 900,-368.85 894,-374.85 888,-374.85 888,-374.85 474,-374.85 474,-374.85 468,-374.85 462,-368.85 462,-362.85 462,-362.85 462,-95.5 462,-95.5 462,-89.5 468,-83.5 474,-83.5"/>
<text text-anchor="middle" x="681" y="-362.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">services</text>
</g>
<g id="clust26" class="cluster">
<title>cluster_src/services/AnalyticsLite</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M706,-169.68C706,-169.68 818,-169.68 818,-169.68 824,-169.68 830,-175.68 830,-181.68 830,-181.68 830,-253.6 830,-253.6 830,-259.6 824,-265.6 818,-265.6 818,-265.6 706,-265.6 706,-265.6 700,-265.6 694,-259.6 694,-253.6 694,-253.6 694,-181.68 694,-181.68 694,-175.68 700,-169.68 706,-169.68"/>
<text text-anchor="start" x="733.88" y="-253.05" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">AnalyticsLite</text>
</g>
<g id="clust27" class="cluster">
<title>cluster_src/services/ConfigManager</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M482,-91.5C482,-91.5 539,-91.5 539,-91.5 545,-91.5 551,-97.5 551,-103.5 551,-103.5 551,-202.1 551,-202.1 551,-208.1 545,-214.1 539,-214.1 539,-214.1 482,-214.1 482,-214.1 476,-214.1 470,-208.1 470,-202.1 470,-202.1 470,-103.5 470,-103.5 470,-97.5 476,-91.5 482,-91.5"/>
<text text-anchor="start" x="477.88" y="-201.55" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">ConfigManager</text>
</g>
<g id="clust28" class="cluster">
<title>cluster_src/services/FionaAPI</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M818,-297.6C818,-297.6 880,-297.6 880,-297.6 886,-297.6 892,-303.6 892,-309.6 892,-309.6 892,-337.1 892,-337.1 892,-343.1 886,-349.1 880,-349.1 880,-349.1 818,-349.1 818,-349.1 812,-349.1 806,-343.1 806,-337.1 806,-337.1 806,-309.6 806,-309.6 806,-303.6 812,-297.6 818,-297.6"/>
<text text-anchor="middle" x="849" y="-336.55" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">FionaAPI</text>
</g>
<g id="clust29" class="cluster">
<title>cluster_src/services/SavingsTransform</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M571,-91.5C571,-91.5 645,-91.5 645,-91.5 651,-91.5 657,-97.5 657,-103.5 657,-103.5 657,-330.03 657,-330.03 657,-336.03 651,-342.03 645,-342.03 645,-342.03 571,-342.03 571,-342.03 565,-342.03 559,-336.03 559,-330.03 559,-330.03 559,-103.5 559,-103.5 559,-97.5 565,-91.5 571,-91.5"/>
<text text-anchor="start" x="568.62" y="-329.48" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">SavingsTransform</text>
</g>
<g id="clust23" class="cluster">
<title>cluster_src/server</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M28,-16C28,-16 156,-16 156,-16 162,-16 168,-22 168,-28 168,-28 168,-149.68 168,-149.68 168,-155.68 162,-161.68 156,-161.68 156,-161.68 28,-161.68 28,-161.68 22,-161.68 16,-155.68 16,-149.68 16,-149.68 16,-28 16,-28 16,-22 22,-16 28,-16"/>
<text text-anchor="middle" x="92" y="-149.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">server</text>
</g>
<g id="clust24" class="cluster">
<title>cluster_src/server/engine</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M98,-24C98,-24 148,-24 148,-24 154,-24 160,-30 160,-36 160,-36 160,-123.93 160,-123.93 160,-129.93 154,-135.93 148,-135.93 148,-135.93 98,-135.93 98,-135.93 92,-135.93 86,-129.93 86,-123.93 86,-123.93 86,-36 86,-36 86,-30 92,-24 98,-24"/>
<text text-anchor="start" x="108.75" y="-123.38" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">engine</text>
</g>
<g id="clust22" class="cluster">
<title>cluster_src/reshaped</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M239,-637.77C239,-637.77 301,-637.77 301,-637.77 307,-637.77 313,-643.77 313,-649.77 313,-649.77 313,-677.27 313,-677.27 313,-683.27 307,-689.27 301,-689.27 301,-689.27 239,-689.27 239,-689.27 233,-689.27 227,-683.27 227,-677.27 227,-677.27 227,-649.77 227,-649.77 227,-643.77 233,-637.77 239,-637.77"/>
<text text-anchor="middle" x="270" y="-676.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">reshaped</text>
</g>
<g id="clust17" class="cluster">
<title>cluster_src/pages</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M364,-748.77C364,-748.77 627,-748.77 627,-748.77 633,-748.77 639,-754.77 639,-760.77 639,-760.77 639,-889.52 639,-889.52 639,-895.52 633,-901.52 627,-901.52 627,-901.52 364,-901.52 364,-901.52 358,-901.52 352,-895.52 352,-889.52 352,-889.52 352,-760.77 352,-760.77 352,-754.77 358,-748.77 364,-748.77"/>
<text text-anchor="start" x="482.38" y="-888.98" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">pages</text>
</g>
<g id="clust18" class="cluster">
<title>cluster_src/pages/api</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M372,-756.77C372,-756.77 500,-756.77 500,-756.77 506,-756.77 512,-762.77 512,-768.77 512,-768.77 512,-863.77 512,-863.77 512,-869.77 506,-875.77 500,-875.77 500,-875.77 372,-875.77 372,-875.77 366,-875.77 360,-869.77 360,-863.77 360,-863.77 360,-768.77 360,-768.77 360,-762.77 366,-756.77 372,-756.77"/>
<text text-anchor="start" x="429.62" y="-863.23" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">api</text>
</g>
<g id="clust19" class="cluster">
<title>cluster_src/pages/api/apps</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M392,-764.77C392,-764.77 492,-764.77 492,-764.77 498,-764.77 504,-770.77 504,-776.77 504,-776.77 504,-838.02 504,-838.02 504,-844.02 498,-850.02 492,-850.02 492,-850.02 392,-850.02 392,-850.02 386,-850.02 380,-844.02 380,-838.02 380,-838.02 380,-776.77 380,-776.77 380,-770.77 386,-764.77 392,-764.77"/>
<text text-anchor="middle" x="442" y="-837.48" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">apps</text>
</g>
<g id="clust20" class="cluster">
<title>cluster_src/pages/api/apps/static</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M412,-772.77C412,-772.77 484,-772.77 484,-772.77 490,-772.77 496,-778.77 496,-784.77 496,-784.77 496,-812.27 496,-812.27 496,-818.27 490,-824.27 484,-824.27 484,-824.27 412,-824.27 412,-824.27 406,-824.27 400,-818.27 400,-812.27 400,-812.27 400,-784.77 400,-784.77 400,-778.77 406,-772.77 412,-772.77"/>
<text text-anchor="middle" x="448" y="-811.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">static</text>
</g>
<g id="clust21" class="cluster">
<title>cluster_src/pages/partner</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M532,-772.77C532,-772.77 607,-772.77 607,-772.77 613,-772.77 619,-778.77 619,-784.77 619,-784.77 619,-812.27 619,-812.27 619,-818.27 613,-824.27 607,-824.27 607,-824.27 532,-824.27 532,-824.27 526,-824.27 520,-818.27 520,-812.27 520,-812.27 520,-784.77 520,-784.77 520,-778.77 526,-772.77 532,-772.77"/>
<text text-anchor="middle" x="569.5" y="-811.73" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">partner</text>
</g>
<g id="clust16" class="cluster">
<title>cluster_src/lib</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M952,-24C952,-24 1240,-24 1240,-24 1246,-24 1252,-30 1252,-36 1252,-36 1252,-131 1252,-131 1252,-137 1246,-143 1240,-143 1240,-143 952,-143 952,-143 946,-143 940,-137 940,-131 940,-131 940,-36 940,-36 940,-30 946,-24 952,-24"/>
<text text-anchor="start" x="1091.12" y="-130.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">lib</text>
</g>
<!-- src -->
<!-- src/components -->
<!-- src/components/content -->
<!-- src/components/content/AdvertiserDisclosure -->
<g id="node4" class="node">
<title>src/components/content/AdvertiserDisclosure</title>
<g id="a_node4"><a xlink:href="src/components/content/AdvertiserDisclosure" xlink:title="AdvertiserDisclosure">
<polygon fill="#ffffcc" stroke="black" points="1534.38,-432.6 1435.6,-432.6 1433.62,-430.63 1433.62,-414.85 1532.4,-414.85 1534.38,-416.82 1534.38,-432.6"/>
<polyline fill="none" stroke="black" points="1532.4,-430.63 1433.62,-430.63"/>
<polyline fill="none" stroke="black" points="1532.4,-430.63 1532.4,-414.85"/>
<polyline fill="none" stroke="black" points="1532.4,-430.63 1534.38,-432.6"/>
<text text-anchor="start" x="1441.62" y="-420.05" font-family="Helvetica,sans-Serif" font-size="9.00">AdvertiserDisclosure</text>
</a>
</g>
</g>
<!-- src/components/content&#45;&gt;src/components/content/AdvertiserDisclosure -->
<g id="edge1" class="edge">
<title>src/components/content&#45;&gt;src/components/content/AdvertiserDisclosure</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1451,-532.8C1451,-532.8 1451,-441.87 1451,-441.87"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1453.1,-441.87 1451,-435.87 1448.9,-441.87 1453.1,-441.87"/>
</g>
<!-- src/components/content/Favicons -->
<g id="node5" class="node">
<title>src/components/content/Favicons</title>
<g id="a_node5"><a xlink:href="src/components/content/Favicons" xlink:title="Favicons">
<polygon fill="#ffffcc" stroke="black" points="1534,-543.6 1481.97,-543.6 1480,-541.63 1480,-525.85 1532.03,-525.85 1534,-527.82 1534,-543.6"/>
<polyline fill="none" stroke="black" points="1532.03,-541.63 1480,-541.63"/>
<polyline fill="none" stroke="black" points="1532.03,-541.63 1532.03,-525.85"/>
<polyline fill="none" stroke="black" points="1532.03,-541.63 1534,-543.6"/>
<text text-anchor="start" x="1488.62" y="-531.05" font-family="Helvetica,sans-Serif" font-size="9.00">Favicons</text>
</a>
</g>
</g>
<!-- src/components/content/icons -->
<!-- src/components/patterns/icons/svg&#45;tools/generator -->
<g id="node7" class="node">
<title>src/components/patterns/icons/svg&#45;tools/generator</title>
<g id="a_node7"><a xlink:href="src/components/patterns/icons/svg-tools/generator" xlink:title="generator">
<polygon fill="#ffffcc" stroke="black" points="1237.88,-432.6 1184.1,-432.6 1182.12,-430.63 1182.12,-414.85 1235.9,-414.85 1237.88,-416.82 1237.88,-432.6"/>
<polyline fill="none" stroke="black" points="1235.9,-430.63 1182.12,-430.63"/>
<polyline fill="none" stroke="black" points="1235.9,-430.63 1235.9,-414.85"/>
<polyline fill="none" stroke="black" points="1235.9,-430.63 1237.88,-432.6"/>
<text text-anchor="start" x="1190.12" y="-420.05" font-family="Helvetica,sans-Serif" font-size="9.00">generator</text>
</a>
</g>
</g>
<!-- src/components/content/icons&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator -->
<g id="edge2" class="edge">
<title>src/components/content/icons&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1365.89,-537C1361.45,-537 1219.29,-537 1219.29,-537 1219.29,-537 1219.29,-441.99 1219.29,-441.99"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1221.39,-441.99 1219.29,-435.99 1217.19,-441.99 1221.39,-441.99"/>
</g>
<!-- src/components/content/icons/assets -->
<g id="node8" class="node">
<title>src/components/content/icons/assets</title>
<g id="a_node8"><a xlink:href="src/components/content/icons/assets" xlink:title="assets">
<polygon fill="#ffffcc" stroke="black" points="1418,-432.6 1365.97,-432.6 1364,-430.63 1364,-414.85 1416.03,-414.85 1418,-416.82 1418,-432.6"/>
<polyline fill="none" stroke="black" points="1416.03,-430.63 1364,-430.63"/>
<polyline fill="none" stroke="black" points="1416.03,-430.63 1416.03,-414.85"/>
<polyline fill="none" stroke="black" points="1416.03,-430.63 1418,-432.6"/>
<text text-anchor="start" x="1377.88" y="-420.05" font-family="Helvetica,sans-Serif" font-size="9.00">assets</text>
</a>
</g>
</g>
<!-- src/components/content/icons&#45;&gt;src/components/content/icons/assets -->
<g id="edge3" class="edge">
<title>src/components/content/icons&#45;&gt;src/components/content/icons/assets</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1366,-532.8C1366,-532.8 1366,-441.87 1366,-441.87"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1368.1,-441.87 1366,-435.87 1363.9,-441.87 1368.1,-441.87"/>
</g>
<!-- src/components/patterns/icons/svg&#45;tools/InlineSvg -->
<g id="node18" class="node">
<title>src/components/patterns/icons/svg&#45;tools/InlineSvg</title>
<g id="a_node18"><a xlink:href="src/components/patterns/icons/svg-tools/InlineSvg" xlink:title="InlineSvg">
<polygon fill="#ffffcc" stroke="black" points="1220.12,-323.35 1167.85,-323.35 1165.88,-321.38 1165.88,-305.6 1218.15,-305.6 1220.12,-307.57 1220.12,-323.35"/>
<polyline fill="none" stroke="black" points="1218.15,-321.38 1165.88,-321.38"/>
<polyline fill="none" stroke="black" points="1218.15,-321.38 1218.15,-305.6"/>
<polyline fill="none" stroke="black" points="1218.15,-321.38 1220.12,-323.35"/>
<text text-anchor="start" x="1173.88" y="-310.8" font-family="Helvetica,sans-Serif" font-size="9.00">InlineSvg</text>
</a>
</g>
</g>
<!-- src/components/patterns/icons/svg&#45;tools/generator&#45;&gt;src/components/patterns/icons/svg&#45;tools/InlineSvg -->
<g id="edge8" class="edge">
<title>src/components/patterns/icons/svg&#45;tools/generator&#45;&gt;src/components/patterns/icons/svg&#45;tools/InlineSvg</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1201.12,-414.41C1201.12,-414.41 1201.12,-332.77 1201.12,-332.77"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1203.23,-332.77 1201.12,-326.77 1199.03,-332.77 1203.23,-332.77"/>
</g>
<!-- src/components/elements -->
<!-- src/components/elements/Portal -->
<g id="node10" class="node">
<title>src/components/elements/Portal</title>
<g id="a_node10"><a xlink:href="src/components/elements/Portal" xlink:title="Portal">
<polygon fill="#ffffcc" stroke="black" points="1612,-543.6 1559.97,-543.6 1558,-541.63 1558,-525.85 1610.03,-525.85 1612,-527.82 1612,-543.6"/>
<polyline fill="none" stroke="black" points="1610.03,-541.63 1558,-541.63"/>
<polyline fill="none" stroke="black" points="1610.03,-541.63 1610.03,-525.85"/>
<polyline fill="none" stroke="black" points="1610.03,-541.63 1612,-543.6"/>
<text text-anchor="start" x="1573" y="-531.05" font-family="Helvetica,sans-Serif" font-size="9.00">Portal</text>
</a>
</g>
</g>
<!-- src/components/layout -->
<!-- src/components/layout/Modal -->
<g id="node12" class="node">
<title>src/components/layout/Modal</title>
<g id="a_node12"><a xlink:href="src/components/layout/Modal" xlink:title="Modal">
<polygon fill="#ffffcc" stroke="black" points="1332,-432.6 1279.97,-432.6 1278,-430.63 1278,-414.85 1330.03,-414.85 1332,-416.82 1332,-432.6"/>
<polyline fill="none" stroke="black" points="1330.03,-430.63 1278,-430.63"/>
<polyline fill="none" stroke="black" points="1330.03,-430.63 1330.03,-414.85"/>
<polyline fill="none" stroke="black" points="1330.03,-430.63 1332,-432.6"/>
<text text-anchor="start" x="1292.25" y="-420.05" font-family="Helvetica,sans-Serif" font-size="9.00">Modal</text>
</a>
</g>
</g>
<!-- src/components/layout&#45;&gt;src/components/layout/Modal -->
<g id="edge4" class="edge">
<title>src/components/layout&#45;&gt;src/components/layout/Modal</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1292,-532.8C1292,-532.8 1292,-441.87 1292,-441.87"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1294.1,-441.87 1292,-435.87 1289.9,-441.87 1294.1,-441.87"/>
</g>
<!-- src/ui/primitives -->
<!-- src/components/layout/Modal&#45;&gt;src/ui/primitives -->
<g id="edge5" class="edge">
<title>src/components/layout/Modal&#45;&gt;src/ui/primitives</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1305,-414.52C1305,-407.49 1305,-399 1305,-399 1305,-399 301.5,-399 301.5,-399 301.5,-399 301.5,-314 301.5,-314 301.5,-314 302.43,-314 302.43,-314"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="301.78,-316.1 307.78,-314 301.78,-311.9 301.78,-316.1"/>
</g>
<!-- src/ui/primitives/Box -->
<g id="node82" class="node">
<title>src/ui/primitives/Box</title>
<g id="a_node82"><a xlink:href="src/ui/primitives/Box" xlink:title="Box">
<polygon fill="#ffffcc" stroke="black" points="352,-117.25 299.97,-117.25 298,-115.28 298,-99.5 350.03,-99.5 352,-101.47 352,-117.25"/>
<polyline fill="none" stroke="black" points="350.03,-115.28 298,-115.28"/>
<polyline fill="none" stroke="black" points="350.03,-115.28 350.03,-99.5"/>
<polyline fill="none" stroke="black" points="350.03,-115.28 352,-117.25"/>
<text text-anchor="start" x="317.12" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">Box</text>
</a>
</g>
</g>
<!-- src/ui/primitives&#45;&gt;src/ui/primitives/Box -->
<g id="edge116" class="edge">
<title>src/ui/primitives&#45;&gt;src/ui/primitives/Box</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M311.6,-312.69C311.6,-312.69 311.6,-126.56 311.6,-126.56"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="313.7,-126.56 311.6,-120.56 309.5,-126.56 313.7,-126.56"/>
</g>
<!-- src/ui/primitives/FlexBox -->
<g id="node83" class="node">
<title>src/ui/primitives/FlexBox</title>
<g id="a_node83"><a xlink:href="src/ui/primitives/FlexBox" xlink:title="FlexBox">
<polygon fill="#ffffcc" stroke="black" points="366,-195.43 313.97,-195.43 312,-193.45 312,-177.68 364.03,-177.68 366,-179.65 366,-195.43"/>
<polyline fill="none" stroke="black" points="364.03,-193.45 312,-193.45"/>
<polyline fill="none" stroke="black" points="364.03,-193.45 364.03,-177.68"/>
<polyline fill="none" stroke="black" points="364.03,-193.45 366,-195.43"/>
<text text-anchor="start" x="322.5" y="-182.88" font-family="Helvetica,sans-Serif" font-size="9.00">FlexBox</text>
</a>
</g>
</g>
<!-- src/ui/primitives&#45;&gt;src/ui/primitives/FlexBox -->
<g id="edge117" class="edge">
<title>src/ui/primitives&#45;&gt;src/ui/primitives/FlexBox</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M315.02,-314C317.21,-314 320.4,-314 320.4,-314 320.4,-314 320.4,-204.72 320.4,-204.72"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="322.5,-204.72 320.4,-198.72 318.3,-204.72 322.5,-204.72"/>
</g>
<!-- src/ui/primitives/Stack -->
<g id="node84" class="node">
<title>src/ui/primitives/Stack</title>
<g id="a_node84"><a xlink:href="src/ui/primitives/Stack" xlink:title="Stack">
<polygon fill="#ffffcc" stroke="black" points="380,-239.85 327.97,-239.85 326,-237.88 326,-222.1 378.03,-222.1 380,-224.07 380,-239.85"/>
<polyline fill="none" stroke="black" points="378.03,-237.88 326,-237.88"/>
<polyline fill="none" stroke="black" points="378.03,-237.88 378.03,-222.1"/>
<polyline fill="none" stroke="black" points="378.03,-237.88 380,-239.85"/>
<text text-anchor="start" x="341.75" y="-227.3" font-family="Helvetica,sans-Serif" font-size="9.00">Stack</text>
</a>
</g>
</g>
<!-- src/ui/primitives&#45;&gt;src/ui/primitives/Stack -->
<g id="edge118" class="edge">
<title>src/ui/primitives&#45;&gt;src/ui/primitives/Stack</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M313.4,-312.21C313.4,-299.34 313.4,-236 313.4,-236 313.4,-236 316.93,-236 316.93,-236"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="316.93,-238.1 322.93,-236 316.93,-233.9 316.93,-238.1"/>
</g>
<!-- src/components/patterns -->
<!-- src/components/patterns/icons -->
<!-- src/components/patterns/icons/blocks -->
<g id="node16" class="node">
<title>src/components/patterns/icons/blocks</title>
<g id="a_node16"><a xlink:href="src/components/patterns/icons/blocks" xlink:title="blocks">
<polygon fill="#ffffcc" stroke="black" points="1134,-432.6 1081.97,-432.6 1080,-430.63 1080,-414.85 1132.03,-414.85 1134,-416.82 1134,-432.6"/>
<polyline fill="none" stroke="black" points="1132.03,-430.63 1080,-430.63"/>
<polyline fill="none" stroke="black" points="1132.03,-430.63 1132.03,-414.85"/>
<polyline fill="none" stroke="black" points="1132.03,-430.63 1134,-432.6"/>
<text text-anchor="start" x="1093.88" y="-420.05" font-family="Helvetica,sans-Serif" font-size="9.00">blocks</text>
</a>
</g>
</g>
<!-- src/components/patterns/icons/svg&#45;tools -->
<!-- src/lib -->
<!-- src/components/patterns/icons/svg&#45;tools/InlineSvg&#45;&gt;src/lib -->
<g id="edge6" class="edge">
<title>src/components/patterns/icons/svg&#45;tools/InlineSvg&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1182,-305.24C1182,-261.71 1182,-79 1182,-79 1182,-79 951.29,-79 951.29,-79 951.29,-79 951.29,-97.8 951.29,-97.8"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="949.19,-97.8 951.29,-103.8 953.39,-97.8 949.19,-97.8"/>
</g>
<!-- src/services/AnalyticsLite/Datadog -->
<g id="node20" class="node">
<title>src/services/AnalyticsLite/Datadog</title>
<g id="a_node20"><a xlink:href="src/services/AnalyticsLite/Datadog" xlink:title="Datadog">
<polygon fill="#ffffcc" stroke="black" points="822,-239.85 769.97,-239.85 768,-237.88 768,-222.1 820.03,-222.1 822,-224.07 822,-239.85"/>
<polyline fill="none" stroke="black" points="820.03,-237.88 768,-237.88"/>
<polyline fill="none" stroke="black" points="820.03,-237.88 820.03,-222.1"/>
<polyline fill="none" stroke="black" points="820.03,-237.88 822,-239.85"/>
<text text-anchor="start" x="777.38" y="-227.3" font-family="Helvetica,sans-Serif" font-size="9.00">Datadog</text>
</a>
</g>
</g>
<!-- src/components/patterns/icons/svg&#45;tools/InlineSvg&#45;&gt;src/services/AnalyticsLite/Datadog -->
<g id="edge7" class="edge">
<title>src/components/patterns/icons/svg&#45;tools/InlineSvg&#45;&gt;src/services/AnalyticsLite/Datadog</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1171.94,-305.14C1171.94,-287.94 1171.94,-253 1171.94,-253 1171.94,-253 810.09,-253 810.09,-253 810.09,-253 810.09,-249.19 810.09,-249.19"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="812.19,-249.19 810.09,-243.19 807.99,-249.19 812.19,-249.19"/>
</g>
<!-- src/types -->
<!-- src/lib&#45;&gt;src/types -->
<g id="edge56" class="edge">
<title>src/lib&#45;&gt;src/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M948.37,-107C934.4,-107 835,-107 835,-107 835,-107 835,-52.08 835,-52.08"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="837.1,-52.08 835,-46.08 832.9,-52.08 837.1,-52.08"/>
</g>
<!-- src/lib/promiseHelpers -->
<g id="node44" class="node">
<title>src/lib/promiseHelpers</title>
<g id="a_node44"><a xlink:href="src/lib/promiseHelpers" xlink:title="promiseHelpers">
<polygon fill="#ccffcc" stroke="black" points="1095.62,-49.75 1016.35,-49.75 1014.38,-47.78 1014.38,-32 1093.65,-32 1095.62,-33.97 1095.62,-49.75"/>
<polyline fill="none" stroke="black" points="1093.65,-47.78 1014.38,-47.78"/>
<polyline fill="none" stroke="black" points="1093.65,-47.78 1093.65,-32"/>
<polyline fill="none" stroke="black" points="1093.65,-47.78 1095.62,-49.75"/>
<text text-anchor="start" x="1022.38" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">promiseHelpers</text>
</a>
</g>
</g>
<!-- src/lib&#45;&gt;src/lib/promiseHelpers -->
<g id="edge52" class="edge">
<title>src/lib&#45;&gt;src/lib/promiseHelpers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M951.29,-110.23C951.29,-115.8 951.29,-132 951.29,-132 951.29,-132 1051.19,-132 1051.19,-132 1051.19,-132 1051.19,-58.95 1051.19,-58.95"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1053.29,-58.95 1051.19,-52.95 1049.09,-58.95 1053.29,-58.95"/>
</g>
<!-- src/lib/system -->
<g id="node45" class="node">
<title>src/lib/system</title>
<g id="a_node45"><a xlink:href="src/lib/system" xlink:title="system">
<polygon fill="#ccffcc" stroke="black" points="1162,-49.75 1109.97,-49.75 1108,-47.78 1108,-32 1160.03,-32 1162,-33.97 1162,-49.75"/>
<polyline fill="none" stroke="black" points="1160.03,-47.78 1108,-47.78"/>
<polyline fill="none" stroke="black" points="1160.03,-47.78 1160.03,-32"/>
<polyline fill="none" stroke="black" points="1160.03,-47.78 1162,-49.75"/>
<text text-anchor="start" x="1120.75" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">system</text>
</a>
</g>
</g>
<!-- src/lib&#45;&gt;src/lib/system -->
<g id="edge53" class="edge">
<title>src/lib&#45;&gt;src/lib/system</title>
<g id="a_edge53"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M950.77,-110.19C950.77,-124.08 950.77,-213 950.77,-213 950.77,-213 1120,-213 1120,-213 1120,-213 1120,-59.13 1120,-59.13"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="1122.1,-59.13 1120,-53.13 1117.9,-59.13 1122.1,-59.13"/>
</a>
</g>
<text text-anchor="middle" x="1039.17" y="-214.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/lib/types -->
<g id="node46" class="node">
<title>src/lib/types</title>
<g id="a_node46"><a xlink:href="src/lib/types" xlink:title="types">
<polygon fill="#ccffcc" stroke="black" points="1002,-49.75 949.97,-49.75 948,-47.78 948,-32 1000.03,-32 1002,-33.97 1002,-49.75"/>
<polyline fill="none" stroke="black" points="1000.03,-47.78 948,-47.78"/>
<polyline fill="none" stroke="black" points="1000.03,-47.78 1000.03,-32"/>
<polyline fill="none" stroke="black" points="1000.03,-47.78 1002,-49.75"/>
<text text-anchor="start" x="964.12" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">types</text>
</a>
</g>
</g>
<!-- src/lib&#45;&gt;src/lib/types -->
<g id="edge54" class="edge">
<title>src/lib&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M951.6,-107C954.48,-107 960.25,-107 960.25,-107 960.25,-107 960.25,-59.07 960.25,-59.07"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="962.35,-59.07 960.25,-53.07 958.15,-59.07 962.35,-59.07"/>
</g>
<!-- src/types/widget -->
<g id="node47" class="node">
<title>src/types/widget</title>
<g id="a_node47"><a xlink:href="src/types/widget" xlink:title="widget">
<polygon fill="#ffffcc" stroke="black" points="903,-49.75 850.97,-49.75 849,-47.78 849,-32 901.03,-32 903,-33.97 903,-49.75"/>
<polyline fill="none" stroke="black" points="901.03,-47.78 849,-47.78"/>
<polyline fill="none" stroke="black" points="901.03,-47.78 901.03,-32"/>
<polyline fill="none" stroke="black" points="901.03,-47.78 903,-49.75"/>
<text text-anchor="start" x="862.5" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">widget</text>
</a>
</g>
</g>
<!-- src/lib&#45;&gt;src/types/widget -->
<g id="edge55" class="edge">
<title>src/lib&#45;&gt;src/types/widget</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M948.36,-107C939.83,-107 900.8,-107 900.8,-107 900.8,-107 900.8,-59.07 900.8,-59.07"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="902.9,-59.07 900.8,-53.07 898.7,-59.07 902.9,-59.07"/>
</g>
<!-- src/services/AnalyticsLite/Datadog&#45;&gt;src/lib -->
<g id="edge94" class="edge">
<title>src/services/AnalyticsLite/Datadog&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M767.77,-226C763.25,-226 760,-226 760,-226 760,-226 760,-109 760,-109 760,-109 938.87,-109 938.87,-109"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="938.87,-111.1 944.87,-109 938.87,-106.9 938.87,-111.1"/>
</g>
<!-- src/services/AnalyticsLite/Datadog&#45;&gt;src/types -->
<g id="edge95" class="edge">
<title>src/services/AnalyticsLite/Datadog&#45;&gt;src/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M822.14,-230C824.46,-230 825.94,-230 825.94,-230 825.94,-230 825.94,-40 825.94,-40 825.94,-40 826.63,-40 826.63,-40"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="823.9,-42.1 829.9,-40 823.9,-37.9 823.9,-42.1"/>
</g>
<!-- src/components/patterns/suspense -->
<!-- src/components/patterns/suspense/internals -->
<g id="node22" class="node">
<title>src/components/patterns/suspense/internals</title>
<g id="a_node22"><a xlink:href="src/components/patterns/suspense/internals" xlink:title="internals">
<polygon fill="#ffffcc" stroke="black" points="1056,-323.35 1003.97,-323.35 1002,-321.38 1002,-305.6 1054.03,-305.6 1056,-307.57 1056,-323.35"/>
<polyline fill="none" stroke="black" points="1054.03,-321.38 1002,-321.38"/>
<polyline fill="none" stroke="black" points="1054.03,-321.38 1054.03,-305.6"/>
<polyline fill="none" stroke="black" points="1054.03,-321.38 1056,-323.35"/>
<text text-anchor="start" x="1011.38" y="-310.8" font-family="Helvetica,sans-Serif" font-size="9.00">internals</text>
</a>
</g>
</g>
<!-- src/components/patterns/suspense&#45;&gt;src/components/patterns/suspense/internals -->
<g id="edge9" class="edge">
<title>src/components/patterns/suspense&#45;&gt;src/components/patterns/suspense/internals</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1030.77,-423C1034.61,-423 1043.4,-423 1043.4,-423 1043.4,-423 1043.4,-332.73 1043.4,-332.73"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1045.5,-332.73 1043.4,-326.73 1041.3,-332.73 1045.5,-332.73"/>
</g>
<!-- src/lib/renderWrappers -->
<g id="node23" class="node">
<title>src/lib/renderWrappers</title>
<g id="a_node23"><a xlink:href="src/lib/renderWrappers" xlink:title="renderWrappers">
<polygon fill="#ccffcc" stroke="black" points="1046.38,-117.25 965.6,-117.25 963.62,-115.28 963.62,-99.5 1044.4,-99.5 1046.38,-101.47 1046.38,-117.25"/>
<polyline fill="none" stroke="black" points="1044.4,-115.28 963.62,-115.28"/>
<polyline fill="none" stroke="black" points="1044.4,-115.28 1044.4,-99.5"/>
<polyline fill="none" stroke="black" points="1044.4,-115.28 1046.38,-117.25"/>
<text text-anchor="start" x="971.62" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">renderWrappers</text>
</a>
</g>
</g>
<!-- src/components/patterns/suspense&#45;&gt;src/lib/renderWrappers -->
<g id="edge10" class="edge">
<title>src/components/patterns/suspense&#45;&gt;src/lib/renderWrappers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1027.11,-423C1019.82,-423 993.9,-423 993.9,-423 993.9,-423 993.9,-126.45 993.9,-126.45"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="996,-126.45 993.9,-120.45 991.8,-126.45 996,-126.45"/>
</g>
<!-- src/components/patterns/suspense/internals&#45;&gt;src/lib -->
<g id="edge13" class="edge">
<title>src/components/patterns/suspense/internals&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1001.56,-311C981.78,-311 958.56,-311 958.56,-311 958.56,-311 958.56,-107 958.56,-107 958.56,-107 957.87,-107 957.87,-107"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="960.65,-104.9 954.65,-107 960.65,-109.1 960.65,-104.9"/>
</g>
<!-- src/components/patterns/suspense/internals&#45;&gt;src/services/AnalyticsLite/Datadog -->
<g id="edge11" class="edge">
<title>src/components/patterns/suspense/internals&#45;&gt;src/services/AnalyticsLite/Datadog</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1024.19,-305.13C1024.19,-291.04 1024.19,-266 1024.19,-266 1024.19,-266 808.04,-266 808.04,-266 808.04,-266 808.04,-249.18 808.04,-249.18"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="810.14,-249.18 808.04,-243.18 805.94,-249.18 810.14,-249.18"/>
</g>
<!-- src/components/patterns/suspense/internals&#45;&gt;src/components/patterns/suspense -->
<g id="edge12" class="edge">
<title>src/components/patterns/suspense/internals&#45;&gt;src/components/patterns/suspense</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1029,-323.79C1029,-323.79 1029,-412.58 1029,-412.58"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1026.9,-412.58 1029,-418.58 1031.1,-412.58 1026.9,-412.58"/>
</g>
<!-- src/experiences -->
<!-- src/experiences/savings -->
<!-- src/experiences/savings&#45;&gt;src/lib -->
<g id="edge15" class="edge">
<title>src/experiences/savings&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M547.73,-421.89C547.73,-407.85 547.73,-318 547.73,-318 547.73,-318 650.8,-318 650.8,-318 650.8,-318 650.8,-147 650.8,-147 650.8,-147 731.33,-147 731.33,-147 731.33,-147 731.33,-108 731.33,-108 731.33,-108 939.11,-108 939.11,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="939.11,-110.1 945.11,-108 939.11,-105.9 939.11,-110.1"/>
</g>
<!-- src/experiences/savings&#45;&gt;src/components/patterns/suspense/internals -->
<g id="edge14" class="edge">
<title>src/experiences/savings&#45;&gt;src/components/patterns/suspense/internals</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M544.84,-423C542.08,-423 537.67,-423 537.67,-423 537.67,-423 537.67,-384 537.67,-384 537.67,-384 1007.04,-384 1007.04,-384 1007.04,-384 1007.04,-332.56 1007.04,-332.56"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1009.14,-332.56 1007.04,-326.56 1004.94,-332.56 1009.14,-332.56"/>
</g>
<!-- src/services/FionaAPI/Lambdas -->
<g id="node26" class="node">
<title>src/services/FionaAPI/Lambdas</title>
<g id="a_node26"><a xlink:href="src/services/FionaAPI/Lambdas" xlink:title="Lambdas">
<polygon fill="#ffffcc" stroke="black" points="884.12,-323.35 831.85,-323.35 829.88,-321.38 829.88,-305.6 882.15,-305.6 884.12,-307.57 884.12,-323.35"/>
<polyline fill="none" stroke="black" points="882.15,-321.38 829.88,-321.38"/>
<polyline fill="none" stroke="black" points="882.15,-321.38 882.15,-305.6"/>
<polyline fill="none" stroke="black" points="882.15,-321.38 884.12,-323.35"/>
<text text-anchor="start" x="837.88" y="-310.8" font-family="Helvetica,sans-Serif" font-size="9.00">Lambdas</text>
</a>
</g>
</g>
<!-- src/experiences/savings&#45;&gt;src/services/FionaAPI/Lambdas -->
<g id="edge16" class="edge">
<title>src/experiences/savings&#45;&gt;src/services/FionaAPI/Lambdas</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M546.53,-421.68C546.53,-410.09 546.53,-353 546.53,-353 546.53,-353 844.62,-353 844.62,-353 844.62,-353 844.62,-332.8 844.62,-332.8"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="846.73,-332.8 844.62,-326.8 842.53,-332.8 846.73,-332.8"/>
</g>
<!-- src/services/SavingsAPI -->
<g id="node27" class="node">
<title>src/services/SavingsAPI</title>
<g id="a_node27"><a xlink:href="src/services/SavingsAPI" xlink:title="SavingsAPI">
<polygon fill="#ffffcc" stroke="black" points="797.62,-323.35 736.35,-323.35 734.38,-321.38 734.38,-305.6 795.65,-305.6 797.62,-307.57 797.62,-323.35"/>
<polyline fill="none" stroke="black" points="795.65,-321.38 734.38,-321.38"/>
<polyline fill="none" stroke="black" points="795.65,-321.38 795.65,-305.6"/>
<polyline fill="none" stroke="black" points="795.65,-321.38 797.62,-323.35"/>
<text text-anchor="start" x="742.38" y="-310.8" font-family="Helvetica,sans-Serif" font-size="9.00">SavingsAPI</text>
</a>
</g>
</g>
<!-- src/experiences/savings&#45;&gt;src/services/SavingsAPI -->
<g id="edge17" class="edge">
<title>src/experiences/savings&#45;&gt;src/services/SavingsAPI</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M548.27,-421.93C548.27,-409.62 548.27,-338 548.27,-338 548.27,-338 783.25,-338 783.25,-338 783.25,-338 783.25,-332.77 783.25,-332.77"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="785.35,-332.77 783.25,-326.77 781.15,-332.77 785.35,-332.77"/>
</g>
<!-- src/experiences/savings&#45;&gt;src/types -->
<g id="edge18" class="edge">
<title>src/experiences/savings&#45;&gt;src/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M548.83,-423C562.86,-423 652.6,-423 652.6,-423 652.6,-423 652.6,-35 652.6,-35 652.6,-35 835.6,-35 835.6,-35 835.6,-35 835.6,-35.38 835.6,-35.38"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="833.5,-29.75 835.6,-35.75 837.7,-29.75 833.5,-29.75"/>
</g>
<!-- src/services/FionaAPI/Lambdas&#45;&gt;src/lib -->
<g id="edge101" class="edge">
<title>src/services/FionaAPI/Lambdas&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M884.36,-317C891.09,-317 896.4,-317 896.4,-317 896.4,-317 896.4,-101 896.4,-101 896.4,-101 949.23,-101 949.23,-101 949.23,-101 949.23,-101.54 949.23,-101.54"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="947.13,-97.36 949.23,-103.36 951.33,-97.36 947.13,-97.36"/>
</g>
<!-- src/services/FionaAPI/Lambdas&#45;&gt;src/services/AnalyticsLite/Datadog -->
<g id="edge102" class="edge">
<title>src/services/FionaAPI/Lambdas&#45;&gt;src/services/AnalyticsLite/Datadog</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M829.42,-309C822.01,-309 816,-309 816,-309 816,-309 816,-249.23 816,-249.23"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="818.1,-249.23 816,-243.23 813.9,-249.23 818.1,-249.23"/>
</g>
<!-- src/services/common -->
<g id="node75" class="node">
<title>src/services/common</title>
<g id="a_node75"><a xlink:href="src/services/common" xlink:title="common">
<polygon fill="#ffffcc" stroke="black" points="892,-239.85 839.97,-239.85 838,-237.88 838,-222.1 890.03,-222.1 892,-224.07 892,-239.85"/>
<polyline fill="none" stroke="black" points="890.03,-237.88 838,-237.88"/>
<polyline fill="none" stroke="black" points="890.03,-237.88 890.03,-222.1"/>
<polyline fill="none" stroke="black" points="890.03,-237.88 892,-239.85"/>
<text text-anchor="start" x="847.38" y="-227.3" font-family="Helvetica,sans-Serif" font-size="9.00">common</text>
</a>
</g>
</g>
<!-- src/services/FionaAPI/Lambdas&#45;&gt;src/services/common -->
<g id="edge103" class="edge">
<title>src/services/FionaAPI/Lambdas&#45;&gt;src/services/common</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M861.06,-305.22C861.06,-305.22 861.06,-249.27 861.06,-249.27"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="863.16,-249.27 861.06,-243.27 858.96,-249.27 863.16,-249.27"/>
</g>
<!-- src/experiences/savings/FeaturedOffer -->
<g id="node29" class="node">
<title>src/experiences/savings/FeaturedOffer</title>
<g id="a_node29"><a xlink:href="src/experiences/savings/FeaturedOffer" xlink:title="FeaturedOffer">
<polygon fill="#ccccff" stroke="black" points="874.12,-663.52 803.85,-663.52 801.88,-661.55 801.88,-645.77 872.15,-645.77 874.12,-647.75 874.12,-663.52"/>
<polyline fill="none" stroke="black" points="872.15,-661.55 801.88,-661.55"/>
<polyline fill="none" stroke="black" points="872.15,-661.55 872.15,-645.77"/>
<polyline fill="none" stroke="black" points="872.15,-661.55 874.12,-663.52"/>
<text text-anchor="start" x="809.88" y="-650.98" font-family="Helvetica,sans-Serif" font-size="9.00">FeaturedOffer</text>
</a>
</g>
</g>
<!-- src/experiences/savings/FeaturedOffer&#45;&gt;src/components/patterns/suspense -->
<g id="edge23" class="edge">
<title>src/experiences/savings/FeaturedOffer&#45;&gt;src/components/patterns/suspense</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M874.49,-649C930.08,-649 1029.6,-649 1029.6,-649 1029.6,-649 1029.6,-434.67 1029.6,-434.67"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1031.7,-434.67 1029.6,-428.67 1027.5,-434.67 1031.7,-434.67"/>
</g>
<!-- src/experiences/savings/FeaturedOffer&#45;&gt;src/components/patterns/suspense/internals -->
<g id="edge22" class="edge">
<title>src/experiences/savings/FeaturedOffer&#45;&gt;src/components/patterns/suspense/internals</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M874.25,-647C926.59,-647 1017.12,-647 1017.12,-647 1017.12,-647 1017.12,-332.72 1017.12,-332.72"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1019.22,-332.72 1017.12,-326.72 1015.02,-332.72 1019.22,-332.72"/>
</g>
<!-- src/lib/images -->
<g id="node30" class="node">
<title>src/lib/images</title>
<g id="a_node30"><a xlink:href="src/lib/images" xlink:title="images">
<polygon fill="#ccffcc" stroke="black" points="1112,-117.25 1059.97,-117.25 1058,-115.28 1058,-99.5 1110.03,-99.5 1112,-101.47 1112,-117.25"/>
<polyline fill="none" stroke="black" points="1110.03,-115.28 1058,-115.28"/>
<polyline fill="none" stroke="black" points="1110.03,-115.28 1110.03,-99.5"/>
<polyline fill="none" stroke="black" points="1110.03,-115.28 1112,-117.25"/>
<text text-anchor="start" x="1070" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">images</text>
</a>
</g>
</g>
<!-- src/experiences/savings/FeaturedOffer&#45;&gt;src/lib/images -->
<g id="edge19" class="edge">
<title>src/experiences/savings/FeaturedOffer&#45;&gt;src/lib/images</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M874.6,-651C939.74,-651 1069,-651 1069,-651 1069,-651 1069,-126.34 1069,-126.34"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1071.1,-126.34 1069,-120.34 1066.9,-126.34 1071.1,-126.34"/>
</g>
<!-- src/services/BridgeAPI -->
<g id="node31" class="node">
<title>src/services/BridgeAPI</title>
<g id="a_node31"><a xlink:href="src/services/BridgeAPI" xlink:title="BridgeAPI">
<polygon fill="#ffffcc" stroke="black" points="722.62,-323.35 667.35,-323.35 665.38,-321.38 665.38,-305.6 720.65,-305.6 722.62,-307.57 722.62,-323.35"/>
<polyline fill="none" stroke="black" points="720.65,-321.38 665.38,-321.38"/>
<polyline fill="none" stroke="black" points="720.65,-321.38 720.65,-305.6"/>
<polyline fill="none" stroke="black" points="720.65,-321.38 722.62,-323.35"/>
<text text-anchor="start" x="673.38" y="-310.8" font-family="Helvetica,sans-Serif" font-size="9.00">BridgeAPI</text>
</a>
</g>
</g>
<!-- src/experiences/savings/FeaturedOffer&#45;&gt;src/services/BridgeAPI -->
<g id="edge20" class="edge">
<title>src/experiences/savings/FeaturedOffer&#45;&gt;src/services/BridgeAPI</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M805.98,-645.58C805.98,-618.31 805.98,-539 805.98,-539 805.98,-539 717.31,-539 717.31,-539 717.31,-539 717.31,-332.84 717.31,-332.84"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="719.41,-332.84 717.31,-326.84 715.21,-332.84 719.41,-332.84"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard -->
<!-- src/experiences/savings/FeaturedOffer&#45;&gt;src/experiences/savings/Results/SavingsOfferCard -->
<g id="edge21" class="edge">
<title>src/experiences/savings/FeaturedOffer&#45;&gt;src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M812.15,-645.66C812.15,-617.83 812.15,-535 812.15,-535 812.15,-535 708,-535 708,-535"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="708,-532.9 702,-535 708,-537.1 708,-532.9"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/lib -->
<g id="edge50" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M698.89,-534C722.07,-534 950.26,-534 950.26,-534 950.26,-534 950.26,-119.27 950.26,-119.27"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="952.36,-119.27 950.26,-113.27 948.16,-119.27 952.36,-119.27"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/components/patterns/suspense/internals -->
<g id="edge49" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/components/patterns/suspense/internals</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M697,-536.87C697,-538.33 697,-540 697,-540 697,-540 1012.08,-540 1012.08,-540 1012.08,-540 1012.08,-332.6 1012.08,-332.6"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1014.18,-332.6 1012.08,-326.6 1009.98,-332.6 1014.18,-332.6"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard/Trivia -->
<g id="node43" class="node">
<title>src/experiences/savings/Results/SavingsOfferCard/Trivia</title>
<g id="a_node43"><a xlink:href="src/experiences/savings/Results/SavingsOfferCard/Trivia" xlink:title="Trivia">
<polygon fill="#ccccff" stroke="black" points="712,-432.6 659.97,-432.6 658,-430.63 658,-414.85 710.03,-414.85 712,-416.82 712,-432.6"/>
<polyline fill="none" stroke="black" points="710.03,-430.63 658,-430.63"/>
<polyline fill="none" stroke="black" points="710.03,-430.63 710.03,-414.85"/>
<polyline fill="none" stroke="black" points="710.03,-430.63 712,-432.6"/>
<text text-anchor="start" x="673.75" y="-420.05" font-family="Helvetica,sans-Serif" font-size="9.00">Trivia</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/experiences/savings/Results/SavingsOfferCard/Trivia -->
<g id="edge48" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/experiences/savings/Results/SavingsOfferCard/Trivia</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M697,-532.8C697,-532.8 697,-441.87 697,-441.87"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="699.1,-441.87 697,-435.87 694.9,-441.87 699.1,-441.87"/>
</g>
<!-- src/experiences/savings/Footer -->
<g id="node33" class="node">
<title>src/experiences/savings/Footer</title>
<g id="a_node33"><a xlink:href="src/experiences/savings/Footer" xlink:title="Footer">
<polygon fill="#ccccff" stroke="black" points="790,-663.52 737.97,-663.52 736,-661.55 736,-645.77 788.03,-645.77 790,-647.75 790,-663.52"/>
<polyline fill="none" stroke="black" points="788.03,-661.55 736,-661.55"/>
<polyline fill="none" stroke="black" points="788.03,-661.55 788.03,-645.77"/>
<polyline fill="none" stroke="black" points="788.03,-661.55 790,-663.52"/>
<text text-anchor="start" x="749.88" y="-650.98" font-family="Helvetica,sans-Serif" font-size="9.00">Footer</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/content/icons -->
<g id="edge25" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/content/icons</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M763,-645.39C763,-632.58 763,-611 763,-611 763,-611 1312.9,-611 1312.9,-611 1312.9,-611 1312.9,-534 1312.9,-534 1312.9,-534 1355.23,-534 1355.23,-534"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1355.23,-536.1 1361.23,-534 1355.23,-531.9 1355.23,-536.1"/>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator -->
<g id="edge29" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M749.5,-645.52C749.5,-627.48 749.5,-589 749.5,-589 749.5,-589 1200.71,-589 1200.71,-589 1200.71,-589 1200.71,-442.08 1200.71,-442.08"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1202.81,-442.08 1200.71,-436.08 1198.61,-442.08 1202.81,-442.08"/>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/elements/Portal -->
<g id="edge26" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/elements/Portal</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M769.75,-645.29C769.75,-639.83 769.75,-634 769.75,-634 769.75,-634 1574.73,-634 1574.73,-634 1574.73,-634 1574.73,-552.89 1574.73,-552.89"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1576.83,-552.89 1574.73,-546.89 1572.63,-552.89 1576.83,-552.89"/>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/layout -->
<g id="edge27" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/layout</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M756.25,-645.63C756.25,-630.1 756.25,-600 756.25,-600 756.25,-600 1292,-600 1292,-600 1292,-600 1292,-545.9 1292,-545.9"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1294.1,-545.9 1292,-539.9 1289.9,-545.9 1294.1,-545.9"/>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/ui/primitives -->
<g id="edge31" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/ui/primitives</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M735.53,-658C637.83,-658 313,-658 313,-658 313,-658 313,-325.67 313,-325.67"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="315.1,-325.67 313,-319.67 310.9,-325.67 315.1,-325.67"/>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/blocks -->
<g id="edge28" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/blocks</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M776.5,-645.52C776.5,-603.31 776.5,-429 776.5,-429 776.5,-429 1070.67,-429 1070.67,-429"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1070.67,-431.1 1076.67,-429 1070.67,-426.9 1070.67,-431.1"/>
</g>
<!-- src/ui/theme -->
<g id="node34" class="node">
<title>src/ui/theme</title>
<g id="a_node34"><a xlink:href="src/ui/theme" xlink:title="theme">
<polygon fill="#ffffcc" stroke="black" points="352,-49.75 299.97,-49.75 298,-47.78 298,-32 350.03,-32 352,-33.97 352,-49.75"/>
<polyline fill="none" stroke="black" points="350.03,-47.78 298,-47.78"/>
<polyline fill="none" stroke="black" points="350.03,-47.78 350.03,-32"/>
<polyline fill="none" stroke="black" points="350.03,-47.78 352,-49.75"/>
<text text-anchor="start" x="312.25" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">theme</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/ui/theme -->
<g id="edge24" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/ui/theme</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M735.54,-647C648.67,-647 385.47,-647 385.47,-647 385.47,-647 385.47,-44 385.47,-44 385.47,-44 361.4,-44 361.4,-44"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="361.4,-41.9 355.4,-44 361.4,-46.1 361.4,-41.9"/>
</g>
<!-- src/ui/navigation/Link -->
<g id="node35" class="node">
<title>src/ui/navigation/Link</title>
<g id="a_node35"><a xlink:href="src/ui/navigation/Link" xlink:title="Link">
<polygon fill="#ffffcc" stroke="black" points="274,-323.35 221.97,-323.35 220,-321.38 220,-305.6 272.03,-305.6 274,-307.57 274,-323.35"/>
<polyline fill="none" stroke="black" points="272.03,-321.38 220,-321.38"/>
<polyline fill="none" stroke="black" points="272.03,-321.38 272.03,-305.6"/>
<polyline fill="none" stroke="black" points="272.03,-321.38 274,-323.35"/>
<text text-anchor="start" x="238.38" y="-310.8" font-family="Helvetica,sans-Serif" font-size="9.00">Link</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/ui/navigation/Link -->
<g id="edge30" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/ui/navigation/Link</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M735.65,-649C648.46,-649 382.73,-649 382.73,-649 382.73,-649 382.73,-321 382.73,-321 382.73,-321 283.47,-321 283.47,-321"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="283.47,-318.9 277.47,-321 283.47,-323.1 283.47,-318.9"/>
</g>
<!-- src/ui/typography -->
<!-- src/experiences/savings/Footer&#45;&gt;src/ui/typography -->
<g id="edge32" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/ui/typography</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M742.75,-645.33C742.75,-635.99 742.75,-623 742.75,-623 742.75,-623 213.9,-623 213.9,-623 213.9,-623 213.9,-230 213.9,-230 213.9,-230 224.05,-230 224.05,-230"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="224.05,-232.1 230.05,-230 224.05,-227.9 224.05,-232.1"/>
</g>
<!-- src/ui/navigation/Link&#45;&gt;src/ui/theme -->
<g id="edge114" class="edge">
<title>src/ui/navigation/Link&#45;&gt;src/ui/theme</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M269.19,-305.2C269.19,-257.81 269.19,-45 269.19,-45 269.19,-45 288.75,-45 288.75,-45"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="288.75,-47.1 294.75,-45 288.75,-42.9 288.75,-47.1"/>
</g>
<!-- src/ui/navigation/Link&#45;&gt;src/ui/typography -->
<g id="edge115" class="edge">
<title>src/ui/navigation/Link&#45;&gt;src/ui/typography</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M235,-305.22C235,-305.22 235,-242.27 235,-242.27"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="237.1,-242.27 235,-236.27 232.9,-242.27 237.1,-242.27"/>
</g>
<!-- src/ui/typography/Anchor -->
<g id="node85" class="node">
<title>src/ui/typography/Anchor</title>
<g id="a_node85"><a xlink:href="src/ui/typography/Anchor" xlink:title="Anchor">
<polygon fill="#ffffcc" stroke="black" points="250,-195.43 197.97,-195.43 196,-193.45 196,-177.68 248.03,-177.68 250,-179.65 250,-195.43"/>
<polyline fill="none" stroke="black" points="248.03,-193.45 196,-193.45"/>
<polyline fill="none" stroke="black" points="248.03,-193.45 248.03,-177.68"/>
<polyline fill="none" stroke="black" points="248.03,-193.45 250,-195.43"/>
<text text-anchor="start" x="208.38" y="-182.88" font-family="Helvetica,sans-Serif" font-size="9.00">Anchor</text>
</a>
</g>
</g>
<!-- src/ui/typography&#45;&gt;src/ui/typography/Anchor -->
<g id="edge124" class="edge">
<title>src/ui/typography&#45;&gt;src/ui/typography/Anchor</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M235,-228.83C235,-228.83 235,-204.66 235,-204.66"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="237.1,-204.66 235,-198.66 232.9,-204.66 237.1,-204.66"/>
</g>
<!-- src/ui/typography/Typography -->
<g id="node86" class="node">
<title>src/ui/typography/Typography</title>
<g id="a_node86"><a xlink:href="src/ui/typography/Typography" xlink:title="Typography">
<polygon fill="#ffffcc" stroke="black" points="264.38,-117.25 201.6,-117.25 199.62,-115.28 199.62,-99.5 262.4,-99.5 264.38,-101.47 264.38,-117.25"/>
<polyline fill="none" stroke="black" points="262.4,-115.28 199.62,-115.28"/>
<polyline fill="none" stroke="black" points="262.4,-115.28 262.4,-99.5"/>
<polyline fill="none" stroke="black" points="262.4,-115.28 264.38,-117.25"/>
<text text-anchor="start" x="207.62" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">Typography</text>
</a>
</g>
</g>
<!-- src/ui/typography&#45;&gt;src/ui/typography/Typography -->
<g id="edge125" class="edge">
<title>src/ui/typography&#45;&gt;src/ui/typography/Typography</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M237.05,-230C242.54,-230 257.19,-230 257.19,-230 257.19,-230 257.19,-126.52 257.19,-126.52"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="259.29,-126.52 257.19,-120.52 255.09,-126.52 259.29,-126.52"/>
</g>
<!-- src/experiences/savings/FormBar -->
<g id="node37" class="node">
<title>src/experiences/savings/FormBar</title>
<g id="a_node37"><a xlink:href="src/experiences/savings/FormBar" xlink:title="FormBar">
<polygon fill="#ccccff" stroke="black" points="465,-543.6 412.97,-543.6 411,-541.63 411,-525.85 463.03,-525.85 465,-527.82 465,-543.6"/>
<polyline fill="none" stroke="black" points="463.03,-541.63 411,-541.63"/>
<polyline fill="none" stroke="black" points="463.03,-541.63 463.03,-525.85"/>
<polyline fill="none" stroke="black" points="463.03,-541.63 465,-543.6"/>
<text text-anchor="start" x="420.38" y="-531.05" font-family="Helvetica,sans-Serif" font-size="9.00">FormBar</text>
</a>
</g>
</g>
<!-- src/experiences/savings/FormBar&#45;&gt;src/components/content -->
<g id="edge35" class="edge">
<title>src/experiences/savings/FormBar&#45;&gt;src/components/content</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M438,-544.01C438,-581.8 438,-722 438,-722 438,-722 1451,-722 1451,-722 1451,-722 1451,-545.83 1451,-545.83"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1453.1,-545.83 1451,-539.83 1448.9,-545.83 1453.1,-545.83"/>
</g>
<!-- src/experiences/savings/FormBar&#45;&gt;src/lib -->
<g id="edge36" class="edge">
<title>src/experiences/savings/FormBar&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M432.6,-525.51C432.6,-481.17 432.6,-292 432.6,-292 432.6,-292 955.18,-292 955.18,-292 955.18,-292 955.18,-108 955.18,-108 955.18,-108 954.87,-108 954.87,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="961.11,-105.9 955.11,-108 961.11,-110.1 961.11,-105.9"/>
</g>
<!-- src/experiences/savings/FormBar&#45;&gt;src/experiences/savings -->
<g id="edge33" class="edge">
<title>src/experiences/savings/FormBar&#45;&gt;src/experiences/savings</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M454.2,-525.66C454.2,-499.22 454.2,-424 454.2,-424 454.2,-424 536.06,-424 536.06,-424"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="536.06,-426.1 542.06,-424 536.06,-421.9 536.06,-426.1"/>
</g>
<!-- src/experiences/savings/FormBar&#45;&gt;src/services/FionaAPI/Lambdas -->
<g id="edge37" class="edge">
<title>src/experiences/savings/FormBar&#45;&gt;src/services/FionaAPI/Lambdas</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M443.4,-525.64C443.4,-506.34 443.4,-463 443.4,-463 443.4,-463 859.38,-463 859.38,-463 859.38,-463 859.38,-332.77 859.38,-332.77"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="861.48,-332.77 859.38,-326.77 857.28,-332.77 861.48,-332.77"/>
</g>
<!-- src/experiences/savings/FormBar&#45;&gt;src/types -->
<g id="edge34" class="edge">
<title>src/experiences/savings/FormBar&#45;&gt;src/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M421.8,-525.69C421.8,-456.54 421.8,-14 421.8,-14 421.8,-14 834.4,-14 834.4,-14 834.4,-14 834.4,-29.77 834.4,-29.77"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="832.3,-29.77 834.4,-35.77 836.5,-29.77 832.3,-29.77"/>
</g>
<!-- src/experiences/savings/Header -->
<!-- src/experiences/savings/Header&#45;&gt;src/lib -->
<g id="edge39" class="edge">
<title>src/experiences/savings/Header&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M522.01,-655C534.54,-655 601.35,-655 601.35,-655 601.35,-655 601.35,-577 601.35,-577 601.35,-577 898.6,-577 898.6,-577 898.6,-577 898.6,-104 898.6,-104 898.6,-104 948.71,-104 948.71,-104 948.71,-104 948.71,-104.26 948.71,-104.26"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="946.61,-97.6 948.71,-103.6 950.81,-97.6 946.61,-97.6"/>
</g>
<!-- src/experiences/savings/Header/brands -->
<g id="node39" class="node">
<title>src/experiences/savings/Header/brands</title>
<g id="a_node39"><a xlink:href="src/experiences/savings/Header/brands" xlink:title="brands">
<polygon fill="#ccccff" stroke="black" points="535,-543.6 482.97,-543.6 481,-541.63 481,-525.85 533.03,-525.85 535,-527.82 535,-543.6"/>
<polyline fill="none" stroke="black" points="533.03,-541.63 481,-541.63"/>
<polyline fill="none" stroke="black" points="533.03,-541.63 533.03,-525.85"/>
<polyline fill="none" stroke="black" points="533.03,-541.63 535,-543.6"/>
<text text-anchor="start" x="493.75" y="-531.05" font-family="Helvetica,sans-Serif" font-size="9.00">brands</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Header&#45;&gt;src/experiences/savings/Header/brands -->
<g id="edge38" class="edge">
<title>src/experiences/savings/Header&#45;&gt;src/experiences/savings/Header/brands</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M517.92,-654C513.38,-654 503,-654 503,-654 503,-654 503,-553.08 503,-553.08"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="505.1,-553.08 503,-547.08 500.9,-553.08 505.1,-553.08"/>
</g>
<!-- src/experiences/savings/Header/brands&#45;&gt;src/experiences/savings/Header -->
<g id="edge41" class="edge">
<title>src/experiences/savings/Header/brands&#45;&gt;src/experiences/savings/Header</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M520,-543.74C520,-543.74 520,-643.57 520,-643.57"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="517.9,-643.57 520,-649.57 522.1,-643.57 517.9,-643.57"/>
</g>
<!-- src/services/ConfigManager -->
<!-- src/experiences/savings/Header/brands&#45;&gt;src/services/ConfigManager -->
<g id="edge40" class="edge">
<title>src/experiences/savings/Header/brands&#45;&gt;src/services/ConfigManager</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M506.1,-525.37C506.1,-469.75 506.1,-185 506.1,-185 506.1,-185 514.52,-185 514.52,-185"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="514.52,-187.1 520.52,-185 514.52,-182.9 514.52,-187.1"/>
</g>
<!-- src/services/ConfigManager&#45;&gt;src/lib -->
<g id="edge100" class="edge">
<title>src/services/ConfigManager&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M522.85,-187C514.54,-187 485,-187 485,-187 485,-187 485,-369 485,-369 485,-369 949.23,-369 949.23,-369 949.23,-369 949.23,-119.32 949.23,-119.32"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="951.33,-119.32 949.23,-113.32 947.13,-119.32 951.33,-119.32"/>
</g>
<!-- src/services/ConfigManager&#45;&gt;src/experiences/savings -->
<g id="edge98" class="edge">
<title>src/services/ConfigManager&#45;&gt;src/experiences/savings</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M527.23,-187C532.62,-187 545.87,-187 545.87,-187 545.87,-187 545.87,-412.96 545.87,-412.96"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="543.77,-412.96 545.87,-418.96 547.97,-412.96 543.77,-412.96"/>
</g>
<!-- src/services/Logger -->
<g id="node65" class="node">
<title>src/services/Logger</title>
<g id="a_node65"><a xlink:href="src/services/Logger" xlink:title="Logger">
<polygon fill="#ffffcc" stroke="black" points="719,-117.25 666.97,-117.25 665,-115.28 665,-99.5 717.03,-99.5 719,-101.47 719,-117.25"/>
<polyline fill="none" stroke="black" points="717.03,-115.28 665,-115.28"/>
<polyline fill="none" stroke="black" points="717.03,-115.28 717.03,-99.5"/>
<polyline fill="none" stroke="black" points="717.03,-115.28 719,-117.25"/>
<text text-anchor="start" x="677.38" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">Logger</text>
</a>
</g>
</g>
<!-- src/services/ConfigManager&#45;&gt;src/services/Logger -->
<g id="edge99" class="edge">
<title>src/services/ConfigManager&#45;&gt;src/services/Logger</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M525,-188.69C525,-193.35 525,-204 525,-204 525,-204 677.58,-204 677.58,-204 677.58,-204 677.58,-126.54 677.58,-126.54"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="679.68,-126.54 677.58,-120.54 675.48,-126.54 679.68,-126.54"/>
</g>
<!-- src/services/ConfigManager/queries -->
<g id="node73" class="node">
<title>src/services/ConfigManager/queries</title>
<g id="a_node73"><a xlink:href="src/services/ConfigManager/queries" xlink:title="queries">
<polygon fill="#ffffcc" stroke="black" points="543,-117.25 490.97,-117.25 489,-115.28 489,-99.5 541.03,-99.5 543,-101.47 543,-117.25"/>
<polyline fill="none" stroke="black" points="541.03,-115.28 489,-115.28"/>
<polyline fill="none" stroke="black" points="541.03,-115.28 541.03,-99.5"/>
<polyline fill="none" stroke="black" points="541.03,-115.28 543,-117.25"/>
<text text-anchor="start" x="500.62" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">queries</text>
</a>
</g>
</g>
<!-- src/services/ConfigManager&#45;&gt;src/services/ConfigManager/queries -->
<g id="edge97" class="edge">
<title>src/services/ConfigManager&#45;&gt;src/services/ConfigManager/queries</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M525,-184.29C525,-184.29 525,-126.59 525,-126.59"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="527.1,-126.59 525,-120.59 522.9,-126.59 527.1,-126.59"/>
</g>
<!-- src/experiences/savings/Results -->
<!-- src/experiences/savings/Results&#45;&gt;src/components/patterns/suspense -->
<g id="edge46" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/components/patterns/suspense</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M643.4,-652.49C643.4,-635.93 643.4,-530 643.4,-530 643.4,-530 1028.4,-530 1028.4,-530 1028.4,-530 1028.4,-434.94 1028.4,-434.94"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1030.5,-434.94 1028.4,-428.94 1026.3,-434.94 1030.5,-434.94"/>
</g>
<!-- src/experiences/savings/Results&#45;&gt;src/components/patterns/suspense/internals -->
<g id="edge45" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/components/patterns/suspense/internals</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M644.6,-656.66C644.6,-664.42 644.6,-692 644.6,-692 644.6,-692 1022.16,-692 1022.16,-692 1022.16,-692 1022.16,-332.81 1022.16,-332.81"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1024.26,-332.81 1022.16,-326.81 1020.06,-332.81 1024.26,-332.81"/>
</g>
<!-- src/experiences/savings/Results&#45;&gt;src/experiences/savings -->
<g id="edge42" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/experiences/savings</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M646.01,-654C649.03,-654 654.4,-654 654.4,-654 654.4,-654 654.4,-566 654.4,-566 654.4,-566 547.6,-566 547.6,-566 547.6,-566 547.6,-434.74 547.6,-434.74"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="549.7,-434.74 547.6,-428.74 545.5,-434.74 549.7,-434.74"/>
</g>
<!-- src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/SavingsOfferCard -->
<g id="edge44" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M644.6,-652.56C644.6,-636.53 644.6,-534 644.6,-534 644.6,-534 686.26,-534 686.26,-534"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="686.26,-536.1 692.26,-534 686.26,-531.9 686.26,-536.1"/>
</g>
<!-- src/experiences/savings/Results/NoOffers -->
<g id="node42" class="node">
<title>src/experiences/savings/Results/NoOffers</title>
<g id="a_node42"><a xlink:href="src/experiences/savings/Results/NoOffers" xlink:title="NoOffers">
<polygon fill="#ccccff" stroke="black" points="619,-543.6 566.97,-543.6 565,-541.63 565,-525.85 617.03,-525.85 619,-527.82 619,-543.6"/>
<polyline fill="none" stroke="black" points="617.03,-541.63 565,-541.63"/>
<polyline fill="none" stroke="black" points="617.03,-541.63 617.03,-525.85"/>
<polyline fill="none" stroke="black" points="617.03,-541.63 619,-543.6"/>
<text text-anchor="start" x="574" y="-531.05" font-family="Helvetica,sans-Serif" font-size="9.00">NoOffers</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/NoOffers -->
<g id="edge43" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/NoOffers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M642.09,-654C635.62,-654 614.9,-654 614.9,-654 614.9,-654 614.9,-553.08 614.9,-553.08"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="617,-553.08 614.9,-547.08 612.8,-553.08 617,-553.08"/>
</g>
<!-- src/experiences/savings/Results/NoOffers&#45;&gt;src/experiences/savings -->
<g id="edge47" class="edge">
<title>src/experiences/savings/Results/NoOffers&#45;&gt;src/experiences/savings</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M569.6,-525.66C569.6,-499.22 569.6,-424 569.6,-424 569.6,-424 558.09,-424 558.09,-424"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="558.09,-421.9 552.09,-424 558.09,-426.1 558.09,-421.9"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard/Trivia&#45;&gt;src/experiences/savings/Results/SavingsOfferCard -->
<g id="edge51" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard/Trivia&#45;&gt;src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M705.4,-433.04C705.4,-459.47 705.4,-533 705.4,-533 705.4,-533 704.69,-533 704.69,-533"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="707.31,-530.9 701.31,-533 707.31,-535.1 707.31,-530.9"/>
</g>
<!-- src/lib/system&#45;&gt;src/lib -->
<g id="edge58" class="edge">
<title>src/lib/system&#45;&gt;src/lib</title>
<g id="a_edge58"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M1116,-49.94C1116,-54.47 1116,-59 1116,-59 1116,-59 950.26,-59 950.26,-59 950.26,-59 950.26,-97.25 950.26,-97.25"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="948.16,-97.25 950.26,-103.25 952.36,-97.25 948.16,-97.25"/>
</a>
</g>
<text text-anchor="middle" x="996.78" y="-60.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/lib/types&#45;&gt;src/lib -->
<g id="edge59" class="edge">
<title>src/lib/types&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M949.74,-49.98C949.74,-49.98 949.74,-97.17 949.74,-97.17"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="947.64,-97.17 949.74,-103.17 951.84,-97.17 947.64,-97.17"/>
</g>
<!-- src/lib/hooks -->
<g id="node48" class="node">
<title>src/lib/hooks</title>
<g id="a_node48"><a xlink:href="src/lib/hooks" xlink:title="hooks">
<polygon fill="#ccffcc" stroke="black" points="1244,-117.25 1191.97,-117.25 1190,-115.28 1190,-99.5 1242.03,-99.5 1244,-101.47 1244,-117.25"/>
<polyline fill="none" stroke="black" points="1242.03,-115.28 1190,-115.28"/>
<polyline fill="none" stroke="black" points="1242.03,-115.28 1242.03,-99.5"/>
<polyline fill="none" stroke="black" points="1242.03,-115.28 1244,-117.25"/>
<text text-anchor="start" x="1204.62" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">hooks</text>
</a>
</g>
</g>
<!-- src/lib/objects -->
<g id="node49" class="node">
<title>src/lib/objects</title>
<g id="a_node49"><a xlink:href="src/lib/objects" xlink:title="objects">
<polygon fill="#ccffcc" stroke="black" points="1228,-49.75 1175.97,-49.75 1174,-47.78 1174,-32 1226.03,-32 1228,-33.97 1228,-49.75"/>
<polyline fill="none" stroke="black" points="1226.03,-47.78 1174,-47.78"/>
<polyline fill="none" stroke="black" points="1226.03,-47.78 1226.03,-32"/>
<polyline fill="none" stroke="black" points="1226.03,-47.78 1228,-49.75"/>
<text text-anchor="start" x="1186.38" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">objects</text>
</a>
</g>
</g>
<!-- src/lib/routing -->
<g id="node50" class="node">
<title>src/lib/routing</title>
<g id="a_node50"><a xlink:href="src/lib/routing" xlink:title="routing">
<polygon fill="#ccffcc" stroke="black" points="1178,-117.25 1125.97,-117.25 1124,-115.28 1124,-99.5 1176.03,-99.5 1178,-101.47 1178,-117.25"/>
<polyline fill="none" stroke="black" points="1176.03,-115.28 1124,-115.28"/>
<polyline fill="none" stroke="black" points="1176.03,-115.28 1176.03,-99.5"/>
<polyline fill="none" stroke="black" points="1176.03,-115.28 1178,-117.25"/>
<text text-anchor="start" x="1136.75" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">routing</text>
</a>
</g>
</g>
<!-- src/lib/routing&#45;&gt;src/lib/objects -->
<g id="edge57" class="edge">
<title>src/lib/routing&#45;&gt;src/lib/objects</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1178.23,-108C1182.75,-108 1186,-108 1186,-108 1186,-108 1186,-59.21 1186,-59.21"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1188.1,-59.21 1186,-53.21 1183.9,-59.21 1188.1,-59.21"/>
</g>
<!-- src/pages -->
<!-- src/pages&#45;&gt;src -->
<g id="edge60" class="edge">
<title>src/pages&#45;&gt;src</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M628.4,-792.15C628.4,-797.58 628.4,-810 628.4,-810 628.4,-810 189,-810 189,-810 189,-810 189,-665.85 189,-665.85"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="191.1,-665.85 189,-659.85 186.9,-665.85 191.1,-665.85"/>
</g>
<!-- src/pages&#45;&gt;src/components/content/Favicons -->
<g id="edge67" class="edge">
<title>src/pages&#45;&gt;src/components/content/Favicons</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M627.08,-788C626.11,-788 625.15,-788 625.15,-788 625.15,-788 625.15,-542 625.15,-542 625.15,-542 1470.64,-542 1470.64,-542"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1470.64,-544.1 1476.64,-542 1470.64,-539.9 1470.64,-544.1"/>
</g>
<!-- src/pages&#45;&gt;src/components/elements/Portal -->
<g id="edge68" class="edge">
<title>src/pages&#45;&gt;src/components/elements/Portal</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M629.6,-792.19C629.6,-799.81 629.6,-822 629.6,-822 629.6,-822 1591.47,-822 1591.47,-822 1591.47,-822 1591.47,-552.96 1591.47,-552.96"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1593.57,-552.96 1591.47,-546.96 1589.37,-552.96 1593.57,-552.96"/>
</g>
<!-- src/pages&#45;&gt;src/lib -->
<g id="edge61" class="edge">
<title>src/pages&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M626.33,-789C624.77,-789 623.1,-789 623.1,-789 623.1,-789 623.1,-494 623.1,-494 623.1,-494 949.74,-494 949.74,-494 949.74,-494 949.74,-119.45 949.74,-119.45"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="951.84,-119.45 949.74,-113.45 947.64,-119.45 951.84,-119.45"/>
</g>
<!-- src/pages&#45;&gt;src/services/AnalyticsLite/Datadog -->
<g id="edge64" class="edge">
<title>src/pages&#45;&gt;src/services/AnalyticsLite/Datadog</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M629.9,-787.06C629.9,-759.89 629.9,-528 629.9,-528 629.9,-528 803.93,-528 803.93,-528 803.93,-528 803.93,-249.19 803.93,-249.19"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="806.03,-249.19 803.93,-243.19 801.83,-249.19 806.03,-249.19"/>
</g>
<!-- src/pages&#45;&gt;src/services/FionaAPI/Lambdas -->
<g id="edge66" class="edge">
<title>src/pages&#45;&gt;src/services/FionaAPI/Lambdas</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M631.16,-788C655.61,-788 879.12,-788 879.12,-788 879.12,-788 879.12,-332.51 879.12,-332.51"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="881.23,-332.51 879.12,-326.51 877.03,-332.51 881.23,-332.51"/>
</g>
<!-- src/pages&#45;&gt;src/lib/hooks -->
<g id="edge62" class="edge">
<title>src/pages&#45;&gt;src/lib/hooks</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M631.55,-790C675.04,-790 1261,-790 1261,-790 1261,-790 1261,-108 1261,-108 1261,-108 1253.37,-108 1253.37,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1253.37,-105.9 1247.37,-108 1253.37,-110.1 1253.37,-105.9"/>
</g>
<!-- src/reshaped/fiona -->
<g id="node52" class="node">
<title>src/reshaped/fiona</title>
<g id="a_node52"><a xlink:href="src/reshaped/fiona" xlink:title="fiona">
<polygon fill="#ffffcc" stroke="black" points="305,-663.52 252.97,-663.52 251,-661.55 251,-645.77 303.03,-645.77 305,-647.75 305,-663.52"/>
<polyline fill="none" stroke="black" points="303.03,-661.55 251,-661.55"/>
<polyline fill="none" stroke="black" points="303.03,-661.55 303.03,-645.77"/>
<polyline fill="none" stroke="black" points="303.03,-661.55 305,-663.52"/>
<text text-anchor="start" x="267.88" y="-650.98" font-family="Helvetica,sans-Serif" font-size="9.00">fiona</text>
</a>
</g>
</g>
<!-- src/pages&#45;&gt;src/reshaped/fiona -->
<g id="edge63" class="edge">
<title>src/pages&#45;&gt;src/reshaped/fiona</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M628.1,-787.24C628.1,-768.83 628.1,-651 628.1,-651 628.1,-651 314.47,-651 314.47,-651"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="314.47,-648.9 308.47,-651 314.47,-653.1 314.47,-648.9"/>
</g>
<!-- src/services/AnalyticsLite -->
<!-- src/pages&#45;&gt;src/services/AnalyticsLite -->
<g id="edge65" class="edge">
<title>src/pages&#45;&gt;src/services/AnalyticsLite</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M626.48,-790C624.16,-790 621.05,-790 621.05,-790 621.05,-790 621.05,-279 621.05,-279 621.05,-279 754,-279 754,-279 754,-279 754,-242.04 754,-242.04"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="756.1,-242.04 754,-236.04 751.9,-242.04 756.1,-242.04"/>
</g>
<!-- src/services/AnalyticsLite/GA4 -->
<g id="node54" class="node">
<title>src/services/AnalyticsLite/GA4</title>
<g id="a_node54"><a xlink:href="src/services/AnalyticsLite/GA4" xlink:title="GA4">
<polygon fill="#ffffcc" stroke="black" points="822,-195.43 769.97,-195.43 768,-193.45 768,-177.68 820.03,-177.68 822,-179.65 822,-195.43"/>
<polyline fill="none" stroke="black" points="820.03,-193.45 768,-193.45"/>
<polyline fill="none" stroke="black" points="820.03,-193.45 820.03,-177.68"/>
<polyline fill="none" stroke="black" points="820.03,-193.45 822,-195.43"/>
<text text-anchor="start" x="786" y="-182.88" font-family="Helvetica,sans-Serif" font-size="9.00">GA4</text>
</a>
</g>
</g>
<!-- src/pages&#45;&gt;src/services/AnalyticsLite/GA4 -->
<g id="edge69" class="edge">
<title>src/pages&#45;&gt;src/services/AnalyticsLite/GA4</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M631.62,-789C659.17,-789 894.2,-789 894.2,-789 894.2,-789 894.2,-189 894.2,-189 894.2,-189 831.37,-189 831.37,-189"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="831.37,-186.9 825.37,-189 831.37,-191.1 831.37,-186.9"/>
</g>
<!-- src/shared/layout/CustomHead/Schemas -->
<g id="node55" class="node">
<title>src/shared/layout/CustomHead/Schemas</title>
<g id="a_node55"><a xlink:href="src/shared/layout/CustomHead/Schemas" xlink:title="Schemas">
<polygon fill="#ffffcc" stroke="black" points="1718.12,-663.52 1665.85,-663.52 1663.88,-661.55 1663.88,-645.77 1716.15,-645.77 1718.12,-647.75 1718.12,-663.52"/>
<polyline fill="none" stroke="black" points="1716.15,-661.55 1663.88,-661.55"/>
<polyline fill="none" stroke="black" points="1716.15,-661.55 1716.15,-645.77"/>
<polyline fill="none" stroke="black" points="1716.15,-661.55 1718.12,-663.52"/>
<text text-anchor="start" x="1671.88" y="-650.98" font-family="Helvetica,sans-Serif" font-size="9.00">Schemas</text>
</a>
</g>
</g>
<!-- src/pages&#45;&gt;src/shared/layout/CustomHead/Schemas -->
<g id="edge70" class="edge">
<title>src/pages&#45;&gt;src/shared/layout/CustomHead/Schemas</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M629,-786.95C629,-753.95 629,-429 629,-429 629,-429 636.5,-429 636.5,-429 636.5,-429 636.5,-554 636.5,-554 636.5,-554 1681.96,-554 1681.96,-554 1681.96,-554 1681.96,-636.36 1681.96,-636.36"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1679.86,-636.36 1681.96,-642.36 1684.06,-636.36 1679.86,-636.36"/>
</g>
<!-- src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/GA4 -->
<g id="edge91" class="edge">
<title>src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/GA4</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M755.93,-230C758.83,-230 764,-230 764,-230 764,-230 764,-186 764,-186 764,-186 764.38,-186 764.38,-186"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="758.8,-188.1 764.8,-186 758.8,-183.9 758.8,-188.1"/>
</g>
<!-- src/services/AnalyticsLite/Ads -->
<g id="node72" class="node">
<title>src/services/AnalyticsLite/Ads</title>
<g id="a_node72"><a xlink:href="src/services/AnalyticsLite/Ads" xlink:title="Ads">
<polygon fill="#ffffcc" stroke="black" points="756,-195.43 703.97,-195.43 702,-193.45 702,-177.68 754.03,-177.68 756,-179.65 756,-195.43"/>
<polyline fill="none" stroke="black" points="754.03,-193.45 702,-193.45"/>
<polyline fill="none" stroke="black" points="754.03,-193.45 754.03,-177.68"/>
<polyline fill="none" stroke="black" points="754.03,-193.45 756,-195.43"/>
<text text-anchor="start" x="721.12" y="-182.88" font-family="Helvetica,sans-Serif" font-size="9.00">Ads</text>
</a>
</g>
</g>
<!-- src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/Ads -->
<g id="edge90" class="edge">
<title>src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/Ads</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M754,-228.83C754,-228.83 754,-204.66 754,-204.66"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="756.1,-204.66 754,-198.66 751.9,-204.66 756.1,-204.66"/>
</g>
<!-- src/services/AnalyticsLite/GA4&#45;&gt;src/lib -->
<g id="edge96" class="edge">
<title>src/services/AnalyticsLite/GA4&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M822.25,-183C867.56,-183 953.49,-183 953.49,-183 953.49,-183 953.49,-109 953.49,-109 953.49,-109 953.35,-109 953.35,-109"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="961.07,-106.9 955.07,-109 961.07,-111.1 961.07,-106.9"/>
</g>
<!-- src/shared/layout/CustomHead/Schemas&#45;&gt;src/lib -->
<g id="edge113" class="edge">
<title>src/shared/layout/CustomHead/Schemas&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1700.04,-645.45C1700.04,-570.94 1700.04,-69 1700.04,-69 1700.04,-69 950.77,-69 950.77,-69 950.77,-69 950.77,-97.26 950.77,-97.26"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="948.67,-97.26 950.77,-103.26 952.87,-97.26 948.67,-97.26"/>
</g>
<!-- src/pages/api -->
<!-- src/pages/api/apps -->
<!-- src/pages/api/apps/static -->
<!-- src/pages/api/apps/static/cnf&#45;banking -->
<g id="node59" class="node">
<title>src/pages/api/apps/static/cnf&#45;banking</title>
<g id="a_node59"><a xlink:href="src/pages/api/apps/static/cnf-banking" xlink:title="cnf&#45;banking">
<polygon fill="lime" stroke="orange" stroke-width="2" points="472,-798.52 409.97,-798.52 408,-796.55 408,-780.77 470.03,-780.77 472,-782.75 472,-798.52"/>
<polyline fill="none" stroke="orange" stroke-width="2" points="470.03,-796.55 408,-796.55"/>
<polyline fill="none" stroke="orange" stroke-width="2" points="470.03,-796.55 470.03,-780.77"/>
<polyline fill="none" stroke="orange" stroke-width="2" points="470.03,-796.55 472,-798.52"/>
<text text-anchor="start" x="416" y="-785.98" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">cnf&#45;banking</text>
</a>
</g>
</g>
<!-- src/server/engine -->
<!-- src/pages/api/apps/static/cnf&#45;banking&#45;&gt;src/server/engine -->
<g id="edge71" class="edge">
<title>src/pages/api/apps/static/cnf&#45;banking&#45;&gt;src/server/engine</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M407.27,-784C326.28,-784 123,-784 123,-784 123,-784 123,-119.56 123,-119.56"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="125.1,-119.56 123,-113.56 120.9,-119.56 125.1,-119.56"/>
</g>
<!-- src/services/SavingsTransform -->
<!-- src/pages/api/apps/static/cnf&#45;banking&#45;&gt;src/services/SavingsTransform -->
<g id="edge72" class="edge">
<title>src/pages/api/apps/static/cnf&#45;banking&#45;&gt;src/services/SavingsTransform</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M469.67,-780.09C469.67,-721.92 469.67,-418 469.67,-418 469.67,-418 568.4,-418 568.4,-418 568.4,-418 568.4,-325.64 568.4,-325.64"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="570.5,-325.64 568.4,-319.64 566.3,-325.64 570.5,-325.64"/>
</g>
<!-- src/services/SavingsTransform/models -->
<g id="node62" class="node">
<title>src/services/SavingsTransform/models</title>
<g id="a_node62"><a xlink:href="src/services/SavingsTransform/models" xlink:title="models">
<polygon fill="#ffffcc" stroke="black" points="621,-117.25 568.97,-117.25 567,-115.28 567,-99.5 619.03,-99.5 621,-101.47 621,-117.25"/>
<polyline fill="none" stroke="black" points="619.03,-115.28 567,-115.28"/>
<polyline fill="none" stroke="black" points="619.03,-115.28 619.03,-99.5"/>
<polyline fill="none" stroke="black" points="619.03,-115.28 621,-117.25"/>
<text text-anchor="start" x="579" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">models</text>
</a>
</g>
</g>
<!-- src/pages/api/apps/static/cnf&#45;banking&#45;&gt;src/services/SavingsTransform/models -->
<g id="edge73" class="edge">
<title>src/pages/api/apps/static/cnf&#45;banking&#45;&gt;src/services/SavingsTransform/models</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M467.33,-780.25C467.33,-704.09 467.33,-191 467.33,-191 467.33,-191 568.4,-191 568.4,-191 568.4,-191 568.4,-126.53 568.4,-126.53"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="570.5,-126.53 568.4,-120.53 566.3,-126.53 570.5,-126.53"/>
</g>
<!-- src/server/dapr -->
<g id="node69" class="node">
<title>src/server/dapr</title>
<g id="a_node69"><a xlink:href="src/server/dapr" xlink:title="dapr">
<polygon fill="#ffffcc" stroke="black" points="78,-49.75 25.97,-49.75 24,-47.78 24,-32 76.03,-32 78,-33.97 78,-49.75"/>
<polyline fill="none" stroke="black" points="76.03,-47.78 24,-47.78"/>
<polyline fill="none" stroke="black" points="76.03,-47.78 76.03,-32"/>
<polyline fill="none" stroke="black" points="76.03,-47.78 78,-49.75"/>
<text text-anchor="start" x="41.62" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">dapr</text>
</a>
</g>
</g>
<!-- src/server/engine&#45;&gt;src/server/dapr -->
<g id="edge88" class="edge">
<title>src/server/engine&#45;&gt;src/server/dapr</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M121.08,-108C111.09,-108 65.4,-108 65.4,-108 65.4,-108 65.4,-59.21 65.4,-59.21"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="67.5,-59.21 65.4,-53.21 63.3,-59.21 67.5,-59.21"/>
</g>
<!-- src/server/engine/generated -->
<g id="node70" class="node">
<title>src/server/engine/generated</title>
<g id="a_node70"><a xlink:href="src/server/engine/generated" xlink:title="generated">
<polygon fill="#ffffcc" stroke="black" points="152,-49.75 95.97,-49.75 94,-47.78 94,-32 150.03,-32 152,-33.97 152,-49.75"/>
<polyline fill="none" stroke="black" points="150.03,-47.78 94,-47.78"/>
<polyline fill="none" stroke="black" points="150.03,-47.78 150.03,-32"/>
<polyline fill="none" stroke="black" points="150.03,-47.78 152,-49.75"/>
<text text-anchor="start" x="102" y="-37.2" font-family="Helvetica,sans-Serif" font-size="9.00">generated</text>
</a>
</g>
</g>
<!-- src/server/engine&#45;&gt;src/server/engine/generated -->
<g id="edge89" class="edge">
<title>src/server/engine&#45;&gt;src/server/engine/generated</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M123,-106.13C123,-106.13 123,-59.17 123,-59.17"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="125.1,-59.17 123,-53.17 120.9,-59.17 125.1,-59.17"/>
</g>
<!-- src/services/SavingsTransform&#45;&gt;src/services/SavingsTransform/models -->
<g id="edge107" class="edge">
<title>src/services/SavingsTransform&#45;&gt;src/services/SavingsTransform/models</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M571.22,-314C573.28,-314 576.02,-314 576.02,-314 576.02,-314 576.02,-126.74 576.02,-126.74"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="578.13,-126.74 576.02,-120.74 573.93,-126.74 578.13,-126.74"/>
</g>
<!-- src/services/SavingsTransform/constructors -->
<g id="node76" class="node">
<title>src/services/SavingsTransform/constructors</title>
<g id="a_node76"><a xlink:href="src/services/SavingsTransform/constructors" xlink:title="constructors">
<polygon fill="#ffffcc" stroke="black" points="646.75,-239.85 583.22,-239.85 581.25,-237.88 581.25,-222.1 644.78,-222.1 646.75,-224.07 646.75,-239.85"/>
<polyline fill="none" stroke="black" points="644.78,-237.88 581.25,-237.88"/>
<polyline fill="none" stroke="black" points="644.78,-237.88 644.78,-222.1"/>
<polyline fill="none" stroke="black" points="644.78,-237.88 646.75,-239.85"/>
<text text-anchor="start" x="589.25" y="-227.3" font-family="Helvetica,sans-Serif" font-size="9.00">constructors</text>
</a>
</g>
</g>
<!-- src/services/SavingsTransform&#45;&gt;src/services/SavingsTransform/constructors -->
<g id="edge106" class="edge">
<title>src/services/SavingsTransform&#45;&gt;src/services/SavingsTransform/constructors</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M569.6,-312.39C569.6,-299.38 569.6,-230 569.6,-230 569.6,-230 571.8,-230 571.8,-230"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="571.8,-232.1 577.8,-230 571.8,-227.9 571.8,-232.1"/>
</g>
<!-- src/services/SavingsTransform/models&#45;&gt;src/server/engine/generated -->
<g id="edge110" class="edge">
<title>src/services/SavingsTransform/models&#45;&gt;src/server/engine/generated</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M594,-99.14C594,-94.15 594,-89 594,-89 594,-89 138.4,-89 138.4,-89 138.4,-89 138.4,-59.15 138.4,-59.15"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="140.5,-59.15 138.4,-53.15 136.3,-59.15 140.5,-59.15"/>
</g>
<!-- src/pages/partner -->
<!-- src/pages/partner/[partner&#45;key] -->
<g id="node64" class="node">
<title>src/pages/partner/[partner&#45;key]</title>
<g id="a_node64"><a xlink:href="src/pages/partner/[partner-key]" xlink:title="[partner&#45;key]">
<polygon fill="lime" stroke="black" stroke-width="2" points="595.5,-798.52 530.47,-798.52 528.5,-796.55 528.5,-780.77 593.53,-780.77 595.5,-782.75 595.5,-798.52"/>
<polyline fill="none" stroke="black" stroke-width="2" points="593.53,-796.55 528.5,-796.55"/>
<polyline fill="none" stroke="black" stroke-width="2" points="593.53,-796.55 593.53,-780.77"/>
<polyline fill="none" stroke="black" stroke-width="2" points="593.53,-796.55 595.5,-798.52"/>
<text text-anchor="start" x="536.5" y="-785.98" font-family="Helvetica,sans-Serif" font-size="9.00">[partner&#45;key]</text>
</a>
</g>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/lib -->
<g id="edge82" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M596.35,-794C692.42,-794 956.87,-794 956.87,-794 956.87,-794 956.87,-108 956.87,-108 956.87,-108 956.4,-108 956.4,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="961.17,-105.9 955.17,-108 961.17,-110.1 961.17,-105.9"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings -->
<g id="edge75" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M546.4,-779.86C546.4,-779.86 546.4,-434.63 546.4,-434.63"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="548.5,-434.63 546.4,-428.63 544.3,-434.63 548.5,-434.63"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/services/SavingsAPI -->
<g id="edge86" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/services/SavingsAPI</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M596.45,-784C661.03,-784 793.81,-784 793.81,-784 793.81,-784 793.81,-332.44 793.81,-332.44"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="795.91,-332.44 793.81,-326.44 791.71,-332.44 795.91,-332.44"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/FeaturedOffer -->
<g id="edge76" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/FeaturedOffer</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M596.4,-786C670.38,-786 838,-786 838,-786 838,-786 838,-672.68 838,-672.68"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="840.1,-672.68 838,-666.68 835.9,-672.68 840.1,-672.68"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/services/BridgeAPI -->
<g id="edge83" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/services/BridgeAPI</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M560.27,-779.82C560.27,-712.23 560.27,-319 560.27,-319 560.27,-319 655.98,-319 655.98,-319"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="655.98,-321.1 661.98,-319 655.98,-316.9 655.98,-321.1"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Footer -->
<g id="edge77" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Footer</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M585.33,-779.98C585.33,-750.06 585.33,-661 585.33,-661 585.33,-661 726.63,-661 726.63,-661"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="726.63,-663.1 732.63,-661 726.63,-658.9 726.63,-663.1"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/FormBar -->
<g id="edge78" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/FormBar</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M527.72,-785C503.93,-785 476.5,-785 476.5,-785 476.5,-785 476.5,-534 476.5,-534 476.5,-534 474.16,-534 474.16,-534"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="474.16,-531.9 468.16,-534 474.16,-536.1 474.16,-531.9"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Header -->
<g id="edge79" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Header</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M527.7,-783C523.14,-783 520,-783 520,-783 520,-783 520,-665.88 520,-665.88"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="522.1,-665.88 520,-659.88 517.9,-665.88 522.1,-665.88"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Header/brands -->
<g id="edge80" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Header/brands</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M540.33,-779.94C540.33,-733.24 540.33,-534 540.33,-534 540.33,-534 539.83,-534 539.83,-534"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="544.28,-531.9 538.28,-534 544.28,-536.1 544.28,-531.9"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/services/ConfigManager -->
<g id="edge84" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/services/ConfigManager</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M555.53,-780.15C555.53,-703.23 555.53,-185 555.53,-185 555.53,-185 535.64,-185 535.64,-185"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="535.64,-182.9 529.64,-185 535.64,-187.1 535.64,-182.9"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Results -->
<g id="edge81" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/experiences/savings/Results</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M596.05,-782C618.35,-782 643.4,-782 643.4,-782 643.4,-782 643.4,-665.86 643.4,-665.86"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="645.5,-665.86 643.4,-659.86 641.3,-665.86 645.5,-665.86"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/lib/routing -->
<g id="edge74" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/lib/routing</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M596.43,-796C720.89,-796 1140.1,-796 1140.1,-796 1140.1,-796 1140.1,-126.58 1140.1,-126.58"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1142.2,-126.58 1140.1,-120.58 1138,-126.58 1142.2,-126.58"/>
</g>
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/services/Logger -->
<g id="edge85" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/services/Logger</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M596.27,-793C623.21,-793 656.2,-793 656.2,-793 656.2,-793 656.2,-108 656.2,-108 656.2,-108 657.03,-108 657.03,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="655.5,-110.1 661.5,-108 655.5,-105.9 655.5,-110.1"/>
</g>
<!-- src/shared/layout/CustomHead -->
<!-- src/pages/partner/[partner&#45;key]&#45;&gt;src/shared/layout/CustomHead -->
<g id="edge87" class="edge">
<title>src/pages/partner/[partner&#45;key]&#45;&gt;src/shared/layout/CustomHead</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M575.17,-779.9C575.17,-768.45 575.17,-751 575.17,-751 575.17,-751 1650,-751 1650,-751 1650,-751 1650,-665.66 1650,-665.66"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1652.1,-665.66 1650,-659.66 1647.9,-665.66 1652.1,-665.66"/>
</g>
<!-- src/services/Logger&#45;&gt;src/lib -->
<g id="edge104" class="edge">
<title>src/services/Logger&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M719.12,-108C719.12,-108 938.9,-108 938.9,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="938.9,-110.1 944.9,-108 938.9,-105.9 938.9,-110.1"/>
</g>
<!-- src/services/Logger&#45;&gt;src/services/AnalyticsLite/Datadog -->
<g id="edge105" class="edge">
<title>src/services/Logger&#45;&gt;src/services/AnalyticsLite/Datadog</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M689.79,-117.45C689.79,-144.71 689.79,-224 689.79,-224 689.79,-224 758.63,-224 758.63,-224"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="758.63,-226.1 764.63,-224 758.63,-221.9 758.63,-226.1"/>
</g>
<!-- src/reshaped -->
<!-- src/server -->
<!-- src/services -->
<!-- src/services/AnalyticsLite/Ads&#45;&gt;src/lib/types -->
<g id="edge93" class="edge">
<title>src/services/AnalyticsLite/Ads&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M743.67,-177.41C743.67,-170.43 743.67,-162 743.67,-162 743.67,-162 961.94,-162 961.94,-162 961.94,-162 961.94,-58.98 961.94,-58.98"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="964.04,-58.98 961.94,-52.98 959.84,-58.98 964.04,-58.98"/>
</g>
<!-- src/services/AnalyticsLite/Ads&#45;&gt;src/services/Logger -->
<g id="edge92" class="edge">
<title>src/services/AnalyticsLite/Ads&#45;&gt;src/services/Logger</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M710.5,-177.28C710.5,-177.28 710.5,-126.64 710.5,-126.64"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="712.6,-126.64 710.5,-120.64 708.4,-126.64 712.6,-126.64"/>
</g>
<!-- src/services/FionaAPI -->
<!-- src/services/common&#45;&gt;src/lib -->
<g id="edge112" class="edge">
<title>src/services/common&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M892.41,-230C916.83,-230 948.71,-230 948.71,-230 948.71,-230 948.71,-119.09 948.71,-119.09"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="950.81,-119.09 948.71,-113.09 946.61,-119.09 950.81,-119.09"/>
</g>
<!-- src/services/SavingsTransform/constructors&#45;&gt;src/services/SavingsTransform/models -->
<g id="edge108" class="edge">
<title>src/services/SavingsTransform/constructors&#45;&gt;src/services/SavingsTransform/models</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M588.12,-221.76C588.12,-221.76 588.12,-126.7 588.12,-126.7"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="590.23,-126.7 588.12,-120.7 586.03,-126.7 590.23,-126.7"/>
</g>
<!-- src/services/SavingsTransform/trivia -->
<g id="node77" class="node">
<title>src/services/SavingsTransform/trivia</title>
<g id="a_node77"><a xlink:href="src/services/SavingsTransform/trivia" xlink:title="trivia">
<polygon fill="#ffffcc" stroke="black" points="649,-195.43 596.97,-195.43 595,-193.45 595,-177.68 647.03,-177.68 649,-179.65 649,-195.43"/>
<polyline fill="none" stroke="black" points="647.03,-193.45 595,-193.45"/>
<polyline fill="none" stroke="black" points="647.03,-193.45 647.03,-177.68"/>
<polyline fill="none" stroke="black" points="647.03,-193.45 649,-195.43"/>
<text text-anchor="start" x="612.25" y="-182.88" font-family="Helvetica,sans-Serif" font-size="9.00">trivia</text>
</a>
</g>
</g>
<!-- src/services/SavingsTransform/constructors&#45;&gt;src/services/SavingsTransform/trivia -->
<g id="edge109" class="edge">
<title>src/services/SavingsTransform/constructors&#45;&gt;src/services/SavingsTransform/trivia</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M620.88,-221.98C620.88,-221.98 620.88,-204.83 620.88,-204.83"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="622.98,-204.83 620.88,-198.83 618.78,-204.83 622.98,-204.83"/>
</g>
<!-- src/services/SavingsTransform/trivia&#45;&gt;src/services/SavingsTransform/models -->
<g id="edge111" class="edge">
<title>src/services/SavingsTransform/trivia&#45;&gt;src/services/SavingsTransform/models</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M608,-177.28C608,-177.28 608,-126.64 608,-126.64"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="610.1,-126.64 608,-120.64 605.9,-126.64 610.1,-126.64"/>
</g>
<!-- src/shared -->
<!-- src/shared/layout -->
<!-- src/ui -->
<!-- src/ui/navigation -->
<!-- src/ui/primitives/Box&#45;&gt;src/ui/theme -->
<g id="edge119" class="edge">
<title>src/ui/primitives/Box&#45;&gt;src/ui/theme</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M325,-99.27C325,-99.27 325,-58.83 325,-58.83"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="327.1,-58.83 325,-52.83 322.9,-58.83 327.1,-58.83"/>
</g>
<!-- src/ui/primitives/FlexBox&#45;&gt;src/ui/theme -->
<g id="edge120" class="edge">
<title>src/ui/primitives/FlexBox&#45;&gt;src/ui/theme</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M359,-177.39C359,-146.35 359,-47 359,-47 359,-47 358.34,-47 358.34,-47"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="361.44,-44.9 355.44,-47 361.44,-49.1 361.44,-44.9"/>
</g>
<!-- src/ui/primitives/FlexBox&#45;&gt;src/ui/primitives/Box -->
<g id="edge121" class="edge">
<title>src/ui/primitives/FlexBox&#45;&gt;src/ui/primitives/Box</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M332,-177.28C332,-177.28 332,-126.64 332,-126.64"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="334.1,-126.64 332,-120.64 329.9,-126.64 334.1,-126.64"/>
</g>
<!-- src/ui/primitives/Stack&#45;&gt;src/ui/theme -->
<g id="edge122" class="edge">
<title>src/ui/primitives/Stack&#45;&gt;src/ui/theme</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M373,-221.8C373,-184.48 373,-46 373,-46 373,-46 361.37,-46 361.37,-46"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="361.37,-43.9 355.37,-46 361.37,-48.1 361.37,-43.9"/>
</g>
<!-- src/ui/primitives/Stack&#45;&gt;src/ui/primitives/FlexBox -->
<g id="edge123" class="edge">
<title>src/ui/primitives/Stack&#45;&gt;src/ui/primitives/FlexBox</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M346,-221.98C346,-221.98 346,-204.83 346,-204.83"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="348.1,-204.83 346,-198.83 343.9,-204.83 348.1,-204.83"/>
</g>
<!-- src/ui/typography/Anchor&#45;&gt;src/ui/theme -->
<g id="edge126" class="edge">
<title>src/ui/typography/Anchor&#45;&gt;src/ui/theme</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M250.45,-186C267.43,-186 286,-186 286,-186 286,-186 286,-40 286,-40 286,-40 288.91,-40 288.91,-40"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="288.91,-42.1 294.91,-40 288.91,-37.9 288.91,-42.1"/>
</g>
<!-- src/ui/typography/Anchor&#45;&gt;src/ui/typography/Typography -->
<g id="edge127" class="edge">
<title>src/ui/typography/Anchor&#45;&gt;src/ui/typography/Typography</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M224.81,-177.28C224.81,-177.28 224.81,-126.64 224.81,-126.64"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="226.91,-126.64 224.81,-120.64 222.71,-126.64 226.91,-126.64"/>
</g>
<!-- src/ui/typography/Typography&#45;&gt;src/ui/theme -->
<g id="edge128" class="edge">
<title>src/ui/typography/Typography&#45;&gt;src/ui/theme</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M232,-99.21C232,-79.73 232,-36 232,-36 232,-36 288.6,-36 288.6,-36"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="288.6,-38.1 294.6,-36 288.6,-33.9 288.6,-38.1"/>
</g>
</g>
</svg>
<script>var gMode = new Mode();
var title2ElementMap = (function makeElementMap() {
/** @type {NodeListOf<SVGGElement>} */
var nodes = document.querySelectorAll(".node");
/** @type {NodeListOf<SVGGElement>} */
var edges = document.querySelectorAll(".edge");
return new Title2ElementMap(edges, nodes);
})();
function getHoverHandler(pTitle2ElementMap) {
/** @type {string} */
var currentHighlightedTitle;
/** @param {MouseEvent} pMouseEvent */
return function hoverHighlightHandler(pMouseEvent) {
var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
var closestTitleText = getTitleText(closestNodeOrEdge);
if (
!(currentHighlightedTitle === closestTitleText) &&
gMode.get() === gMode.HOVER
) {
resetNodesAndEdges();
addHighlight(closestNodeOrEdge);
pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
currentHighlightedTitle = closestTitleText;
}
};
}
function getSelectHandler(pTitle2ElementMap) {
/** @type {string} */
var currentHighlightedTitle;
/** @param {MouseEvent} pMouseEvent */
return function selectHighlightHandler(pMouseEvent) {
pMouseEvent.preventDefault();
var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
var closestTitleText = getTitleText(closestNodeOrEdge);
if (!!closestNodeOrEdge) {
gMode.setToSelect();
} else {
gMode.setToHover();
}
if (!(currentHighlightedTitle === closestTitleText)) {
resetNodesAndEdges();
addHighlight(closestNodeOrEdge);
pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
currentHighlightedTitle = closestTitleText;
}
};
}
function Mode() {
var HOVER = 1;
var SELECT = 2;
function setToHover() {
this._mode = HOVER;
}
function setToSelect() {
this._mode = SELECT;
}
function get() {
return this._mode || HOVER;
}
return {
HOVER: HOVER,
SELECT: SELECT,
setToHover: setToHover,
setToSelect: setToSelect,
get: get,
};
}
/**
*
* @param {SVGGelement[]} pEdges
* @param {SVGGElement[]} pNodes
* @return {{get: (pTitleText:string) => SVGGElement[]}}
*/
function Title2ElementMap(pEdges, pNodes) {
/* {{[key: string]: SVGGElement[]}} */
var elementMap = buildMap(pEdges, pNodes);
/**
* @param {NodeListOf<SVGGElement>} pEdges
* @param {NodeListOf<SVGGElement>} pNodes
* @return {{[key: string]: SVGGElement[]}}
*/
function buildMap(pEdges, pNodes) {
var title2NodeMap = buildTitle2NodeMap(pNodes);
return nodeListToArray(pEdges).reduce(addEdgeToMap(title2NodeMap), {});
}
/**
* @param {NodeListOf<SVGGElement>} pNodes
* @return {{[key: string]: SVGGElement}}
*/
function buildTitle2NodeMap(pNodes) {
return nodeListToArray(pNodes).reduce(addNodeToMap, {});
}
function addNodeToMap(pMap, pNode) {
var titleText = getTitleText(pNode);
if (titleText) {
pMap[titleText] = pNode;
}
return pMap;
}
function addEdgeToMap(pNodeMap) {
return function (pEdgeMap, pEdge) {
/** @type {string} */
var titleText = getTitleText(pEdge);
if (titleText) {
var edge = pryEdgeFromTitle(titleText);
pEdgeMap[titleText] = [pNodeMap[edge.from], pNodeMap[edge.to]];
(pEdgeMap[edge.from] || (pEdgeMap[edge.from] = [])).push(pEdge);
(pEdgeMap[edge.to] || (pEdgeMap[edge.to] = [])).push(pEdge);
}
return pEdgeMap;
};
}
/**
*
* @param {string} pString
* @return {{from?: string; to?:string;}}
*/
function pryEdgeFromTitle(pString) {
var nodeNames = pString.split(/\s*->\s*/);
return {
from: nodeNames.shift(),
to: nodeNames.shift(),
};
}
/**
*
* @param {string} pTitleText
* @return {SVGGElement[]}
*/
function get(pTitleText) {
return (pTitleText && elementMap[pTitleText]) || [];
}
return {
get: get,
};
}
/**
* @param {SVGGElement} pGElement
* @return {string?}
*/
function getTitleText(pGElement) {
/** @type {SVGTitleElement} */
var title = pGElement && pGElement.querySelector("title");
/** @type {string} */
var titleText = title && title.textContent;
if (titleText) {
titleText = titleText.trim();
}
return titleText;
}
/**
* @param {NodeListOf<Element>} pNodeList
* @return {Element[]}
*/
function nodeListToArray(pNodeList) {
var lReturnValue = [];
pNodeList.forEach(function (pElement) {
lReturnValue.push(pElement);
});
return lReturnValue;
}
function resetNodesAndEdges() {
nodeListToArray(document.querySelectorAll(".current")).forEach(
removeHighlight,
);
}
/**
* @param {SVGGElement} pGElement
*/
function removeHighlight(pGElement) {
if (pGElement && pGElement.classList) {
pGElement.classList.remove("current");
}
}
/**
* @param {SVGGElement} pGroup
*/
function addHighlight(pGroup) {
if (pGroup && pGroup.classList) {
pGroup.classList.add("current");
}
}
var hints = {
HIDDEN: 1,
SHOWN: 2,
state: this.HIDDEN,
show: function () {
document.getElementById("hints").removeAttribute("style");
hints.state = hints.SHOWN;
},
hide: function () {
document.getElementById("hints").style = "display:none";
hints.state = hints.HIDDEN;
},
toggle: function () {
if ((hints.state || hints.HIDDEN) === hints.HIDDEN) {
hints.show();
} else {
hints.hide();
}
},
};
/** @param {KeyboardEvent} pKeyboardEvent */
function keyboardEventHandler(pKeyboardEvent) {
if (pKeyboardEvent.key === "Escape") {
resetNodesAndEdges();
gMode.setToHover();
hints.hide();
}
if (pKeyboardEvent.key === "F1") {
pKeyboardEvent.preventDefault();
hints.toggle();
}
}
document.addEventListener("contextmenu", getSelectHandler(title2ElementMap));
document.addEventListener("mouseover", getHoverHandler(title2ElementMap));
document.addEventListener("keydown", keyboardEventHandler);
document.getElementById("close-hints").addEventListener("click", hints.hide);
document.getElementById("button_help").addEventListener("click", hints.toggle);
</script> </body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment