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.