React + MotionMicro-interactions

Tâche terminée

On touche une tâche : le cercle se remplit d’une coche pendant qu’un trait barre le texte, d’un seul mouvement.

Réglages

Code

import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { Check } from "lucide-react";

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

interface TaskCheckProps {
  text?: string;
  color?: string;
}

export default function TaskCheck({
  text = "Préparer le voyage",
  color = "#34c759",
}: TaskCheckProps) {
  const [done, setDone] = useState(false);

  return (
    <button
      type="button"
      aria-pressed={done}
      onClick={() => setDone((d) => !d)}
      className="flex items-center gap-3 rounded-2xl bg-white dark:bg-[#1c1c1e] px-5 py-4 text-[#1d1d1f] dark:text-[#f5f5f7] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
    >
      {/* --check-bg es el color de la tarjeta: el círculo se funde con ella cuando está vacío */}
      <motion.span
        animate={{ backgroundColor: done ? color : "var(--check-bg)" }}
        className="grid h-6 w-6 place-items-center rounded-full border border-black/10 [--check-bg:#ffffff] dark:border-white/10 dark:[--check-bg:#1c1c1e]"
      >
        <AnimatePresence>
          {done && (
            <motion.span initial={{ scale: 0 }} animate={{ scale: 1 }} exit={{ scale: 0 }} transition={spring}>
              <Check className="h-4 w-4 text-white" />
            </motion.span>
          )}
        </AnimatePresence>
      </motion.span>
      <span className="relative text-sm">
        <span>{text}</span>
        <motion.i
          className="absolute left-0 top-1/2 h-px bg-[#1d1d1f] dark:bg-[#f5f5f7]"
          animate={{ width: done ? "100%" : "0%" }}
          transition={spring}
        />
      </span>
    </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 Micro-interactions

Où l’utiliser

Cocher une tâche doit procurer un petit plaisir. Ici, la coche apparaît et le trait barre le texte au même instant. Elle convient à une application de to-do, à une liste de bagages, à la checklist d’accueil d’un SaaS ou à un organisateur de mariage. Une case à cocher animée comme celle-ci donne envie de revenir à sa liste.

Le vert se lit comme « fait » presque partout, mais votre couleur de marque convient si elle contraste avec la coche blanche. Un second appui annule la tâche : pensez-y si les éléments terminés changent de liste.