Checkbox
Native checkbox ustidagi belgilash katakchasi: label, izoh va qisman (indeterminate) holat.
'use client';
import { Checkbox } from '@akhatmirzo/ui';
export default function CheckboxBasic() {
return (
<div className="flex flex-col gap-3">
<Checkbox label="Shartlarga roziman" />
<Checkbox label="Meni eslab qol" defaultChecked />
<Checkbox label="Qisman tanlangan" checked="indeterminate" />
</div>
);
}
Import
import { Checkbox } from '@akhatmirzo/ui';Qachon ishlatish
- "Saqlash" tugmasi bor formalarda — tanlov forma yuborilganda kuchga kiradi. Darhol ta'sir
qiladigan sozlama uchun
Switchishlating. - Bir nechta mustaqil tanlov uchun — bildirishnoma kanallari, filtrlar. Bir nechtadan faqat
bittasi tanlanadigan bo'lsa —
RadioGroup. - Rozilik uchun — "Shartlarga roziman". Majburiy bo'lsa,
Fielddagirequiredvaerrorbilan. - Label'ni ijobiy shaklda yozing: "Xabarnomalarni yuborish", "Xabarnomalarni yubormaslik" emas.
O'lchamlar
sm — 16px, md (standart) — 20px. Ikkalasida ham ko'rinmas bosish maydoni katakdan kattaroq.
'use client';
import { Checkbox } from '@akhatmirzo/ui';
export default function CheckboxSizes() {
return (
<div className="flex flex-wrap items-start gap-6">
<Checkbox size="sm" label="Kichik · 16" defaultChecked />
<Checkbox size="md" label="O'rta · 20" defaultChecked />
</div>
);
}
Izoh bilan
description label ostida kichikroq, xira matnda chiqadi va ekran o'quvchiga
aria-describedby orqali bog'lanadi.
'use client';
import { Checkbox } from '@akhatmirzo/ui';
export default function CheckboxDescription() {
return (
<div className="flex max-w-sm flex-col gap-4">
<Checkbox
label="Yangiliklar"
description="Haftasiga bir marta yangi imkoniyatlar haqida xat"
defaultChecked
/>
<Checkbox
size="sm"
label="Qurilmani eslab qolish"
description="30 kun davomida qayta kod so'ralmaydi"
/>
</div>
);
}
Qisman tanlangan holat
checked="indeterminate" — "−" belgisi. Odatda "hammasini tanlash" katakchasida: bolalarning
bir qismi tanlangan bo'lsa. onCheckedChange faqat boolean qaytaradi — qisman holatni o'zingiz
hisoblaysiz.
'use client';
import { Checkbox, type CheckedState } from '@akhatmirzo/ui';
import { useState } from 'react';
const channels = ['Email', 'SMS', 'Telegram'];
export default function CheckboxSelectAll() {
const [selected, setSelected] = useState<string[]>(['Email']);
const all: CheckedState =
selected.length === channels.length ? true : selected.length > 0 ? 'indeterminate' : false;
return (
<div className="flex flex-col gap-3">
<Checkbox
label="Barcha kanallar"
checked={all}
onCheckedChange={(checked) => setSelected(checked ? channels : [])}
/>
<div className="flex flex-col gap-3 pl-7">
{channels.map((channel) => (
<Checkbox
key={channel}
label={channel}
checked={selected.includes(channel)}
onCheckedChange={(checked) =>
setSelected((s) => (checked ? [...s, channel] : s.filter((c) => c !== channel)))
}
/>
))}
</div>
</div>
);
}
Holatlar
disabled — katak va label xiralashadi, bosilmaydi. invalid — chegara qizil, input'da
aria-invalid.
'use client';
import { Checkbox } from '@akhatmirzo/ui';
export default function CheckboxStates() {
return (
<div className="flex flex-wrap items-center gap-6">
<Checkbox label="O'chirilgan" disabled />
<Checkbox label="O'chirilgan, belgilangan" disabled defaultChecked />
<Checkbox label="Xato" invalid />
</div>
);
}
Field bilan
Field xato va izohni katakchaga ulaydi; error bo'lsa, invalid avtomatik yoqiladi. Katakni
belgilab ko'ring.
Davom etish uchun rozilik kerak
'use client';
import { Checkbox, Field } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function CheckboxWithField() {
const [agree, setAgree] = useState(false);
return (
<div className="max-w-sm">
<Field
label="Foydalanish shartlari"
required
error={agree ? undefined : 'Davom etish uchun rozilik kerak'}
>
<Checkbox label="Shartlar bilan tanishdim" checked={agree} onCheckedChange={setAgree} />
</Field>
</div>
);
}
Props
Checkbox qolgan barcha <input> atributlarini (name, value, form, onChange ...)
qabul qiladi; ref ichki <input> ga tushadi. className esa ildiz <label> ga beriladi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
checked | boolean | 'indeterminate' | — | Boshqariladigan qiymat |
defaultChecked | boolean | 'indeterminate' | false | Boshlang'ich qiymat (boshqarilmaydigan rejim) |
onCheckedChange | (checked: boolean) => void | — | Foydalanuvchi belgilaganda yoki olib tashlaganda |
label | ReactNode | — | Katak yonidagi matn |
description | ReactNode | — | Label ostidagi izoh |
size | 'sm' | 'md' | 'md' | O'lcham: 16 / 20px |
invalid | boolean | — | Xato holati (Field ichida error bo'lsa avtomatik) |
disabled | boolean | — | O'chirilgan holat |
className | string | — | Ildiz <label> elementi klassi |
Data atributlari
Ildiz <label> da:
| Atribut | Qiymat |
|---|---|
data-state | checked · unchecked · indeterminate |
data-size | sm · md |
data-disabled | disabled bo'lganda mavjud |
data-invalid | Xato holatida mavjud |
Accessibility
- Native
<input type="checkbox">—Spacebilan almashtiriladi, formaga oddiy checkbox kabi yuboriladi, brauzer tekshiruvi (required) ishlaydi. - Label bosilganda ham belgilanadi — butun komponent
<label>ichida. - Qisman holat ekran o'quvchiga
aria-checked="mixed"bilan aytiladi. - Fokus halqasi faqat klaviatura bilan kelganda chiqadi.
- Label'siz katakcha (masalan, jadval qatorida) uchun
aria-labelbering.