Interrupteur toggle
Un interrupteur marche/arrêt dont le bouton glisse avec un effet ressort, couleur et taille réglables.
Réglages
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.