---
title: "रेडियो ग्रुप"
description: "ऐसा एक सवाल पूछता है जिसका, एक साथ दिखाए गए थोड़े-से विकल्पों में से, ठीक एक जवाब होता है। यह रेडियो बटन का ऐसा सेट है जो चुना हुआ मान रखता है, ऐसे लेबल के नीचे जो बता सकता है कि जवाब ज़रूरी है या वैकल्पिक, एक विवरण और पूरे सेट की एक त्रुटि के साथ।"
url: "https://tanrei.chnotchy.com/hi/components/radio-group/"
last_updated: 2026-10-23T21:17:12.000Z
---

# रेडियो ग्रुप

> ऐसा एक सवाल पूछता है जिसका, एक साथ दिखाए गए थोड़े-से विकल्पों में से, ठीक एक जवाब होता है। यह रेडियो बटन का ऐसा सेट है जो चुना हुआ मान रखता है, ऐसे लेबल के नीचे जो बता सकता है कि जवाब ज़रूरी है या वैकल्पिक, एक विवरण और पूरे सेट की एक त्रुटि के साथ।

## अवलोकन

[रेडियो बटन](https://tanrei.chnotchy.com/hi/components/radio-button/) कभी अकेला इस्तेमाल नहीं होता। रेडियो ग्रुप कई रेडियो बटन को एक सवाल बना देता है: वह सेट को एक नाम देता है, एक पंक्ति जो बताती है कि जवाब कैसे देना है, एक शब्द जो बताता है कि जवाब देना ज़रूरी है या नहीं, और जवाब अस्वीकार होने पर एक वजह। और वह जवाब को एक मान के रूप में रखता है।

**किनसे बना है:** एक [फ़ील्ड ग्रुप](https://tanrei.chnotchy.com/hi/components/field-group/) और [रेडियो बटन](https://tanrei.chnotchy.com/hi/components/radio-button/) से। फ़ील्ड ग्रुप फ़्रेम है, अपने radio-group प्रकार में: लेबल, ज़रूरी या वैकल्पिक का निशान, विवरण, त्रुटि, कॉलम या पंक्ति का लेआउट, और वह एक रेडियो ग्रुप जिसके बारे में सहायक तकनीक को बताया जाता है। मान रेडियो बटन रखते हैं: हर एक अपने लेबल वाला एक विकल्प है, और उनमें से जो चयनित है वही जवाब है। रेडियो ग्रुप अपना कुछ नहीं बनाता और उसका कोई टोकन नहीं है। इन दोनों में वह वही स्टेट जोड़ता है जो वरना हर प्रॉडक्ट ख़ुद लिखता है: आने और जाने वाला एक मान और उसका एक `change`, सेट के लिए रखी गई ऐरो कुंजियाँ और फ़ोकस के क्रम में एक पड़ाव, और फ़ॉर्म में एक कंट्रोल के रूप में जगह।

वह उतना ही चौड़ा होता है जितनी वह जगह जहाँ उसे रखा गया है।

वेब पर यह `<tanrei-radio-group>` है। बाक़ी प्लैटफ़ॉर्म ने इसे अभी इम्प्लीमेंट नहीं किया है।

### इस्तेमाल

**Web**

```html
<tanrei-radio-group label="डिलीवरी" name="delivery" value="standard" required required-text="ज़रूरी"
                    supporting-text="ऑर्डर भेजे जाने तक आप इसे बदल सकते हैं।">
  <tanrei-radio-button value="standard" label="स्टैंडर्ड, 3 से 5 दिन"></tanrei-radio-button>
  <tanrei-radio-button value="express" label="एक्सप्रेस, अगले दिन"></tanrei-radio-button>
  <tanrei-radio-button value="pickup" label="स्टोर से पिकअप"></tanrei-radio-button>
</tanrei-radio-group>

<script type="module">
  import '@tanrei/web/components/radio-group';

  const group = document.querySelector('tanrei-radio-group');
  group.addEventListener('change', (event) => {
    // event.detail.value नया मान है; group.value में वह पहले से है।
  });
</script>
```

**React**

```tsx
import { RadioButton, RadioGroup } from '@tanrei/react';

<RadioGroup label="डिलीवरी" value={delivery} onChange={(event) => setDelivery(event.detail.value)}
            error={refused} errorText="इस पते पर एक्सप्रेस डिलीवरी उपलब्ध नहीं है। कोई दूसरा तरीक़ा चुनें।">
  <RadioButton value="standard" label="स्टैंडर्ड, 3 से 5 दिन" />
  <RadioButton value="express" label="एक्सप्रेस, अगले दिन" />
  <RadioButton value="pickup" label="स्टोर से पिकअप" />
</RadioGroup>
```

रेडियो ग्रुप के भीतर रेडियो बटन को न `name` चाहिए, न `checked`: कौन-सा चयनित है, यह ग्रुप का `value` बताता है।

### एक स्तर नीचे

वही सेट, अपने दो सदस्यों से हाथ से लिखा जाए, तो वैसा ही दिखता है और सहायक तकनीक को वही रेडियो ग्रुप मिलता है। फ़ील्ड ग्रुप को `kind="radio-group"` से बताया जाता है कि उसका सेट क्या है, और रेडियो बटन का एक ही `name` होता है:

```html
<tanrei-field-group kind="radio-group" label="डिलीवरी"
                    supporting-text="ऑर्डर भेजे जाने तक आप इसे बदल सकते हैं।"
                    required required-text="ज़रूरी">
  <tanrei-radio-button name="delivery" value="standard" label="स्टैंडर्ड, 3 से 5 दिन" checked></tanrei-radio-button>
  <tanrei-radio-button name="delivery" value="express" label="एक्सप्रेस, अगले दिन"></tanrei-radio-button>
  <tanrei-radio-button name="delivery" value="pickup" label="स्टोर से पिकअप"></tanrei-radio-button>
</tanrei-field-group>
```

हाथ से लिखे गए फ़ील्ड ग्रुप और रेडियो बटन बस एक काम नहीं करते: वे जवाब नहीं रखते। जो दिखता है या कहा जाता है, उसमें कोई फ़र्क़ नहीं है।

| पहलू | हाथ से लिखा गया | रेडियो ग्रुप |
| --- | --- | --- |
| जवाब | प्रॉडक्ट उसे रेडियो बटन से पढ़ता है | `value`, और एक एलिमेंट पर एक `change` |
| जवाब सेट करना | किसी एक रेडियो बटन पर `checked` | `value = "express"` |
| फ़ॉर्म क्या सबमिट करता है | वही एंट्री, चयनित रेडियो बटन की ओर से | वही एंट्री, ग्रुप की ओर से |
| ज़रूरी सेट जिसका जवाब नहीं दिया गया | ज़रूरी के रूप में दिखाया और कहा जाता है; फ़ॉर्म उसे अस्वीकार नहीं करता | फ़ॉर्म का अपना वैलिडेशन उसे अस्वीकार करता है |
| चयनित विकल्प हटा दिया गया है, या अभी दिखाया नहीं गया | जवाब खो जाता है | `value` रखा रहता है |
| चयनित विकल्प जिसे आपने अकेले अक्षम किया है | कुछ सबमिट नहीं करता | उसका मान सबमिट होता है |
| ऐरो कुंजियाँ, Tab कुंजी के लिए एक ही पड़ाव, सेट में हर रेडियो बटन की जगह | वही, एक ही नाम के रेडियो बटन की ओर से | वही, ग्रुप की ओर से |

फ़ील्ड ग्रुप और रेडियो बटन हाथ से वहाँ लिखें जहाँ सेट के विकल्पों के बीच ऐसा कुछ है जिसका लेआउट ग्रुप नहीं बनाता, जैसे हर विकल्प के नीचे आपकी अपनी एक पंक्ति, या जहाँ विकल्पों को आपके अपने एलिमेंट में इस तरह रहना है जैसा स्लॉट नहीं होने देता।

## स्पेक

- Category: Selection
- Level: composed
- Listing: default
- Built from: Field group, Radio button
- Page: https://tanrei.chnotchy.com/components/radio-group/
- Spec: https://github.com/chnotchy/tanrei/blob/main/specs/radio-group.spec.json

### Availability

| Design system | Has it | Notes |
| --- | --- | --- |
| Tanrei (`tanrei`) | Yes | — |
| Cupertino (Apple HIG-inspired) (`cupertino`) | Yes | — |
| M3 Expressive-like (Material 3 Expressive-inspired) (`m3-expressive-like`) | Yes | — |
| M3-like (Material 3-inspired) (`m3-like`) | Yes | — |

### Platforms

- Web: the element `<tanrei-radio-group>`, registered by importing `@tanrei/web` (or only its own module, `@tanrei/web/components/radio-group`).
- React: `RadioGroup` from `@tanrei/react`.

| Platform | Name | Status |
| --- | --- | --- |
| Web | `tanrei-radio-group` | lagging |
| SwiftUI | `TanreiRadioGroup` | planned |
| Jetpack Compose | `TanreiRadioGroup` | planned |
| Flutter | `TanreiRadioGroup` | planned |
| React Native | `RadioGroup` | planned |

Names a platform gives in its own idiom:

| Spec | Web | SwiftUI | Jetpack Compose | Flutter | React Native |
| --- | --- | --- | --- | --- | --- |
| `value` (prop) | `value` | `selection` | `value` | `groupValue` | `value` |
| `label` (prop) | `label` | `label` | `label` | `labelText` | `label` |
| `labelHidden` (prop) | `labelHidden` | `labelsHidden` | `labelHidden` | `labelHidden` | `labelHidden` |
| `supportingText` (prop) | `supportingText` | `supportingText` | `supportingText` | `helperText` | `supportingText` |
| `error` (prop) | `error` | `error` | `isError` | `isError` | `error` |
| `disabled` (prop) | `disabled` | `disabled` | `enabled` | `enabled` | `disabled` |
| `required` (prop) | `required` | `isRequired` | `required` | `required` | `required` |
| `optional` (prop) | `optional` | `isOptional` | `optional` | `optional` | `optional` |
| `change` (event) | `change` | `selection` | `onValueChange` | `onChanged` | `onValueChange` |

Statuses: `planned` — In the inventory. Nothing shippable exists yet. `lagging` — An implementation of an earlier spec exists; it has not caught up with the current one. `alpha` — Implemented with tests. The API may still change. `beta` — Feature complete and at parity. Only fixes are expected. `stable` — Covered by semantic versioning. `deprecated` — Still shipped; scheduled for removal.

### Anatomy

- `field-group`: The field group, in its radio-group kind: the label with its requirement mark, the description under it, the column or the row the options stand in, and the error text below the last option — and the one radio group that assistive technology is told of. The field group itself, with its own tokens, not a drawing of it.
- `radio-button`: The radio buttons of the set, in the order given: the product's own, each the Radio button component with its own label, drawn from its own tokens. Which of them is selected is the group's value.

### Props

| Prop | Type | Default | Web attribute | Description |
| --- | --- | --- | --- | --- |
| `value` | `string` | `""` | `value` | The value of the selected radio button; the empty string while none is selected. The radio group sets it when a person selects an option, and emits change; the product may also set it. |
| `label` | `string` | `""` | `label` | Names the set, visibly and to assistive technology: the question its controls answer ("Notify me by"). Required. (From Field group.) |
| `labelHidden` | `boolean` | `false` | `label-hidden` | Does not draw the label, which stays the accessible name of the group. For a set whose visible heading is elsewhere. (From Field group.) |
| `supportingText` | `string` | `""` | `supporting-text` | The description: how to answer ("Choose all that apply"), drawn under the label and given to assistive technology as the group's description. (From Field group.) |
| `errorText` | `string` | `""` | `error-text` | What is wrong with the set as a whole and how to put it right ("Choose at least one"), drawn below the controls while error is true. (From Field group: On the web it is also what the form's own validation says of a required group left unanswered, where the browser has no sentence of its own for it (RGP-9).) |
| `error` | `boolean` | `false` | `error` | Puts the set in the error condition: the error text is drawn, and each selection control that has an error condition of its own (a checkbox, a radio button) is drawn in it. What an answer means is the product's to validate; the group never sets this itself. One control of a valid group may still be in error by itself. (From Field group: The radio group is exposed as invalid, and its radio buttons are drawn as they are: a radio button has no error condition (RGP-8).) |
| `disabled` | `boolean` | `false` | `disabled` | Disables every control of the set and draws the frame as disabled. (From Field group: The value is kept, and on the web it is not submitted (RGP-7, RGP-9).) |
| `readOnly` | `boolean` | `false` | `readonly` | Shows the answer and keeps it: the group can be focused and its options read, its value is submitted, but the person cannot change it (RGP-20). |
| `required` | `boolean` | `false` | `required` | What the form asks of the set: true exposes it as required and draws the required mark beside the label. It never validates: a missing answer is the product's to report with error. (From Field group: exposes the radio group as required, and on the web an empty value is reported to the form's own validation (RGP-9, RGP-10).) |
| `optional` | `boolean` | `false` | `optional` | Draws the optional tag after the label and adds optionalText to the group's description, because assistive technology has no state for it. Ignored while required is true: a set is never both. (From Field group.) |
| `requiredMark` | `enum`: `auto`, `tag`, `asterisk`, `none` | `"auto"` | `required-mark` | How this set shows that it is required: tag is a small filled Tag with requiredText, asterisk is "*" after the label, none draws nothing and keeps the semantics. Auto takes comp.field-group.requirement.mark, which follows sys.behavior.requirement-mark, the system's one answer. Ignored unless required is true. (From Field group.) |
| `requiredText` | `string` | `""` | `required-text` | The text of the required tag, in the product's language ("Required", "必須"). The product's: Tanrei has no word for it. Empty reads the product's words; with neither, FGR-24 says what is drawn. (From Field group: Not part of the radio group's description: its required state carries it (RGP-10).) |
| `optionalText` | `string` | `""` | `optional-text` | The text of the optional tag, in the product's language ("Optional", "任意"); also read to assistive technology as part of the description. The product's: Tanrei has no word for it. Empty reads the product's words. (From Field group.) |
| `orientation` | `enum`: `vertical`, `horizontal` | `"vertical"` | `orientation` | vertical stacks the controls in one column, the default and the form to prefer: every label starts on one edge and is read down. horizontal lays them out in a row that wraps, for two or three short options or a row of fields. (From Field group: The arrow keys are the same in both (RGP-5).) |

### Events

| Event | Description |
| --- | --- |
| `change` | The person selected another option; carries the new value, which the group already holds. Emitted once per selection, by the group and not by its radio buttons. Not emitted when the product sets value, or when the selected option is activated again. |

### Item: `radio-button`

An option of the set: the radio button component with its own label, selected by the group's value, placed, spaced and disabled by the group, otherwise drawn and pressed as it is anywhere.

It is a Radio button.

Names: Web `tanrei-radio-button`, SwiftUI `TanreiRadioButton`, Jetpack Compose `TanreiRadioButton`, Flutter `TanreiRadioButton`, React Native `RadioButton`.

| Prop | Type | Default | Web attribute | Description |
| --- | --- | --- | --- | --- |
| `value` | `string` | `""` | `value` | What the option stands for, as the Radio button's value: the group's value while this option is the selected one. Unique in the group and not empty. |
| `label` | `string` | `""` | `label` | Its own label, as the Radio button's label. |
| `disabled` | `boolean` | `false` | `disabled` | As the Radio button's disabled: one option of an enabled group may be disabled by itself, and is then skipped by the arrow keys. |

### States

`enabled`, `disabled`, `error`

### Accessibility

- Role: `radiogroup`
- Labeling: label names the radio group, drawn or not (labelHidden). Each option keeps its own name, its own label beside it, and says its position in the set. The group's description is supportingText, then errorText while error is true, then optionalText while it is optional; a required group carries the required state, and a group in error the invalid state, so neither is said in words a second time. The requirement tag and the asterisk are hidden.
- Minimum target size: yes

| Keys | Action |
| --- | --- |
| Tab / Shift+Tab | Moves focus into the group — to the selected option, or to the first enabled one while none is selected — and out of it. The group has one stop and is not a stop itself (RGP-6). |
| Down Arrow / Right Arrow | Moves to the next enabled option and selects it, wrapping from the last to the first; in a right-to-left layout Left Arrow does what Right Arrow does here (RGP-5). While the group is read-only it moves focus and selects nothing (RGP-20). |
| Up Arrow / Left Arrow | Moves to the previous enabled option and selects it, wrapping from the first to the last; in a right-to-left layout Right Arrow does what Left Arrow does here. While the group is read-only it moves focus and selects nothing. |
| Space | Selects the focused option if it is not selected (after Tab into a group with nothing selected); does nothing on the selected one. Nothing while the group is read-only. |
| Enter | Nothing on the web, where it submits the form; selects where the platform activates any focused control with Enter (Android, tvOS), as RAD-1 says. |

- Not a target itself: the group takes no press and is not a focus stop (RGP-6), so minimumTarget holds through its radio buttons, each of which keeps a whole touch target of its own at the distance the group puts between them (RAD-9, RAD-21, RGP-2).
- The radio group is a field group that owns a value: its frame is the field group itself, in its radio-group kind (RGP-1, FGR-25), and it adds what a frame cannot have — one value, one change, the arrow keys and the one tab stop kept for the set, and a place in a form as one control. It has no tokens of its own. One level down is the same field group written by hand around radio buttons of one name: the same picture and the same radio group, without the value. A set of checkboxes that is one answer is a checkbox group, which holds a list of values where this holds one; a set of switches, and checkboxes that each have a name of their own, need none of that and stay a field group.
- Selection follows focus: an arrow key selects as it moves, as every platform's own radio buttons do, so the arrow keys never leave focus on an option that is not the answer. A product in which a selection has an expensive or a visible effect at once (it saves, it loads) should take the answer from a button that confirms it, not from change.
- A person cannot return a radio group to "nothing selected". Where no answer is a real answer, add an option that says so ("None", "No preference"), or let the form start with one option selected. The product can still set value to the empty string.
- A group in error is told by its error text, which is words (WCAG 3.3.1), and by the invalid state; the error color its radio buttons take (RAD-26) is one more sign and never the only one (WCAG 1.4.1), and no radio button is exposed as invalid by itself. The error text is announced when it appears under the person's focus and is otherwise read with the group's description (RGP-8, RGP-10); it never takes focus away.
- When a radio group, and when something else. One value from a few options that are all worth seeing at once, in a form or a setting: a radio group, of up to about five options. A choice that changes the content shown below it — which view, which sample, which period: tabs. One value from many options, or where there is little room: a select. Several of several: a checkbox group. On or off, taking effect at once: a switch. Buttons side by side that each toggle on their own: a button group. A segmented button exists only in a design system that ships one.
- Prefer a column. A row is for two or three short options; once it wraps, which label belongs to which ring is harder to see.
- On the web the radio group that assistive technology is told of is the field group's own element inside the component's shadow root, which carries the radiogroup role in its radio-group kind, around the slot that holds the radio buttons; the role's required and invalid states are why a set of radio buttons is not a plain group. iOS has no radio group trait: the container is an accessibility container whose label is the group's, and each option says its position through its value, as the radio button's spec notes.
- Heights are the texts' and the options': at 200% text size every text wraps, a row becomes a column, and nothing is cut (WCAG 1.4.4, 1.4.10).
- How a state looks is a value decision of the active design system; components read the state's tokens and never compute the effect themselves.
- A radio button the product disabled by itself keeps its place in the count, is passed over by the arrow keys and Tab, and stays selected while value is its value; its value is still submitted, because the value is the group's (RGP-7, RGP-9).
- Read-only (RGP-20) is a set that shows its answer in place and keeps it in the focus order, so that it is read with its form — on a review step, or where only some people may change it: the group says read-only (aria-readonly on the element with role radiogroup on the web, which WAI-ARIA allows on radiogroup and not on radio), each option says whether it is the chosen one, and the arrow keys move among them without choosing, as React Aria's isReadOnly radio group does. Where the answer needs no control at all, write it as text; where no one may reach the set, it is disabled.

### Behaviour

Requirements in EARS form, each with its stable id.

- **RGP-1** THE radio group SHALL be a field group whose kind is radio-group and whose spacing is controls, around its radio buttons: the field group itself, with the field group's own tokens, measures and sentences, and no copy of it — its rows, their order and their gaps (FGR-1), the label above the options (FGR-2), the requirement and its mark (FGR-4, FGR-5, FGR-6), the description under the label, which stays while the group is in error (FGR-7), the error text below the last option (FGR-8) and the disabled frame (FGR-14), each from the prop of the same name, which is the field group's. It SHALL have no look and no token of its own: it SHALL draw no container, edge, fill or elevation, SHALL add no padding around its rows and no distance between its radio buttons but the field group's, and SHALL leave each radio button drawn from the radio button's own tokens, at the radio button's own size.
- **RGP-2** THE radio group SHALL lay out its radio buttons as the field group lays out its controls: WHILE orientation is vertical in one column in the order given (FGR-3), and WHILE orientation is horizontal in a row from the start edge that wraps onto further lines and never cuts, scrolls or narrows an option below what its content needs (FGR-13). The order given is the order of reading, of the arrow keys (RGP-5) and of each option's position (RGP-10) in both orientations.
- **RGP-3** THE radio group SHALL hold one value and show as selected the radio button whose value equals it, and no other; WHILE value is the empty string none SHALL be selected. WHEN the product sets value THE radio group SHALL select the radio button of that value and unselect the others (RAD-3), over the radio button's own selection motion (RAD-15), without emitting change and without moving focus. WHEN the product sets checked on one of the group's radio buttons THE radio group SHALL take that radio button's value as its value, likewise without emitting change, so that the two never disagree; WHEN the product takes checked off the radio button that value selects THE radio group SHALL keep value and show that radio button selected again at once, because the empty string is the one way to say that none is selected. A radio button that comes to the group checked — with the group or after it — SHALL give the group its value only WHILE value is the empty string, the last of several such; WHILE value is not empty, value SHALL decide and the mark SHALL be overruled. IF value equals no radio button's value THEN THE radio group SHALL show none selected, SHALL keep value as it was given, and in debug builds SHALL report it; IF two radio buttons carry one value THEN the first in the order given SHALL be the one value selects; IF a radio button carries the empty string THEN it SHALL never be shown selected, and a person's activation of it SHALL change nothing and emit nothing, because its selection would say that none is selected; in debug builds THE radio group SHALL report either.
- **RGP-4** WHEN the person selects a radio button of the group that was not selected — by pointer, touch, Space, a click on its label, an arrow key (RGP-5) or assistive technology, as RAD-1 says of the radio button — THE radio group SHALL set value to that radio button's value and emit change exactly once, carrying the new value, with value already set when the event is received; the radio button that was selected before SHALL become unselected and emit nothing (RAD-3), and nothing the selected radio button emits SHALL reach a listener on the group as a second change. WHEN the person activates the radio button that is already selected THE radio group SHALL keep value and emit nothing (RAD-2): a person cannot clear a radio group, and a question that may go unanswered has an option that says so.
- **RGP-5** WHEN one of the group's radio buttons has keyboard focus and the person presses Down Arrow or Right Arrow THE radio group SHALL move focus to the next enabled radio button in the order given, wrapping from the last to the first, and select it as RGP-4 says; Up Arrow and Left Arrow SHALL do the same towards the previous one, wrapping from the first to the last; in a right-to-left layout Right Arrow SHALL move to the previous and Left Arrow to the next, and Up Arrow and Down Arrow SHALL stay as they are. The four keys SHALL do this in both orientations, and by the order given, not by the place a wrapped row gave an option. THE radio group SHALL skip a disabled radio button, SHALL do nothing WHILE the focused one is the only enabled one, and SHALL leave a key pressed with Alt, Control or Meta to the platform. This is RAD-4, kept by the group for its radio buttons.
- **RGP-6** THE radio group SHALL keep exactly one of its radio buttons in the focus order: the selected one WHILE it is enabled, otherwise the first enabled one in the order given; Tab and Shift+Tab SHALL enter the group at that radio button from either side and SHALL leave the group from whichever radio button has focus, never moving within it (RAD-5). THE radio group SHALL NOT be a stop itself, and a press on its label, its requirement mark, its description or its error text SHALL select nothing and move no focus into the group (FGR-12). WHEN the radio button that is the stop changes while focus is inside the group THE radio group SHALL leave focus where it is. WHILE no radio button is enabled the group SHALL have no stop. WHEN the product asks the group itself for focus, where the platform has such a call, THE radio group SHALL give focus to the radio button that is the stop.
- **RGP-7** WHILE disabled is true THE radio group SHALL draw its frame from the field group's disabled tokens (FGR-14), SHALL make every radio button it holds disabled as the radio button's own disabled does (RAD-6, RAD-10) — not focusable, not operable, drawn disabled, the selected one still shown selected — SHALL emit no change, SHALL keep value, and SHALL be exposed as disabled, its texts still readable by assistive technology. WHILE disabled is false THE radio group SHALL NOT enable a radio button the product disabled itself: that one stays out of the focus order and of the arrow keys (RGP-5, RGP-6) and is still shown selected WHILE value is its value.
- **RGP-8** THE radio group SHALL take from required and optional what the form asks of the set, as a field group does (FGR-4), and SHALL NOT set the error condition itself because an answer is missing or for any other reason: error and errorText are the product's to set. WHILE error is true THE radio group SHALL draw errorText and the error parts of its frame (FGR-8), SHALL be exposed as invalid (RGP-10), and SHALL have every radio button it holds, selected or not, drawn in the radio button's own error form (RAD-26), as a field group in error marks each control that has an error condition (FGR-8): the refusal is the set's, said by the words below it and by the group's invalid state, and shown on every option, because any of them may be the answer that puts it right. A disabled radio button SHALL be drawn as disabled, without the error color (RAD-26), and THE radio group SHALL NOT expose a radio button as invalid or describe it by errorText: the group says both once (RGP-10). WHEN error becomes true, or errorText changes while error is true, and focus is on one of the group's radio buttons THE radio group SHALL have assistive technology announce errorText once, politely, and SHALL NOT move focus (FGR-9). A change of value SHALL NOT clear error.
- **RGP-9** WHERE the platform has forms that submit named values (the web) THE radio group SHALL take part in its form as one control: it SHALL submit value under its own name WHILE value is not the empty string and the group is not disabled, and nothing otherwise — also WHILE the radio button of that value is one the product disabled by itself, because the value is the group's and a radio button's disabled says who may change it; SHALL return to the value it was first given WHEN the form is reset, without emitting change; SHALL be disabled WHILE the form disables the set it is in; SHALL report a missing value to the form's own validation WHILE required is true and value is the empty string, in the platform's own words for an unanswered set of radio buttons where it has them, and otherwise in errorText, else requiredText, else label — never in words of Tanrei's; and its radio buttons SHALL submit nothing of their own. Enter on a focused radio button SHALL be left to the form (RAD-1). WHERE the platform has no such forms value and change are the whole of it.
- **RGP-10** THE radio group SHALL be exposed to assistive technology as the field group it is, in its radio-group kind, and SHALL add no group to it (FGR-25): one radio group that contains its radio buttons — named by label, whether or not the label is drawn; required WHILE required is true; invalid WHILE error is true; disabled WHILE disabled is true; read-only WHILE readOnly is true (RGP-20); saying its orientation where the platform's radio group has one; and described by, in this order, supportingText, errorText WHILE error is true, and optionalText WHILE optional is true, each new text exposed at once WHEN it changes (FGR-11). requiredText SHALL NOT be part of the description, because the required state carries it, and the requirement tag and the asterisk SHALL be kept from assistive technology as drawn parts. Each radio button SHALL expose its role, its checked state, its position in the group and the group's size as RAD-16 says, counted in the order given with disabled options included. WHERE the platform forms a radio group with a container of its own THE radio group SHALL be that container and SHALL NOT expose a second group around it. WHILE label is empty THE radio group SHALL still render and in debug builds report that the set has no accessible name (FGR-10).
- **RGP-11** WHEN a radio button is added to the group, removed from it or moved, or its value or its disabled changes, while the group is shown THE radio group SHALL lay out its radio buttons again at once, without a motion; SHALL select by value again (RGP-3), so that a radio button that arrives with the group's value is shown selected and value is kept WHEN the selected one leaves; SHALL give the disabled state it holds (RGP-7) to one that came and take it back from one that left; SHALL set the tab stop (RGP-6) and each position (RGP-10) again; SHALL emit no change; and SHALL leave focus on the radio button that has it.
- **RGP-12** THE radio group SHALL hold radio buttons and nothing else that can be operated. IF it holds no radio button THEN THE radio group SHALL draw its rows without one and in debug builds report it; IF it holds another control, or a radio button that names a group of its own (RAD-25), THEN in debug builds THE radio group SHALL report it. THE radio group SHALL NOT restyle a radio button or change how it answers hover, focus or a press: those stay the radio button's (RAD-7, RAD-8, RAD-11 to RAD-13).
- **RGP-13** WHILE the text size is enlarged THE radio group SHALL grow with its texts as a field group does (FGR-16): the label, the description, the error text and each option's label wrap and never clip, the requirement tag grows with its text, a horizontal row wraps and at 200% becomes a column where one line no longer holds two options (RGP-2), and no text SHALL be lost, lie over another part or need scrolling in two directions.
- **RGP-14** WHERE the platform draws with a person's own forced colors (the web's forced-colors mode, and a platform's equivalent where it has one) THE radio group SHALL draw its frame as a field group does there (FGR-17) — its texts in the platform's text color, its requirement tag with an edge — and SHALL rely on no color of its own to show an error: the error is carried by the words of errorText and by the invalid state (RGP-10), and its radio buttons are drawn there as out of error (RAD-27).
- **RGP-15** WHERE the layout direction is right-to-left THE radio group SHALL mirror its layout as a field group does (FGR-18): the label row, the description, the options and the error text start at the right edge, the requirement mark stands at the left of the label, and a horizontal row runs from right to left, the first option at the right; a column keeps its order from top to bottom. Each radio button mirrors itself (RAD-17), and Left Arrow and Right Arrow exchange what they do (RGP-5).
- **RGP-16** THE radio group SHALL take its layout direction from where it is used and SHALL have no direction setting of its own, as the field group (FGR-19) and each radio button (RAD-22) do; WHEN that direction changes while the radio group is shown THE radio group SHALL be drawn for the new direction at once, without a motion of its own, keeping its value, its selection and its focus, and the arrow keys SHALL follow the new direction at the next key (RGP-5).
- **RGP-17** THE radio group SHALL lay out its label, its description, its error text and the text of its requirement tag as the field group does (FGR-21): each as text of its own direction, isolated from the text around it, and placed and aligned by the layout direction, not by the text's own. Each option's label is the radio button's (RAD-23).
- **RGP-18** WHEN requiredMark or orientation names a value the radio group does not know THE radio group SHALL do with it what the field group does (FGR-22) — render with the prop's default (auto, vertical) — and in debug builds the unknown value SHALL be reported once.
- **RGP-19** THE radio group SHALL have no words of its own: requiredText and optionalText are the field group's, read as FGR-24 says — from the instance's prop and, WHILE that is empty, from the product's words of the same name, and from nowhere else. IF neither gives requiredText WHILE required is true and the required mark is tag THEN THE radio group SHALL show the asterisk of FGR-6 in the tag's place, as the field group does, and SHALL keep its required state (RGP-10), which needs no word. IF neither gives optionalText WHILE optional is true THEN THE radio group SHALL show no tag and SHALL add nothing to the description for it. In debug builds the missing words SHALL be reported once.
- **RGP-20** WHILE readOnly is true and disabled is false THE radio group SHALL make every radio button it holds read-only as the radio button's own readOnly does (RAD-28), without changing the readOnly the product gave any of them: the person can enter the group at its stop, which stays the selected radio button (RGP-6), move focus among its enabled radio buttons with the arrow keys as RGP-5 says while selecting none, and read each one's label, checked state and position, and cannot change value by any input. THE radio group SHALL then emit no change, SHALL keep value, SHALL be exposed as read-only beside its other states (RGP-10), SHALL be submitted with its form as RGP-9 says, SHALL NOT report a missing value to the form's own validation, because the person cannot give one, and SHALL draw its frame and its radio buttons from their enabled tokens, never the disabled ones. WHILE disabled is true as well, disabled wins (RGP-7).
- **RGP-21** WHERE the platform has ARIA attributes (the web), WHEN the product sets an aria- attribute on the host, by the attribute or by the ARIA property that reflects it, THE radio group SHALL move it to the data-aria- attribute of the same name, so that the host is no second node with its name, description or state, and SHALL expose it on the radio group of the field group it is (RGP-10) — an id reference by the elements it names in the host's tree or a tree around it, a description after its own — except those the radio group owns (aria-label, aria-labelledby, aria-disabled, aria-required, aria-invalid, aria-errormessage, aria-readonly), which it SHALL move and not expose: its name is label and its states are its props (RGP-10, RGP-20). WHEN the product removes the aria- attribute or its data-aria- twin, or sets the ARIA property that reflects it (ariaLabel, ariaDescribedByElements…) to null, THE radio group SHALL take it off that element. WHEN the product sets an aria- attribute the radio group owns THE radio group SHALL report it in debug builds.

### Tokens

As written in the token documents (DTCG): an alias in braces names the token it takes its value from, which each design system resolves. On the web each token is a CSS custom property: `--tanrei` and the name after `tanrei`, joined by hyphens (`tanrei.comp.field-group.…` → `--tanrei-comp-field-group-…`).

#### `tanrei.comp.field-group`

| Token | Type | Value |
| --- | --- | --- |
| `comp.field-group.label.typescale` | `typography` | `{tanrei.sys.typescale.label}` |
| `comp.field-group.label.gap` | `dimension` | `{tanrei.sys.space.space100}` |
| `comp.field-group.requirement.mark` | `number` | `{tanrei.sys.behavior.requirement-mark}` |
| `comp.field-group.requirement.gap` | `dimension` | `{tanrei.sys.space.space100}` |
| `comp.field-group.requirement.asterisk-gap` | `dimension` | `{tanrei.sys.space.space25}` |
| `comp.field-group.supporting-text.typescale` | `typography` | `{tanrei.sys.typescale.label-small}` |
| `comp.field-group.supporting-text.gap` | `dimension` | `{tanrei.sys.space.space50}` |
| `comp.field-group.error-text.gap` | `dimension` | `{tanrei.sys.space.space50}` |
| `comp.field-group.gap.controls` | `dimension` | `{tanrei.sys.space.space100}` |
| `comp.field-group.gap.fields` | `dimension` | `{tanrei.sys.space.space300}` |
| `comp.field-group.gap-inline` | `dimension` | `{tanrei.sys.space.space200}` |
| `comp.field-group.field.min-width` | `dimension` | `144px` |
| `comp.field-group.standard.label.color` | `color` | `{tanrei.sys.color.on-surface}` |
| `comp.field-group.standard.supporting-text.color` | `color` | `{tanrei.sys.color.on-surface-variant}` |
| `comp.field-group.standard.required-asterisk.color` | `color` | `{tanrei.sys.color.primary}` |
| `comp.field-group.standard.error-text.color` | `color` | `{tanrei.sys.color.error}` |
| `comp.field-group.standard.error.label.color` | `color` | `{tanrei.sys.color.on-surface}` |
| `comp.field-group.standard.error.supporting-text.color` | `color` | `{tanrei.sys.color.on-surface-variant}` |
| `comp.field-group.standard.error.required-asterisk.color` | `color` | `{tanrei.sys.color.primary}` |

Per-state tokens, valued by the design system's pattern rules (not written by hand):

- `comp.field-group.<variant>.<state>.<property>` for the variants `standard`, the states `disabled` and the properties `label.color`, `supporting-text.color`, `required-asterisk.color`, `error-text.color`, `error.label.color`, `error.supporting-text.color`, `error.required-asterisk.color`.

रेडियो ग्रुप के अपने कोई टोकन नहीं हैं। ऊपर की टेबल में फ़ील्ड ग्रुप के टोकन हैं, और उसका फ़्रेम फ़ील्ड ग्रुप ही बनाता है: जो डिज़ाइन सिस्टम फ़ील्ड ग्रुप की स्टाइल बदलता है, वह उसके साथ हर रेडियो ग्रुप की स्टाइल बदलता है। हर रेडियो बटन रेडियो बटन के अपने टोकन से बनता है।

### हर सदस्य क्या देता है

| क्या बनता है | किसका है |
| --- | --- |
| लेबल, ज़रूरी या वैकल्पिक का निशान, विवरण, त्रुटि टेक्स्ट, पंक्तियों के बीच की और रेडियो बटन के बीच की दूरियाँ | [फ़ील्ड ग्रुप](https://tanrei.chnotchy.com/hi/components/field-group/) का, `comp.field-group.*` से |
| हर रेडियो बटन: रिंग, फ़िल, लेबल, स्टेट लेयर, फ़ोकस रिंग, अक्षम रूप | [रेडियो बटन](https://tanrei.chnotchy.com/hi/components/radio-button/) का, `comp.radio-button.*` से |
| और कुछ भी | किसी का नहीं: रेडियो ग्रुप कुछ नहीं बनाता |

### किसी एक ग्रुप को अलग करना

डिज़ाइन सिस्टम फ़्रेम की स्टाइल एक बार तय करता है, हर फ़ील्ड ग्रुप, रेडियो ग्रुप और चेकबॉक्स ग्रुप के लिए। किसी एक इंस्टेंस को उसी इंस्टेंस पर अलग किया जाता है: वेब पर रेडियो ग्रुप पर सेट किया गया फ़ील्ड ग्रुप का टोकन उसके भीतर के फ़्रेम तक पहुँचता है।

```html
<tanrei-radio-group label="डिलीवरी"
  style="--tanrei-comp-field-group-gap-controls: 12px">…</tanrei-radio-group>
```

### वेब क्या अलग ढंग से बनाता है

- एलिमेंट के शैडो रूट में एक स्लॉट के चारों ओर एक `<tanrei-field-group kind="radio-group">` है। रेडियो बटन आपके अपने चाइल्ड बने रहते हैं। एलिमेंट को इंपोर्ट करने से दोनों सदस्य डिफ़ाइन हो जाते हैं।
- एलिमेंट फ़ॉर्म से जुड़ा एलिमेंट है। वह `name` और `form` लेता है, और `name` के नाम से `value` सबमिट करता है, तब भी जब चयनित रेडियो बटन वह हो जिसे आपने अकेले अक्षम किया है। उसके रेडियो बटन कुछ सबमिट नहीं करते, उनका `name` चाहे जो हो। वह रीसेट होने पर अपने `value` ऐट्रिब्यूट पर लौटता है, अक्षम `<fieldset>` के साथ अक्षम होता है, और जब तक `required` सेट है और `value` ख़ाली है, बताता है कि मान नहीं है, उन्हीं शब्दों में जो ब्राउज़र बिना जवाब वाले रेडियो बटन के सेट के लिए इस्तेमाल करता है।
- `change` एक CustomEvent है जिसका `detail.value` नया मान है; `input` उससे पहले फ़ायर होता है। ग्रुप के भीतर के रेडियो बटन पर लगा लिसनर इनमें से कोई नहीं सुनता।
- भाग: `field-group` फ़्रेम है, और उसके भागों के नाम यहाँ वही हैं जो एक स्तर नीचे हैं: `label`, `requirement-label`, `supporting-text`, `error-text`। आपके अपने रेडियो बटन की स्टाइल वैसे ही दी जाती है जैसे कहीं भी, `tanrei-radio-button::part(…)` से।
- एलिमेंट पर ख़ुद फ़ोकस नहीं जा सकता। `focus()` उस रेडियो बटन पर जाता है जो पड़ाव है, और पेज का अपना `<label for>` फ़ोकस वहीं ले जाता है।
- एलिमेंट का कोई रोल नहीं है: रेडियो ग्रुप उसके भीतर का फ़ील्ड ग्रुप है। उसे `label` से नाम दें, और जहाँ लेबल कहीं और दिखाया गया है वहाँ `label-hidden` के साथ, और कभी `aria-label` से नहीं, जो यहाँ किसी चीज़ को नाम नहीं देता।
- ऐट्रिब्यूट kebab-case में हैं: `label-hidden`, `supporting-text`, `error-text`, `required-mark`, `required-text`, `optional-text`।
- एलिमेंट के डिफ़ाइन होने से पहले, और स्क्रिप्ट के बिना, उसका अपना कुछ नहीं दिखता: रेडियो बटन सादे कॉन्टेंट के रूप में दिखते हैं। जिस पेज को स्क्रिप्ट के बिना चलना है, वह एक ही `name` वाले नेटिव रेडियो बटन का नेटिव `<fieldset>` लिखता है, जो वही एंट्री सबमिट करता है।

## दिशानिर्देश

### कब रेडियो ग्रुप, और कब कुछ और

| व्यक्ति | क्या इस्तेमाल करें |
| --- | --- |
| किसी फ़ॉर्म या सेटिंग में थोड़े-से विकल्पों में से एक मान देता है, जो सभी एक साथ देखने लायक़ हैं और ज़्यादा से ज़्यादा पाँच के आसपास हैं | रेडियो ग्रुप। |
| बदलता है कि नीचे क्या दिखे: कौन-सा व्यू, कौन-सा नमूना, कौन-सी अवधि | [टैब](https://tanrei.chnotchy.com/hi/components/tabs/)। |
| बहुत-से विकल्पों में से एक मान देता है, या जगह कम है | [सिलेक्ट](https://tanrei.chnotchy.com/hi/components/select/)। |
| एक जवाब के रूप में कई मान देता है | [चेकबॉक्स ग्रुप](https://tanrei.chnotchy.com/hi/components/checkbox-group/)। |
| वही सेट हाथ से लिखता है, ताकि उसे ऐसे रखे जैसे ग्रुप नहीं रखता | ऐसा [फ़ील्ड ग्रुप](https://tanrei.chnotchy.com/hi/components/field-group/) जिसका `kind` `radio-group` है, एक ही नाम के रेडियो बटन के चारों ओर ([एक स्तर नीचे](https://tanrei.chnotchy.com/hi/components/radio-group/#%E0%A4%8F%E0%A4%95-%E0%A4%B8%E0%A5%8D%E0%A4%A4%E0%A4%B0-%E0%A4%A8%E0%A5%80%E0%A4%9A%E0%A5%87))। |
| किसी एक चीज़ को चालू या बंद करता है, तुरंत | [स्विच](https://tanrei.chnotchy.com/hi/components/switch/)। |
| साथ-साथ रखे ऐसे बटन दबाता है जिनमें से हर एक अपने आप चालू-बंद होता है | [बटन ग्रुप](https://tanrei.chnotchy.com/hi/components/button-group/)। |

रेडियो ग्रुप और टैब के बीच की कसौटी यह है कि चुनाव क्या करता है, यह नहीं कि वह कैसा दिखता है: जो मान स्टोर या सबमिट किया जाता है, वह रेडियो ग्रुप है; क्या देखना है, इसका चुनाव टैब है।

### मान

- `value` चयनित रेडियो बटन का मान है, और जब तक कोई चयनित नहीं है, ख़ाली स्ट्रिंग। चुनने के लिए इसे सेट करें; व्यक्ति का चयन जानने के लिए `change` को सुनें।
- `change` हर चयन पर एक बार एमिट होता है, ग्रुप से, उस मान के साथ जो ग्रुप में पहले से है। जब आप `value` सेट करते हैं, या जब चयनित विकल्प को दोबारा सक्रिय किया जाता है, तब वह एमिट नहीं होता।
- व्यक्ति रेडियो ग्रुप को “कुछ भी चयनित नहीं” पर वापस नहीं ला सकता। जहाँ जवाब न देना भी एक असली जवाब है, वहाँ ऐसा विकल्प जोड़ें जो यही कहे (“कोई नहीं”, “कोई पसंद नहीं”), या एक विकल्प को चयनित रखकर शुरू करें।
- चयन फ़ोकस के साथ चलता है: ऐरो कुंजी आगे बढ़ते ही चुन लेती है। अगर चयन का असर तुरंत होता है, और वह भारी है या सामने दिखता है, तो जवाब `change` से नहीं, उसकी पुष्टि करने वाले बटन से लें।
- जो मान किसी रेडियो बटन का नहीं है, उसके साथ कोई विकल्प चयनित नहीं दिखता, और वह मान रखा रहता है: विकल्प बाद में आ सकता है।

### लेआउट

- `orientation="vertical"` (डिफ़ॉल्ट) विकल्पों को एक कॉलम में ऊपर-नीचे रखता है। इसी को तरजीह दें।
- `orientation="horizontal"` उन्हें ऐसी पंक्ति में रखता है जो अगली पंक्ति में जा सकती है। इसे दो या तीन छोटे विकल्पों के लिए रखें: पंक्ति के अगली पंक्ति में जाते ही यह देखना मुश्किल हो जाता है कि कौन-सा लेबल किस रिंग का है।

ऐरो कुंजियाँ दोनों में एक जैसी हैं, और दिए गए क्रम से चलती हैं, इससे नहीं कि अगली पंक्ति में गई पंक्ति ने किसी विकल्प को कहाँ रखा।

### त्रुटियाँ

`error` और `errorText` सेट करना आपका काम है: ग्रुप कभी ख़ुद को त्रुटि में नहीं रखता, तब भी नहीं जब वह ज़रूरी हो और उसका जवाब न दिया गया हो। त्रुटि वाला ग्रुप विकल्पों के नीचे त्रुटि टेक्स्ट दिखाता है, अमान्य के रूप में दिया जाता है, और हर रेडियो बटन को उसके त्रुटि वाले रूप में दिखाता है: रिंग और बिंदु त्रुटि का रंग लेते हैं, जैसे चेकबॉक्स ग्रुप के बॉक्स लेते हैं। अक्षम विकल्प त्रुटि का रंग नहीं दिखाता, क्योंकि वह ऐसा जवाब नहीं हो सकता जो त्रुटि को ठीक कर दे। रेडियो बटन ख़ुद अमान्य के रूप में नहीं दिए जाते; यह बात ग्रुप एक ही बार कहता है।

मान बदलने से त्रुटि नहीं हटती। जब जवाब स्वीकार करने लायक़ हो, तब उसे हटाएँ।

### केवल पढ़ने के लिए

केवल पढ़ने वाला ग्रुप अपना उत्तर वहीं दिखाता है, ताकि व्यक्ति उसे पढ़ सके पर बदल न सके: जैसे समीक्षा का चरण, या ऐसा चुनाव जिसे कुछ ही लोग बदल सकते हैं। Tab अब भी इसमें चुने हुए रेडियो बटन पर प्रवेश करता है, ऐरो कुंजियाँ विकल्पों के बीच चलती हैं पर कोई नहीं चुनतीं, और मान फ़ॉर्म के साथ सबमिट होता है। उत्तर दिए बिना छोड़ा गया ज़रूरी, केवल पढ़ने वाला ग्रुप फ़ॉर्म से अस्वीकार नहीं होता, क्योंकि व्यक्ति उसका उत्तर नहीं दे सकता। यह सक्षम ग्रुप की तरह बनता है, बस होवर और दबाने की प्रतिक्रिया के बिना।

### करें

- सेट को उस सवाल से नाम दें जिसका जवाब उसके विकल्प देते हैं: “डिलीवरी”।
- हर रेडियो बटन को ऐसा `value` दें जो ग्रुप में किसी और का न हो, और उसका अपना लेबल दें।
- विकल्प थोड़े रखें। एक विकल्प हो तो वह चेकबॉक्स है; बहुत-से हों तो सिलेक्ट।

### न करें

- रेडियो ग्रुप में ऐसी कोई और चीज़ न रखें जिसे ऑपरेट किया जा सके: न चेकबॉक्स, न बटन, न फ़ील्ड।
- रेडियो ग्रुप के रेडियो बटन को `name` न दें। वह `name` अनदेखा किया जाता है: ग्रुप ही उनका ग्रुप है।
- रेडियो ग्रुप को लेबल देने के लिए उसे फ़ील्ड या फ़ील्ड ग्रुप में न लपेटें। उसका अपना लेबल है। रेडियो ग्रुप ऐसे फ़ील्ड ग्रुप का एक सदस्य हो सकता है जो किसी बड़े सेट को नाम देता है (“शिपिंग”)।
- ग्रुप को अक्षम करके सेट को केवल पढ़ने वाला न बनाएँ: अक्षम ग्रुप कुछ भी सबमिट नहीं करता और उस तक पहुँचा नहीं जा सकता। `readOnly` इस्तेमाल करें, जो सेट को फ़ोकस क्रम में रखता है और उसका मान सबमिट करता है।

## सुलभता

### कंपोनेंट क्या सँभालता है

- एक रेडियो ग्रुप, जिसके भीतर उसके रेडियो बटन हैं और जिसका नाम `label` से आता है, चाहे वह दिखाया गया हो या `labelHidden` से छिपाया गया हो।
- ज़रूरी स्टेट, जब तक `required` सेट है; अमान्य स्टेट, जब तक `error` true है; अक्षम स्टेट, जब तक `disabled` true है; और उसका ओरिएंटेशन।
- `readOnly` true रहने पर केवल पढ़ने की अवस्था। तब हर रेडियो बटन केवल पढ़ने वाला होता है: Tab और ऐरो कुंजियाँ फ़ोकस अब भी ले जाती हैं, और व्यक्ति कुछ भी करे, `value` नहीं बदलता।
- ग्रुप का विवरण `supportingText` है, फिर `errorText` जब तक `error` true है, फिर `optionalText` जब तक वह वैकल्पिक है। `requiredText` उसका हिस्सा नहीं है: यह बात ज़रूरी स्टेट कहता है।
- हर रेडियो बटन सेट में अपनी जगह और सेट का साइज़ बताता है, जिसमें अक्षम विकल्प भी गिने जाते हैं।
- फ़ोकस के क्रम में एक पड़ाव: चयनित रेडियो बटन, या पहला सक्षम रेडियो बटन। Tab ग्रुप में वहीं प्रवेश करती है और वहीं से बाहर जाती है; ऐरो कुंजियाँ उसके भीतर चलती हैं, अक्षम विकल्प को छोड़ देती हैं और दोनों सिरों पर घूमकर दूसरे सिरे पर पहुँचती हैं। दाएँ से बाएँ वाले लेआउट में Left Arrow और Right Arrow आपस में बदल जाती हैं।
- `disabled` हर रेडियो बटन को अक्षम करता है। सक्षम ग्रुप कभी उस रेडियो बटन को सक्षम नहीं करता जिसे आपने ख़ुद अक्षम किया है: ऐरो कुंजियाँ और Tab उसे छोड़ देती हैं, गिनती में उसकी जगह बनी रहती है, और जब तक `value` उसका मान है, वह चयनित रहता है।
- जब फ़ोकस किसी रेडियो बटन पर रहते हुए कोई त्रुटि आती है या उसके शब्द बदलते हैं, तो उसे एक बार, बिना टोके (polite), पढ़कर सुनाया जाता है। त्रुटि की वजह से फ़ोकस कभी नहीं हटता।
- ज़रूरी या वैकल्पिक का टैग और तारांकन सहायक तकनीक से छिपे रहते हैं।
- 200% टेक्स्ट पर हर टेक्स्ट रैप होता है, पंक्ति कॉलम बन जाती है, और कुछ भी नहीं कटता।
- फ़ोर्स्ड कलर्स में हर टेक्स्ट सिस्टम के टेक्स्ट का रंग लेता है और ज़रूरी या वैकल्पिक के टैग को एक किनारा मिलता है।
- दाएँ से बाएँ वाले लेआउट में पंक्तियाँ दाईं ओर से शुरू होती हैं, विकल्पों की पंक्ति दाईं ओर से चलती है, और हर टेक्स्ट अपनी दिशा बनाए रखता है।
- वेब पर यह अपने फ़ॉर्म का एक कंट्रोल है: वह `name` के नाम से `value` सबमिट करता है, रीसेट होने पर अपने पहले मान पर लौटता है, अक्षम `fieldset` के साथ अक्षम होता है, और जब तक वह ज़रूरी है और उसका जवाब नहीं दिया गया, फ़ॉर्म के अपने वैलिडेशन को बताता है कि मान नहीं है।
- बिना रेडियो बटन का ग्रुप, किसी दूसरे कंट्रोल वाला ग्रुप, बिना लेबल का ग्रुप, एक ही मान के दो विकल्पों वाला ग्रुप, या ऐसे मान वाला ग्रुप जो किसी विकल्प का नहीं है, डीबग बिल्ड में रिपोर्ट किया जाता है।

वेब पर ज्ञात कमियाँ:

- एलिमेंट के डिफ़ाइन होने से पहले रेडियो बटन पेज पर ग्रुप के लेबल, विवरण, लेआउट और चयन के बिना रहते हैं।

### आपको क्या करना है

- ग्रुप को `label` दें।
- जवाब को ख़ुद वैलिडेट करें, `error` सेट करें, और `errorText` ऐसा लिखें कि वह बताए कि जवाब कैसे ठीक किया जाए।
- जिस ज़रूरी ग्रुप का जवाब नहीं दिया गया, उसे फ़ॉर्म का अपना वैलिडेशन ब्राउज़र के शब्दों में रोकता है, जैसे सिलेक्ट को। इसे अपने प्रोडक्ट के शब्दों में कहने के लिए वैसा करें जैसा GOV.UK करता है: फ़ॉर्म पर `novalidate` लगाएँ, और सबमिट होने पर ग्रुप पर `error` और `errorText` सेट करें।
- आवश्यकता के शब्द दें: ग्रुप पर `required-text` और `optional-text`, या `setWords({ requiredText, optionalText })` से पूरे प्रॉडक्ट के लिए एक बार। Tanrei अपना कोई शब्द साथ नहीं देता: `requiredText` के बिना टैग की जगह तारांकन दिखता है, और `optionalText` के बिना न कोई टैग दिखता है, न कुछ कहा जाता है। देखें [प्रॉडक्ट के शब्द](https://tanrei.chnotchy.com/hi/foundations/words/)।
- सबमिट विफल होने के बाद फ़ॉर्म के ऊपर भी बताएँ कि क्या अस्वीकार हुआ, और ग्रुप का लिंक दें: त्रुटि की स्थिति वाला एक लाइव [कॉलआउट](https://tanrei.chnotchy.com/hi/components/callout/)।
