Product Card
Displays summarized information about a product. They usually present a call-to-action button, as well as the product's name, price, and image.
The ProductCard
is a compound of the following:
ProductCardImage
: wraps the product's image.ProductCardContent
: wraps the content's details.
Overview
Import
Import the component from @faststore/ui
import {
ProductCard,
ProductCardImage,
ProductCardContent,
} from '@faststore/ui'
Import Styles
import '@faststore/ui/src/components/molecules/ProductCard/styles.scss'
Usage
Props
All product card related components support all attributes also supported by their respective HTML tags. Besides those attributes, the following props are also supported:
Product Card
Name | Type | Description | Default |
---|---|---|---|
bordered | false | true | Sets a border to the component. | false |
variant | "wide" | "default" | Sets the component's size. | default |
outOfStock | false | true | Enables a outOfStock status. | |
testId | string | ID to find this component in testing tools (e.g.: cypress, testing-library, and jest). | fs-product-card |
Product Card Image
Name | Type | Description | Default |
---|---|---|---|
testId | string | ID to find this component in testing tools (e.g.: cypress, testing library, and jest). | fs-product-card-image |
aspectRatio | number | Specifies the ProductCard image's aspect ratio. | 1 |
Product Card Content
Name | Type | Description | Default |
---|---|---|---|
testId | string | ID to find this component in testing tools (e.g.: cypress, testing library, and jest). | fs-product-card-content |
title* | string | Specifies the product's title. | |
linkProps | Partial<LinkProps<LinkElementType>> | Props for the link from ProductCard component. | |
price | PriceDefinition | Specifies product's prices. | |
outOfStock | false | true | Enables a outOfStock status. | |
outOfStockLabel | string | Specifies the OutOfStock badge's label. | Out of stock |
ratingValue | number | Specifies Rating Value of the product. | |
buttonLabel | string | Specifies the button's label. | Add |
showDiscountBadge | false | true | Enables a DiscountBadge to the component. | |
onButtonClick | () => void | Callback function when button is clicked. |
Price Definition
Name | Type | Description | Default |
---|---|---|---|
value | number | The raw price value. | |
listPrice | number | Product's list price | |
formatter | PriceFormatter | (price: number, variant: PriceVariant) => ReactNode |
Design Tokens
Local token | Default value/Global token linked |
---|---|
--fs-product-card-padding | var(--fs-spacing-1) var(--fs-spacing-1) var(--fs-spacing-2) var(--fs-spacing-1) |
--fs-product-card-min-width | 10rem |
--fs-product-card-shadow | var(--fs-shadow) |
--fs-product-card-shadow-hover | var(--fs-shadow-hover) |
--fs-product-card-bkg-color | var(--fs-color-body-bkg) |
--fs-product-card-bkg-color-hover | var(--fs-product-card-bkg-color) |
--fs-product-card-bkg-color-focus | var(--fs-product-card-bkg-color-hover) |
--fs-product-card-border-radius | var(--fs-border-radius) |
--fs-product-card-border-color-hover | var(--fs-border-color-hover) |
--fs-product-card-transition-function | var(--fs-transition-function) |
--fs-product-card-transition-property | var(--fs-transition-property) |
--fs-product-card-transition-timing | var(--fs-transition-timing) |
Nested Elements
Image
Local token | Default value/Global token linked |
---|---|
--fs-product-card-img-radius | var(--fs-product-card-border-radius) |
--fs-product-card-img-scale-hover | 1 |
Title
Local token | Default value/Global token linked |
---|---|
--fs-product-card-title-color | var(--fs-color-text) |
--fs-product-card-title-size | var(--fs-text-size-base) |
--fs-product-card-title-weight | var(--fs-text-weight-regular) |
--fs-product-card-title-max-lines | var(--fs-text-max-lines) |
Price
Local token | Default value/Global token linked |
---|---|
--fs-product-card-price-gap | var(--fs-spacing-1) |
--fs-product-card-price-color | var(--fs-color-text) |
--fs-product-card-price-size | var(--fs-text-size-base) |
Variants
Default
Out of Stock
To replicate this style, add outOfStock
prop on both ProductCard
and ProductCardContent
.
Local token | Default value/Global token linked |
---|---|
--fs-product-card-out-of-stock-bkg-color | var(--fs-color-disabled-bkg) |
--fs-product-card-out-of-stock-img-opacity | .5 |
Bordered
Local token | Default value/Global token linked |
---|---|
--fs-product-card-border-width | var(--fs-border-width) |
--fs-product-card-border-color | var(--fs-border-color-light) |
Wide
Prefer using buyButton
or discountBadge
, never both.
Local token | Default value/Global token linked |
---|---|
--fs-product-card-wide-padding | 0 |
--fs-product-card-wide-content-padding | var(--fs-spacing-2) |
--fs-product-card-wide-min-width | 9rem |
--fs-product-card-wide-bkg-color | var(--fs-color-neutral-bkg) |
Use Cases
Use the ProductCard
to:
- Present a product collection on the home page.
- Present product details on PLPs.
- Build a product slider that showcases multiple products at once, making it easier for visitors to browse your online store.
Customization
data-fs-product-card
data-fs-product-card-bordered="true"
data-fs-product-card-variant="default | wide"
data-fs-product-card-image
data-fs-product-card-content
data-fs-product-card-heading
data-fs-product-card-title
data-fs-product-card-prices
data-fs-product-card-actions
Related components
Apple Magic Mouse
Original price:$999Sale Price:$950.044k Philips Monitor 27”
Original price:$490Sale Price:$420Echo Dot Smart Speaker
Original price:$310Sale Price:$280Aedle VK-1 L Headphone
Original price:$150Sale Price:$130Oculus VR Headset
Original price:$344Sale Price:$315Apple AirPods Pro
Original price:$249Sale Price:$229Anker SoundCore Liberty Air
Original price:$643.71Sale Price:$486.34Fujifilm X-T1 Camera
Original price:$495.97Sale Price:$366.11SANDMARC Fisheye Lens
Original price:$946.73Sale Price:$636.05Apple AirTag
Original price:$679.29Sale Price:$426.14
ProductShelf
Displays a list of products to be used as a section on the store.
See moreApple Magic Mouse
Original price:$999Sale Price:$950.044k Philips Monitor 27”
Original price:$490Sale Price:$420Echo Dot Smart Speaker
Original price:$310Sale Price:$280Aedle VK-1 L Headphone
Original price:$150Sale Price:$130Oculus VR Headset
Original price:$344Sale Price:$315Apple AirPods Pro
Original price:$249Sale Price:$229Anker SoundCore Liberty Air
Original price:$643.71Sale Price:$486.34Fujifilm X-T1 Camera
Original price:$495.97Sale Price:$366.11SANDMARC Fisheye Lens
Original price:$946.73Sale Price:$636.05Apple AirTag
Original price:$679.29Sale Price:$426.14
ProductGrid
It's a section generally used on PLP pages to list the products available in the store.
See more