React + MotionMicrointeracciones

Tarea completada

Tocas una tarea y el círculo se rellena con un check mientras una línea tacha el texto, todo a la vez.

Ajustes

Código

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 = "Preparar el viaje",
  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 para IA

Pégalo en ChatGPT, Claude o Cursor y adaptará el bloque a tu proyecto con estos ajustes, aunque no uses React.

Más en Microinteracciones

Dónde usarlo

Tachar algo de una lista tiene que dar un poco de gusto. Aquí el check aparece y la línea cruza la tarea en el mismo instante. Encaja en una app de tareas, la lista de equipaje de un viaje, el checklist de un SaaS o un organizador de bodas. Con un checkbox animado así, apetece volver a la lista.

El verde se entiende como «hecho» casi en todas partes, pero tu color de marca sirve si contrasta con el check blanco. Al tocar otra vez se deshace, tenlo en cuenta si las tareas hechas pasan a otra lista.