Pho Design System

Spinner

An indeterminate loading ring — a hairline track with a quarter arc rotating over it, in the same continuous round-cap stroke as Pho’s hairlines and icons. Uses currentColor, so ink follows the parent — pair with text-pho-* or place it on a light/dark surface. Decorative by default; pass aria-label when the spinner is the only loading cue. Prefer Button loading / Menu.Item async / Avatar.Edit loading when the spinner belongs to a control.

Import

import { Spinner } from "@photon-ai/pho-ui/components/spinner";

Sizes

Three sizes — sm, md, lg. The default is md (matches menu rows and button icon slots).

sm
md
lg
<Spinner size="sm" />
<Spinner size="md" />
<Spinner size="lg" />

Ink

Tint with a text utility. On overlays, inherit white from the parent.

<Spinner className="text-pho-brand" aria-label="Loading" />

With Button

Controls that already expose loading use this same ring — you rarely need to compose Spinner yourself on a button.

<Button loading>Saving</Button>

Props

Accessibility

Best practices