@akhatmirzo/ui

DropdownMenu

Amallar menyusi: ikonkalar, klaviatura yorliqlari, belgilash elementlari va ichki menyular.

Import

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

Qachon ishlatish

  • Bir obyekt ustidagi amallar — jadval qatoridagi "⋯" tugmasi, kartochka menyusi, profil menyusi.
  • Ko'rinish sozlamalari — CheckboxItem (qaysi ustunlar ko'rinsin) va RadioGroup (saralash tartibi).
  • Qiymat tanlash uchun emas. Forma maydoni kerak bo'lsa — Select yoki Combobox: ular qiymatni saqlaydi va formaga yuboradi.
  • Xavfli amal (variant="danger") menyuning oxirida, ajratgichdan keyin tursin; kerak bo'lsa, confirm() bilan tasdiqlating.
  • Ichki menyuni bir darajadan chuqur qilmang — klaviatura bilan ham, telefonda ham noqulay.

Tuzilishi

QismVazifasi
DropdownMenuHolat: open, defaultOpen, onOpenChange
DropdownMenu.TriggerOchuvchi. asChild siz — outline tugma ko'rinishida
DropdownMenu.ContentPanel: portal, joylashuv, aylanma navigatsiya
DropdownMenu.ItemAmal: icon, shortcut, variant, onSelect
DropdownMenu.CheckboxItemYoqib-o'chiriladigan element (✓)
DropdownMenu.RadioGroup / RadioItemBir nechtadan bittasini tanlash (●)
DropdownMenu.LabelGuruh sarlavhasi
DropdownMenu.GroupElementlarni mantiqiy guruhlash
DropdownMenu.SeparatorAjratgich chiziq
DropdownMenu.Sub / SubTrigger / SubContentIchki menyu

Belgilash elementlari

CheckboxItem — checked / onCheckedChange, RadioGroup — value / onValueChange (yoki boshqarilmaydigan defaultValue). Tanlovdan keyin menyu yopiladi; bir nechtasini ketma-ket belgilash uchun onSelect ichida e.preventDefault() chaqiring.

Saralash: new

Ichki menyu

Sub ichida SubTrigger va SubContent. Sichqoncha bilan ustiga borganda, klaviatura bilan → bosganda ochiladi.

Profil menyusi: Label, Group va havola

Label va Group menyuni bo'limlarga ajratadi. Item ga asChild berib, <a> (yoki Next.js Link) ni element sifatida ishlatasiz — ikonka va yorliq havolaning ichiga qo'shiladi. align="end" panelni triggerning o'ng chetiga tekislaydi.

<DropdownMenu.Item asChild icon={<Settings />}>
  <Link href="/sozlamalar">Sozlamalar</Link>
</DropdownMenu.Item>

shortcut — faqat yorliq

shortcut={['mod', 'E']} menyuda ⌘E (Windows'da Ctrl E) ko'rsatadi va aria-keyshortcuts qo'yadi, lekin tugma bosilishini ushlamaydi. Qisqa yo'lning o'zini useHotkeys bilan ulang.

Holatlar

disabled element bosilmaydi va klaviatura navigatsiyasida o'tkazib yuboriladi. Trigger ham disabled bo'lishi mumkin. open + onOpenChange bilan menyuni koddan ochasiz.

Props

Radix DropdownMenu Root prop'larini qabul qiladi: open, defaultOpen, onOpenChange, modal (standart — true), dir.

Radix Content ning qolgan prop'lari (alignOffset, onCloseAutoFocus, onEscapeKeyDown ...) va <div> atributlari ham qabul qilinadi.

PropTipStandartTavsif
side'top' | 'right' | 'bottom' | 'left''bottom'Qaysi tomonda ochiladi
align'start' | 'center' | 'end''start'Trigger bo'ylab tekislash
sideOffsetnumber6Triggerdan masofa, px
collisionPaddingnumber8Ekran chetidan minimal masofa, px
loopbooleantrue↑ ↓ oxiridan boshiga aylanadi
containerHTMLElement | null—Portal konteyneri (standart — document.body)
PropTipStandartTavsif
iconReactNode—Chapdagi ikonka (16px)
shortcutstring[]—O'ngdagi Kbd yorlig'i, masalan ['mod', 'E']
variant'default' | 'danger''default'danger — qizil matn va fon
onSelect(event: Event) => void—Tanlanganda. preventDefault() — menyu ochiq qoladi
disabledboolean—Elementni o'chiradi
textValuestring—Typeahead uchun matn (children matn bo'lmasa)
asChildbooleanfalseBolani (masalan, <a>) element sifatida chizadi

CheckboxItem, RadioGroup, RadioItem

PropTipStandartTavsif
checkedboolean | 'indeterminate'—CheckboxItem: belgilanganmi
onCheckedChange(checked: boolean) => void—CheckboxItem: o'zgarganda
valuestring—RadioGroup: tanlangan qiymat; RadioItem: qiymati
defaultValuestring—RadioGroup: boshlang'ich qiymat
onValueChange(value: string) => void—RadioGroup: o'zgarganda
shortcutstring[]—CheckboxItem va RadioItem: o'ngdagi Kbd
disabledboolean—CheckboxItem va RadioItem: o'chiradi

Sub, SubTrigger, SubContent

Sub — open, defaultOpen, onOpenChange. SubTrigger — icon va disabled. SubContent — sideOffset (standart 8), alignOffset (-6), collisionPadding (8), loop (true) va container.

Data atributlari

AtributQayerdaQiymat
data-statetrigger, panelopen · closed
data-variantelementdefault · danger
data-highlightedelementklaviatura yoki sichqoncha ustida
data-disabledelemento'chirilganda mavjud
data-stateCheckbox/RadioItemchecked · unchecked
data-sidepaneltop · right · bottom · left

Klaviatura

TugmaHarakat
Enter / Space / ↓Trigger fokusda — ochadi, fokus birinchi elementga
↓ / ↑Elementlar bo'ylab yurish (aylanma)
Home / EndBirinchi / oxirgi element
HarfShu harf bilan boshlanadigan elementga sakrash
→ / ←Ichki menyuni ochish / yopish
Enter / SpaceTanlash va yopish
EscYopish, fokus triggerga qaytadi

Accessibility

  • Rollar. Panel — role="menu", elementlar — menuitem, menuitemcheckbox, menuitemradio; trigger aria-haspopup="menu" va aria-expanded oladi. Asosida Radix DropdownMenu.
  • Qisqa yo'llar. shortcut berilsa, elementga aria-keyshortcuts qo'yiladi (mod — macOS'da Meta, boshqa tizimlarda Control). Ko'rinadigan Kbd esa ekran o'quvchidan yashirin.
  • Ikonkalar aria-hidden.
  • Ikonka trigger. IconButton trigger bo'lsa, aria-label yozing ("Ko'proq amallar").
  • Fokus. Ochilganda fokus menyuga o'tadi, yopilgach triggerga qaytadi.

Sahifada