InputSearch
Champ de recherche contrôlé avec bouton d'effacement X automatique. API compatible useState — accepte Dispatch<SetStateAction<string>> ou (value: string) => void.
Démo en direct — recherche filtrée
Tapez pour filtrer la liste. Le bouton X efface la recherche.
Alice Martinalice@email.com
Bernard Dupontbernard@email.com
Camille Petitcamille@email.com
David Leroydavid@email.com
Émilie Moreauemilie@email.com
Valeur actuelle : "" — 5 résultat(s)
Le bouton X n'apparaît que quand
value est non vide.Démo en direct — avec useState dispatch
Vous pouvez passer directement setQuery de useState — aucun wrapper nécessaire.
Valeur : Alice
Code source complet — copier-coller
Exemple complet avec filtrage d'une liste.
"use client";
import { useState, useMemo } from "react";
import { InputSearch } from "@ramses1er/cbk-toolkit/client";
const users = [
{ id: 1, fullname: "Alice Martin" },
{ id: 2, fullname: "Bernard Dupont" },
];
export default function UsersPage() {
const [query, setQuery] = useState("");
const filtered = useMemo(() => {
if (!query) return users;
return users.filter((u) =>
u.fullname.toLowerCase().includes(query.toLowerCase())
);
}, [query]);
return (
<div className="space-y-4">
<InputSearch
value={query}
onChange={setQuery}
placeholder="Rechercher un utilisateur..."
/>
{filtered.map((u) => (
<div key={u.id}>{u.fullname}</div>
))}
</div>
);
}Props
| Prop | Type | Défaut | Description |
|---|---|---|---|
| value | string | requis | Valeur contrôlée |
| onChange | Dispatch<SetStateAction<string>> | ((value: string) => void) | requis | Callback — peut être setState direct |
| placeholder | string | "Rechercher..." | Texte indicatif |
| className | string | — | Classes Tailwind additionnelles pour l'input |
| ...props | InputHTMLAttributes | — | Toutes les props natives input (disabled, name, etc.) sauf onChange/value |
Comportement
- Bouton
Xvisible uniquement sivalueest non vide — clic remet à "" - Compatible
onChange={setQuery}direct — pas dee.target.valueà gérer - Styles :
border-gray-300,focus:ring-gray-500, padding droitpr-10pour le bouton