Drawer

Bir kenardan kayarak açılan modal bir yan panel (sheet). Dialog ile aynı davranışa ve parçalara sahiptir; Content'e ek olarak side ve size prop'ları gelir.

Import

tsx
import { Drawer } from "@merid/react";

Anatomi

tsx
<Drawer.Root>
  <Drawer.Trigger />
  <Drawer.Content side="right">
    <Drawer.Title />
    <Drawer.Description />
    <Drawer.Footer />
  </Drawer.Content>
</Drawer.Root>

Root, Trigger, Title, Description, Close ve Footer, Dialog parçalarıdır. Footer sheet'in en altına itilir.

Örnekler

Kenarlar

Boyutlar

size sheet'in genişliğini belirler: sm 320px, md 420px (varsayılan), lg 560px. Genişlik her zaman viewport'un 48px eksiğiyle sınırlıdır.

Controlled

tsx
const [open, setOpen] = useState(false);

<Drawer.Root open={open} onOpenChange={setOpen}>
  <Drawer.Content>…</Drawer.Content>
</Drawer.Root>

API referansı

Drawer.Root

PropTipVarsayılanAçıklama
openboolean–Controlled açık/kapalı state'i.
defaultOpenbooleanfalseUncontrolled kullanımda başlangıç state'i.
onOpenChange(open: boolean) => void–Açık/kapalı state'i değişmesi gerektiğinde çağrılır.
childrenReactNode–Trigger, Content ve bu drawer'ın state'ini paylaşan diğer her şey.

Drawer.Content

role dışındaki tüm <div> attribute'larını kabul eder.

PropTipVarsayılanAçıklama
side"left" | "right""right"Sheet'in kayarak açıldığı kenar.
sizeDrawerSize"md"Sheet genişliği: `sm` 320px, `md` 420px, `lg` 560px; viewport'un 48px eksiğiyle sınırlı. `DrawerSize` tipi `"sm" | "md" | "lg"`.
closeOnOutsidePressbooleantrueArka plana basıldığında kapanır.
closeOnEscapebooleantrueEscape ile kapanır.
initialFocusRefObject<HTMLElement | null>–Açılınca focus alacak eleman. Verilmezse önce [data-autofocus], sonra ilk tab'lanabilir eleman.
containerElement | nulldocument.bodyPortal hedefi. `undefined` verilirse `document.body` kullanılır; `null` verilirse hedef oluşana kadar hiçbir şey render'lanmaz.
showClosebooleantrueSağ üstteki standart ikonlu kapatma butonunu otomatik render'lar. Kendi ikonlu `Close`'unu render'ladığında atlanır.
closeLabelstring"Close"Otomatik kapatma butonunun erişilebilir adı. Türkçe arayüzde `"Kapat"` ver.
refRef<HTMLDivElement>–Drawer elemanına iletilen ref.

Trigger, Title, Description, Close ve Footer, Dialog'daki prop'ların aynısını alır.

Stil verme

SınıfEleman
.mrd-drawer__backdropSabit arka plan; sheet'i kendi kenarına hizalar
.mrd-drawerSheet: data-size'a göre 320 / 420 / 560px, 100vw - 48px ile sınırlı, tam yükseklik

İkisi de data-side="left" | "right" ve data-state="open" taşır; sheet ayrıca data-size taşır. Title, description, footer ve close, .mrd-dialog__* sınıflarını kullanır. prefers-reduced-motion altında hareket kaldırılır.

Erişilebilirlik

WAI-ARIA Dialog (Modal) desenini izler: role="dialog", aria-modal="true", focus kapanı, scroll kilidi ve focus'un geri dönmesi.

TuşNe yapar
SpaceEnterTetikleyicideyken drawer'ı açar.
TabFocus'u ileri taşır; drawer içinde sona gelince başa döner.
ShiftTabFocus'u geri taşır; drawer içinde başa gelince sona döner.
EscDrawer'ı kapatır ve focus'u tetikleyiciye döndürür.

Kullanım ilkeleri

Yap

Drawer'ı, sayfayı görünür tutmanın işe yaradığı ikincil içerik için kullan: filtreler, detaylar, ayarlar.

Kaçın

Çok adımlı bir akışı drawer'a koymak. Bunun için bir sayfa kullan.

İlgili sayfalar