RadioGroup
Bir nechta variantdan bittasini tanlash: native radio'lar, strelkalar bilan yurish, card ko'rinishi.
'use client';
import { Radio, RadioGroup } from '@akhatmirzo/ui';
export default function RadioGroupBasic() {
return (
<RadioGroup aria-label="To'lov usuli" defaultValue="click">
<Radio value="click" label="Click" />
<Radio value="payme" label="Payme" />
<Radio value="cash" label="Naqd pul" />
</RadioGroup>
);
}
Import
import { Radio, RadioGroup } from '@akhatmirzo/ui';Qachon ishlatish
- 2–5 ta variantdan bittasi tanlanadigan bo'lsa — to'lov usuli, yetkazib berish turi, tarif. Hamma variant ko'rinib turadi, solishtirish oson.
- Variantlar ko'p bo'lsa (6 tadan ortiq) —
SelectyokiComboboxjoyni tejaydi. - Bir nechtasini tanlash mumkin bo'lsa —
Checkbox. - Tanlovga narx yoki izoh kerak bo'lsa —
variant="card": har bir variant katta bosiladigan karta. - Guruhga nom bering —
Fieldninglabeli yokiaria-label.
Yo'nalish
orientation="vertical" (standart) — ustma-ust. horizontal — bir qatorda, joy yetmasa keyingi
qatorga o'tadi. Qisqa variantlar uchun.
'use client';
import { Radio, RadioGroup } from '@akhatmirzo/ui';
export default function RadioGroupHorizontal() {
return (
<RadioGroup aria-label="Yetkazib berish" orientation="horizontal" defaultValue="express">
<Radio value="express" label="Tezkor" />
<Radio value="standard" label="Oddiy" />
<Radio value="pickup" label="Olib ketish" />
</RadioGroup>
);
}
O'lchamlar
size guruhga beriladi va barcha radio'larga o'tadi: sm — 16px, md (standart) — 20px.
'use client';
import { Radio, RadioGroup } from '@akhatmirzo/ui';
export default function RadioGroupSizes() {
return (
<div className="flex flex-wrap items-start gap-10">
<RadioGroup aria-label="Interfeys tili (kichik)" size="sm" defaultValue="uz">
<Radio value="uz" label="O'zbekcha" />
<Radio value="ru" label="Ruscha" description="Kirill yozuvida" />
</RadioGroup>
<RadioGroup aria-label="Interfeys tili (o'rta)" defaultValue="uz">
<Radio value="uz" label="O'zbekcha" />
<Radio value="ru" label="Ruscha" description="Kirill yozuvida" />
</RadioGroup>
</div>
);
}
Card varianti
variant="card" — har bir Radio chegarali karta, tanlanganda primary rangda ajraladi. Narx,
tarif va to'lov usullari uchun qulay: label va izoh katta maydonda.
Tanlangan tarif: pro
'use client';
import { Radio, RadioGroup } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function RadioGroupCard() {
const [plan, setPlan] = useState('pro');
return (
<div className="flex w-full max-w-md flex-col gap-3">
<RadioGroup aria-label="Tarif" variant="card" value={plan} onValueChange={setPlan}>
<Radio value="free" label="Bepul" description="1 ta do'kon, asosiy imkoniyatlar" />
<Radio
value="pro"
label="Pro · 149 000 so'm"
description="Cheksiz do'konlar va hisobotlar"
/>
<Radio value="team" label="Jamoa" description="Tez orada" disabled />
</RadioGroup>
<p className="text-sm text-text-muted">Tanlangan tarif: {plan}</p>
</div>
);
}
Holatlar
disabled butun guruhga yoki bitta Radio ga beriladi. invalid — doiralar chegarasi qizil,
guruh va radio'larda aria-invalid.
'use client';
import { Radio, RadioGroup } from '@akhatmirzo/ui';
export default function RadioGroupStates() {
return (
<div className="flex flex-wrap items-start gap-10">
<RadioGroup aria-label="Butun guruh o'chirilgan" disabled defaultValue="a">
<Radio value="a" label="Tanlangan" />
<Radio value="b" label="Tanlanmagan" />
</RadioGroup>
<RadioGroup aria-label="Bitta variant o'chirilgan">
<Radio value="a" label="Omborda bor" />
<Radio value="b" label="Tugagan" disabled />
</RadioGroup>
<RadioGroup aria-label="Xato holati" invalid>
<Radio value="yes" label="Ha" />
<Radio value="no" label="Yo'q" />
</RadioGroup>
</div>
);
}
Field bilan
Field ichida guruh label'ga aria-labelledby orqali bog'lanadi, izoh va xato
aria-describedby ga tushadi; required, disabled va xato holati radio'larga o'tadi.
Usulni tanlang
'use client';
import { Field, Radio, RadioGroup } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function RadioGroupWithField() {
const [value, setValue] = useState<string>();
return (
<Field label="Yetkazib berish" required error={value ? undefined : 'Usulni tanlang'}>
<RadioGroup value={value} onValueChange={setValue}>
<Radio value="courier" label="Kuryer" description="Ertaga, 25 000 so'm" />
<Radio value="pickup" label="Olib ketish" description="Bugun, bepul" />
</RadioGroup>
</Field>
);
}
Props
RadioGroup
RadioGroup qolgan barcha <div> atributlarini (aria-label, className ...) qabul qiladi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
value | string | — | Boshqariladigan qiymat |
defaultValue | string | — | Boshlang'ich qiymat (boshqarilmaydigan rejim) |
onValueChange | (value: string) => void | — | Boshqa variant tanlanganda |
orientation | 'vertical' | 'horizontal' | 'vertical' | Joylashuv va aria-orientation |
variant | 'default' | 'card' | 'default' | card — har bir variant bosiladigan karta |
size | 'sm' | 'md' | 'md' | Doira o'lchami: 16 / 20px |
name | string | — | Native radio'lar uchun umumiy name (berilmasa avtomatik) |
disabled | boolean | — | Butun guruhni o'chiradi |
required | boolean | — | Majburiy tanlov |
invalid | boolean | — | Xato holati (Field ichida error bo'lsa avtomatik) |
Radio
Radio qolgan <input> atributlarini qabul qiladi; ref ichki <input> ga, className —
ildiz <label> ga. Faqat RadioGroup ichida ishlaydi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
valuemajburiy | string | — | Variant qiymati |
label | ReactNode | — | Doira yonidagi matn |
description | ReactNode | — | Label ostidagi izoh |
disabled | boolean | — | Faqat shu variantni o'chiradi |
className | string | — | Ildiz <label> elementi klassi |
Data atributlari
| Element | Atribut |
|---|---|
RadioGroup | data-orientation, data-variant, data-size, data-invalid, data-disabled |
Radio | data-state (checked · unchecked), data-disabled |
Accessibility
- Native radio'lar bir
namebilan — klaviatura xatti-harakati brauzerniki:Tabguruhga kiradi va chiqadi,↑↓/←→variantlar orasida yuradi va tanlaydi. role="radiogroup"vaaria-orientation;Fieldichida nomaria-labelledbyorqali label'dan olinadi.- Holatlar guruhda
aria-required,aria-disabled,aria-invalidbilan aytiladi. - Izohlar har bir radio'ga
aria-describedbyorqali bog'langan. - Card variantida fokus halqasi butun kartaga chiziladi.