AlertDialog

Yanıt bekleyen modal onay penceresi. Dışarıya basınca kapanmaz ve focus önce Vazgeç butonuna gider.

Import

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

Anatomi

tsx
<AlertDialog.Root>
  <AlertDialog.Trigger />
  <AlertDialog.Content>
    <AlertDialog.Title />
    <AlertDialog.Description />
    <AlertDialog.Footer>
      <AlertDialog.Cancel />
      <AlertDialog.Action />
    </AlertDialog.Footer>
  </AlertDialog.Content>
</AlertDialog.Root>

Root, Trigger, Title, Description ve Footer, Dialog'daki parçalarla aynıdır. Cancel, dialog'u kapatan ve ilk focus'u alan secondary bir Button'dır; Action onaylayıp kapatan primary (ya da tone="danger") bir Button'dır. İkonlu kapatma butonu yoktur.

Örnekler

Yıkıcı işlem onayı

Yukarıdaki örnek tipik kullanımdır: nesnenin adını ver, sonucunu söyle ve Action butonunda fiili tekrarla.

İş sürerken dialog'u açık tutmak

Dialog'u açık tutmak için Action'ın onClick'inde event.preventDefault() çağır, iş bitince de controlled state ile dialog'u kendin kapat.

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

<AlertDialog.Root open={open} onOpenChange={setOpen}>
  <AlertDialog.Content>
    <AlertDialog.Title>Proje silinsin mi?</AlertDialog.Title>
    <AlertDialog.Footer>
      <AlertDialog.Cancel>Vazgeç</AlertDialog.Cancel>
      <AlertDialog.Action
        onClick={async (event) => {
          event.preventDefault();
          await deleteProject();
          setOpen(false);
        }}
      >
        Sil
      </AlertDialog.Action>
    </AlertDialog.Footer>
  </AlertDialog.Content>
</AlertDialog.Root>

API referansı

AlertDialog.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 dialog'un state'ini paylaşan diğer her şey.

AlertDialog.Content

role dışındaki tüm <div> attribute'larını kabul eder. Dışarıya basmak onu asla kapatmaz.

PropTipVarsayılanAçıklama
closeOnEscapebooleantrueEscape ile kapanır.
initialFocusRefObject<HTMLElement | null>–Açılınca focus alacak eleman. Verilmezse önce [data-autofocus] (Vazgeç butonu), 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.
showClosebooleanfalseSağ ü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ı. `showClose` açıksa Türkçe arayüzde `"Kapat"` ver.
refRef<HTMLDivElement>–Dialog elemanına iletilen ref.

AlertDialog.Action

Tüm <button> attribute'larını kabul eder. tone'a göre stillenen bir Button render'lar. Handler event.preventDefault() çağırmadıkça tıklanınca kapanır.

PropTipVarsayılanAçıklama
toneAlertDialogActionTone"primary"Buton stili: `primary` ya da yıkıcı işlemler için `danger`. `AlertDialogActionTone` tipi `"primary" | "danger"`.
asChildbooleanfalse`<button>` yerine tek child elemanı (örneğin kendi `Button`'ını) render'lar; props, ref ve handler'ları birleştirir.
refRef<HTMLButtonElement>–Butona iletilen ref.

AlertDialog.Cancel

Tüm <button> attribute'larını kabul eder. Secondary bir Button render'lar ve data-autofocus taşır, bu yüzden ilk focus'u o alır.

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

Trigger (asChild dahil), Title, Description ve Footer, Dialog'daki karşılıklarıyla aynı prop'ları alır.

Stil verme

AlertDialog, dialog sınıflarını yeniden kullanır (.mrd-dialog__backdrop, .mrd-dialog, .mrd-dialog__title, .mrd-dialog__description, .mrd-dialog__footer). Yüzey data-kind="alert" taşır, bu da genişliği 440px'e daraltır; DOM'dayken de data-state="open" taşır. Cancel, data-variant="secondary" ile .mrd-button olarak; Action ise data-variant'ı tone'dan gelen bir .mrd-button olarak render'lanır. AlertDialog.Content'in size prop'u yoktur.

Erişilebilirlik

WAI-ARIA Alert and Message Dialogs desenini izler. Content role="alertdialog" ve aria-modal="true" taşır; Title ile etiketlenir, Description ile açıklanır.

TuşNe yapar
SpaceEnterTetikleyicideyken dialog'u açar; focus Vazgeç butonuna gider.
TabVazgeç, Action ve diğer kontroller arasında gezer; dialog içinde başa döner.
ShiftTabFocus'u geriye taşır; dialog içinde sona döner.
EscVazgeç gibi dialog'u kapatır ve focus'u tetikleyiciye döndürür.

Kullanım ilkeleri

Yap

Tam olarak ne olacağını söyle ve Action'da fiili tekrarla: “Projeyi sil”.

Kaçın

Evet ve Hayır butonlarıyla “Emin misin?” diye sormak.

Yap

Alert dialog'ları yıkıcı ya da geri alınamaz işlemlere sakla.

Kaçın

Geri alınabilen rutin işlemler için onay istemek; onun yerine Geri al seçenekli bir toast göster.

İlgili sayfalar

  • Dialog: onay olmayan işler için.
  • Toast: geri alınabilen geri bildirimler için.