# Spinner

<FrameworkCodeSwitcher>
  <div slot="astro">
```astro
---
import { Spinner } from "@/components/starwind/spinner";
---

<Spinner />
```
  </div>
  <div slot="react">
```tsx
import { Spinner } from "@/components/starwind/spinner";

export function Example() {
  return (
    <>
      <Spinner />
    </>
  );
}
```
  </div>
  <div slot="vue">
```vue
<script setup lang="ts">
import { Spinner } from "@/components/starwind/spinner";
</script>

<template>
  <Spinner />
</template>
```
  </div>
</FrameworkCodeSwitcher>

## Installation

```bash
npx starwind@latest add spinner --framework astro
```
</DocsTabsContent>
```bash
npx starwind@latest add spinner --framework react
```
</DocsTabsContent>
```bash
npx starwind@latest add spinner --framework vue
```
</DocsTabsContent>
</DocsTabs>

## Usage

<FrameworkCodeSwitcher>
  <div slot="astro">
```astro
---
import { Spinner } from "@/components/starwind/spinner";
---

<Spinner />
```
  </div>
  <div slot="react">
```tsx
import { Spinner } from "@/components/starwind/spinner";

export function Example() {
  return (
    <>
      <Spinner />
    </>
  );
}
```
  </div>
  <div slot="vue">
```vue
<script setup lang="ts">
import { Spinner } from "@/components/starwind/spinner";
</script>

<template>
  <Spinner />
</template>
```
  </div>
</FrameworkCodeSwitcher>

## Custom Size

<FrameworkCodeSwitcher>
  <div slot="astro">
```astro
---
import { Spinner } from "@/components/starwind/spinner";
---

<Spinner class="size-4" />
<Spinner class="size-6" />
<Spinner class="size-8" />
<Spinner class="size-12" />
```
  </div>
  <div slot="react">
```tsx
import { Spinner } from "@/components/starwind/spinner";

export function Example() {
  return (
    <>
      <Spinner className="size-4" />
      <Spinner className="size-6" />
      <Spinner className="size-8" />
      <Spinner className="size-12" />
    </>
  );
}
```
  </div>
  <div slot="vue">
```vue
<script setup lang="ts">
import { Spinner } from "@/components/starwind/spinner";
</script>

<template>
  <Spinner class="size-4" />
  <Spinner class="size-6" />
  <Spinner class="size-8" />
  <Spinner class="size-12" />
</template>
```
  </div>
</FrameworkCodeSwitcher>

## Custom Color

<FrameworkCodeSwitcher>
  <div slot="astro">
```astro
---
import { Spinner } from "@/components/starwind/spinner";
---

<Spinner class="text-blue-500" />
<Spinner class="text-green-500" />
<Spinner class="text-red-500" />
<Spinner class="text-purple-500" />
```
  </div>
  <div slot="react">
```tsx
import { Spinner } from "@/components/starwind/spinner";

export function Example() {
  return (
    <>
      <Spinner className="text-blue-500" />
      <Spinner className="text-green-500" />
      <Spinner className="text-red-500" />
      <Spinner className="text-purple-500" />
    </>
  );
}
```
  </div>
  <div slot="vue">
```vue
<script setup lang="ts">
import { Spinner } from "@/components/starwind/spinner";
</script>

<template>
  <Spinner class="text-blue-500" />
  <Spinner class="text-green-500" />
  <Spinner class="text-red-500" />
  <Spinner class="text-purple-500" />
</template>
```
  </div>
</FrameworkCodeSwitcher>

## In Button

<FrameworkCodeSwitcher>
  <div slot="astro">
```astro
---
import { Spinner } from "@/components/starwind/spinner";
import { Button } from "@/components/starwind/button";
---

<Button disabled aria-busy="true">
  <Spinner />
  Loading...
</Button>
```
  </div>
  <div slot="react">
```tsx
import { Spinner } from "@/components/starwind/spinner";
import { Button } from "@/components/starwind/button";

export function Example() {
  return (
    <>
      <Button disabled aria-busy="true">
        <Spinner />
        Loading...
      </Button>
    </>
  );
}
```
  </div>
  <div slot="vue">
```vue
<script setup lang="ts">
import { Spinner } from "@/components/starwind/spinner";
import { Button } from "@/components/starwind/button";
</script>

<template>
  <Button disabled aria-busy="true">
    <Spinner />
    Loading...
  </Button>
</template>
```
  </div>
</FrameworkCodeSwitcher>

## API Reference
### Spinner
- Inherits svg attributes. Omits `aria-label`, `mode`, and `role`.

## Changelog

### v1.1.1

- Removed the conflicting SVG `mode` prop from the Astro and React public prop contracts so fresh
Astro projects type-check cleanly.

### v1.1.0

- Added contract-generated Astro and React implementations while preserving the component's existing public API and styling.

### v1.0.2

- Refactor tailwind variants functions into separate `variants.ts` file

### v1.0.0

- Initial release with starwind v1.10.0