{# Composants interactifs en HTML natif (charte « Accessible chaleureux »). Aucun framework JavaScript requis : on s'appuie sur les éléments natifs
/ (accordéon, menu) et (modale). La fermeture de la modale est gérée par
(zéro JS) ; son ouverture utilise la méthode native showModal() (une ligne de JS, pas de framework). Usage : {% from "components/interactive.html" import accordion, dropdown, modal, modal_trigger %} #} {# Accordéon (zéro JS). Usage : {% call accordion("Titre") %} ... {% endcall %} #} {% macro accordion(summary, open=False) %}
{{ summary }} v
{{ caller() }}
{% endmacro %} {# Menu déroulant (zéro JS). Usage : {% call dropdown("Actions") %} ... {% endcall %} #} {% macro dropdown(label) %}
{{ label }} v
{{ caller() }}
{% endmacro %} {# Lien de menu pour dropdown(). #} {% macro menu_item(label, href="#") %} {{ label }} {% endmacro %} {# Bouton qui ouvre la modale d'identifiant id (showModal natif). #} {% macro modal_trigger(id, label, variant="primary") %} {%- set styles = { "primary": "text-white bg-teal hover:bg-teal-dark", "secondary": "text-teal bg-teal-soft border border-teal-border hover:bg-teal-border", "ghost": "text-ink bg-transparent border border-field hover:border-teal" } -%} {% endmacro %} {# Modale native . Fermeture par (zéro JS). Usage : {% call modal("confirm", "Confirmer") %} ... {% endcall %} puis ouvrir avec {{ modal_trigger("confirm", "Ouvrir") }}. #} {% macro modal(id, title="") %}
{% if title %}

{{ title }}

{% endif %}
{{ caller() }}
{% endmacro %}