React + MotionLoaders

Barra de progreso indeterminada

Una barra fina con un tramo que no para de cruzar, para esperas de las que no sabes la duración.

Ajustes

10px
1.6s

Código

import { motion } from "framer-motion";

interface ProgressBarProps {
  color?: string;
  /** Grosor de la barra en px. */
  size?: number;
  /** Duración de un recorrido en segundos. */
  speed?: number;
}

export default function ProgressBar({
  color = "#0071e3",
  size = 10,
  speed = 1.6,
}: ProgressBarProps) {
  return (
    <div
      role="progressbar"
      aria-label="Cargando"
      className="w-56 overflow-hidden rounded-full bg-black/5 dark:bg-white/10"
      style={{ height: size }}
    >
      <motion.div
        className="h-full rounded-full"
        style={{ backgroundColor: color }}
        initial={false}
        animate={{ x: ["-100%", "220%"] }}
        transition={{ duration: speed, repeat: Infinity, ease: "easeInOut" }}
      />
    </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

Una barra de progreso indeterminada dice «estoy en ello» sin prometer un tiempo. Encaja en el borde superior de una web app mientras carga la siguiente página, en la cabecera de un panel que refresca sus gráficas o bajo el buscador de un comparador de vuelos. No estorba y aun así se nota que algo pasa.

Cuanto más fina, mejor: tres o cuatro píxeles pegados arriba apenas se ven y tranquilizan. En cuanto sepas el porcentaje real, cámbiala por una barra determinada para que la gente vea llegar el final.