Move low-stock warning from image badge to a text hint, add it to the cart
The image-overlaid pill made the low-stock message read as clutter on product photos and had no equivalent in the cart at all. It's now a text line next to the price (ProductGrid/ProductSpotlight/RelatedProducts/ Pricing) and under the product name in cart line items (variant-specific, not "any variant low"). The line's height is always reserved, not conditionally rendered, so cards in the same row stay equal-height regardless of low-stock state — the exact regression an earlier text-based version of this hint caused before it was replaced by the image badge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -393,24 +393,29 @@ own distinct badge, the two never combine), and at/below the product's own
|
||||
`lowStockThreshold`. Neither raw `stock` nor `lowStockThreshold` is
|
||||
exposed in the public `Product` type, only this derived boolean — the
|
||||
public API has no reason to leak exact counts. Shown as a "Nur noch wenige
|
||||
verfügbar" pill (a new `--color-warning` token in `globals.css`, distinct
|
||||
from the brand-colored discount badge so the two never read as the same
|
||||
thing) — the same image-overlaid top-left pill Ausverkauft/discount
|
||||
already use (`position: absolute`, outside layout flow) on
|
||||
`ProductGrid.tsx`/`ProductSpotlight.tsx`/`RelatedProducts.tsx`/todo-cards'
|
||||
`Pricing.tsx`, plus a `"(nur noch wenige)"` variant-select suffix in
|
||||
`AddToCartButton`/`AddToCartInlineButton`. Stacks with the discount badge
|
||||
in a `flex flex-col` column rather than being replaced by it — a
|
||||
discounted product that's also low on stock (both are independent
|
||||
booleans, not mutually exclusive states) needs to show both, discovered
|
||||
live when `todo-karten` had exactly that combination and the low-stock
|
||||
pill silently never rendered under the old either/or ternary. Only
|
||||
"Ausverkauft" still wins outright, since it replaces both. Deliberately
|
||||
**not** a separate
|
||||
text line under the add-to-cart button (an earlier version did this) —
|
||||
that made the button block's own height vary card-to-card in every grid
|
||||
rendering it, breaking equal-height card alignment; the badge doesn't
|
||||
participate in layout flow at all, so it can't cause that.
|
||||
verfügbar" **text line** (`text-warning`, the same `--color-warning` token
|
||||
in `globals.css`, distinct from the brand-colored discount badge) next to
|
||||
the price on `ProductGrid.tsx`/`ProductSpotlight.tsx`/
|
||||
`RelatedProducts.tsx`/todo-cards' `Pricing.tsx` and — variant-specific, not
|
||||
"any variant low" — under the product name in `CartContent.tsx`'s own
|
||||
cart line items, plus the existing `"(nur noch wenige)"` variant-select
|
||||
suffix in `AddToCartButton`/`AddToCartInlineButton`. The image-overlaid
|
||||
top-left pill (`position: absolute`, outside layout flow) now shows only
|
||||
Ausverkauft/discount — low-stock moved off the image into text on request,
|
||||
since a shopper scanning product photos for "-20%" style badges reads a
|
||||
long low-stock sentence pinned to the image as clutter, and a customer
|
||||
already in the cart with that product had no low-stock signal there at
|
||||
all before this. The earlier version of this text line (removed once,
|
||||
see git history) broke equal-height card alignment in `ProductGrid.tsx`/
|
||||
`RelatedProducts.tsx` by only rendering when `lowStock` was true, so
|
||||
cards with/without the line ended up different heights; this version
|
||||
always renders the line's slot (`min-h-[1.05rem]`, empty when not
|
||||
low-stock) so every card in a row reserves the same space regardless of
|
||||
state — `ProductGrid.tsx` additionally still has its `flex-1` spacer
|
||||
pinning the add-to-cart button to the same Y as before, so the reserved
|
||||
height is belt-and-suspenders there, but load-bearing in
|
||||
`RelatedProducts.tsx`, which has no such spacer. Only "Ausverkauft" still
|
||||
wins outright over the discount pill, since it replaces it.
|
||||
|
||||
**Pricing**: `app/lib/cartTotals.ts`'s `effectivePrice(entry, product)` —
|
||||
a selected variant's `priceOverride` wins over the base `product.price`
|
||||
|
||||
Reference in New Issue
Block a user