COMPOSANTS
Sidebar filtres
Structure de la sidebar filtres
La sidebar filtres accompagne toujours une liste ou une grille. Largeur fixe w-64, toujours visible sur desktop.
<aside class="w-64 flex-shrink-0 bg-base-100 border border-base-200 rounded-box p-4 shadow-sm">
<!-- Section: Fournisseur -->
<div class="mb-5">
<h3 class="text-xs font-accent font-bold text-base-content/40 uppercase tracking-wider mb-2">
Fournisseur
</h3>
<div class="space-y-1.5">
<label class="flex items-center gap-2 cursor-pointer text-sm hover:text-mc-navy">
<input type="checkbox" class="checkbox checkbox-primary checkbox-xs">
<span class="flex-1">Stanley/Stella</span>
<span class="badge badge-ghost badge-xs">284</span>
</label>
<label class="flex items-center gap-2 cursor-pointer text-sm hover:text-mc-navy">
<input type="checkbox" class="checkbox checkbox-primary checkbox-xs" checked>
<span class="flex-1">B&C Collection</span>
<span class="badge badge-ghost badge-xs">147</span>
</label>
</div>
</div>
<!-- Section: Couleur (swatches) -->
<div class="mb-5">
<h3 class="text-xs font-accent font-bold text-base-content/40 uppercase tracking-wider mb-2">
Couleur
</h3>
<div class="flex flex-wrap gap-2">
<label class="cursor-pointer" title="Noir (156)">
<input type="checkbox" class="sr-only peer">
<span class="block w-6 h-6 rounded-full border-2 border-base-300 peer-checked:border-primary
peer-checked:ring-2 peer-checked:ring-primary/40 transition-all"
style="background-color: #1a1a1a;"></span>
</label>
</div>
</div>
<!-- Actions -->
<div class="flex gap-2 mt-6 pt-4 border-t border-base-200">
<button class="btn btn-primary btn-sm flex-1">Appliquer</button>
<a href="#" class="btn btn-ghost btn-sm">Effacer</a>
</div>
</aside> Filtre par plage (min / max)
Pour les valeurs numériques continues (quantité, prix). Deux champs côte à côte reliés par un séparateur visuel.
Quantité minimum
à
<div class="mb-5">
<h3 class="text-xs font-accent font-bold text-base-content/40 uppercase tracking-wider mb-2">
Quantité minimum
</h3>
<div class="flex items-center gap-2">
<input type="number" class="input input-bordered input-sm w-20" placeholder="0" min="0">
<span class="text-xs text-base-content/40">à</span>
<input type="number" class="input input-bordered input-sm w-20" placeholder="500" min="0">
</div>
</div> Filtres actifs (tags visibles)
Afficher les filtres sélectionnés au-dessus des résultats pour que l'utilisateur sache ce qui est actif. Chaque tag est supprimable individuellement.
<div class="flex flex-wrap gap-2 mb-4">
<span class="text-xs text-base-content/50 font-accent font-bold uppercase">Filtres actifs :</span>
<span class="badge badge-primary gap-1">
Stanley/Stella
<button class="hover:opacity-70 ml-0.5">×</button>
</span>
<span class="badge badge-primary gap-1">
Noir
<button class="hover:opacity-70 ml-0.5">×</button>
</span>
<a href="#" class="badge badge-ghost text-xs">Tout effacer</a>
</div> ✓ Toujours afficher le nombre de résultats par filtre (
badge-ghost badge-xs).✓ Boutons : "Appliquer" (
btn-primary) + "Effacer" (btn-ghost).✗ Ne jamais filtrer en temps réel sans bouton de confirmation — trop de requêtes.
✗ Ne pas masquer la sidebar sur desktop — elle doit toujours être visible dans les vues catalogue.