Skip to content

Spinner

A loading spinner component for indicating loading or processing states.

Installation

bash
npx @galaxy-stack/nebula-cli@latest add spinner
bash
pnpm dlx @galaxy-stack/nebula-cli@latest add spinner
bash
yarn dlx @galaxy-stack/nebula-cli@latest add spinner
bash
bunx @galaxy-stack/nebula-cli@latest add spinner
bash
# If you have installed galaxy-design globally
galaxy-design add spinner

Dependencies

This component automatically installs the following dependencies:

  • React: class-variance-authority
  • Vue: class-variance-authority
  • Angular: class-variance-authority
  • React Native: nativewind, tailwindcss
  • Flutter: No additional dependencies

No manual installation needed!

Usage

Basic Example

tsx
import { Spinner } from "@/components/ui/spinner"

export default function SpinnerDemo() {
  return <Spinner />
}
vue
<script setup lang="ts">
import { Spinner } from '@/components/ui/spinner'
</script>

<template>
  <Spinner />
</template>

Size Variants

tsx
import { Spinner } from "@/components/ui/spinner"

export default function SpinnerSizes() {
  return (
    <div className="flex gap-4 items-center">
      <Spinner size="sm" />
      <Spinner size="default" />
      <Spinner size="lg" />
    </div>
  )
}
vue
<script setup lang="ts">
import { Spinner } from '@/components/ui/spinner'
</script>

<template>
  <div class="flex gap-4 items-center">
    <Spinner size="sm" />
    <Spinner size="default" />
    <Spinner size="lg" />
  </div>
</template>

With Text

tsx
import { Spinner } from "@/components/ui/spinner"

export default function SpinnerWithText() {
  return (
    <div className="flex items-center gap-2">
      <Spinner />
      <span>Loading...</span>
    </div>
  )
}
vue
<script setup lang="ts">
import { Spinner } from '@/components/ui/spinner'
</script>

<template>
  <div class="flex items-center gap-2">
    <Spinner />
    <span>Loading...</span>
  </div>
</template>

API Reference

Props

PropTypeDefaultDescriptionFramework Support
size`'sm''default''lg'`'default'
className / classstring''CSS class namesAll
ariaLabelstring'Loading...'Accessible labelAll

Accessibility

  • Screen Reader: Uses role="status" and aria-label for loading state
  • Focus Management: Does not receive focus (decorative)
  • WCAG Compliance: WCAG 2.1 Level AA compliant

Author

Bùi Trọng Hiếu (kevinbui)

License

MIT © 2025 Bùi Trọng Hiếu (kevinbui)

Released under the MIT License.