InputSearch

Documentation de cbk-toolkit

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
PropTypeDéfautDescription
valuestringrequisValeur contrôlée
onChangeDispatch<SetStateAction<string>> | ((value: string) => void)requisCallback — peut être setState direct
placeholderstring"Rechercher..."Texte indicatif
classNamestring—Classes Tailwind additionnelles pour l'input
...propsInputHTMLAttributes—Toutes les props natives input (disabled, name, etc.) sauf onChange/value
Comportement
  • Bouton X visible uniquement si valueest non vide — clic remet à ""
  • Compatible onChange={setQuery} direct — pas de e.target.value à gérer
  • Styles : border-gray-300, focus:ring-gray-500, padding droit pr-10 pour le bouton