Docs Components Uncategorized

RadioGroup

React example follows below.
ts
import { Radio, RadioGroup } from "@grassroot/ui-react";
const radioGroupFixture = {
id: "radio-group",
name: "engagement",
label: "Engagement",
description: "How should we work together?",
value: "embedded-team",
options: [
{ id: "embedded-team", label: "Embedded team", value: "embedded-team" },
{ id: "fixed-scope-project", label: "Fixed-scope project", value: "fixed-scope-project" },
{ id: "advisory-fractional", label: "Advisory / fractional", value: "advisory-fractional" },
],
} satisfies {
id: string;
name: string;
label: string;
description: string;
value: string;
options: Array<{ id: string; label: string; value: string }>;
};
export default function RadioGroupDemo() {
return (
<RadioGroup
name={`${radioGroupFixture.name}-react`}
defaultValue={radioGroupFixture.value}
label={radioGroupFixture.label}
description={radioGroupFixture.description}
>
{radioGroupFixture.options.map((option) => (
<Radio key={option.id} value={option.value} label={option.label} />
))}
</RadioGroup>
);
}
ts
<script setup lang="ts">
import { Radio, RadioGroup } from "@grassroot/ui-vue";
const radioGroupFixture = {
id: "radio-group",
name: "engagement",
label: "Engagement",
description: "How should we work together?",
value: "embedded-team",
options: [
{ id: "embedded-team", label: "Embedded team", value: "embedded-team" },
{ id: "fixed-scope-project", label: "Fixed-scope project", value: "fixed-scope-project" },
{ id: "advisory-fractional", label: "Advisory / fractional", value: "advisory-fractional" },
],
} satisfies {
id: string;
name: string;
label: string;
description: string;
value: string;
options: Array<{ id: string; label: string; value: string }>;
};
</script>
<template>
<RadioGroup
:name="`${radioGroupFixture.name}-vue`"
:default-value="radioGroupFixture.value"
:label="radioGroupFixture.label"
:description="radioGroupFixture.description"
@value-change="() => {}"
>
<Radio
v-for="option in radioGroupFixture.options"
:key="option.id"
:value="option.value"
>
<template #label>{{ option.label }}</template>
</Radio>
</RadioGroup>
</template>
ts
import { Component } from "@angular/core";
const radioGroupFixture = {
id: "radio-group",
name: "engagement",
label: "Engagement",
description: "How should we work together?",
value: "embedded-team",
options: [
{ id: "embedded-team", label: "Embedded team", value: "embedded-team" },
{ id: "fixed-scope-project", label: "Fixed-scope project", value: "fixed-scope-project" },
{ id: "advisory-fractional", label: "Advisory / fractional", value: "advisory-fractional" },
],
} satisfies {
id: string;
name: string;
label: string;
description: string;
value: string;
options: Array<{ id: string; label: string; value: string }>;
};
import { GrassrootRadio, GrassrootRadioGroup } from "@grassroot/ui-angular";
@Component({
selector: "app-radio-group-demo",
standalone: true,
imports: [GrassrootRadioGroup, GrassrootRadio],
host: { style: "display: contents" },
template: `
<grassroot-radio-group
[name]="name"
[defaultValue]="fixture.value"
[label]="fixture.label"
[description]="fixture.description"
>
@for (option of fixture.options; track option.id) {
<grassroot-radio [value]="option.value" [label]="option.label" />
}
</grassroot-radio-group>
`,
})
export class RadioGroupDemoComponent {
protected readonly fixture = radioGroupFixture;
protected readonly name = `${radioGroupFixture.name}-angular`;
}
export default RadioGroupDemoComponent;
ts
<script lang="ts">
import { Radio, RadioGroup } from "@grassroot/ui-svelte";
const radioGroupFixture = {
id: "radio-group",
name: "engagement",
label: "Engagement",
description: "How should we work together?",
value: "embedded-team",
options: [
{ id: "embedded-team", label: "Embedded team", value: "embedded-team" },
{ id: "fixed-scope-project", label: "Fixed-scope project", value: "fixed-scope-project" },
{ id: "advisory-fractional", label: "Advisory / fractional", value: "advisory-fractional" },
],
} satisfies {
id: string;
name: string;
label: string;
description: string;
value: string;
options: Array<{ id: string; label: string; value: string }>;
};
</script>
<RadioGroup
name={`${radioGroupFixture.name}-svelte`}
defaultValue={radioGroupFixture.value}
label={radioGroupFixture.label}
description={radioGroupFixture.description}
>
{#each radioGroupFixture.options as option (option.id)}
<Radio value={option.value} label={option.label} />
{/each}
</RadioGroup>
ts
/** @jsxImportSource solid-js */
import { Radio, RadioGroup } from "@grassroot/ui-solid";
const radioGroupFixture = {
id: "radio-group",
name: "engagement",
label: "Engagement",
description: "How should we work together?",
value: "embedded-team",
options: [
{ id: "embedded-team", label: "Embedded team", value: "embedded-team" },
{ id: "fixed-scope-project", label: "Fixed-scope project", value: "fixed-scope-project" },
{ id: "advisory-fractional", label: "Advisory / fractional", value: "advisory-fractional" },
],
} satisfies {
id: string;
name: string;
label: string;
description: string;
value: string;
options: Array<{ id: string; label: string; value: string }>;
};
export default function RadioGroupDemo() {
return (
<RadioGroup
name={`${radioGroupFixture.name}-solid`}
defaultValue={radioGroupFixture.value}
label={radioGroupFixture.label}
description={radioGroupFixture.description}
>
{radioGroupFixture.options.map((option) => (
<Radio value={option.value} label={option.label} />
))}
</RadioGroup>
);
}

Installation

API Reference

Import

import { Radio, RadioGroup } from "@grassroot/ui-react";

Props

Prop
Type
Default
Requirement
tone
Tone | undefined
optional
onValueChange
((detail: RadioGroupChangeDetail) => void) | undefined
optional
defaultValue
string | undefined
optional
id
string | undefined
optional
onChange
((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined
optional
name
string | undefined
optional
value
string | undefined
optional
disabled
boolean | undefined
optional
readOnly
boolean | undefined
optional
required
boolean | undefined
optional
asChild
boolean | undefined
optional
ariaLabel
string | undefined
optional
Prop
tone
Type
Tone | undefined
Default
Requirement
optional
Prop
onValueChange
Type
((detail: RadioGroupChangeDetail) => void) | undefined
Default
Requirement
optional
Prop
defaultValue
Type
string | undefined
Default
Requirement
optional
Prop
id
Type
string | undefined
Default
Requirement
optional
Prop
onChange
Type
((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined
Default
Requirement
optional
Prop
name
Type
string | undefined
Default
Requirement
optional
Prop
value
Type
string | undefined
Default
Requirement
optional
Prop
disabled
Type
boolean | undefined
Default
Requirement
optional
Prop
readOnly
Type
boolean | undefined
Default
Requirement
optional
Prop
required
Type
boolean | undefined
Default
Requirement
optional
Prop
asChild
Type
boolean | undefined
Default
Requirement
optional
Prop
ariaLabel
Type
string | undefined
Default
Requirement
optional

Events

EventPayload
onValueChange((detail: RadioGroupChangeDetail) => void) | undefined
onChange((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined

Content regions

  • children
  • description
  • label

Native attributes

Standard DOM and ARIA attributes not listed above spread onto the root element.

Import

import { Radio, RadioGroup } from "@grassroot/ui-vue";

Props

Prop
Type
Default
Requirement
value
string | undefined
optional
defaultValue
string | undefined
optional
disabled
boolean | undefined
optional
readOnly
boolean | undefined
optional
name
string | undefined
optional
required
boolean | undefined
optional
id
string | undefined
optional
ariaLabel
string | undefined
optional
label
string | undefined
optional
description
string | undefined
optional
tone
"accent" | "amber" | "teal" | "indigo" | undefined
"accent"
optional
Prop
value
Type
string | undefined
Default
Requirement
optional
Prop
defaultValue
Type
string | undefined
Default
Requirement
optional
Prop
disabled
Type
boolean | undefined
Default
Requirement
optional
Prop
readOnly
Type
boolean | undefined
Default
Requirement
optional
Prop
name
Type
string | undefined
Default
Requirement
optional
Prop
required
Type
boolean | undefined
Default
Requirement
optional
Prop
id
Type
string | undefined
Default
Requirement
optional
Prop
ariaLabel
Type
string | undefined
Default
Requirement
optional
Prop
label
Type
string | undefined
Default
Requirement
optional
Prop
description
Type
string | undefined
Default
Requirement
optional
Prop
tone
Type
"accent" | "amber" | "teal" | "indigo" | undefined
Default
"accent"
Requirement
optional

Events

EventPayload
valueChange[detail: RadioGroupChangeDetail]

Content regions

  • default

Import

import { Component } from "@angular/core";
import { GrassrootRadio, GrassrootRadioGroup } from "@grassroot/ui-angular";

Props

Prop
Type
Default
Requirement
value
string
optional
defaultValue
string
optional
disabled
boolean
optional
readOnly
boolean
optional
name
string
optional
required
boolean
optional
id
string
optional
ariaLabel
string
optional
label
string
optional
description
string
optional
tone
"accent" | "amber" | "teal" | "indigo"
"accent"
optional
Prop
value
Type
string
Default
Requirement
optional
Prop
defaultValue
Type
string
Default
Requirement
optional
Prop
disabled
Type
boolean
Default
Requirement
optional
Prop
readOnly
Type
boolean
Default
Requirement
optional
Prop
name
Type
string
Default
Requirement
optional
Prop
required
Type
boolean
Default
Requirement
optional
Prop
id
Type
string
Default
Requirement
optional
Prop
ariaLabel
Type
string
Default
Requirement
optional
Prop
label
Type
string
Default
Requirement
optional
Prop
description
Type
string
Default
Requirement
optional
Prop
tone
Type
"accent" | "amber" | "teal" | "indigo"
Default
"accent"
Requirement
optional

Events

EventPayload
valueChangeRadioGroupChangeDetail

Content regions

  • default

Import

import { Radio, RadioGroup } from "@grassroot/ui-svelte";

Props

Prop
Type
Default
Requirement
value
string
optional
defaultValue
string
optional
disabled
boolean
optional
readOnly
boolean
optional
name
string
optional
required
boolean
optional
id
string
optional
ariaLabel
string
optional
tone
Tone
"accent"
optional
onValueChange
(detail: RadioGroupChangeDetail) => void
optional
Prop
value
Type
string
Default
Requirement
optional
Prop
defaultValue
Type
string
Default
Requirement
optional
Prop
disabled
Type
boolean
Default
Requirement
optional
Prop
readOnly
Type
boolean
Default
Requirement
optional
Prop
name
Type
string
Default
Requirement
optional
Prop
required
Type
boolean
Default
Requirement
optional
Prop
id
Type
string
Default
Requirement
optional
Prop
ariaLabel
Type
string
Default
Requirement
optional
Prop
tone
Type
Tone
Default
"accent"
Requirement
optional
Prop
onValueChange
Type
(detail: RadioGroupChangeDetail) => void
Default
Requirement
optional

Events

EventPayload
onValueChange(detail: RadioGroupChangeDetail) => void

Content regions

  • children
  • description
  • label

Import

import { Radio, RadioGroup } from "@grassroot/ui-solid";

Props

Prop
Type
Default
Requirement
value
string
optional
defaultValue
string
optional
disabled
boolean
optional
readOnly
boolean
optional
name
string
optional
required
boolean
optional
id
string
optional
ariaLabel
string
optional
tone
Tone
optional
onValueChange
(detail: RadioGroupChangeDetail) => void
optional
Prop
value
Type
string
Default
Requirement
optional
Prop
defaultValue
Type
string
Default
Requirement
optional
Prop
disabled
Type
boolean
Default
Requirement
optional
Prop
readOnly
Type
boolean
Default
Requirement
optional
Prop
name
Type
string
Default
Requirement
optional
Prop
required
Type
boolean
Default
Requirement
optional
Prop
id
Type
string
Default
Requirement
optional
Prop
ariaLabel
Type
string
Default
Requirement
optional
Prop
tone
Type
Tone
Default
Requirement
optional
Prop
onValueChange
Type
(detail: RadioGroupChangeDetail) => void
Default
Requirement
optional

Events

EventPayload
onValueChange(detail: RadioGroupChangeDetail) => void

Content regions

  • children
  • description
  • label

Native attributes

Standard DOM and ARIA attributes not listed above spread onto the root element.