{# Reusable components / partials #} {# ------ Product card ------ #} {% macro product_card(product, is_wishlisted=false) -%}
{{ product.title }} ${{ '%.2f' % product.price }} {% if current_user.is_authenticated and current_user.id != product.seller_id %} {% endif %}
{{ product.title }}
{{ product.condition_label }} · {{ product.created_at | time_ago }}
{% if product.seller %}
{{ product.seller.username }} {{ product.seller.username }}
{% endif %}
{%- endmacro %} {# ------ Star rating display (read-only) ------ #} {% macro star_rating(rating, size=14) -%} {% for i in range(1, 6) %} {% if i <= rating|int %} {% else %} {% endif %} {% endfor %} {%- endmacro %} {# ------ Form field ------ #} {% macro form_field(field, placeholder='', type=None, hint=None) -%}
{{ field.label(class="form-label") }} {% set ftype = type or field.type %} {% if ftype == 'TextAreaField' %} {{ field(class="form-textarea" + (' error' if field.errors else ''), placeholder=placeholder) }} {% elif ftype == 'SelectField' %} {{ field(class="form-select" + (' error' if field.errors else '')) }} {% elif ftype == 'BooleanField' %} {% else %} {{ field(class="form-input" + (' error' if field.errors else ''), placeholder=placeholder) }} {% endif %} {% if hint and not field.errors %}
{{ hint }}
{% endif %} {% if field.errors %} {% for e in field.errors %}
{{ e }}
{% endfor %} {% endif %}
{%- endmacro %} {# ------ Empty state ------ #} {% macro empty_state(icon='package', title='Nothing here yet', message='Check back later.', cta_url=None, cta_text=None) -%}

{{ title }}

{{ message }}

{% if cta_url %} {{ cta_text }} {% endif %}
{%- endmacro %}