Spinner

Loading indicator supporting circular spin, pulsing wave dots, Claude-style cycling glyphs, and animated typing ellipsis.

// Plain markup
import { Spinner } from "@shavin/ui";

All Spinner Variants

Loading.

// Circular dual-layer track ring
<Spinner variant="spin" />

// Pulsing wave dots
<Spinner variant="dots" />

// Claude-style star & flower glyphs
<Spinner variant="glyph" />

// Typography 3-dot typing ellipsis
<Spinner variant="ellipsis" />

Circular Ring (variant="spin")

// High-contrast dual-layer track ring (25% track + 90% spinning arc)
<Spinner variant="spin" size="sm" />
<Spinner variant="spin" size="md" />
<Spinner variant="spin" size="lg" />

Wave Dots (variant="dots")

Assistant is typing

// Pulsing wave dots for AI chat typing indicators & inline messages
<Spinner variant="dots" size="sm" />
<Spinner variant="dots" size="md" />
<Spinner variant="dots" size="lg" />

<Card className="p-3">
  <Flex gap="2" align="center">
    <Text size="xs" color="muted">Assistant is typing</Text>
    <Spinner variant="dots" size="sm" className="text-accent" />
  </Flex>
</Card>

Glyphs (variant="glyph")

Claude thinking

Custom array ( ✦ , ✧, ★, ☆)

Spelunking
// Default cycling glyphs: ["✻", "✽", "✶", "✳", "✢"]
<Spinner variant="glyph" size="sm" />
<Spinner variant="glyph" size="md" />
<Spinner variant="glyph" size="lg" />

// Custom array of glyphs & interval
<Spinner variant="glyph" glyphs={["✦", "✧", "★", "☆"]} intervalMs={150} className="text-accent" />
<Spinner variant="glyph" glyphs={["Spelunking", "Discombobulating", "Marinating", "Concocting", "Percolating", "Schlepping"]} intervalMs={400} className="text-accent" />

Typography Ellipsis (variant="ellipsis")

Generating response.

Loading workspace.

// Pure text 3-dot typing animation that inherits parent/sibling typography styling
<Text size="sm" weight="medium">
  Generating response<Spinner variant="ellipsis" />
</Text>

<Heading size="lg" className="text-accent">
  Loading workspace<Spinner variant="ellipsis" />
</Heading>

Sizes

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

Colors & Contexts

text-fg-subtle (default)

text-danger

<Text color="subtle" className="flex items-center gap-2">
  <Spinner size="sm" />
  text-fg-subtle (default)
</Text>

<Text color="danger" className="flex items-center gap-2">
  <Spinner size="sm" />
  text-danger
</Text>

<Button size="sm">
  <Spinner size="sm" />
  Saving…
</Button>

Props

PropTypeDefault
glyphsstring[]
intervalMsnumber
variant"spin" | "dots" | "glyph" | "ellipsis""spin"
size"sm" | "md" | "lg""md"
Configure Theme
Theme
Accent Color
Custom
Gray Family
Appearance
Radius
Scaling
Panel Style
Heading Font
Body Font