Skip to content

Product components

Display product data from Shopify — prices, variants, stock status, and more. Each component handles one concern and reads from a shared product context.

FmProductPrice

Displays the product price, formatted for the visitor's active market currency. Updates when the visitor selects a different variant or switches markets.

FmProductComparePrice

Shows the original price with a strikethrough when a product is on sale. Hides automatically when the product has no compare-at price.

FmProductDiscount

Displays the discount amount or percentage between the current price and compare-at price.

FmProductVariants

Presents variant options (size, color, material) for selection. Disables unavailable combinations automatically. Connect this to FmCartAddButton — when a visitor picks a variant, the add-to-cart button updates to match.

FmProductVariantLabel

Displays the name of the currently selected variant option (e.g., "Large" or "Blue").

FmProductStockState

Toggles child visibility based on inventory status. Use slots to show different content for in-stock, low-stock, and out-of-stock states.

FmProductStockState
  ├── In Stock slot → "Ready to ship"
  ├── Low Stock slot → "Only 3 left"
  └── Out of Stock slot → "Sold out"

Configure the low-stock threshold via property controls.

FmProductInventory

Displays the numeric inventory count for the selected variant.

FmRestockEstimate

Shows the estimated restock date for out-of-stock items. Reads restock metadata from Shopify and hides when the product is in stock.

FmDeliveryEstimate

Displays the estimated delivery date based on the visitor's market and selected variant.

WARNING

All product components must be nested inside a product context. Connect a product handle to the parent frame, or nest them inside a component that provides product context (like FmCatalog).

Composition example

Frame (product page)
  ├── FmProductPrice
  ├── FmProductComparePrice
  ├── FmProductDiscount
  ├── FmProductVariants
  ├── FmProductStockState
  │   ├── In Stock → FmDeliveryEstimate
  │   └── Out of Stock → FmRestockEstimate
  └── FmCartAddButton

Released under the MIT License.