Skip to main content

Spinner

Spinner is a loading indicator that inherits color from its parent element.

Import

import { Spinner } from "@tosui/react";

Basic Usage

<Spinner />

Sizes

<HStack gap={4} align="center">
<Spinner size="sm" />
<Spinner size="md" />
<Spinner size="lg" />
</HStack>

Colors

Spinner inherits color from its parent. Set the parent's color to change the spinner color.

<HStack gap={4}>
<Box color="primary"><Spinner /></Box>
<Box color="accent"><Spinner /></Box>
<Box color="success"><Spinner /></Box>
<Box color="warning"><Spinner /></Box>
<Box color="error"><Spinner /></Box>
</HStack>

Common Patterns

Button Loading State

Button has built-in loading support:

<HStack gap={4}>
<Button loading>Saving</Button>
<Button loading variant="outline">Processing</Button>
</HStack>

Centered Loading

<Box display="flex" alignItems="center" justifyContent="center" h="200px" bg="surface" rounded="md">
<VStack gap={3}>
<Spinner size="lg" />
<Box color="foreground-muted" fontSize="sm">Loading...</Box>
</VStack>
</Box>

Inline Loading

<HStack gap={2} align="center">
<Spinner size="sm" />
<Box fontSize="sm">Checking availability...</Box>
</HStack>

Full Page Loading

function PageLoader() {
return (
<Box
position="fixed"
inset={0}
display="flex"
alignItems="center"
justifyContent="center"
bg="background"
zIndex="overlay"
>
<VStack gap={4}>
<Spinner size="lg" />
<Text>Loading application...</Text>
</VStack>
</Box>
);
}

Props Reference

PropTypeDefaultDescription
size"sm" | "md" | "lg""md"Spinner size
asElementType"span"HTML element to render

Size Dimensions

SizeWidth/Height
sm1em
md1.5em
lg2em

Accessibility

  • Uses role="status" with aria-label="Loading"
  • Communicates loading state to screen readers

TypeScript

import { Spinner, type SpinnerSize, type SpinnerProps } from "@tosui/react";