Skip to content
ARC UI ARC Reactive Components
Docs Components Tokens Synthesizer
v2.1.0
Getting Started Frameworks Design Tokens Theming Theme Synthesizer Accessibility Browser Support Changelog Contributing All Components App ShellAspect GridAuth ShellCenterClusterContainerDashboard GridDockFloat BarInsetMasonryPage HeaderPage LayoutResizableResponsive SwitcherSectionSettings LayoutSplit PaneStatus BarStickyToolbar Anchor NavBottom NavBreadcrumbBreadcrumb MenuCommand BarDrawerFooterLinkNavigation MenuPage IndicatorPaginationRailScroll IndicatorScroll SpyScroll To TopSidebarSkip LinkSpeed DialStepper NavTabsTop BarTree View AccordionAspect RatioAvatarAvatar GroupCalloutCardCarouselCollapsibleColor SwatchCTA BannerDividerEmpty StateFeature CardIconImageInfinite ScrollMarqueeScroll AreaSeparatorSkeletonSpinnerStackVirtual List Animated NumberBadgeComparisonCountdown TimerData TableDescription ListDiffKey ValueListMeterSparklineStatStepperTableTagTimelineValue Card BlockquoteCode BlockGradient TextHighlightKbdMarkdownNumber FormatProseTextTime AgoTruncateTypewriter ButtonButton GroupCalendarCheckboxChipColor PickerComboboxCopy ButtonDate PickerFieldsetFile UploadFormHotkeyIcon ButtonInputInput GroupLabelMulti SelectNumber InputOTP InputPin InputRadio GroupRange SliderRatingSearchSegmented ControlSelectSliderSortable ListSwitch GroupTextareaTheme ToggleTime PickerToggle AlertAnnouncementBannerCommand PaletteConfirmConnection StatusContext MenuDialogDropdown MenuGuided TourHover CardInline MessageLoading OverlayModalNotification PanelPopoverProgressProgress ToastSheetSnackbarSpotlightToastTooltip
Components Spinner
content static
<arc-spinner>

Overview

Guidelines

When to use

  • Use sm size inside buttons to indicate a pending action
  • Use lg size for full-page or overlay loading states
  • Choose the white variant when placing a spinner on a filled or dark background
  • Pair with a text label ("Loading...") for screen readers and sighted users alike
  • Remove the spinner immediately when loading completes — avoid artificial delays

When not to use

  • Use a spinner when the content shape is predictable — prefer skeleton placeholders
  • Place multiple spinners on the same screen simultaneously
  • Use the lg spinner inline with text — it overwhelms surrounding content
  • Rely solely on the spinner for status — combine with aria-live regions when appropriate
  • Use the primary variant on a primary-coloured background — it becomes invisible

Features

  • Three size presets: sm (16px), md (24px), lg (40px) with proportional border widths
  • Three colour variants: primary (--accent-primary), secondary (--accent-secondary), white (--text-primary)
  • Continuous 0.75s linear rotation animation for smooth spinning
  • Inline-flex display for easy placement beside text or inside buttons
  • Built-in role="status" and aria-label="Loading" for accessibility
  • CSS part (spinner) for custom animation or colour overrides
  • Lightweight implementation — single div element with border animation

Preview

Usage

<arc-spinner size="sm"></arc-spinner>
<arc-spinner size="md"></arc-spinner>
<arc-spinner size="lg"></arc-spinner>
import { Spinner } from '@arclux/arc-ui-react';

<Spinner size="sm"></Spinner>
<Spinner size="md"></Spinner>
<Spinner size="lg"></Spinner>
<script setup>
import { Spinner } from '@arclux/arc-ui-vue';
</script>

<template>
  <Spinner size="sm"></Spinner>
  <Spinner size="md"></Spinner>
  <Spinner size="lg"></Spinner>
</template>
<script>
  import { Spinner } from '@arclux/arc-ui-svelte';
</script>

<Spinner size="sm"></Spinner>
<Spinner size="md"></Spinner>
<Spinner size="lg"></Spinner>
import { Component } from '@angular/core';
import { Spinner } from '@arclux/arc-ui-angular';

@Component({
  imports: [Spinner],
  template: `
    <Spinner size="sm"></Spinner>
    <Spinner size="md"></Spinner>
    <Spinner size="lg"></Spinner>
  `,
})
export class MyComponent {}
import { Spinner } from '@arclux/arc-ui-solid';

<Spinner size="sm"></Spinner>
<Spinner size="md"></Spinner>
<Spinner size="lg"></Spinner>
import { Spinner } from '@arclux/arc-ui-preact';

<Spinner size="sm"></Spinner>
<Spinner size="md"></Spinner>
<Spinner size="lg"></Spinner>
<!-- Auto-generated by @arclux/prism — do not edit manually -->
<!-- arc-spinner — requires spinner.css + base.css (or arc-ui.css) -->
<span class="arc-spinner">
  <div
   class="spinner"
   role="status"
   aria-label="Loading"
   ></div>
</span>
<!-- Auto-generated by @arclux/prism — do not edit manually -->
<!-- arc-spinner — self-contained, no external CSS needed -->
<span class="arc-spinner" style="display: inline-flex">
  <div
   style="border-radius: 9999px; border-style: solid; border-color: rgb(77, 126, 247); border-top-color: transparent; animation: spin 0.75s linear infinite; box-sizing: border-box"
   role="status"
   aria-label="Loading"
   ></div>
</span>

API

Prop Type Default Description
size 'sm' | 'md' | 'lg' 'md' Spinner dimensions: sm (16px), md (24px), lg (40px)
variant 'primary' | 'secondary' | 'white' 'primary' Colour of the spinner ring

See Also