{# Product Info Components ======================= Product details section for product detail pages. Usage: {% from 'shared/macros/storefront/product-info.html' import product_info, product_price, product_rating, stock_status %} #} {# Product Info Block ================== Complete product information section. Parameters: - product_var: Alpine.js expression for product (default: 'product') - show_sku: Show SKU (default: false) - show_stock: Show stock status (default: true) - show_rating: Show star rating (default: true) - show_store: Show store name - for marketplace (default: false) - show_category: Show category breadcrumb (default: false) - title_tag: HTML tag for title (default: 'h1') Expected product object: { name: 'Product Name', sku: 'SKU-123', price: 99.99, sale_price: 79.99, rating: 4.5, review_count: 127, stock: 15, short_description: '...', store: { name: 'Store Name', url: '/store/...' }, category: { name: 'Category', url: '/category/...' } } Usage: {{ product_info(product_var='product', show_store=true) }} #} {% macro product_info( product_var='product', show_sku=false, show_stock=true, show_rating=true, show_store=false, show_category=false, title_tag='h1' ) %}
{# Category / Store (if marketplace) #} {% if show_category or show_store %}
{% if show_category %} {% endif %} {% if show_category and show_store %} {% endif %} {% if show_store %} {% endif %}
{% endif %} {# Product Title #} <{{ title_tag }} class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white" x-text="{{ product_var }}.name" > {# Rating and Review Count #} {% if show_rating %}
{{ product_rating(product_var=product_var, size='md', clickable=true) }}
{% endif %} {# Price #} {{ product_price(product_var=product_var, size='lg') }} {# Short Description #}
>
{# Stock Status #} {% if show_stock %} {{ stock_status(product_var=product_var) }} {% endif %} {# SKU #} {% if show_sku %}
SKU:
{% endif %}
{% endmacro %} {# Product Price ============= Price display with sale price support. Parameters: - product_var: Alpine.js expression for product - size: 'sm' | 'md' | 'lg' (default: 'md') - show_discount: Show discount percentage (default: true) Usage: {{ product_price(product_var='product', size='lg') }} #} {% macro product_price( product_var='product', size='md', show_discount=true ) %} {% set sizes = { 'sm': {'price': 'text-lg', 'original': 'text-sm', 'badge': 'text-xs px-1.5 py-0.5'}, 'md': {'price': 'text-xl', 'original': 'text-base', 'badge': 'text-xs px-2 py-0.5'}, 'lg': {'price': 'text-2xl md:text-3xl', 'original': 'text-lg', 'badge': 'text-sm px-2 py-1'} } %} {% set s = sizes[size] %}
{# Current Price (sale or regular) #} {# Original Price (if on sale) #} {# Discount Badge #} {% if show_discount %} {% endif %}
{% endmacro %} {# Product Rating ============== Star rating display with review count. Parameters: - product_var: Alpine.js expression for product - size: 'sm' | 'md' | 'lg' (default: 'md') - clickable: Make clickable to scroll to reviews (default: false) - show_count: Show review count (default: true) Usage: {{ product_rating(product_var='product', clickable=true) }} #} {% macro product_rating( product_var='product', size='md', clickable=false, show_count=true ) %} {% set sizes = { 'sm': {'star': 'w-4 h-4', 'text': 'text-xs'}, 'md': {'star': 'w-5 h-5', 'text': 'text-sm'}, 'lg': {'star': 'w-6 h-6', 'text': 'text-base'} } %} {% set s = sizes[size] %}
{# Stars #}
{# Rating Number #} {# Review Count #} {% if show_count %} ( reviews) {% endif %}
{% endmacro %} {# Stock Status ============ Stock availability indicator. Parameters: - product_var: Alpine.js expression for product (or stock number) - low_stock_threshold: Show warning below this number (default: 10) Usage: {{ stock_status(product_var='product') }} {{ stock_status(product_var='selectedVariant.stock') }} #} {% macro stock_status( product_var='product', low_stock_threshold=10 ) %}
{# In Stock #} {# Low Stock #} {# Out of Stock #}
{% endmacro %} {# Product Badges ============== Display multiple product badges (new, sale, bestseller, etc.). Parameters: - product_var: Alpine.js expression for product Usage: {{ product_badges(product_var='product') }} #} {% macro product_badges(product_var='product') %}
{# Sale Badge #} {# New Badge #} {# Bestseller Badge #} {# Limited Edition Badge #}
{% endmacro %} {# Trust Indicators ================ Display trust/shipping information below add to cart. Parameters: - show_shipping: Show free shipping info (default: true) - show_returns: Show returns policy (default: true) - show_secure: Show secure checkout badge (default: true) - free_shipping_threshold: Amount for free shipping (default: 50) Usage: {{ trust_indicators(free_shipping_threshold=75) }} #} {% macro trust_indicators( show_shipping=true, show_returns=true, show_secure=true, free_shipping_threshold=50 ) %}
{% if show_shipping %}
Free shipping on orders over ${{ free_shipping_threshold }}
{% endif %} {% if show_returns %}
30-day easy returns
{% endif %} {% if show_secure %}
Secure checkout
{% endif %}
{% endmacro %}