Alert dialog
Yıkıcı ya da önemli eylemler için, asenkron işin bitmesini bekleyen ve telefonlarda alt sayfaya dönüşen bir onay iletişim kutusu.
pnpm dlx shadcn@latest add https://hextaui.com/r/alert-dialog.jsonBileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.
Henüz eklemediyseniz tema token'larını global CSS'inize ekleyin.
Bağımlılıkları yükleyin.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/alert-dialog.tsx components/ui/sheet.tsx components/ui/button.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Asenkron eylem
<AlertDialogAction /> bileşeninin onClick'inden bir promise döndürün. Düğme bir spinner gösterir ve promise sonuçlanana kadar diyalog kapatılamaz. Promise çözülünce kapanır, reddedilince açık kalır; böylece kişi yeniden deneyebilir.
Media
<AlertDialogMedia /> bir simgeyi masaüstünde başlığın yanına, telefonlarda üstüne yerleştirir. Yıkıcı eylemler için variant="destructive" kullanın.
Küçük
size="sm" içeriği ortalar ve düğmeleri yan yana dizer; kısa sorular için uygundur.
Ayrık tetikleyiciler
Tek bir diyaloğu birçok trigger arasında paylaşmak için createAlertDialogHandle() ile bir handle oluşturun. Her trigger kendi payload'ını geçirir ve diyalog bunu bir render fonksiyonu aracılığıyla okur.
Kontrollü
Trigger olmadan koddan açmak için open ve onOpenChange geçin. Odak yine Cancel üzerine iner.
İç içe
Başka bir diyaloğun içinden açılan diyalog üste yığılır. Alt diyalog, üsttekiyle birlikte küçülür ve üsttekiyle birlikte kapandığında yeniden öne gelir.
Uzun içerik
Ekrandan uzun içerik, sayfa kilitli kalırken diyaloğun içinde kayar.
Sağdan sola
İçeriğe de dir geçin; çünkü içerik, RTL kapsayıcınızın dışındaki bir portal içinde oluşturulur. Alt bölümdeki ok tuşları okuma yönünü izler.
| Tuş | Action |
|---|---|
| EnterSpace | Trigger üzerinde, diyaloğu açar ve odağı Cancel'a taşır. |
| TabShift+Tab | Odağı kontroller arasında taşır. Odak içeride kalır. |
| ←→↑↓ | Alt bölümdeki düğmeler arasında gezinir ve başa sarar. Sol ve sağ, okuma yönünü izler. |
| Esc | Diyaloğu kapatır ve odağı trigger'a geri verir. Asenkron bir eylem çalışırken yok sayılır. |
- İçerikte
role="alertdialog"bulunur; başlığıyla etiketlenir ve açıklamasıyla tanımlanır. - Odak, en az yıkıcı seçenek olan
<AlertDialogCancel />üzerinde başlar. Değiştirmek içininitialFocusgeçin. - Arka plana tıklamak diyaloğu kapatmaz; böylece bir karar yanlışlıkla geçilmez. İzin vermek için
disablePointerDismissal={false}ayarlayın. - Telefonlarda, iptal etmek için aşağı kaydırılabilen bir alt sheet'e dönüşür. Bir eylem beklemedeyken kaydırma, Esc ve Cancel engellenir; düğmeler odaklanabilir kalır.
- Azaltılmış hareket açıkken ölçeklenmek yerine solarak görünür.
<Sheet /> aracılığıyla Base UI drawer üzerine kuruludur. Her parça, sardığı primitive veya öğenin prop'larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChangeBeklemedeki bir eylem tarafından engellenen kapatmalarda çağrılmaz. | (open: boolean, details) => void | – |
onOpenChangeCompleteAçma ya da kapatma animasyonundan sonra çağrılır. | (open: boolean) => void | – |
disablePointerDismissalArka plan tıklamalarında diyaloğu açık tutar. | boolean | true |
handleAyrık tetikleyicileri bağlar. | AlertDialogHandle<Payload> | – |
actionsRefDiyaloğu kod üzerinden kapatın veya kaldırın. | RefObject<{ close, unmount }> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
handle | AlertDialogHandle<Payload> | – |
payloadDiyaloğun render fonksiyonuna geçirilir. | Payload | – |
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-trigger" | CSS'te tetikleyicileri hedefleyin. |
data-popup-open | Diyaloğu açıkken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
size | "default" | "sm" | "default" |
initialFocus | boolean | RefObject | (openType) => HTMLElement | boolean | Cancel button |
finalFocus | boolean | RefObject | (closeType) => HTMLElement | boolean | The trigger |
dirDiyalog sağdan sola olacaksa ayarlayın. | "ltr" | "rtl" | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-content" | CSS'te diyaloğu hedefleyin. |
data-size | Geçerli boyut. |
data-open | Açıkken bulunur. |
data-starting-style | Diyalog açılma animasyonu sırasında bulunur. |
data-ending-style | Diyalog kapanma animasyonu sırasında bulunur. |
data-nested-drawer-open | Üstte iç içe bir diyalog açıkken bulunur. |
data-swiping | Telefonda kaydırılırken bulunur. |
--nested-drawers | Bunun üstünde kaç diyalog açık. |
Medyayı, başlığı ve açıklamayı üst üste dizen bir <div>.
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-header" | CSS'te başlığı hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
variant | "default" | "destructive" | "default" |
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-media" | CSS'te medyayı hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <h2> |
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-title" | CSS'te başlığı hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
renderBirden çok paragraf içerdiğinde render={<div />} kullanın. | ReactElement | (props, state) => ReactElement | <p> |
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-description" | CSS'te açıklamayı hedefleyin. |
Düğmeler için bir <div>. Düğmeler telefonlarda tam genişlikte üst üste dizilir ve ok tuşları aralarında geçiş yapar.
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-footer" | CSS'te alt bölümü hedefleyin. |
Tıklandığında diyaloğu kapatan bir <Button />. Button'ın tüm prop'larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
onClickBir spinner göstermek ve sonuçlanana kadar diyaloğu açık tutmak için bir promise döndürün. Açık tutmak için event.preventDefault() çağırın. | (event) => void | PromiseLike<unknown> | – |
variant | ButtonVariant | "default" |
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-action" | CSS'te eylemleri hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
variant | ButtonVariant | "outline" |
size | ButtonSize | – |
disabledBir eylem beklemedeyken de devre dışıdır. | boolean | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="alert-dialog-cancel" | CSS'te iptal düğmesini hedefleyin. İlk odağı o alır. |
data-disabled | Devre dışıyken bulunur. |
<AlertDialogContent /> ikisini de zaten oluşturur. Bunları yalnızca özel bir popup oluştururken kullanın.
| Prop | Tür | Varsayılan |
|---|---|---|
keepMountedPortal üzerinde, diyaloğu kapalıyken de DOM'da tutar. | boolean | false |
Sayfanın herhangi bir yerindeki <AlertDialogTrigger /> öğelerini tek bir <AlertDialog /> ile bağlayan bir handle döndürür. Payload'u bir generic ile tiplendirin: createAlertDialogHandle<{ name: string }>().
- ButtonHer varyant ve boyutta düğmeler; hızlı istekler için spinner'ı atlayan yerleşik yükleme, başarı ve hata akışı.
- SheetHerhangi bir kenardan kayarak gelen bir panel; kaydırarak kapatma, kaydırma kilidi ve üst üste iç içe geçme desteği vardır.
- CommandSatır içi ya da ⌘K paleti olarak eylemlerin aranabilir listesi; sayfalar, kısayollar ve vurgulanmış eşleşmeler içerir.
- Context menuSağ tık ya da uzun basışla açılan eylem menüsü; alt menüler, onay kutusu ve radyo öğeleri ile dokunmatik ekranda basılı tutma geri bildirimi içerir.
- DialogFormlar ve odaklı görevler için sayfanın üzerinde bir pencere; sabit üst bilgi ve alt bilgi, iç içe geçme ve telefonlarda kaydırılabilir bir alt sayfa içerir.
- DrawerHerhangi bir kenardan kayarak gelen ve parmağınızı izleyen bir panel; yapışma noktaları, çalışan bir tutamaç ve üst üste binen iç içe çekmeceler içerir.
Kullanıldığı bloklar
Alert dialog üzerine kurulan bloklar.
- API keysOpenAI ve Anthropic konsolları gibi bir yapay zeka ürününün API anahtarları sayfası. Kapsamlı izinler ve son kullanma tarihiyle anahtar oluşturun, gizli anahtarı bir kez görün ve kopyalama onaylansın, geri alınabilir şekilde iptal edin, yerinde yeniden adlandırın, ek süreyle döndürün ve anahtar başına kullanımı görün.
- BillingBir yapay zeka ürünü için Cursor, Claude ve Vercel tarzında plan ve kullanım. Modele göre bölünmüş, dönem sonunu öngören ve krediler bitmeden uyaran bir kullanım ölçeri, üzerinde gezinebileceğiniz günlük bir grafik, ölçer üzerinde önizleyebileceğiniz uyarılara sahip bir harcama limiti, tam orantılı hesaplamayla plan değişiklikleri, gerçek doğrulamalı bir kart formu ve PDF olarak indirilen faturalar.
- NotificationsBir yapay zeka ürününün ayarlarındaki Bildirimler bölümü. Satır, sütun ve tümü için anahtarları olan kanal ve olay ızgarası, canlı bir sonraki sessiz saat satırlı sessiz saatler, bir e-posta özeti, masaüstü, e-posta, push ve Slack için gerçek test gönderimleri, tarayıcı izni yönetimi ve bir Slack bağlama akışı. Herhangi bir Ayarlar bölümüne eklenebilir.
- SecurityBir yapay zeka ürünü için oturumlar ve güvenlik. Satırları animasyonla kaldıran oturum kapatmalı etkin cihazlar, canlı güç ölçerli parola değişikliği, gerçek QR kodlu iki aşamalı doğrulama kurulumu, 6 haneli bir kontrol ve indirilebilir kurtarma kodları, WebAuthn ile passkey'ler ve yazılı onayla korunan hesap silme.