React + MotionLoaders

Spinner façon macOS

Douze bâtonnets arrondis qui s’estompent tour à tour en cercle, comme le spinner que vous connaissez sur Mac.

Réglages

56px
1s

Code

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="Chargement"
      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 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

Ce spinner façon macOS se sent chez lui dans les interfaces qui rappellent un logiciel de bureau : un éditeur photo dans le navigateur, une application Electron ou l’indicateur de synchronisation dans la barre d’outils d’un outil de notes. Il prend la couleur du texte de la page et passe tout seul du mode clair au mode sombre.

Il rend mieux en petite ou moyenne taille, à côté d’un libellé comme « Synchronisation… » ou dans une barre d’outils. En très grand, les bâtonnets deviennent lourds et un anneau plus léger vous conviendra peut-être mieux.