Skip to content

Spinner ​

Neo-brutalist loading spinner offering 4 visual variants: standard, block, dots, and bars.

Demo ​

Preview

加载器类型

加载中...
旋转
加载中...
方块
加载中...
条形
加载中...
圆点

加载器尺寸

加载中...
小
加载中...
默认
加载中...
大
加载中...
超大

加载器变体

加载中...
默认
加载中...
主要
加载中...
次要
加载中...
强调

Installation ​

pnpm dlx brutx-vue@latest add spinner

Usage ​

Spinner (Standard) ​

vue
<script setup>
import { Spinner } from 'brutx-ui-vue'
</script>

<template>
    <Spinner size="default" variant="default" />
</template>

BlockSpinner ​

vue
<script setup>
import { BlockSpinner } from 'brutx-ui-vue'
</script>

<template>
    <BlockSpinner size="default" />
</template>

DotsSpinner ​

vue
<script setup>
import { DotsSpinner } from 'brutx-ui-vue'
</script>

<template>
    <DotsSpinner size="default" />
</template>

BarsSpinner ​

vue
<script setup>
import { BarsSpinner } from 'brutx-ui-vue'
</script>

<template>
    <BarsSpinner size="default" />
</template>

Variants ​

Spinner Variants ​

VariantDescription
defaultTransparent top and right borders, spinning
primaryPrimary color border, spinning
secondarySecondary color border, spinning
accentTransparent top and right accent color borders, spinning

Color Schemes ​

BlockSpinner, BarsSpinner, and DotsSpinner support the following color schemes:

ColorDescription
defaultDefault foreground color
primaryPrimary color
secondarySecondary color
accentAccent color
mixedCycles through primary, secondary, accent, and info colors (BlockSpinner and BarsSpinner only)

Sizes ​

All spinner types support the following sizes:

SizeSpinnerBlockBarsDots
smh-5 w-5h-5 w-5h-4gap-1
defaulth-8 w-8h-8 w-8h-6gap-2
lgh-12 w-12h-12 w-12h-8gap-3
xlh-16 w-16h-16 w-16h-12gap-4

Animation ​

Each component uses different animation effects:

ComponentAnimation TypeDescription
Spinneranimate-spinSpinning animation
BlockSpinneranimate-pulsePulse animation with staggered delay across 4 blocks
BarsSpinneranimate-pulsePulse animation with staggered delay across 5 bars
DotsSpinneranimate-bounceBounce animation with staggered delay across 3 dots

API Reference ​

Spinner

Spinner — Props
NameTypeDefaultDescription
size
"default" | "lg" | "sm" | "xl" | undefined
"default"
The size of the circular or ASCII spinner.
Details

Declared type

NonNullable<"default" | "lg" | "sm" | "xl" | null | undefined> | undefined

Literal values

  • "default"
  • "lg"
  • "sm"
  • "xl"

Default value details

Resolved value
"default"

Source

Spinner.vue:12

packages/ui/src/components/spinner/Spinner.vue

variant
"accent" | "ascii" | "default" | "primary" | "secondary" | undefined
"default"
Selects a ring color variant or ascii for a rotating terminal character. Under reduced-motion preferences, the ASCII spinner stays on its first frame.
Details

Declared type

NonNullable<"default" | "primary" | "secondary" | "accent" | null | undefined> | "ascii" | undefined

Literal values

  • "accent"
  • "ascii"
  • "default"
  • "primary"
  • "secondary"

Default value details

Resolved value
"default"

Source

Spinner.vue:13

packages/ui/src/components/spinner/Spinner.vue

label
string | undefined
undefined
The screen-reader name for the loading status; localized loading text is used when omitted or blank.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

Spinner.vue:14

packages/ui/src/components/spinner/Spinner.vue

class
string | undefined
undefined
CSS classes added to the loading status container.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

Spinner.vue:15

packages/ui/src/components/spinner/Spinner.vue

BarsSpinner

BarsSpinner — Props
NameTypeDefaultDescription
size
BarsSpinnerSize | undefined
"default"
The height of the bar group and the width of each bar.
Details

Declared type

BarsSpinnerSize | undefined

Literal values

  • "default"
  • "lg"
  • "sm"
  • "xl"

Referenced types

BarsSpinnerSize
Type definition — BarsSpinnerSize
type BarsSpinnerSize = NonNullable<VariantProps<typeof barsSpinnerVariants>['size']>

Default value details

Resolved value
"default"

Source

BarsSpinner.vue:11

packages/ui/src/components/spinner/BarsSpinner.vue

color
SpinnerColor | undefined
"default"
The bar color; mixed cycles through primary, secondary, accent, and info colors.
Details

Declared type

SpinnerColor | undefined

Literal values

  • "accent"
  • "default"
  • "info"
  • "mixed"
  • "primary"
  • "secondary"

Referenced types

SpinnerColor
Type definition — SpinnerColor
export type SpinnerColor = keyof typeof SPINNER_COLOR_CLASSES | 'mixed'

Default value details

Resolved value
"default"

Source

BarsSpinner.vue:12

packages/ui/src/components/spinner/BarsSpinner.vue

label
string | undefined
undefined
The screen-reader name for the loading status; defaults to localized loading text.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BarsSpinner.vue:13

packages/ui/src/components/spinner/BarsSpinner.vue

class
string | undefined
undefined
CSS classes added to the bar-group container.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BarsSpinner.vue:14

packages/ui/src/components/spinner/BarsSpinner.vue

BlockSpinner

BlockSpinner — Props
NameTypeDefaultDescription
size
BlockSpinnerSize | undefined
"default"
The overall size of the four-block indicator.
Details

Declared type

BlockSpinnerSize | undefined

Literal values

  • "default"
  • "lg"
  • "sm"
  • "xl"

Referenced types

BlockSpinnerSize
Type definition — BlockSpinnerSize
type BlockSpinnerSize = NonNullable<VariantProps<typeof blockSpinnerVariants>['size']>

Default value details

Resolved value
"default"

Source

BlockSpinner.vue:11

packages/ui/src/components/spinner/BlockSpinner.vue

color
SpinnerColor | undefined
"default"
The block color; mixed cycles through primary, secondary, accent, and info colors.
Details

Declared type

SpinnerColor | undefined

Literal values

  • "accent"
  • "default"
  • "info"
  • "mixed"
  • "primary"
  • "secondary"

Referenced types

SpinnerColor
Type definition — SpinnerColor
export type SpinnerColor = keyof typeof SPINNER_COLOR_CLASSES | 'mixed'

Default value details

Resolved value
"default"

Source

BlockSpinner.vue:12

packages/ui/src/components/spinner/BlockSpinner.vue

label
string | undefined
undefined
The screen-reader name for the loading status; defaults to localized loading text.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BlockSpinner.vue:13

packages/ui/src/components/spinner/BlockSpinner.vue

class
string | undefined
undefined
CSS classes added to the block-group container.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BlockSpinner.vue:14

packages/ui/src/components/spinner/BlockSpinner.vue

DotsSpinner

DotsSpinner — Props
NameTypeDefaultDescription
size
DotsSpinnerSize | undefined
"default"
The size of the three dots and their spacing.
Details

Declared type

DotsSpinnerSize | undefined

Literal values

  • "default"
  • "lg"
  • "sm"
  • "xl"

Referenced types

DotsSpinnerSize
Type definition — DotsSpinnerSize
type DotsSpinnerSize = NonNullable<VariantProps<typeof dotsSpinnerVariants>['size']>

Default value details

Resolved value
"default"

Source

DotsSpinner.vue:11

packages/ui/src/components/spinner/DotsSpinner.vue

color
"default" | "primary" | "secondary" | "accent" | undefined
"default"
The color variant shared by all three dots.
Details

Declared type

"default" | "primary" | "secondary" | "accent" | undefined

Literal values

  • "accent"
  • "default"
  • "primary"
  • "secondary"

Default value details

Resolved value
"default"

Source

DotsSpinner.vue:12

packages/ui/src/components/spinner/DotsSpinner.vue

label
string | undefined
undefined
The screen-reader name for the loading status; defaults to localized loading text.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

DotsSpinner.vue:13

packages/ui/src/components/spinner/DotsSpinner.vue

class
string | undefined
undefined
CSS classes added to the dot-group container.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

DotsSpinner.vue:14

packages/ui/src/components/spinner/DotsSpinner.vue

Accessibility ​

  • ARIA Attributes: All Spinner components automatically add the role="status" attribute
  • Screen Readers: Provides screen reader labels via aria-label, using the sr-only class to hide visual text
  • Custom Labels: The default label text is the localized "Loading..." and can be customized via the label prop

Brute force builds.