Shopping Cart
A cart page with item list, quantity controls, and order summary.
Card
Button
Separator
Preview
Shopping Cart (3 items)
Wireless Headphones
Black / Over-ear
$79.99
1
USB-C Hub
Space Gray
$49.99
2
Laptop Stand
Silver / Adjustable
$34.99
1
Order Summary
Subtotal
$214.96
Shipping
$9.99
Tax
$17.20
Total
$242.15
Code
<div class="w-full max-w-4xl">
<div class="grid gap-6 lg:grid-cols-[1fr_300px]">
@* Cart Items *@
<BbCard>
<BbCardHeader>
<BbCardTitle>Shopping Cart (@items.Count items)</BbCardTitle>
</BbCardHeader>
<BbCardContent class="space-y-0">
@for (int i = 0; i < items.Count; i++)
{
var item = items[i];
@if (i > 0)
{
<BbSeparator class="my-4" />
}
<div class="flex items-center gap-4">
<div class="w-16 h-16 bg-muted rounded flex items-center justify-center shrink-0">
<!-- package icon SVG -->
</div>
<div class="flex-1 min-w-0">
<p class="font-medium">@item.Name</p>
<p class="text-sm text-muted-foreground">@item.Variant</p>
<p class="text-sm font-medium mt-1">[email protected]("F2")</p>
</div>
<div class="flex items-center gap-1">
<BbButton Variant="ButtonVariant.Outline" Size="ButtonSize.Icon" class="h-8 w-8">
<!-- minus icon SVG -->
</BbButton>
<span class="w-8 text-center text-sm font-medium">@item.Quantity</span>
<BbButton Variant="ButtonVariant.Outline" Size="ButtonSize.Icon" class="h-8 w-8">
<!-- plus icon SVG -->
</BbButton>
</div>
<BbButton Variant="ButtonVariant.Ghost" Size="ButtonSize.Icon" class="h-8 w-8 text-muted-foreground">
<!-- trash-2 icon SVG -->
</BbButton>
</div>
}
</BbCardContent>
</BbCard>
@* Order Summary *@
<BbCard class="h-fit">
<BbCardHeader>
<BbCardTitle>Order Summary</BbCardTitle>
</BbCardHeader>
<BbCardContent class="space-y-3">
<div class="flex justify-between text-sm">
<span class="text-muted-foreground">Subtotal</span>
<span>[email protected]("F2")</span>
</div>
<div class="flex justify-between text-sm">
<span class="text-muted-foreground">Shipping</span>
<span>[email protected]("F2")</span>
</div>
<div class="flex justify-between text-sm">
<span class="text-muted-foreground">Tax</span>
<span>[email protected]("F2")</span>
</div>
<BbSeparator />
<div class="flex justify-between font-bold">
<span>Total</span>
<span>[email protected]("F2")</span>
</div>
</BbCardContent>
<BbCardFooter class="flex-col gap-2">
<BbButton class="w-full">Proceed to Checkout</BbButton>
<BbButton Variant="ButtonVariant.Outline" class="w-full">Continue Shopping</BbButton>
</BbCardFooter>
</BbCard>
</div>
</div>
@code {
private record CartItem(string Name, string Variant, decimal Price, int Quantity);
private List<CartItem> items = new()
{
new("Wireless Headphones", "Black / Over-ear", 79.99m, 1),
new("USB-C Hub", "Space Gray", 49.99m, 2),
new("Laptop Stand", "Silver / Adjustable", 34.99m, 1)
};
private decimal Subtotal => items.Sum(i => i.Price * i.Quantity);
private decimal Shipping => 9.99m;
private decimal Tax => Math.Round(Subtotal * 0.08m, 2);
private decimal Total => Subtotal + Shipping + Tax;
}