registry:ui
SpinnerRing
A circular progress spinner with an optional center label.
Rendered example
Install
orion-theme
Open registry JSON registry/ui/spinner-ring.tsx
export function SpinnerRing({ active, children }: { active?: boolean; children?: React.ReactNode }) {
const size = 24
const stroke = 2
const r = (size - stroke) / 2
const c = 2 * Math.PI * r
return (
<span className="relative inline-flex shrink-0 items-center justify-center" style={{ width: size, height: size }}>
<svg
width={size}
height={size}
className="absolute inset-0"
style={active ? { animation: "spin 1.1s linear infinite" } : undefined}
>
<circle cx={size / 2} cy={size / 2} r={r} fill="none" stroke="var(--line)" strokeWidth={stroke} />
{active && (
<circle
cx={size / 2}
cy={size / 2}
r={r}
fill="none"
stroke="var(--ink-3)"
strokeWidth={stroke}
strokeLinecap="round"
strokeDasharray={`${c * 0.28} ${c * 0.72}`}
/>
)}
</svg>
<span className="relative text-[10.5px] font-semibold tabular-nums text-ink">{children}</span>
</span>
)
}