chartlet 0.20.0

Compile structured data into deterministic, accessible static charts
Documentation
1
<div class="chartlet-wrapper"><style>.chartlet-stage{position:relative;display:inline-block;max-width:100%;vertical-align:top}.chartlet-stage>svg{display:block}.chartlet-hotspot{position:absolute;border-radius:8px;cursor:pointer}.chartlet-focus{margin:0 0 12px 0;font-size:13px}.chartlet-focus summary{cursor:pointer;min-height:24px}.chartlet-focus fieldset{border:none;padding:0;margin:4px 0 0 0}.chartlet-focus label{display:inline-flex;align-items:center;min-height:44px;margin-right:14px;cursor:pointer;white-space:nowrap}.chartlet-focus input{margin-right:4px}.chartlet-focus input:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.chartlet-wrapper:has(.chartlet-focus-node:checked) #chartlet-19dc1aa622594b84 .chartlet-f{opacity:.18}#chartlet-19dc1aa622594b84-hs-0{left:46.213%;top:5.187%;width:11.556%;height:8.438%}#chartlet-19dc1aa622594b84-hs-1{left:46.213%;top:28.375%;width:11.556%;height:7.5%}#chartlet-19dc1aa622594b84-hs-2{left:46.213%;top:54.375%;width:11.556%;height:5.625%}#chartlet-19dc1aa622594b84-hs-3{left:27.565%;top:87.781%;width:15.537%;height:5.625%}#chartlet-19dc1aa622594b84-hs-4{left:46.213%;top:87%;width:11.556%;height:7.187%}#chartlet-19dc1aa622594b84-hs-5{left:60.879%;top:87.781%;width:11.556%;height:5.625%}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-0:checked) #chartlet-19dc1aa622594b84 .chartlet-f-0{opacity:1}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-0:checked) #chartlet-19dc1aa622594b84 .chartlet-n-0 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-0:checked) #chartlet-19dc1aa622594b84 .chartlet-n-0 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-1:checked) #chartlet-19dc1aa622594b84 .chartlet-f-1{opacity:1}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-1:checked) #chartlet-19dc1aa622594b84 .chartlet-n-1 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-1:checked) #chartlet-19dc1aa622594b84 .chartlet-n-1 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-2:checked) #chartlet-19dc1aa622594b84 .chartlet-f-2{opacity:1}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-2:checked) #chartlet-19dc1aa622594b84 .chartlet-n-2 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-2:checked) #chartlet-19dc1aa622594b84 .chartlet-n-2 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-3:checked) #chartlet-19dc1aa622594b84 .chartlet-f-3{opacity:1}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-3:checked) #chartlet-19dc1aa622594b84 .chartlet-n-3 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-3:checked) #chartlet-19dc1aa622594b84 .chartlet-n-3 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-4:checked) #chartlet-19dc1aa622594b84 .chartlet-f-4{opacity:1}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-4:checked) #chartlet-19dc1aa622594b84 .chartlet-n-4 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-4:checked) #chartlet-19dc1aa622594b84 .chartlet-n-4 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-5:checked) #chartlet-19dc1aa622594b84 .chartlet-f-5{opacity:1}.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-5:checked) #chartlet-19dc1aa622594b84 .chartlet-n-5 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-19dc1aa622594b84-focus-5:checked) #chartlet-19dc1aa622594b84 .chartlet-n-5 .chartlet-seq-box{stroke-width:3}</style><details class="chartlet-focus"><summary>Focus</summary><fieldset><label><input type="radio" name="chartlet-19dc1aa622594b84-focus" checked> Show all</label><label><input type="radio" name="chartlet-19dc1aa622594b84-focus" class="chartlet-focus-node" id="chartlet-19dc1aa622594b84-focus-0"> Customer</label><label><input type="radio" name="chartlet-19dc1aa622594b84-focus" class="chartlet-focus-node" id="chartlet-19dc1aa622594b84-focus-1"> Web shop</label><label><input type="radio" name="chartlet-19dc1aa622594b84-focus" class="chartlet-focus-node" id="chartlet-19dc1aa622594b84-focus-2"> Shop API</label><label><input type="radio" name="chartlet-19dc1aa622594b84-focus" class="chartlet-focus-node" id="chartlet-19dc1aa622594b84-focus-3"> Payment provider</label><label><input type="radio" name="chartlet-19dc1aa622594b84-focus" class="chartlet-focus-node" id="chartlet-19dc1aa622594b84-focus-4"> Orders</label><label><input type="radio" name="chartlet-19dc1aa622594b84-focus" class="chartlet-focus-node" id="chartlet-19dc1aa622594b84-focus-5"> Mail service</label></fieldset></details><figure class="chartlet-figure" data-viz="chart"><figcaption>Checkout: the calls in order</figcaption><div class="chartlet-stage"><svg xmlns="http://www.w3.org/2000/svg" width="900" height="640" viewBox="0 0 900 640" id="chartlet-19dc1aa622594b84" role="img" aria-labelledby="chartlet-19dc1aa622594b84-title chartlet-19dc1aa622594b84-description" class="chartlet-root"><title id="chartlet-19dc1aa622594b84-title">Checkout: the calls in order</title><desc id="chartlet-19dc1aa622594b84-description">Architecture diagram with 6 components and 5 connections. Main path: Customer → Web shop → Shop API → Orders. Most connected: Shop API (4 connections). Nothing leads into Customer. Nothing leads out of Payment provider, Orders and Mail service. Steps: 1 Customer → Web shop (confirms the cart); 2 Web shop → Shop API (places the order); 3 Shop API → Payment provider (charges); 4 Shop API → Orders (stores the order); 5 Shop API → Mail service (sends the receipt). Customer (person): connects to Web shop (step 1, confirms the cart). Web shop (frontend): connects to Shop API (step 2, places the order, via HTTPS). Shop API (service): connects to Payment provider (step 3, charges, via HTTPS), Orders (step 4, stores the order, via SQL) and Mail service (step 5, sends the receipt). Payment provider (external system): no outgoing connection. Orders (database): no outgoing connection. Mail service (external system): no outgoing connection.</desc><style>.chartlet-root{--chartlet-text:#172033;--chartlet-muted:#344054;--chartlet-grid:#d9dee8;--chartlet-zero:#667085;--chartlet-accent:#2563eb;--chartlet-background:#fff;--chartlet-color-1:#2563eb;--chartlet-color-2:#c2410c;--chartlet-color-3:#475569;--chartlet-color-4:#111827;max-width:100%;height:auto;font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:var(--chartlet-text)}#chartlet-19dc1aa622594b84 .chartlet-title{font-size:22px;font-weight:650;fill:var(--chartlet-text)}#chartlet-19dc1aa622594b84 .chartlet-label,#chartlet-19dc1aa622594b84 .chartlet-tick,#chartlet-19dc1aa622594b84 .chartlet-value,#chartlet-19dc1aa622594b84 .chartlet-value-inverse,#chartlet-19dc1aa622594b84 .chartlet-axis-title{font-size:12px;fill:var(--chartlet-muted)}#chartlet-19dc1aa622594b84 .chartlet-value,#chartlet-19dc1aa622594b84 .chartlet-value-inverse{font-weight:600}#chartlet-19dc1aa622594b84 .chartlet-value{fill:var(--chartlet-text)}#chartlet-19dc1aa622594b84 .chartlet-value-inverse{fill:var(--chartlet-background)}#chartlet-19dc1aa622594b84 .chartlet-axis-title{font-weight:600}#chartlet-19dc1aa622594b84 .chartlet-grid{stroke:var(--chartlet-grid);stroke-width:1}#chartlet-19dc1aa622594b84 .chartlet-zero{stroke:var(--chartlet-zero);stroke-width:1.5}#chartlet-19dc1aa622594b84 .chartlet-bar,#chartlet-19dc1aa622594b84 .chartlet-point{fill:var(--chartlet-accent)}#chartlet-19dc1aa622594b84 .chartlet-line{fill:none;stroke:var(--chartlet-accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}#chartlet-19dc1aa622594b84 .chartlet-background{fill:var(--chartlet-background)}.chartlet-root{--chartlet-node:#eef3fd;--chartlet-lane:#f7f9fc;--chartlet-lane-head:#eef1f6;--chartlet-shadow:rgba(16,24,40,.09);--chartlet-role-blue:#2563eb;--chartlet-role-blue-fill:#eef3fd;--chartlet-role-green:#15803d;--chartlet-role-green-fill:#ecfdf3;--chartlet-role-amber:#b45309;--chartlet-role-amber-fill:#fff7e8;--chartlet-role-teal:#0f766e;--chartlet-role-teal-fill:#e9faf7;--chartlet-role-violet:#6d28d9;--chartlet-role-violet-fill:#f3efff;--chartlet-role-gray:#667085;--chartlet-role-gray-fill:#f7f8fa;--chartlet-role-red:#b42318;--chartlet-role-red-fill:#fef3f2}.chartlet-root.chartlet-theme-dark{--chartlet-node:#1a2436;--chartlet-lane:#121925;--chartlet-lane-head:#18212f;--chartlet-shadow:rgba(0,0,0,.45);--chartlet-role-blue:#7ea6ff;--chartlet-role-blue-fill:#1a2436;--chartlet-role-green:#4ade80;--chartlet-role-green-fill:#132a1d;--chartlet-role-amber:#fbbf24;--chartlet-role-amber-fill:#2b2210;--chartlet-role-teal:#2dd4bf;--chartlet-role-teal-fill:#0f2a27;--chartlet-role-violet:#b69cff;--chartlet-role-violet-fill:#231c38;--chartlet-role-gray:#9aa7bd;--chartlet-role-gray-fill:#161d29;--chartlet-role-red:#f97066;--chartlet-role-red-fill:#2d1616}#chartlet-19dc1aa622594b84 .chartlet-role-blue{fill:var(--chartlet-role-blue-fill);stroke:var(--chartlet-role-blue)}#chartlet-19dc1aa622594b84 .chartlet-role-green{fill:var(--chartlet-role-green-fill);stroke:var(--chartlet-role-green)}#chartlet-19dc1aa622594b84 .chartlet-role-amber{fill:var(--chartlet-role-amber-fill);stroke:var(--chartlet-role-amber)}#chartlet-19dc1aa622594b84 .chartlet-role-teal{fill:var(--chartlet-role-teal-fill);stroke:var(--chartlet-role-teal)}#chartlet-19dc1aa622594b84 .chartlet-role-violet{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet)}#chartlet-19dc1aa622594b84 .chartlet-role-gray{fill:var(--chartlet-role-gray-fill);stroke:var(--chartlet-role-gray)}#chartlet-19dc1aa622594b84 .chartlet-role-red{fill:var(--chartlet-role-red-fill);stroke:var(--chartlet-role-red)}#chartlet-19dc1aa622594b84 .chartlet-diagram-rim{fill:none;stroke:var(--chartlet-role-teal);stroke-width:1.5}#chartlet-19dc1aa622594b84 .chartlet-diagram-shadow{fill:var(--chartlet-shadow);stroke:none;rx:7px}#chartlet-19dc1aa622594b84 .chartlet-diagram-chip{fill:var(--chartlet-background);stroke:var(--chartlet-grid);stroke-width:1;rx:4px}#chartlet-19dc1aa622594b84 .chartlet-diagram-chip-text{font-size:12px;fill:var(--chartlet-text)}#chartlet-19dc1aa622594b84 .chartlet-diagram-badge{fill:var(--chartlet-accent);stroke:var(--chartlet-background);stroke-width:2}#chartlet-19dc1aa622594b84 .chartlet-diagram-badge-text{font-size:10px;font-weight:700;fill:var(--chartlet-background)}#chartlet-19dc1aa622594b84 .chartlet-flow-node{stroke-width:1.5;stroke-linejoin:round;rx:7px}#chartlet-19dc1aa622594b84 .chartlet-flow-start{stroke-width:2}#chartlet-19dc1aa622594b84 .chartlet-flow-end{stroke-width:3}#chartlet-19dc1aa622594b84 .chartlet-flow-external{stroke-dasharray:5 3}#chartlet-19dc1aa622594b84 .chartlet-flow-inner{stroke:var(--chartlet-role-blue);stroke-width:1}#chartlet-19dc1aa622594b84 .chartlet-flow-label{font-size:13px;font-weight:600;fill:var(--chartlet-text)}#chartlet-19dc1aa622594b84 .chartlet-flow-sublabel{font-size:11px;fill:var(--chartlet-muted)}#chartlet-19dc1aa622594b84 .chartlet-flow-edge{fill:none;stroke:var(--chartlet-zero);stroke-width:1.4;stroke-linejoin:round}#chartlet-19dc1aa622594b84 .chartlet-flow-dashed{stroke-dasharray:5 4}#chartlet-19dc1aa622594b84 .chartlet-flow-dotted{stroke-dasharray:1 4;stroke-linecap:round}#chartlet-19dc1aa622594b84 .chartlet-flow-main{stroke:var(--chartlet-accent);stroke-width:2.2}#chartlet-19dc1aa622594b84 .chartlet-flow-head{fill:var(--chartlet-zero);stroke:var(--chartlet-zero);stroke-width:1;stroke-linejoin:round}#chartlet-19dc1aa622594b84 .chartlet-flow-main-head{fill:var(--chartlet-accent);stroke:var(--chartlet-accent)}#chartlet-19dc1aa622594b84 .chartlet-flow-lane{fill:var(--chartlet-lane);stroke:var(--chartlet-grid);stroke-width:1}#chartlet-19dc1aa622594b84 .chartlet-flow-lane-alt{fill:var(--chartlet-background)}#chartlet-19dc1aa622594b84 .chartlet-flow-lane-head{fill:var(--chartlet-lane-head);stroke:none}#chartlet-19dc1aa622594b84 .chartlet-flow-lane-label{font-size:11px;font-weight:650;fill:var(--chartlet-muted);letter-spacing:.04em}#chartlet-19dc1aa622594b84 .chartlet-flow-group{fill:var(--chartlet-accent);fill-opacity:.04;stroke:var(--chartlet-zero);stroke-width:1;stroke-dasharray:4 3;rx:10px}#chartlet-19dc1aa622594b84 .chartlet-flow-group-label{font-size:11px;font-weight:600;fill:var(--chartlet-muted)}#chartlet-19dc1aa622594b84 .chartlet-arch-head{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet);stroke-width:1.5}#chartlet-19dc1aa622594b84 .chartlet-arch-dot{fill:var(--chartlet-role-blue);stroke:none}</style><g class="chartlet-f chartlet-f-0 chartlet-f-1"><polyline points="467.915,87.2 467.915,173.6" class="chartlet-flow-edge chartlet-flow-main"><title>Customer → Web shop: 1. confirms the cart</title></polyline><polyline points="464.415,173.6 467.915,181.6 471.415,173.6 464.415,173.6" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><polyline points="467.915,229.6 467.915,340" class="chartlet-flow-edge chartlet-flow-main"><title>Web shop → Shop API: 2. places the order [HTTPS]</title></polyline><polyline points="464.415,340 467.915,348 471.415,340 464.415,340" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><polyline points="443.915,384 443.915,518.4 318,518.4 318,553.8" class="chartlet-flow-edge"><title>Shop API → Payment provider: 3. charges [HTTPS]</title></polyline><polyline points="314.5,553.8 318,561.8 321.5,553.8 314.5,553.8" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-2 chartlet-f-4"><polyline points="467.915,384 467.915,548.8" class="chartlet-flow-edge chartlet-flow-main"><title>Shop API → Orders: 4. stores the order [SQL]</title></polyline><polyline points="464.415,548.8 467.915,556.8 471.415,548.8 464.415,548.8" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-2 chartlet-f-5"><polyline points="491.915,384 491.915,518.4 599.915,518.4 599.915,553.8" class="chartlet-flow-edge chartlet-flow-dashed"><title>Shop API → Mail service: 5. sends the receipt</title></polyline><polyline points="596.415,553.8 599.915,561.8 603.415,553.8 596.415,553.8" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5"></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3"></g><g class="chartlet-f chartlet-n-4 chartlet-f-2 chartlet-f-4"></g><g class="chartlet-f chartlet-n-5 chartlet-f-2 chartlet-f-5"></g><g class="chartlet-f chartlet-f-0 chartlet-f-1"><rect x="471.915" y="92.2" width="130.48" height="21" class="chartlet-diagram-chip"/><text x="476.915" y="106.2" text-anchor="start" class="chartlet-diagram-chip-text">1. confirms the cart</text></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><rect x="471.915" y="234.6" width="122.8" height="36" class="chartlet-diagram-chip"/><text x="476.915" y="248.6" text-anchor="start" class="chartlet-diagram-chip-text">2. places the order</text><text x="476.915" y="263.6" text-anchor="start" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><rect x="368.715" y="389" width="71.2" height="36" class="chartlet-diagram-chip"/><text x="434.915" y="403" text-anchor="end" class="chartlet-diagram-chip-text">3. charges</text><text x="434.915" y="418" text-anchor="end" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-f-2 chartlet-f-4"><rect x="495.915" y="389" width="125.92" height="36" class="chartlet-diagram-chip"/><text x="500.915" y="403" text-anchor="start" class="chartlet-diagram-chip-text">4. stores the order</text><text x="500.915" y="418" text-anchor="start" class="chartlet-diagram-chip-text">[SQL]</text></g><g class="chartlet-f chartlet-f-2 chartlet-f-5"><rect x="495.915" y="428" width="129.52" height="21" class="chartlet-diagram-chip"/><text x="500.915" y="442" text-anchor="start" class="chartlet-diagram-chip-text">5. sends the receipt</text></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"><rect x="415.915" y="35.7" width="104" height="54" class="chartlet-diagram-shadow"/><rect x="415.915" y="33.2" width="104" height="54" class="chartlet-flow-node chartlet-role-violet"><title>Customer</title></rect><circle cx="467.915" cy="44.2" r="6" class="chartlet-arch-head"/><text x="467.915" y="72.7" text-anchor="middle" class="chartlet-flow-label">Customer</text></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"><rect x="415.915" y="184.1" width="104" height="48" class="chartlet-diagram-shadow"/><rect x="415.915" y="181.6" width="104" height="48" class="chartlet-flow-node chartlet-role-blue"><title>Web shop</title></rect><line x1="415.915" y1="193.6" x2="519.915" y2="193.6" class="chartlet-flow-inner"/><circle cx="423.915" cy="187.6" r="1.8" class="chartlet-arch-dot"/><circle cx="429.915" cy="187.6" r="1.8" class="chartlet-arch-dot"/><circle cx="435.915" cy="187.6" r="1.8" class="chartlet-arch-dot"/><text x="467.915" y="216.1" text-anchor="middle" class="chartlet-flow-label">Web shop</text></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5"><rect x="415.915" y="350.5" width="104" height="36" class="chartlet-diagram-shadow"/><rect x="415.915" y="348" width="104" height="36" class="chartlet-flow-node chartlet-role-blue"><title>Shop API</title></rect><text x="467.915" y="370.5" text-anchor="middle" class="chartlet-flow-label">Shop API</text></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3"><rect x="248.085" y="564.3" width="139.83" height="36" class="chartlet-diagram-shadow"/><rect x="248.085" y="561.8" width="139.83" height="36" class="chartlet-flow-node chartlet-flow-external chartlet-role-gray"><title>Payment provider</title></rect><text x="318" y="584.3" text-anchor="middle" class="chartlet-flow-label">Payment provider</text></g><g class="chartlet-f chartlet-n-4 chartlet-f-2 chartlet-f-4"><polyline points="415.915,564.3 415.915,600.3 417.687,601.594 422.882,602.8 431.145,603.836 441.915,604.63 454.456,605.13 467.915,605.3 481.374,605.13 493.915,604.63 504.685,603.836 512.948,602.8 518.143,601.594 519.915,600.3 519.915,564.3 518.143,563.006 512.948,561.8 504.685,560.764 493.915,559.97 481.374,559.47 467.915,559.3 454.456,559.47 441.915,559.97 431.145,560.764 422.882,561.8 417.687,563.006 415.915,564.3 415.915,564.3" class="chartlet-diagram-shadow"/><polyline points="415.915,561.8 415.915,597.8 417.687,599.094 422.882,600.3 431.145,601.336 441.915,602.13 454.456,602.63 467.915,602.8 481.374,602.63 493.915,602.13 504.685,601.336 512.948,600.3 518.143,599.094 519.915,597.8 519.915,561.8 518.143,560.506 512.948,559.3 504.685,558.264 493.915,557.47 481.374,556.97 467.915,556.8 454.456,556.97 441.915,557.47 431.145,558.264 422.882,559.3 417.687,560.506 415.915,561.8 415.915,561.8" class="chartlet-flow-node chartlet-role-teal"><title>Orders</title></polyline><polyline points="415.915,561.8 417.687,563.094 422.882,564.3 431.145,565.336 441.915,566.13 454.456,566.63 467.915,566.8 481.374,566.63 493.915,566.13 504.685,565.336 512.948,564.3 518.143,563.094 519.915,561.8" class="chartlet-diagram-rim"/><text x="467.915" y="587.3" text-anchor="middle" class="chartlet-flow-label">Orders</text></g><g class="chartlet-f chartlet-n-5 chartlet-f-2 chartlet-f-5"><rect x="547.915" y="564.3" width="104" height="36" class="chartlet-diagram-shadow"/><rect x="547.915" y="561.8" width="104" height="36" class="chartlet-flow-node chartlet-flow-external chartlet-role-gray"><title>Mail service</title></rect><text x="599.915" y="584.3" text-anchor="middle" class="chartlet-flow-label">Mail service</text></g></svg><label class="chartlet-hotspot" id="chartlet-19dc1aa622594b84-hs-0" for="chartlet-19dc1aa622594b84-focus-0"></label><label class="chartlet-hotspot" id="chartlet-19dc1aa622594b84-hs-1" for="chartlet-19dc1aa622594b84-focus-1"></label><label class="chartlet-hotspot" id="chartlet-19dc1aa622594b84-hs-2" for="chartlet-19dc1aa622594b84-focus-2"></label><label class="chartlet-hotspot" id="chartlet-19dc1aa622594b84-hs-3" for="chartlet-19dc1aa622594b84-focus-3"></label><label class="chartlet-hotspot" id="chartlet-19dc1aa622594b84-hs-4" for="chartlet-19dc1aa622594b84-focus-4"></label><label class="chartlet-hotspot" id="chartlet-19dc1aa622594b84-hs-5" for="chartlet-19dc1aa622594b84-focus-5"></label></div><p class="chartlet-source">Source: Architecture handbook, runtime view</p><details class="chartlet-data" data-viz-text><summary>Show chart data</summary><table><caption>Data for Checkout: the calls in order</caption><thead><tr><th scope="col">Component</th><th scope="col">Kind</th><th scope="col">Connects to</th></tr></thead><tbody><tr><th scope="row">Customer</th><td>person</td><td>Web shop (step 1, confirms the cart)</td></tr><tr><th scope="row">Web shop</th><td>frontend</td><td>Shop API (step 2, places the order, via HTTPS)</td></tr><tr><th scope="row">Shop API</th><td>service</td><td>Payment provider (step 3, charges, via HTTPS), Orders (step 4, stores the order, via SQL), Mail service (step 5, sends the receipt)</td></tr><tr><th scope="row">Payment provider</th><td>external system</td><td></td></tr><tr><th scope="row">Orders</th><td>database</td><td></td></tr><tr><th scope="row">Mail service</th><td>external system</td><td></td></tr></tbody></table></details></figure></div>