Price from
The one component that renders a “from” price. Every surface that headlines an offering’s lowest figure uses it: the home hero, the home treatment cards, the PDP hero, the related-treatment cards, the FAQ page, the mega-menu featured card, and the weight-loss category page.
It takes a structured value — the FromPrice returned by fromPrice() in @halwel/catalog — and never a pre-formatted string. That is the entire point. Until 2026-08-14 every price component took priceLabel: string, so each call site formatted its own, and the site carried two different“from” figures for the same product ($152 in the hero, $199 on the cards beneath it) alongside a third hardcoded literal feeding the intake. A component that accepts any string cannot enforce anything; one that accepts cents and a term can.
There is no bare-number variant, and adding one would undo the component. $152/mo is only obtainable by prepaying twelve months — printed alone it reads as bait the moment the visitor reaches the ladder and finds the first payable number is $199. Every variant below renders the basis with the figure. When a slot is too tight for the sentence, that is what variant="chip" is for.
import from @halwel/ui/components/product/PriceFrom
Variants
figure and basis on one line; wraps rather than truncating under 420px
for narrow columns and card corners
the tight-slot answer, e.g. the mega-menu featured card
isLowest: false. Saying "from" would imply a cheaper option that does not exist
a diagnostic panel: termMonths is null, so the basis reads "one-time purchase"
the figure scales; the basis stays small and quiet so the pair reads as one fact
a coming-soon SKU. The CALLER decides what a priceless offering says; that is merchandising, not pricing