Barra de progreso con brillo
Una barra de progreso fina con un destello que recorre la parte llena, para que parezca viva aunque se pare.
Ajustes
Código
import { motion } from "framer-motion";
interface ShineProgressProps {
color?: string;
/** Progreso de 0 a 100. */
progress?: number;
/** Segundos que tarda el reflejo en cruzar. */
speed?: number;
}
export default function ShineProgress({
color = "#0071e3",
progress = 68,
speed = 1.5,
}: ShineProgressProps) {
return (
<div
role="progressbar"
aria-valuenow={progress}
aria-valuemin={0}
aria-valuemax={100}
className="h-1.5 w-64 overflow-hidden rounded-full bg-black/5 dark:bg-white/10"
>
<motion.div
className="relative h-full rounded-full"
style={{ width: `${progress}%`, backgroundColor: color }}
animate={{ width: `${progress}%` }}
transition={{ type: "spring", stiffness: 300, damping: 30 }}
>
<motion.span
className="absolute inset-y-0 w-16 bg-gradient-to-r from-transparent via-white/50 to-transparent"
animate={{ x: [-70, 260] }}
transition={{ duration: speed, repeat: Infinity, ease: "linear" }}
/>
</motion.div>
</div>
);
}
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 Loaders
Dónde usarlo
El progreso real casi nunca avanza a ritmo constante, y esta barra lo lleva bien: el brillo sigue corriendo mientras el relleno espera. Úsala en la exportación de archivos de una herramienta de diseño, en la página de descarga de una app o como indicador de pasos en un checkout. Es una barra de progreso animada que no grita.
Pon el brillo más lento de lo que crees; un destello rápido cada segundo parece nervioso. Sobre colores intensos se ve mejor con un tono medio. Si tu progreso avanza a saltos grandes, el muelle en el ancho suaviza cada salto.