- Prop
size- Type
"sm" | "md" | "lg" | undefined- Default
"md"- Requirement
- optional
- Description
- Diameter in px.
Docs Components Primitives
Spinner
React example follows below.
Vue example follows below.
Angular example follows below.
Svelte example follows below.
Solid example follows below.
- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
const spinnerFixture = { id: "spinner", sizes: ["sm", "md"], labelledSize: "sm", labelledText: "Provisioning…",} satisfies { id: string; sizes: Array<"sm" | "md" | "lg">; labelledSize: "sm" | "md" | "lg"; labelledText: string;}; import { Spinner } from "@grassroot/ui-react"; export default function SpinnerDemo() { return ( <div> {spinnerFixture.sizes.map((size) => ( <Spinner key={size} size={size} /> ))} <span className="inline-flex items-center gap-2 text-muted"> <Spinner size={spinnerFixture.labelledSize} className="text-muted" /> {spinnerFixture.labelledText} </span> </div> );}- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script setup lang="ts">const spinnerFixture = { id: "spinner", sizes: ["sm", "md"], labelledSize: "sm", labelledText: "Provisioning…",} satisfies { id: string; sizes: Array<"sm" | "md" | "lg">; labelledSize: "sm" | "md" | "lg"; labelledText: string;}; import { Spinner } from "@grassroot/ui-vue";</script> <template> <div> <Spinner v-for="size in spinnerFixture.sizes" :key="size" :size="size" /> <span class="inline-flex items-center gap-2 text-muted"> <Spinner :size="spinnerFixture.labelledSize" class-name="text-muted" /> {{ spinnerFixture.labelledText }} </span> </div></template>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
import { Component } from "@angular/core";const spinnerFixture = { id: "spinner", sizes: ["sm", "md"], labelledSize: "sm", labelledText: "Provisioning…",} satisfies { id: string; sizes: Array<"sm" | "md" | "lg">; labelledSize: "sm" | "md" | "lg"; labelledText: string;}; import { GrassrootSpinner } from "@grassroot/ui-angular"; @Component({ selector: "app-spinner-demo", standalone: true, imports: [GrassrootSpinner], template: ` <div> @for (size of fixture.sizes; track size) { <grassroot-spinner [size]="size" /> } <span class="inline-flex items-center gap-2 text-muted"> <grassroot-spinner [size]="fixture.labelledSize" className="text-muted" /> {{ fixture.labelledText }} </span> </div> `,})export class SpinnerDemoComponent { protected readonly fixture = spinnerFixture;} export default SpinnerDemoComponent;- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script lang="ts"> import { Spinner } from "@grassroot/ui-svelte"; const spinnerFixture = { id: "spinner", sizes: ["sm", "md"], labelledSize: "sm", labelledText: "Provisioning…", } satisfies { id: string; sizes: Array<"sm" | "md" | "lg">; labelledSize: "sm" | "md" | "lg"; labelledText: string; }; </script> <div> {#each spinnerFixture.sizes as size (size)}<Spinner {size} />{/each}<span class="inline-flex items-center gap-2 text-muted" ><Spinner size={spinnerFixture.labelledSize} className="text-muted" />{spinnerFixture.labelledText}</span ></div>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
/** @jsxImportSource solid-js */import { Spinner } from "@grassroot/ui-solid";const spinnerFixture = { id: "spinner", sizes: ["sm", "md"], labelledSize: "sm", labelledText: "Provisioning…",} satisfies { id: string; sizes: Array<"sm" | "md" | "lg">; labelledSize: "sm" | "md" | "lg"; labelledText: string;}; export default function SpinnerDemo() { return ( <div> {spinnerFixture.sizes.map((size) => ( <Spinner size={size} /> ))} <span class="inline-flex items-center gap-2 text-muted"> <Spinner size={spinnerFixture.labelledSize} className="text-muted" /> {spinnerFixture.labelledText} </span> </div> );}Installation
API Reference
Import
import { Spinner } from "@grassroot/ui-react";
Props
Prop
Type
Default
Requirement
Description
size"sm" | "md" | "lg" | undefined"md"optional
Diameter in px.
labelstring | undefined"Loading"optional
Accessible label for assistive tech.
- Prop
label- Type
string | undefined- Default
"Loading"- Requirement
- optional
- Description
- Accessible label for assistive tech.
Native attributes
Standard DOM and ARIA attributes not listed above spread onto the root element.
Import
import { Spinner } from "@grassroot/ui-vue";
Props
Prop
Type
Default
Requirement
size"sm" | "md" | "lg" | undefined"md"optional
labelstring | undefined—
optional
classNamestring | undefined—
optional
- Prop
size- Type
"sm" | "md" | "lg" | undefined- Default
"md"- Requirement
- optional
- Prop
label- Type
string | undefined- Default
- —
- Requirement
- optional
- Prop
className- Type
string | undefined- Default
- —
- Requirement
- optional
Import
import { Component } from "@angular/core";
import { GrassrootSpinner } from "@grassroot/ui-angular";
Props
Prop
Type
Default
Requirement
size"sm" | "md" | "lg""md"optional
labelstring"Loading"optional
classNamestring—
optional
- Prop
size- Type
"sm" | "md" | "lg"- Default
"md"- Requirement
- optional
- Prop
label- Type
string- Default
"Loading"- Requirement
- optional
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Import
import { Spinner } from "@grassroot/ui-svelte";
Props
Prop
Type
Default
Requirement
size"sm" | "md" | "lg""md"optional
labelstring—
optional
classNamestring—
optional
- Prop
size- Type
"sm" | "md" | "lg"- Default
"md"- Requirement
- optional
- Prop
label- Type
string- Default
- —
- Requirement
- optional
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Import
import { Spinner } from "@grassroot/ui-solid";
Props
Prop
Type
Default
Requirement
size"sm" | "md" | "lg"—
optional
labelstring—
optional
classNamestring—
optional
- Prop
size- Type
"sm" | "md" | "lg"- Default
- —
- Requirement
- optional
- Prop
label- Type
string- Default
- —
- Requirement
- optional
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Native attributes
Standard DOM and ARIA attributes not listed above spread onto the root element.