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` (not `w-full`/`flex-1` spacer) — an earlier version // right-aligned each € amount by spanning the row edge-to-edge across the // full summary panel, matching the Gesamtsumme total line above it. That // made this secondary "enthält X% MwSt." hint visually disconnect from // its own label whenever the panel was wide, dragging the amount far off // to the right. Sized to its own content instead: the rate column is a // fixed width (`w-8`) and right-aligned with `tabular-nums` (equal-width // digits) so a single-digit rate like "7%" lines up with a two-digit one // like "19%" — same alignment guarantee as before, without stretching the // block itself. `self-start` overrides the parent // flex-col's default stretch (both call sites are plain `flex flex-col` // with no `items-start`, so children fill its width unless told not to). 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 (

enthält MwSt.:

{groups.map((g) => (
{g.rate}% {formatPrice(g.tax)}
))}
); }