React + MotionChamps

Toggle style iOS

Un interrupteur compact comme dans les réglages de l’iPhone, vert une fois activé, avec un ressort naturel.

Réglages

Code

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

const spring = { type: "spring" as const, stiffness: 300, damping: 30 };

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

export default function IosToggle({
  color = "#34c759",
  checked,
  defaultChecked = true,
  onCheckedChange,
  label = "Activer",
}: IosToggleProps) {
  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 h-8 w-14 items-center rounded-full p-1 transition-colors ${
        on ? "" : "bg-black/5 dark:bg-white/10"
      }`}
      style={on ? { backgroundColor: color } : undefined}
    >
      <motion.span
        className="h-6 w-6 rounded-full bg-white shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
        animate={{ x: on ? 24 : 0 }}
        transition={spring}
      />
    </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

La plupart des gens en ont actionné des milliers sur leur téléphone et comprennent sans rien lire. Il a sa place dans les écrans de réglages et de préférences : « Se souvenir de moi » à la connexion, « Newsletter » dans un compte client ou « Renouvellement automatique » dans une application d’abonnement. Un toggle iOS en React, reconnu comme interrupteur par les lecteurs d’écran.

Le vert signifie « activé » pour les utilisateurs d’iPhone, mais passez à votre couleur si le vert veut déjà dire autre chose sur votre site, comme le stock disponible. Donnez-lui toujours un libellé clair.