React + MotionLoaders
Spinner estilo macOS
Doce barritas redondeadas que se apagan por turnos en círculo, como el spinner que conoces del Mac.
Ajustes
56px
1s
Código
import { motion } from "framer-motion";
interface MacOSSpinnerProps {
size?: number;
/** Segundos por vuelta. */
speed?: number;
}
export default function MacOSSpinner({
size = 56,
speed = 1,
}: MacOSSpinnerProps) {
return (
<div
role="status"
aria-label="Cargando"
className="relative"
style={{ width: size, height: size }}
>
{Array.from({ length: 12 }, (_, i) => (
<motion.span
key={i}
className="absolute left-1/2 top-0 block rounded-full bg-[#1d1d1f] dark:bg-[#f5f5f7]"
style={{
width: size / 11,
height: size / 3.4,
marginLeft: -size / 22,
transformOrigin: `${size / 22}px ${size / 2}px`,
rotate: i * 30,
}}
animate={{ opacity: [0.16, 1, 0.16] }}
transition={{ duration: speed, repeat: Infinity, delay: (i * speed) / 12 }}
/>
))}
</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
Este spinner estilo macOS encaja en interfaces que recuerdan a programas de escritorio: un editor de fotos en el navegador, una app hecha con Electron o el indicador de sincronización en la barra de una herramienta de notas. Toma el color del texto de la página, así que cambia solo entre modo claro y oscuro sin desentonar.
Luce mejor en tamaños pequeños y medianos, junto a un texto tipo «Sincronizando…» o dentro de una barra de herramientas. Muy grande, las barras empiezan a pesar y quizá te convenga un anillo más ligero.