- Prop
variant- Type
LoaderVariant | undefined- Default
"rotator"- Requirement
- optional
- Description
- Which indicator to render.
Docs Components Primitives
Loader
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 loaderFixture = { id: "loader", variants: [ { variant: "rotator", size: "md" }, { variant: "equalizer", size: "lg" }, { variant: "noodle", size: "md", speed: 0.6, label: "Compiling" }, ],} satisfies { id: string; variants: Array<{ variant: "rotator" | "equalizer" | "noodle"; size: "sm" | "md" | "lg"; speed?: number; label?: string; }>;}; import { Loader } from "@grassroot/ui-react"; export default function LoaderDemo() { return ( <div className="vs-ldr-list"> {loaderFixture.variants.map((v) => ( <Loader key={v.variant} variant={v.variant} size={v.size} speed={v.speed} label={v.label} /> ))} </div> );}- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script setup lang="ts">const loaderFixture = { id: "loader", variants: [ { variant: "rotator", size: "md" }, { variant: "equalizer", size: "lg" }, { variant: "noodle", size: "md", speed: 0.6, label: "Compiling" }, ],} satisfies { id: string; variants: Array<{ variant: "rotator" | "equalizer" | "noodle"; size: "sm" | "md" | "lg"; speed?: number; label?: string; }>;}; import { Loader } from "@grassroot/ui-vue";</script> <template> <div class="vs-ldr-list"> <Loader v-for="v in loaderFixture.variants" :key="v.variant" :variant="v.variant" :size="v.size" :speed="v.speed ?? 1" :label="v.label ?? 'Loading'" /> </div></template>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
import { Component } from "@angular/core";const loaderFixture = { id: "loader", variants: [ { variant: "rotator", size: "md" }, { variant: "equalizer", size: "lg" }, { variant: "noodle", size: "md", speed: 0.6, label: "Compiling" }, ],} satisfies { id: string; variants: Array<{ variant: "rotator" | "equalizer" | "noodle"; size: "sm" | "md" | "lg"; speed?: number; label?: string; }>;}; import { GrassrootLoader } from "@grassroot/ui-angular"; @Component({ selector: "app-loader-demo", standalone: true, imports: [GrassrootLoader], host: { style: "display: contents" }, template: ` <div class="vs-ldr-list"> @for (v of variants; track v.variant) { <grassroot-loader [variant]="v.variant" [size]="v.size" [speed]="v.speed" [label]="v.label" /> } </div> `,})export class LoaderDemoComponent { // Angular's signal inputs only fall back to their default when the // consumer omits the binding entirely — an explicitly-bound `undefined` // (what the fixture's optional speed/label fields would produce for the // first two variants) overwrites the default instead of preserving it. // Resolve the component's own defaults here so every variant binds a // concrete value, matching the other four frameworks' rendered output. protected readonly variants = loaderFixture.variants.map((v) => ({ ...v, speed: v.speed ?? 1, label: v.label ?? "Loading", }));} export default LoaderDemoComponent;- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script lang="ts"> import { Loader } from "@grassroot/ui-svelte"; const loaderFixture = { id: "loader", variants: [ { variant: "rotator", size: "md" }, { variant: "equalizer", size: "lg" }, { variant: "noodle", size: "md", speed: 0.6, label: "Compiling" }, ], } satisfies { id: string; variants: Array<{ variant: "rotator" | "equalizer" | "noodle"; size: "sm" | "md" | "lg"; speed?: number; label?: string; }>; }; </script> <div class="vs-ldr-list"> {#each loaderFixture.variants as v (v.variant)} <Loader variant={v.variant} size={v.size} speed={v.speed ?? 1} label={v.label ?? "Loading"} /> {/each}</div>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
/** @jsxImportSource solid-js */import { For } from "solid-js";const loaderFixture = { id: "loader", variants: [ { variant: "rotator", size: "md" }, { variant: "equalizer", size: "lg" }, { variant: "noodle", size: "md", speed: 0.6, label: "Compiling" }, ],} satisfies { id: string; variants: Array<{ variant: "rotator" | "equalizer" | "noodle"; size: "sm" | "md" | "lg"; speed?: number; label?: string; }>;}; import { Loader } from "@grassroot/ui-solid"; export default function LoaderDemo() { return ( <div class="vs-ldr-list"> <For each={loaderFixture.variants}> {(v) => ( <Loader variant={v.variant} size={v.size} speed={v.speed ?? 1} label={v.label ?? "Loading"} /> )} </For> </div> );}Installation
API Reference
Import
import { Loader } from "@grassroot/ui-react";
Props
Prop
Type
Default
Requirement
Description
variantLoaderVariant | undefined"rotator"optional
Which indicator to render.
size"sm" | "md" | "lg" | undefined"md"optional
Overall scale.
speednumber | undefined1optional
Animation speed multiplier (0.25–3 in the design).
labelstring | undefined"Loading"optional
Accessible label for assistive tech.
- Prop
size- Type
"sm" | "md" | "lg" | undefined- Default
"md"- Requirement
- optional
- Description
- Overall scale.
- Prop
speed- Type
number | undefined- Default
1- Requirement
- optional
- Description
- Animation speed multiplier (0.25–3 in the design).
- 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 { Loader } from "@grassroot/ui-vue";
Props
Prop
Type
Default
Requirement
variantLoaderVariant | undefined"rotator"optional
size"sm" | "md" | "lg" | undefined"md"optional
speednumber | undefined—
optional
labelstring | undefined"Loading"optional
- Prop
variant- Type
LoaderVariant | undefined- Default
"rotator"- Requirement
- optional
- Prop
size- Type
"sm" | "md" | "lg" | undefined- Default
"md"- Requirement
- optional
- Prop
speed- Type
number | undefined- Default
- —
- Requirement
- optional
- Prop
label- Type
string | undefined- Default
"Loading"- Requirement
- optional
Import
import { Component } from "@angular/core";
import { GrassrootLoader } from "@grassroot/ui-angular";
Props
Prop
Type
Default
Requirement
variantLoaderVariant"rotator"optional
size"sm" | "md" | "lg""md"optional
speednumber—
optional
labelstring"Loading"optional
- Prop
variant- Type
LoaderVariant- Default
"rotator"- Requirement
- optional
- Prop
size- Type
"sm" | "md" | "lg"- Default
"md"- Requirement
- optional
- Prop
speed- Type
number- Default
- —
- Requirement
- optional
- Prop
label- Type
string- Default
"Loading"- Requirement
- optional
Import
import { Loader } from "@grassroot/ui-svelte";
Props
Prop
Type
Default
Requirement
variantLoaderVariant"rotator"optional
size"sm" | "md" | "lg""md"optional
speednumber—
optional
labelstring"Loading"optional
- Prop
variant- Type
LoaderVariant- Default
"rotator"- Requirement
- optional
- Prop
size- Type
"sm" | "md" | "lg"- Default
"md"- Requirement
- optional
- Prop
speed- Type
number- Default
- —
- Requirement
- optional
- Prop
label- Type
string- Default
"Loading"- Requirement
- optional
Import
import { For } from "solid-js";
import { Loader } from "@grassroot/ui-solid";
Props
Prop
Type
Default
Requirement
variantLoaderVariant—
optional
size"sm" | "md" | "lg"—
optional
speednumber—
optional
labelstring—
optional
classNamestring—
optional
- Prop
variant- Type
LoaderVariant- Default
- —
- Requirement
- optional
- Prop
size- Type
"sm" | "md" | "lg"- Default
- —
- Requirement
- optional
- Prop
speed- Type
number- 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.