Docs Components Primitives

Spinner

React example follows below.
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>
);
}
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>
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;
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>
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.
label
string | undefined
"Loading"
optional
Accessible label for assistive tech.
Prop
size
Type
"sm" | "md" | "lg" | undefined
Default
"md"
Requirement
optional
Description
Diameter in px.
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
label
string | undefined
optional
className
string | 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
label
string
"Loading"
optional
className
string
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
label
string
optional
className
string
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
label
string
optional
className
string
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.