Popover

Tetikleyicisine bağlı, modal olmayan kayan bir panel. Escape ya da dışarıya tıklamak onu kapatır.

Import

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

Anatomi

tsx
<Popover.Root>
  <Popover.Trigger />
  <Popover.Content>
    <Popover.Close />
  </Popover.Content>
</Popover.Root>
  • Root açık state'ini tutar.
  • Trigger, panelin bağlandığı <button>'dır. Paneli kendi elemanına, örneğin bir Button'a bağlamak için asChild ver.
  • Content kayan paneldir; portal ile render'lanır ve çakışma kontrolüyle konumlanır.
  • Close, popover'ı kapatıp focus'u tetikleyiciye döndüren stilsiz bir butondur. Kendi Button'ını render'lamak için asChild ver.

Örnekler

Konum

placement herhangi bir Floating UI konumunu (top, bottom-start, left-end…) kabul eder. Ekranda kalmak için yön değiştirir ve kayar.

Controlled

Kapalı

API referansı

Popover.Root

PropTipVarsayılanAçıklama
openboolean–Controlled açık state'i.
defaultOpenbooleanfalseUncontrolled kullanımda başlangıçtaki açık state'i.
onOpenChange(open: boolean) => void–Açık state'i değişmesi gerektiğinde çağrılır.
childrenReactNode–Trigger ve Content.

Popover.Trigger

Tüm <button> attribute'larını kabul eder. type varsayılan olarak "button"'dır (asChild kullanıldığında atanmaz).

PropTipVarsayılanAçıklama
asChildbooleanfalseBir `<button>` yerine tek child elemanı (örneğin kendi `Button`'ını) render'lar; prop'ları, ref'i ve handler'ları birleştirir.
refRef<HTMLButtonElement>–Butona iletilen ref.

Popover.Content

Tüm <div> attribute'larını kabul eder.

PropTipVarsayılanAçıklama
placementPlacement"bottom-start"Tetikleyiciye göre tercih edilen konum.
sideOffsetnumber8Tetikleyiciye px cinsinden uzaklık.
aria-labelstring–İçerikte görünür bir başlık yoksa erişilebilir ad.
containerElement | nulldocument.bodyPortal hedefi. `undefined` `document.body`'yi kullanır; `null` verildiğinde hedef var olana kadar hiçbir şey render'lanmaz.
refRef<HTMLDivElement>–İçerik elemanına iletilen ref.

Popover.Close

Tüm <button> attribute'larını kabul eder.

PropTipVarsayılanAçıklama
asChildbooleanfalseBir `<button>` yerine tek child elemanı (örneğin kendi `Button`'ını) render'lar; prop'ları, ref'i ve handler'ları birleştirir.
refRef<HTMLButtonElement>–Butona iletilen ref.

Stil verme

.mrd-popover paneldir: --mrd-surface, 1px --mrd-line kenarlık, --mrd-radius-xl, --mrd-shadow-lg, en fazla min(360px, 100vw - 16px) genişlik. Üzerinde data-state="open" bulunur; tetikleyicide data-state="open" | "closed" bulunur. Trigger ve Close stilsiz butonlardır; stil vermek için asChild ile bir Button geçir.

Erişilebilirlik

Content role="dialog" taşır (modal değil); tetikleyicide aria-haspopup="dialog", aria-expanded ve aria-controls bulunur. Açıldığında focus panele geçer ama içinde hapsedilmez. Modal karşılığı için WAI-ARIA Dialog desenine bak. Content'e bir aria-label ya da aria-labelledby ile bağlanmış görünür bir başlık ver.

TuşNe yapar
SpaceEnterTetikleyicideyken popover'ı açar ya da kapatır.
TabPopover içeriğinde ilerler, sonra dışına çıkar.
EscPopover'ı kapatır ve focus'u tetikleyiciye döndürür.

Kullanım ilkeleri

Yap

Popover'ı tek bir kontrole bağlı, küçük ve isteğe bağlı içerik için kullan: paylaşım, hızlı ayarlar, ayrıntılar.

Kaçın

Ana bir görevi ya da uzun bir formu popover'a koymak. Bunun için Dialog kullan.

İlgili sayfalar