{# 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" } -%} {{ label }} {% 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 %}