@akhatmirzo/ui

Drawer

Ekran chetidan chiqadigan panel: filtrlar, mobil menyu va tafsilotlar uchun.

Import

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

Qachon ishlatish

  • Filtrlar paneli — ko'p maydonli filtrlar sahifani yopib qo'ymasdan yon tomonda turadi.
  • Tafsilotlar ko'rinishi — jadvaldagi buyurtma yoki mijozni bosganda ma'lumotlarini ochish.
  • Mobil menyu — side="left" bilan chapdan chiqadigan navigatsiya.
  • Qisqa forma yoki tasdiqlash uchun Dialog to'g'riroq — diqqat markazda bo'ladi.
  • Drawer ham modal: ochiq paytda sahifa bloklanadi. Sahifa bilan parallel ishlash kerak bo'lsa, oddiy yon panel (layout) yasang.

Tuzilishi

API Dialog bilan bir xil — qismlar nomi ham, xulqi ham.

QismVazifasi
DrawerHolat: open, defaultOpen, onOpenChange
Drawer.TriggerOchuvchi element (asChild bilan)
Drawer.ContentPanel: fon, sarlavha, izoh, ✕ tugmasi, fokus tuzog'i
Drawer.FooterPastki tugmalar — panel tubiga yopishadi
Drawer.CloseBosilganda panelni yopadi (asChild bilan)
<Drawer>
  <Drawer.Trigger asChild>
    <Button>Filtrlar</Button>
  </Drawer.Trigger>
  <Drawer.Content title="Filtrlar" description="Natijalarni toraytiring.">
    {/* maydonlar */}
    <Drawer.Footer>
      <Drawer.Close asChild>
        <Button>Bekor qilish</Button>
      </Drawer.Close>
      <Button variant="primary">Qo'llash</Button>
    </Drawer.Footer>
  </Drawer.Content>
</Drawer>

Tomonlar

side — panel qaysi chetdan chiqishi: right (standart), left, bottom, top. Pastdan chiqadigan panelning tepasida tutqich chizig'i bo'ladi, burchaklari yumaloqlanadi.

O'lchamlar

size — sm (320px), md (420px, standart), lg (560px). Chap va o'ng tomonda bu kenglik, past va tepada — balandlik. Tor ekranda panel ekrandan kengayib ketmaydi.

Mobil menyu

Navigatsiya uchun side="left" va size="sm". Sarlavha ko'rinmasligi kerak bo'lsa hideTitle qo'ying — ekran o'quvchi uni baribir o'qiydi. Har bir havolani Drawer.Close asChild ga o'rasangiz, bosilganda menyu o'zi yopiladi.

Tafsilotlar

size="lg" — buyurtma yoki mijoz ma'lumotlari uchun keng panel. Drawer.Footer kontent qisqa bo'lsa ham panel tubida turadi.

Ichida Select va Combobox

Drawer.Content ichidagi Select, Combobox, DropdownMenu va Popover paneli drawer ustida ochiladi — qo'shimcha sozlash kerak emas.

Props

Drawer

Radix Dialog Root prop'larini qabul qiladi: open, defaultOpen, onOpenChange, modal.

Drawer.Content

Qolgan <div> atributlari, ref va Radix hodisalari (onEscapeKeyDown, onOpenAutoFocus ...) panelga uzatiladi.

PropTipStandartTavsif
titlemajburiyReactNode—Sarlavha — ekran o'quvchi uchun ham
descriptionReactNode—Sarlavha ostidagi izoh
side'right' | 'left' | 'bottom' | 'top''right'Qaysi chetdan chiqadi
size'sm' | 'md' | 'lg''md'320 / 420 / 560px — kenglik yoki balandlik
hideTitlebooleanfalseSarlavhani ko'rinmas qiladi (ekran o'quvchi o'qiydi)
closeButtonbooleantrueO'ng yuqorida ✕ tugmasi
dismissiblebooleantruefalse — tashqariga bosish yopmaydi (Esc ishlaydi)
overlayClassNamestring—Fon (overlay) uchun klass
containerHTMLElement | null—Portal konteyneri (standart — document.body)
labels{ close?: string }{ close: 'Yopish' }✕ tugmasining nomi

Drawer.Trigger, Drawer.Close, Drawer.Footer

Drawer.Trigger va Drawer.Close — asChild bilan o'z elementingizni oladi. Drawer.Footer — oddiy <div>: tugmalar o'ngga tekislanadi va panel tubiga yopishadi (mt-auto).

Data atributlari

AtributQayerdaQiymat
data-statepanelopen · closed
data-sidepanelright · left · bottom · top
data-sizepanelsm · md · lg

Dastlabki fokusni o'zingiz tanlash uchun elementga data-autofocus qo'ying.

Klaviatura

TugmaHarakat
TabPanel ichidagi keyingi element (fokus paneldan chiqmaydi)
Shift + TabOldingi element
EscPanelni yopadi, fokus ochgan elementga qaytadi

Accessibility

  • Rol va nom. Panel — role="dialog", aria-labelledby sarlavhaga, aria-describedby izohga ulanadi (izoh bo'lmasa — qo'yilmaydi).
  • Fokus tuzog'i va scroll. Ochiq paytda fokus panel ichida aylanadi, sahifa scroll qilinmaydi va ekran o'quvchidan yashiriladi.
  • Dastlabki fokus: [data-autofocus] → birinchi maydon → birinchi tugma (✕ dan tashqari) → panelning o'zi.
  • Fokusni qaytarish. Yopilgach fokus triggerga, trigger bo'lmasa — ochilishdan oldingi elementga qaytadi.
  • Tutqich chizig'i (side="bottom") faqat bezak — aria-hidden.
  • Kamroq harakat. prefers-reduced-motion da siljish o'rniga shaffoflik animatsiyasi.

Sahifada