Progression

Composants d'indication de progression, de chargement et d'états squelettes.

BcProgress

Barre de progression horizontale avec tailles de S à XL.

Tailles (S → XL)

vue
<BcProgress :value="40" size="s" />
<BcProgress :value="55" size="m" />
<BcProgress :value="70" size="l" />
<BcProgress :value="47" size="xl" variant="brand" />

Variantes

vue
<BcProgress :value="65" variant="neutral" />
<BcProgress :value="80" variant="success" />
<BcProgress :value="45" variant="warn" />
<BcProgress :value="90" variant="brand" />

Mode indéterminé

vue
<BcProgress :indeterminate="true" variant="brand" />

Mode strié animé

vue
<BcProgress :value="60" :striped="true" :animated="true" />

Avec label (slot #label)

vue
<BcProgress :value="72" variant="brand">
  <template #label="{ percentage }">
    <span>{{ Math.round(percentage) }}%</span>
  </template>
</BcProgress>

Avec label et pourcentage

vue
<script setup>
const progressRows = [
  { label: 'Documents KYB',      value: 100, variant: 'success' },
  { label: 'Configuration OIDC', value: 60,  variant: 'brand' },
  { label: 'Tests sandbox',      value: 25,  variant: 'warn' },
  { label: 'Score de risque',    value: 12,  variant: 'neutral' },
]
</script>

<div v-for="row in progressRows" :key="row.label" style="display: flex; align-items: center; gap: 12px; margin-bottom: 8px;">
  <span style="width: 180px; font-size: 14px;">{{ row.label }}</span>
  <BcProgress :value="row.value" :variant="row.variant" style="flex: 1;" />
  <span style="width: 40px; text-align: right; font-size: 13px; color: #888;">{{ row.value }}%</span>
</div>

Props — BcProgress

PropTypeDéfautDescription
valuenumber0Valeur courante (0–max)
maxnumber100Valeur maximale
variant"neutral" | "warn" | "success" | "brand""neutral"Couleur de la barre
size"s" | "m" | "l" | "xl""m"Epaisseur de la barre
indeterminatebooleanfalseMode chargement indéterminé (animation)
stripedbooleanfalseRemplissage strié
animatedbooleanfalseAnimation stripes (actif si striped: true)

Slot — BcProgress

SlotPropsDescription
#label{ value, max, percentage }Contenu affiché dans la barre

BcProgressV

Barre de progression verticale.

vue
<BcProgressV :value="65" variant="green" :height="100" :show-value="true" />

Props — BcProgressV

PropTypeDéfautDescription
valuenumber0Valeur courante
maxnumber100Valeur maximale
heightnumber120Hauteur en pixels
variant"brand" | "green" | "yellow" | "red" | "blue""brand"Couleur
showValuebooleanfalseAffiche la valeur en % sous la barre
indeterminatebooleanfalseMode indéterminé

BcSpinner

vue
<BcSpinner size="sm" />
<BcSpinner size="md" />
<BcSpinner size="lg" />
<BcSpinner variant="gradient" />
<BcSpinner mode="dots" />

Props — BcSpinner

PropTypeDéfautDescription
size"sm" | "md" | "lg""md"Taille
variant"default" | "gradient""default"Style visuel
mode"circle" | "dots""circle"Mode d'affichage
labelstring"Chargement"Label ARIA

BcSkeleton

Placeholder animé pendant le chargement des données. Génère automatiquement des lignes de largeurs décroissantes.

Démo interactive

vue
<!-- Skeleton de base : 3 lignes animées -->
<BcSkeleton :lines="3" :animated="true" />

<!-- Avec avatar -->
<BcSkeleton :lines="2" :avatar="true" />

<!-- Largeurs personnalisées -->
<BcSkeleton :lines="3" :widths="['100%', '80%', '60%']" />

Démo métier — card skeleton + table row skeleton

vue
<section class="skeleton-card-grid">
  <article v-for="card in 4" :key="card" class="skeleton-card">
    <BcSkeleton :lines="3" :animated="true" :widths="['82%', '45%', '70%']" />
  </article>
</section>

<section class="skeleton-table">
  <div v-for="row in 3" :key="row" class="skeleton-table-row">
    <div class="avatar-placeholder"></div>
    <BcSkeleton :lines="1" :animated="true" :widths="['68%']" />
    <BcSkeleton :lines="1" :animated="true" :widths="['32%']" />
  </div>
</section>

Props — BcSkeleton

PropTypeDéfautDescription
linesnumber3Nombre de lignes
avatarbooleanfalseAffiche un cercle avatar à gauche
animatedbooleantrueActive l'animation shimmer
widthsArray<string | number>[]Largeurs custom par ligne (ex: ['100%', '80%', 60])

Si widths est vide, la dernière ligne est à 72% et les autres à 100%.


Stepper (H / V)

Convention canonique :

  • BcStepperH = progression horizontale de parcours.
  • BcStepperV = progression verticale d'etapes.
  • BcStepper reste disponible comme alias retrocompatible de BcStepperH.

BcStepperH (horizontal)

Progression lineaire horizontale numerotee (onboarding).

Démo — 4 états

vue
<BcStepperH :steps="[
  { id: 'step-1', label: 'Création compte',   state: 'done' },
  { id: 'step-2', label: 'Vérification KYB',  state: 'active' },
  { id: 'step-3', label: 'Configuration API', state: 'pending' },
  { id: 'step-4', label: 'Activation',        state: 'error' },
]" />

Visuels attendus :

  • done : cercle vert + checkmark
  • active : cercle plein couleur brand (bleu)
  • pending : cercle gris, trait de connexion discret
  • error / bloque : cercle rouge + croix

BcStepperH/BcStepperV vs TimelineBcStepperH et BcStepperV suivent un plan d'etapes. BcTimeline sert a afficher un historique d'evenements date.

Variantes de taille (size)

vue
<BcStepperH size="sm" :steps="steps" />
<BcStepperH size="md" :steps="steps" /> <!-- défaut -->
<BcStepperH size="lg" :steps="steps" />

Variante marqueur personnalisé (icône au lieu du numéro)

vue
<BcStepperH :steps="steps">
  <template #marker="{ state, index }">
    <BcIcon v-if="state === 'done'" name="check" />
    <BcIcon v-else-if="state === 'active'" name="sparkles" />
    <span v-else>{{ index + 1 }}</span>
  </template>
</BcStepperH>

Props — BcStepperH

PropTypeDéfautDescription
stepsStepItem[][]Tableau d'étapes
clickablebooleanfalseRend les étapes cliquables
ariaLabelstring"Progression"Label ARIA du composant
size"sm" | "md" | "lg""md"Taille des bulles et connecteurs

Slots — BcStepperH

SlotPropsDescription
marker{ step, index, state }Remplace le contenu de la bulle (numéro/picto)

Type StepItem

ts
interface StepItem {
  id: string        // identifiant unique (requis)
  label: string     // libellé affiché
  state?: 'done' | 'active' | 'pending' | 'error'  // défaut: 'pending'
}

Events

EventPayloadDescription
selectStepItemÉtape cliquée (si clickable: true)

BcStepperV (vertical)

vue
<BcStepperV :steps="[
  { id: '1', title: 'Création dossier', desc: 'Terminé', state: 'done' },
  { id: '2', title: 'Vérification KYB', desc: 'En cours', state: 'active' },
  { id: '3', title: 'Configuration API', desc: 'En attente', state: 'pending' },
  { id: '4', title: 'Activation', desc: 'Bloqué', state: 'error' },
]" />

Variantes de taille (size)

vue
<BcStepperV size="sm" :steps="steps" />
<BcStepperV size="md" :steps="steps" /> <!-- défaut -->
<BcStepperV size="lg" :steps="steps" />

Props — BcStepperV

PropTypeDéfautDescription
stepsVStep[][]Etapes verticales
size"sm" | "md" | "lg""md"Taille des bulles et connecteurs

Slots — BcStepperV

SlotPropsDescription
marker{ step, index, state }Remplace le contenu de la bulle (numéro/picto)

Type VStep

ts
interface VStep {
  id: string
  title: string
  desc?: string
  state?: 'done' | 'active' | 'error' | 'pending' | 'future'
}