72%
React + MotionLoaders

Anneau de progression

Un indicateur de progression circulaire, pourcentage au centre, qui rejoint chaque nouvelle valeur avec un léger ressort.

Réglages

72%
112px

Code

import { motion } from "framer-motion";

const RADIUS = 42;
const CIRCUMFERENCE = 2 * Math.PI * RADIUS;

interface WatchProgressRingProps {
  color?: string;
  /** Progreso de 0 a 100. */
  progress?: number;
  size?: number;
}

export default function WatchProgressRing({
  color = "#0071e3",
  progress = 72,
  size = 112,
}: WatchProgressRingProps) {
  return (
    <div
      role="progressbar"
      aria-valuenow={progress}
      aria-valuemin={0}
      aria-valuemax={100}
      className="relative grid place-items-center text-[#1d1d1f] dark:text-[#f5f5f7]"
      style={{ width: size, height: size }}
    >
      <svg viewBox="0 0 100 100" className="absolute inset-0 -rotate-90">
        <circle
          cx="50"
          cy="50"
          r={RADIUS}
          fill="none"
          strokeWidth="9"
          className="stroke-black/5 dark:stroke-white/10"
        />
        <motion.circle
          cx="50"
          cy="50"
          r={RADIUS}
          fill="none"
          stroke={color}
          strokeWidth="9"
          strokeLinecap="round"
          strokeDasharray={CIRCUMFERENCE}
          animate={{ strokeDashoffset: CIRCUMFERENCE * (1 - progress / 100) }}
          transition={{ type: "spring", stiffness: 300, damping: 30 }}
        />
      </svg>
      <motion.strong
        key={progress}
        initial={{ scale: 0.8, opacity: 0 }}
        animate={{ scale: 1, opacity: 1 }}
        className="text-xl"
      >
        {progress}%
      </motion.strong>
    </div>
  );
}

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 Loaders

Où l’utiliser

Une barre de progression circulaire est idéale quand le chiffre compte : le taux de remplissage d’un profil, la part d’un cours déjà suivie par un élève ou la distance qui sépare quelqu’un de son objectif de pas dans une appli de sport. L’anneau rejoint chaque valeur avec souplesse, comme les anneaux d’activité d’une montre connectée.

Ne l’utilisez que si vous connaissez le vrai pourcentage : un anneau qui recule fait perdre confiance. Un anneau par carte suffit. Choisissez une couleur bien contrastée avec la piste grise, surtout sur fond clair.