{#
================================================================================
Post Card Component (Shared)
================================================================================
Single shared component for blog post cards with variants: featured, default,
compact. Uses PostView for normalized access. All links use p.href (includes
baseurl for GitHub Pages / subpath deployment).
Usage:
{{ post_card(post, variant='default', show_image=true, show_excerpt=true) }}
Variants:
- featured: larger card, gradient-border-strong fluid-bg, full date format
- default: standard card, gradient-border fluid-combined, time_ago
- compact: minimal (title, date, optional excerpt)
================================================================================
#}
{% from 'partials/components/tags.html' import tag_list %}
{% from 'chirpui/card.html' import resource_card %}
{% def post_card(post, variant='default', show_image=true, show_excerpt=true) %}
{% let p = post | post_view %}
{% if p %}
{% let theme_features = theme?.features ?? [] %}
{% let show_author = p.author and 'content.author' in theme_features %}
{% let show_reading_time = p.reading_time > 0 and 'content.reading_time' in theme_features %}
{% let show_full_date = variant == 'featured' %}
{% let meta_parts = [] %}
{% if show_author %}
{% set _ = meta_parts.append(p.author) %}
{% end %}
{% if p.date %}
{% set _ = meta_parts.append(p.date | dateformat('%B %d, %Y') if show_full_date else p.date | time_ago) %}
{% end %}
{% if show_reading_time %}
{% set _ = meta_parts.append(p.reading_time ~ ' min read') %}
{% end %}
{% let top_meta = meta_parts | join(' ยท ') if meta_parts | length > 0 else none %}
{% let excerpt_words = (p.excerpt_words ?? config.content.excerpt_words ?? 150) | coerce_int(150) %}
{% let excerpt_html = '' %}
{% if show_excerpt and p.excerpt and 'content.excerpts' in theme_features %}
{% let excerpt_html = p.excerpt | card_excerpt_html(excerpt_words, p.title, p.description, halve_words=(variant == 'compact')) %}
{% end %}
{% let tag_limit = 3 if variant == 'featured' else 2 if variant == 'compact' else 4 %}
{% call resource_card(
p.href,
p.title,
top_meta=top_meta,
cls='chirp-theme-post-card chirp-theme-post-card--' ~ variant,
link_mode='main'
) %}
{% if p.tags | length > 0 %}
{% slot footer %}
{{ tag_list(p.tags[:tag_limit], small=true) }}
{% end %}
{% end %}
{% if show_image and p.image %}
{% end %}
{% if excerpt_html %}