BjTab

Onglets Vue : la prop tabs fournit les libellés ; chaque BjTabPanel correspond à un panneau dans l’ordre d’apparition. v-model lie l’index actif (0-based).

Utilisation

<script setup>
import { ref } from 'vue'
import { BjTab, BjTabPanel } from '@flrxnt/dsbj/vue'

const active = ref(0)
</script>

<template>
  <BjTab v-model="active" :tabs="['Général', 'Pièces']">
    <BjTabPanel>
      <p>Contenu de l’onglet général.</p>
    </BjTabPanel>
    <BjTabPanel>
      <p>Liste des pièces jointes.</p>
    </BjTabPanel>
  </BjTab>
</template>

Aperçu (HTML)

Contenu de l’onglet général.

Liste des pièces jointes.

Aperçu : onglet actif (HTML)

Panneau visible (équivalent index 1 en Vue).

modelValue : index initial et liaison

<script setup>
import { ref } from 'vue'
import { BjTab, BjTabPanel } from '@flrxnt/dsbj/vue'

const idx = ref(2)
</script>

<template>
  <!-- Index initial 2 (troisième onglet) -->
  <BjTab v-model="idx" :tabs="['A', 'B', 'C', 'D']">
    <BjTabPanel><p>Onglet A</p></BjTabPanel>
    <BjTabPanel><p>Onglet B</p></BjTabPanel>
    <BjTabPanel><p>Onglet C (actif au montage)</p></BjTabPanel>
    <BjTabPanel><p>Onglet D</p></BjTabPanel>
  </BjTab>
</template>

tabs : longueurs et libellés

<!-- Deux onglets -->
<BjTab :tabs="['Résumé', 'Détails']">...</BjTab>

<!-- Un seul onglet (cas limite) -->
<BjTab :tabs="['Unique']">
  <BjTabPanel>Contenu unique</BjTabPanel>
</BjTab>

Combinaisons tabs × panneaux × index initial

Le nombre de chaînes dans tabs doit égaler le nombre de BjTabPanel ; l’index v-model doit rester entre 0 et tabs.length - 1.

<!-- 2 onglets, premier actif -->
<BjTab v-model="i" :tabs="['Résumé', 'Détails']">
  <BjTabPanel><p>Résumé</p></BjTabPanel>
  <BjTabPanel><p>Détails</p></BjTabPanel>
</BjTab>

<!-- 4 onglets, dernier actif au montage -->
<BjTab v-model="j" :tabs="['A', 'B', 'C', 'D']">
  <BjTabPanel>…</BjTabPanel>
  <BjTabPanel>…</BjTabPanel>
  <BjTabPanel>…</BjTabPanel>
  <BjTabPanel>…</BjTabPanel>
</BjTab>
<!-- script: const j = ref(3) -->

Clavier (flèches, Home, End)

Sur un onglet focalisé : ← → changent l’onglet (boucle), Home va au premier, End au dernier ; le focus suit l’onglet activé.

Slots : contenu riche dans BjTabPanel

Chaque panneau accepte tout marquage (listes, formulaires, composants) dans son slot par défaut.

<BjTab v-model="t" :tabs="['Liste', 'Formulaire']">
  <BjTabPanel>
    <ul class="bj-list">
      <li>Élément</li>
    </ul>
  </BjTabPanel>
  <BjTabPanel>
    <label class="bj-label">Nom</label>
    <input class="bj-input" type="text" />
  </BjTabPanel>
</BjTab>

Slots

SlotDescription
BjTab (default)Les BjTabPanel enfants, dans le même ordre que tabs[].

Émission

ÉvénementDescription
update:modelValueupdate:modelValue(index) lors d’un clic ou navigation clavier (flèches, Home, End).
<script setup>
import { ref } from 'vue'
import { BjTab, BjTabPanel } from '@flrxnt/dsbj/vue'

const active = ref(0)
</script>

<template>
  <BjTab
    v-model="active"
    :tabs="['Un', 'Deux']"
    @update:modelValue="(i) => console.log('Onglet', i)"
  >
    <BjTabPanel>…</BjTabPanel>
    <BjTabPanel>…</BjTabPanel>
  </BjTab>
</template>

Props — BjTab

PropDescription
modelValueIndex de l’onglet actif (v-model), défaut 0.
tabsTableau de chaînes : une entrée par onglet, dans l’ordre des BjTabPanel.

BjTabPanel

PropDescription
(default slot)Contenu du panneau (slot par défaut). Un panneau par item de tabs.