|
|
@@ -34,6 +34,8 @@ const props = defineProps({
|
|
|
tag: { type: String, default: 'a' },
|
|
|
// Classes CSS additionnelles pour la balise (ex: 'btn text-primary')
|
|
|
classe: { type: String, default: '' },
|
|
|
+ // Taille Font Awesome de l'icône (fa-lg, fa-sm, ... — vide : taille du texte courant)
|
|
|
+ taille: { type: String, default: '' },
|
|
|
// Animation Font Awesome appliquée à l'icône cible pendant la requête
|
|
|
// (fa-beat-fade, fa-beat, fa-flip, ... — vide pour désactiver)
|
|
|
animationChargement: { type: String, default: 'fa-beat-fade' },
|
|
|
@@ -45,19 +47,15 @@ const enChargement = ref(false);
|
|
|
// L'icône cible est celle qui sera affichée si la requête réussit
|
|
|
const iconeCible = computed(() => (estActif.value ? props.iconeInactif : props.iconeActif));
|
|
|
|
|
|
-// Préserve les classes de taille (fa-lg, fa-2xl, ...) pendant le chargement
|
|
|
-const classesTaille = computed(() => {
|
|
|
- const icone = enChargement.value ? iconeCible.value : (estActif.value ? props.iconeActif : props.iconeInactif);
|
|
|
- return icone.split(' ').filter((c) => /^fa-(2?xs|sm|lg|2?xl|[0-9]x|fw)$/.test(c));
|
|
|
-});
|
|
|
-
|
|
|
const iconeCourante = computed(() => {
|
|
|
if (enChargement.value) {
|
|
|
- return [iconeCible.value, props.animationChargement, ...classesTaille.value]
|
|
|
+ return [iconeCible.value, props.animationChargement, props.taille]
|
|
|
.filter(Boolean)
|
|
|
.join(' ');
|
|
|
}
|
|
|
- return estActif.value ? props.iconeActif : props.iconeInactif;
|
|
|
+ return [estActif.value ? props.iconeActif : props.iconeInactif, props.taille]
|
|
|
+ .filter(Boolean)
|
|
|
+ .join(' ');
|
|
|
});
|
|
|
|
|
|
async function switchEtat() {
|