DotLoading Studio

Loader Studio

Pattern
108 px
72%
1.40 s

A pulse expands out from the center.

Export

import type { CSSProperties } from "react";

export default function DotLoader({ label = "Loading" }: { label?: string }) {
  return (
    <span role="status" aria-label={label}>
      <style>{`
.dl-ripple-f4f4f5-108-72-1400 circle {
  animation: dl-ripple-f4f4f5-108-72-1400-pulse 1400ms linear infinite;
  animation-delay: var(--dl-delay);
}
@keyframes dl-ripple-f4f4f5-108-72-1400-pulse {
  0% { opacity: 1; }
  12% { opacity: 0.64; }
  34% { opacity: 0.14; }
  82% { opacity: 0.14; }
  100% { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .dl-ripple-f4f4f5-108-72-1400 circle { animation: none; }
}
      `}</style>
      <svg className="dl-ripple-f4f4f5-108-72-1400" aria-hidden="true" viewBox="0 0 100 100" width={108} height={108} fill="#F4F4F5">
        <circle cx={10} cy={10} r={7.2} opacity={0.426} style={{ "--dl-delay": "-300.056ms" } as CSSProperties} />
        <circle cx={30} cy={10} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={50} cy={10} r={7.2} opacity={0.14} style={{ "--dl-delay": "-622.222ms" } as CSSProperties} />
        <circle cx={70} cy={10} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={90} cy={10} r={7.2} opacity={0.426} style={{ "--dl-delay": "-300.056ms" } as CSSProperties} />
        <circle cx={10} cy={30} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={30} cy={30} r={7.2} opacity={0.14} style={{ "--dl-delay": "-850.028ms" } as CSSProperties} />
        <circle cx={50} cy={30} r={7.2} opacity={0.14} style={{ "--dl-delay": "-1011.111ms" } as CSSProperties} />
        <circle cx={70} cy={30} r={7.2} opacity={0.14} style={{ "--dl-delay": "-850.028ms" } as CSSProperties} />
        <circle cx={90} cy={30} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={10} cy={50} r={7.2} opacity={0.14} style={{ "--dl-delay": "-622.222ms" } as CSSProperties} />
        <circle cx={30} cy={50} r={7.2} opacity={0.14} style={{ "--dl-delay": "-1011.111ms" } as CSSProperties} />
        <circle cx={50} cy={50} r={7.2} opacity={1} style={{ "--dl-delay": "0ms" } as CSSProperties} />
        <circle cx={70} cy={50} r={7.2} opacity={0.14} style={{ "--dl-delay": "-1011.111ms" } as CSSProperties} />
        <circle cx={90} cy={50} r={7.2} opacity={0.14} style={{ "--dl-delay": "-622.222ms" } as CSSProperties} />
        <circle cx={10} cy={70} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={30} cy={70} r={7.2} opacity={0.14} style={{ "--dl-delay": "-850.028ms" } as CSSProperties} />
        <circle cx={50} cy={70} r={7.2} opacity={0.14} style={{ "--dl-delay": "-1011.111ms" } as CSSProperties} />
        <circle cx={70} cy={70} r={7.2} opacity={0.14} style={{ "--dl-delay": "-850.028ms" } as CSSProperties} />
        <circle cx={90} cy={70} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={10} cy={90} r={7.2} opacity={0.426} style={{ "--dl-delay": "-300.056ms" } as CSSProperties} />
        <circle cx={30} cy={90} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={50} cy={90} r={7.2} opacity={0.14} style={{ "--dl-delay": "-622.222ms" } as CSSProperties} />
        <circle cx={70} cy={90} r={7.2} opacity={0.14} style={{ "--dl-delay": "-530.418ms" } as CSSProperties} />
        <circle cx={90} cy={90} r={7.2} opacity={0.426} style={{ "--dl-delay": "-300.056ms" } as CSSProperties} />
      </svg>
    </span>
  );
}

React TSX component · No extra dependencies