Skip to content

Spinner

A loading indicator component for showing progress or activity.

Import

vue
<script setup lang="ts">
import { Spinner } from '@heroui-vue/vue'
</script>

Usage

Basic

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

<script setup>
import { Spinner } from '@heroui-vue/vue'
</script>

Sizes

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

<script setup>
import { Spinner } from '@heroui-vue/vue'
</script>

Colors

<template>
  <div class="flex gap-4 items-center">
    <Spinner color="accent" />
    <Spinner color="success" />
    <Spinner color="warning" />
    <Spinner color="danger" />
  </div>
</template>

<script setup>
import { Spinner } from '@heroui-vue/vue'
</script>

With Label

vue
<template>
  <Spinner label="Loading..." />
</template>

Label Placement

vue
<template>
  <Spinner label="Loading..." label-placement="bottom" />
  <Spinner label="Loading..." label-placement="right" />
</template>

In Button

vue
<template>
  <Button :disabled="loading">
    <Spinner v-if="loading" size="sm" />
    {{ loading ? 'Loading...' : 'Submit' }}
  </Button>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const loading = ref(false)
</script>

API

Spinner Props

PropTypeDefaultDescription
size'sm' | 'md' | 'lg' | 'xl''md'The spinner size
color'current' | 'accent' | 'success' | 'warning' | 'danger''accent'The spinner color
labelstring-The loading label text
labelPlacement'bottom' | 'right''bottom'The label placement

Spinner Slots

SlotDescription
labelCustom label content

Accessibility

  • Spinner uses role="status" for proper semantics
  • Includes aria-label for screen readers
  • Label is properly associated with the spinner
  • Announces loading state to assistive technologies

Released under the Apache-2.0 License.