import { Fragment } from "react"; import { formatPrice } from "../lib/format"; import type { TaxBreakdownGroup } from "../lib/taxBreakdown"; // The actual amount of VAT included in a total — not just a disclosure // that VAT is included (see cartTotals.ts's effectiveTaxRate() for the // "which %" shown next to each line item elsewhere). One line per rate // when a cart/order spans more than one; a single line otherwise. // // `self-start` — the block starts flush left, at the same x as // "Gesamtsumme" on the total row above it, not pinned under the € // amount on the right (tried that, didn't read right against the label). // // Multi-rate case is a 3-column CSS grid (label / rate / amount), not a // flex column — the "enthält MwSt.:" label only occupies row 1's first // cell (later rows get an empty cell there), so the first rate sits on // the *same line* as the label instead of dropping to its own row below // it. Grid (unlike stacked flex rows) sizes each column to the widest // cell across every row automatically, so the rate column still lines up // a single-digit rate ("7%") under a two-digit one ("19%") without // needing an explicit fixed width. export function VatBreakdown({ groups }: { groups: TaxBreakdownGroup[] }) { if (groups.length === 0) return null; if (groups.length === 1) { const [g] = groups; return (
enthält {g.rate}% MwSt.: {formatPrice(g.tax)}
); } return (