BjAccordion

Composants Vue pour un groupe d’accordéons. BjAccordion fournit le contexte ; BjAccordionItem définit id, titre et contenu par slot.

Utilisation

<script setup>
import { BjAccordion, BjAccordionItem } from '@flrxnt/dsbj/vue'
</script>

<template>
  <BjAccordion exclusive>
    <BjAccordionItem id="a1" title="Section 1">Contenu 1</BjAccordionItem>
    <BjAccordionItem id="a2" title="Section 2">Contenu 2</BjAccordionItem>
  </BjAccordion>
</template>

Aperçu (HTML)

Contenu 1

Contenu 2

exclusive : false et true

Valeurs : false (défaut) ou true. Avec exclusive, l’ouverture d’un item ferme les autres.

exclusive="false"

<BjAccordion :exclusive="false">
  <BjAccordionItem id="x1" title="Premier">Texte A</BjAccordionItem>
  <BjAccordionItem id="x2" title="Deuxième">Texte B</BjAccordionItem>
</BjAccordion>

exclusive="true"

<BjAccordion :exclusive="true">
  <BjAccordionItem id="y1" title="Onglet A">Un seul ouvert à la fois</BjAccordionItem>
  <BjAccordionItem id="y2" title="Onglet B">Ferme l’autre au clic</BjAccordionItem>
</BjAccordion>

Contenu riche dans l’item (slot par défaut)

<BjAccordion>
  <BjAccordionItem id="doc" title="Pièces jointes">
    <ul class="bj-list">
      <li><a href="#">rapport.pdf</a></li>
      <li><a href="#">annexe.docx</a></li>
    </ul>
  </BjAccordionItem>
</BjAccordion>

Combinaisons exclusive × nombre d’items

Même contenu Vue : faites varier exclusive et la liste d’items (ids uniques obligatoires).

<!-- exclusive false : plusieurs panneaux ouverts possible -->
<BjAccordion :exclusive="false">
  <BjAccordionItem id="c1" title="A">…</BjAccordionItem>
  <BjAccordionItem id="c2" title="B">…</BjAccordionItem>
  <BjAccordionItem id="c3" title="C">…</BjAccordionItem>
</BjAccordion>

<!-- exclusive true : un seul ouvert ; ids toujours uniques -->
<BjAccordion exclusive>
  <BjAccordionItem id="c1" title="A">…</BjAccordionItem>
  <BjAccordionItem id="c2" title="B">…</BjAccordionItem>
  <BjAccordionItem id="c3" title="C">…</BjAccordionItem>
</BjAccordion>

exclusive=false (deux corps ouverts)

Panneau A

Panneau B

Attributs sur la racine (BjAccordion)

Les attributs non déclarés (class, data-*, aria-*) sont appliqués sur le conteneur .bj-accordions.

<BjAccordion class="bj-stack" data-testid="faq" aria-label="FAQ">
  <BjAccordionItem id="f1" title="Question 1">Réponse 1</BjAccordionItem>
</BjAccordion>

Événements Vue

Pas d’emit : l’ouverture/fermeture est gérée en interne par le contexte injecté (toggle au clic sur l’en-tête).

v-model

Pas de v-model : l’état ouvert/fermé n’est pas synchronisé vers le parent ; utilisez plusieurs items pour le contenu statique ou contrôlé côté enfant.

Props — BjAccordion

PropDescription
exclusiveSi true, un seul panneau ouvert à la fois. Si false (défaut), plusieurs panneaux peuvent être ouverts.

Props — BjAccordionItem

PropDescription
idIdentifiant stable de l’item (clé d’état, aria).
titleTexte du bouton d’en-tête.

Slots

SlotDescription
BjAccordion (default)Enfants : un ou plusieurs BjAccordionItem.
BjAccordionItem (default)Corps du panneau (affiché quand l’item est ouvert).