React + MotionChamps

Interrupteur toggle

Un interrupteur marche/arrêt dont le bouton glisse avec un effet ressort, couleur et taille réglables.

Réglages

36px

Code

import { useState } from "react";
import { motion } from "framer-motion";

interface ToggleSwitchProps {
  color?: string;
  size?: number;
  checked?: boolean;
  defaultChecked?: boolean;
  onCheckedChange?: (checked: boolean) => void;
  label?: string;
}

export default function ToggleSwitch({
  color = "#0071e3",
  size = 36,
  checked,
  defaultChecked = true,
  onCheckedChange,
  label = "Activer",
}: ToggleSwitchProps) {
  const [internal, setInternal] = useState(defaultChecked);
  const on = checked ?? internal;

  const toggle = () => {
    if (checked === undefined) setInternal(!on);
    onCheckedChange?.(!on);
  };

  return (
    <button
      type="button"
      role="switch"
      aria-checked={on}
      aria-label={label}
      onClick={toggle}
      className="flex shrink-0 items-center rounded-full p-1 transition-colors"
      style={{
        width: size * 1.85,
        height: size,
        backgroundColor: on ? color : "oklch(0.3 0.012 260)",
      }}
    >
      <motion.span
        className="rounded-full bg-white shadow"
        style={{ width: size - 8, height: size - 8 }}
        animate={{ x: on ? size * 0.85 : 0 }}
        transition={{ type: "spring", stiffness: 500, damping: 30 }}
      />
    </button>
  );
}

Prompt pour l’IA

Collez-le dans ChatGPT, Claude ou Cursor : le bloc sera adapté à votre projet avec ces réglages, même sans React.

Plus dans Champs

Où l’utiliser

Utilisez un toggle pour les réglages qui s’appliquent tout de suite : mode sombre, notifications par e-mail, « Afficher les prix TTC » dans une boutique B2B ou disponibilité dans un tableau de réservations. Le bouton à ressort se cale avec un petit claquement agréable. Si vous cherchiez un toggle switch animé en React, c’est une base propre.

Un toggle ne devrait jamais demander un bouton « Enregistrer » ensuite ; si le changement s’applique plus tard, une case à cocher est plus honnête. Ajoutez un libellé qui dit ce que signifie « activé » et vérifiez le contraste de la couleur éteinte.