{# Macros pour composants réutilisables #} {# Macro pour section hero avec gradient #} {% macro hero_section(title, subtitle=None, meta_info=[], primary_action=None, icon=None, gradient_class="from-purple-600 to-blue-600") %}
{% if caller %} {{ caller() }} {% endif %}

{{ title }}

{% if subtitle %}

{{ subtitle }}

{% endif %} {% if meta_info %}
{% for info in meta_info %} {% if info.icon %} {{ info.icon|safe }} {% endif %} {{ info.text }} {% endfor %}
{% endif %}
{% endmacro %} {# Macro pour card standardisée #} {% macro card(title=None, actions=[], classes="", body_classes="p-6") %}
{% if title %}

{{ title }}

{% if actions %}
{% for action in actions %} {{ action.text }} {% endfor %}
{% endif %}
{% endif %}
{{ caller() }}
{% endmacro %} {# Macro pour bouton avec gradient #} {% macro gradient_button(url, text, icon=None, gradient_class="from-blue-500 to-blue-600", hover_gradient="from-blue-600 to-blue-700", size="md", classes="") %} {% set size_classes = { 'sm': 'px-4 py-2 text-sm', 'md': 'px-6 py-3 text-base', 'lg': 'px-8 py-4 text-lg' } %} {% if icon %}
{{ icon|safe }}
{% endif %} {{ text }}
{% endmacro %} {# Macro pour action card (comme les cartes d'actions principales) #} {% macro action_card(url, title, subtitle, icon, gradient_class="from-green-500 to-green-600", hover_gradient="from-green-600 to-green-700", is_button=False) %} {% if is_button %} {% else %} {% endif %} {% endmacro %} {# Macro pour indicateur de progression #} {% macro progress_indicator(progress, clickable=True, assessment_id=None, compact=False) %} {% set base_classes = "inline-flex items-center rounded-full text-xs font-medium border" %} {% set size_classes = "px-3 py-2" if not compact else "px-2 py-1" %} {% if progress.status == 'completed' %}
Correction 100%
{% elif progress.status == 'in_progress' %} {% if clickable and assessment_id %}
Correction {{ progress.percentage }}% {% if clickable and assessment_id %}
{% else %}{% endif %} {% elif progress.status == 'not_started' %} {% if clickable and assessment_id %} Correction 0% {% if clickable and assessment_id %}{% else %}{% endif %} {% else %}
Non définie
{% endif %} {% endmacro %} {# Macro pour carte de statistique cliquable #} {% macro stat_card(title, value, url, icon, color="blue", description=None) %}
{{ title }}
{{ value }}
{% if description %}
{{ description }}
{% endif %}
{{ icon|safe }}
{% endmacro %} {# Macro pour filtres standardisés #} {% macro filter_section(filters, current_values={}) %}
{% for filter in filters %}
{% endfor %}
{% if caller %}
{{ caller() }}
{% endif %}
{% endmacro %}