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.