@akhatmirzo/ui

Accordion

Yig'iladigan bo'limlar: FAQ, sozlamalar va uzun formalarni ixcham ko'rsatish uchun.

Toshkent bo'ylab 1 kun, viloyatlarga 2–3 ish kuni.

Import

import { Accordion } from '@akhatmirzo/ui';

Qachon ishlatish

  • Ko'p savol-javob (FAQ) — foydalanuvchi faqat kerakli savolni ochadi, sahifa qisqa qoladi.
  • Sozlamalar va uzun formalar — bo'limlarga bo'lib, hammasini birdan ko'rsatmaslik.
  • Asosiy kontentni yashirmang. Foydalanuvchi albatta ko'rishi kerak bo'lgan ma'lumot ochiq tursin — accordion ichidagi matnni ko'pchilik o'qimaydi.
  • Bir vaqtda faqat bitta bo'lim ko'rinsin desangiz va bo'limlar teng ahamiyatli bo'lsa, Tabs ham mos keladi.

Tuzilishi

Eng oddiy yo'l — Accordion.Item ga title berish: sarlavha va kontent avtomatik chiziladi, children kontentga tushadi.

<Accordion defaultValue="delivery">
  <Accordion.Item value="delivery" title="Yetkazib berish qancha vaqt oladi?">
    Toshkent bo'ylab 1 kun, viloyatlarga 2–3 ish kuni.
  </Accordion.Item>
</Accordion>

Sarlavhaga o'z kontentingizni (badge, ikonka) qo'yish kerak bo'lsa, title bermang va Accordion.Trigger + Accordion.Content ni o'zingiz yozing (pastda "Kompozitsiya").

Variantlar

VariantKo'rinish
separatedHar bir bo'lim alohida karta, orasida 8px (standart)
borderedHammasi bitta kartada, bo'limlar chiziq bilan ajralgan
ghostFonsiz, faqat ajratuvchi chiziqlar
separated

Toshkent bo'ylab 1 kun.

bordered

Toshkent bo'ylab 1 kun.

ghost

Toshkent bo'ylab 1 kun.

Bir nechtasi ochiq

Standart holatda (type="single") bitta bo'lim ochiq turadi — boshqasi ochilsa, oldingisi yopiladi. type="multiple" bilan bir nechtasini birga ochish mumkin; bunda value va defaultValue — massiv.

Toshkent bo'ylab 1 kun, viloyatlarga 2–3 ish kuni.

Click, Payme, Uzum va naqd pul.

Yopib bo'lmaydigan

type="single" da ochiq bo'limni qayta bosish uni yopadi (collapsible standart — true). collapsible={false} bilan doim bitta bo'lim ochiq turadi — variantlar orasidan tanlashga o'xshaydi.

Ertasi kuni eshigingizgacha. Narxi — 25 000 so'm.

Kompozitsiya

Accordion.Item ichida Accordion.Trigger va Accordion.Content — sarlavhaga badge, ikonka yoki ikkinchi qator qo'shish uchun. Bitta bo'limni disabled bilan o'chirish mumkin.

Boshqariladigan rejim

value + onValueChange — qaysi bo'limlar ochiqligini o'zingiz boshqarasiz: "Hammasini ochish" tugmasi, URL bilan sinxronlash va hokazo.

Ism, telefon va tug'ilgan sana.

Props

Accordion

Qolgan <div> atributlari ham qabul qilinadi.

PropTipStandartTavsif
type'single' | 'multiple''single'Bitta yoki bir nechta bo'lim ochiq tura oladi
valuestring · string[]—Ochiq bo'lim(lar) — multiple da massiv
defaultValuestring · string[]—Boshlang'ich ochiq bo'lim(lar)
onValueChange(value: string) => void · (value: string[]) => void—Ochilib-yopilganda
collapsiblebooleantrueFaqat single: ochiq bo'limni qayta bosib yopish mumkinmi
variant'separated' | 'bordered' | 'ghost''separated'Ko'rinish
disabledboolean—Barcha bo'limlarni o'chiradi
orientation'horizontal' | 'vertical'—Klaviatura navigatsiyasi yo'nalishi (standart — vertical)
dir'ltr' | 'rtl'—Yozuv yo'nalishi

Accordion.Item

PropTipStandartTavsif
valuemajburiystring—Bo'lim qiymati
titleReactNode—Berilsa — Trigger va Content avtomatik, children kontentga tushadi
disabledboolean—Bo'limni o'chiradi

Accordion.Trigger, Accordion.Content

Accordion.Trigger — <button> atributlarini oladi; matn yonida o'ngda chevron chiziladi. Accordion.Content — <div> atributlari va forceMount (yopiq paytda ham DOM'da qoldirish).

Data atributlari

AtributQayerdaQiymat
data-variantildiz, bo'limseparated · bordered · ghost
data-statebo'lim, sarlavha, kontentopen · closed
data-disabledbo'lim, sarlavhao'chirilganda mavjud
data-orientationbarcha qismlarvertical · horizontal
data-accordion-chevronchevron ikonka—

Klaviatura

TugmaHarakat
Enter / SpaceFokusdagi bo'limni ochadi yoki yopadi
↓ / ↑Keyingi / oldingi sarlavhaga o'tish
Home / EndBirinchi / oxirgi sarlavha
TabKeyingi fokuslanadigan element

Accessibility

  • Tuzilma. Har bir sarlavha <h3> ichidagi <button>; tugma aria-expanded va aria-controls oladi, kontent — role="region" va aria-labelledby bilan sarlavhaga ulanadi. Asosida Radix Accordion.
  • Chevron bezak — aria-hidden, ochilganda 180° buriladi.
  • Animatsiya. Balandlik 200ms davomida o'zgaradi; prefers-reduced-motion da faqat shaffoflik.
  • Fokus halqasi faqat klaviatura bilan kelganda ko'rinadi.

Sahifada