Dialog
Formlar 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.
pnpm dlx shadcn@latest add https://hextaui.com/r/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/dialog.tsx components/ui/sheet.tsx components/ui/button.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Form
Formu <DialogBody /> içinde tutun ve alt bilgideki submit düğmesini form ile ona yöneltin. Enter gönderir ve değer kaydedilince diyalog onOpenChange aracılığıyla kapanır.
Özel kapatma düğmesi
Köşe düğmesini içerikte showCloseButton={false} ile gizleyin ve alt bilgiye showCloseButton ile bir Close düğmesi ekleyin.
Kapatma düğmesi yok
Düğme olmadan da diyalog Esc, dışarı tıklama veya telefonlarda aşağı kaydırma ile kapanır.
Boyutlar
size daha büyük ekranlardaki azami genişliği belirler: sm, default veya lg.
Yapışkan alt bilgi
<DialogBody /> içindeki uzun içerik kayar; üst ve alt bilgi yerinde kalır, böylece eylemler her zaman erişilebilir olur.
Kaydırılabilir içerik
Alt bilgi olmadan gövde başlığın altında kayar ve alt dolgusunu korur.
Kontrollü
Trigger olmadan koddan açmak için open ve onOpenChange geçin.
İç içe
Başka bir diyaloğun içinden açılan bir diyalog veya alert dialog üste yığılır. Üsttekinin arkasındaki geri çekilir ve onu daha açık bir arka plan kaplar. Esc yalnızca en üsttekini kapatır.
Ayrık tetikleyiciler
Tek bir diyaloğu birçok trigger arasında paylaşmak için createDialogHandle() ile bir handle oluşturun. Her trigger, diyaloğun bir render fonksiyonu aracılığıyla okuduğu bir payload geçirir.
Sağdan sola
İçeriğe de dir geçin; çünkü içerik, RTL kapsayıcınızın dışındaki bir portal içinde render edilir.
| Tuş | Action |
|---|---|
| EnterSpace | Trigger üzerinde, diyaloğu açar ve odağı ilk kontrolüne taşır. |
| TabShift+Tab | Odağı kontroller arasında taşır. Odak içeride kalır. |
| Esc | En üstteki diyaloğu kapatır ve odağı trigger'ına geri verir. |
- İçerikte
role="dialog"bulunur; başlığıyla etiketlenir ve açıklamasıyla tanımlanır. Her zaman bir<DialogTitle />ekleyin. - Fare veya klavyeyle odak ilk kontrolde başlar. Dokunmayla diyaloğun kendisinde başlar; böylece ekran klavyesi, kişiler bir alan seçmeden içeriği örtmez. Değiştirmek için
initialFocusgeçin. - Köşedeki kapatma düğmesi “Close” olarak etiketlenir; arkadaki sayfa inert olur ve kaydırılamaz.
- Telefonlarda, kapatmak için aşağı kaydırılabilen bir alt sheet'e dönüşür. Azaltılmış hareket açıkken ölçeklenmek veya kaymak yerine solar.
<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 |
onOpenChange | (open: boolean, details) => void | – |
onOpenChangeCompleteAçma ya da kapatma animasyonundan sonra çağrılır. | (open: boolean) => void | – |
modal | boolean | "trap-focus" | true |
disablePointerDismissalDışarıdaki tıklamalarda diyaloğu açık tutar. | boolean | false |
handleAyrık tetikleyicileri bağlar. | DialogHandle<Payload> | – |
actionsRefDiyaloğu kod üzerinden kapatın veya kaldırın. | RefObject<{ close, unmount }> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
handle | DialogHandle<Payload> | – |
payloadDiyaloğun render fonksiyonuna geçirilir. | Payload | – |
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="dialog-trigger" | CSS'te tetikleyicileri hedefleyin. |
data-popup-open | Diyaloğu açıkken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
size | "sm" | "default" | "lg" | "default" |
showCloseButtonKapatma düğmesini köşede gösterir. | boolean | true |
initialFocus | boolean | RefObject | (openType) => HTMLElement | boolean | First control, or the dialog on touch |
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="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. |
Başlığı ve açıklamayı üst üste dizen bir <div>. Kapatma düğmesi için yer bırakır.
| Öznitelik | Açıklama |
|---|---|
data-slot="dialog-header" | CSS'te başlığı hedefleyin. |
İçerik ekrandan uzunsa kayan, üst ve alt bilgiyi yerinde tutan bir <div>.
| Öznitelik | Açıklama |
|---|---|
data-slot="dialog-body" | CSS'te gövdeyi hedefleyin. |
Eylemler için bir <div>. Düğmeler telefonlarda tam genişlikte üst üste dizilir; ilki en altta olur.
| Prop | Tür | Varsayılan |
|---|---|---|
showCloseButtonAlt öğelerden sonra outline bir Close düğmesi ekler. | boolean | false |
| Öznitelik | Açıklama |
|---|---|
data-slot="dialog-footer" | CSS'te alt bölümü hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <h2> |
| Öznitelik | Açıklama |
|---|---|
data-slot="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="dialog-description" | CSS'te açıklamayı hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="dialog-close" | CSS'te kapatma düğmelerini hedefleyin. |
<DialogContent /> 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 <DialogTrigger /> öğelerini tek bir <Dialog /> ile bağlayan bir handle döndürür. Payload'u bir generic ile tiplendirin: createDialogHandle<{ 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.
- Alert dialogYı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.
- 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.
- 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
Dialog üzerine kurulan bloklar.
- Prompt InputTek sakin bir satır olarak başlayan, yazdıkça karta dönüşen ve konuşma başladığında aşağı inen bir sohbet yazma alanı. Enter gönderir; Japonca ve Çince girişle de güvenle çalışır. Dosyaları yapıştırın, bırakın ya da seçin; önizleme, ilerleme ve yeniden deneme desteği vardır. @ dosya ekler, / ise imleçte açılan bir menüden komut çalıştırır. Sayı tuşlarıyla çalışan bir model seçici, Max'ta canlanan bir efor kaydırıcısı, bir bağlam halkası, canlı dalga biçimli dikte, araç çipleri, yanıt akarken yazılan mesajlar için bir kuyruk ve yeniden yüklemeden sağ çıkan taslaklar.
- 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.
- ModelsBir yapay zeka ürününün ayarlarındaki Modeller sayfası. Bağlamı, hızı ve maliyeti tek bakışta görünen varsayılan bir model, her modelin neyi desteklediğini bilen varsayılan bir efor, sağlayıcıya göre gruplanmış; filtreler, sabitlemeler ve toplu anahtarlar içeren aranabilir bir model listesi, gerçek bir bağlantı testi olan OpenAI uyumlu sunucular ve nelerin yeni olduğunu söyleyen bir yenileme.