Button
Her varyant ve boyutta düğmeler; hızlı istekler için spinner'ı atlayan yerleşik yükleme, başarı ve hata akışı.
pnpm dlx shadcn@latest add https://hextaui.com/r/button.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/button.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
feedback ile onClick'ten bir promise döndürün; düğme önce yükleniyor, sonra başarı veya hata durumunu gösterir ve kendiliğinden sıfırlanır.
Varyantlar
Yedi variant. destructive yumuşak bir tondur; böylece tehlikeli bir eylem bağırmadan net okunur. ghost-destructive ise Sign out veya Remove gibi tekrarlanan satır eylemleri için sakin sürümdür.
Boyutlar
xs ile lg arası metin boyutları ve kare icon-* boyutları. Küçük simge düğmeleri dokunmatik ekranlarda daha büyük, görünmez bir dokunma alanı alır.
Hap (Pill)
shape="pill" uçları tamamen yuvarlar ve simge boyutları daireye dönüşür. Bir sohbet yazma alanı gibi yuvarlak yüzeylerin içindeki düğmelere uygundur.
Simgeyle
Bir simgeyi data-icon="inline-start" veya "inline-end" ile işaretleyin; o taraftaki dolgu dengelemek için daralır.
Devre dışı
focusableWhenDisabled devre dışı bir düğmeyi tab sırasında tutar; böylece bir tooltip veya açıklamaya klavyeyle yine ulaşılabilir.
Özel etiketler
loadingLabel, successLabel ve errorLabel her durumun metnini değiştirir. Eski etiket dönerek çıkarken her etiket dönerek girer.
Yumuşak genişlik
Düğme, en uzun etiket için yer ayırmak yerine her etiketin genişliğine yumuşakça geçer; böylece çevresindeki hiçbir şey zıplamaz.
Hata ayrıntıları
Ret nedenini göstermek için errorLabel'a bir fonksiyon geçin. İşaretçi veya klavye odağı düğmede kaldığı sürece hata ekranda kalır.
Formlar
Submit düğmeleri için onSubmit içinde useButtonFeedback'ten track() çağırın ve buttonProps'u düğmeye yayın. Hatayı görmek için @ karakterini kaldırın.
Simge düğmeleri
Simge boyutları her durum için yalnızca simgeyi değiştirir ve kare şeklini korur. aria-label erişilebilir ad olarak kalır.
Her variant üzerinde geri bildirim
Dolgulu variant'lar iş bitince yeşile veya kırmızıya döner. ghost ve link yalnızca metin renklerini değiştirir.
Kontrollü yükleme
İş başka yerde izleniyorsa loading'i kendiniz ayarlayın. Düğme odaklanabilir kalır ve meşgul olduğunu duyurur.
Kontrollü durum
status'u doğrudan yönetin; örneğin bir form kütüphanesinin submit durumundan.
Bağlantı olarak
Düğmenin bağlantı semantiğini koruması için render'a bir anchor geçin ve nativeButton={false} ayarlayın.
Sağdan sola
Simgeler ve durum etiketleri okuma yönünü izler.
| Tuş | Action |
|---|---|
| EnterSpace | Düğmeyi etkinleştirir. Bir geri bildirim isteği sürerken yok sayılır. |
| Tab | Odağı taşır. Yüklenen bir düğme odaklanabilir kalır; hata üzerine odaklanmak, siz uzaklaşana kadar onu ekranda tutar. |
- Her durum değişikliği kibar (polite) bir canlı bölge üzerinden duyurulur: önce yükleme, sonra başarı veya hata etiketi.
- Yükleme sırasında düğme
aria-busyayarlar ve odaklanabilir kalır; böylece istek sürerken odak asla kaybolmaz. - Spinner yalnızca 150ms sonra görünür ve sonra en az 400ms kalır; böylece hızlı istekler asla göz kırpmaz, yavaşlar da titremez.
- Azaltılmış harekette durum etiketleri dönmek yerine solar ve hata sarsıntısı atlanır.
Base UI button üzerine kuruludur. Bir <button> oluşturur ve onun tüm niteliklerini kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
variant | "default" | "outline" | "secondary" | "ghost" | "ghost-destructive" | "destructive" | "link" | "default" |
size | "xs" | "sm" | "default" | "lg" | "icon-xs" | "icon-sm" | "icon" | "icon-lg" | "icon-xl" | "default" |
shape | "default" | "pill" | "default" |
feedbackonClick'ten dönen promise'i izleyin ve durumunu gösterin. | boolean | false |
onClickGeri bildirimi yönetmek için bir promise döndürün. | (event) => unknown | – |
loadingKontrollü yükleme durumu. | boolean | – |
statusKontrollü durum. loading'e göre önceliklidir. | "idle" | "loading" | "success" | "error" | – |
onStatusChange | (status: ButtonStatus) => void | – |
onErrorRet nedeniyle çağrılır. | (error: unknown) => void | – |
resetAfterBoşta durumuna dönmeden önceki milisaniye. | number | { success?: number; error?: number } | { success: 2000, error: 4000 } |
loadingLabelSpinner'ın yanında gösterilir. Simge boyutlarında gizlenir. | ReactNode | – |
successLabel | ReactNode | "Done" |
errorLabel | ReactNode | (error: unknown) => ReactNode | "Failed" |
disabled | boolean | false |
focusableWhenDisabledYükleme sırasında her zaman true. | boolean | false |
nativeButtonrender bir <button> değilse false yapın. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="button" | CSS'te düğmeleri hedefleyin. |
data-status | idle, loading, success veya error. feedback, loading ya da status kullanıldığında bulunur. |
data-disabled | Düğme devre dışıyken bulunur. |
aria-busy | Yükleme sırasında bulunur. |
Aynı geri bildirim akışını bir formun onSubmit'i gibi her yerden çalıştırır. resetAfter, onStatusChange ve onError kabul eder. Tüm zamanlama için useButtonFeedback kılavuzuna bakın.
| Döndürür | Açıklama |
|---|---|
track(action) | Bir promise veya bir promise döndüren fonksiyon geçin. Bir istek sürerken yapılan çağrılar yok sayılır. |
buttonProps | Durumu göstermek ve sıfırlamayı üzerine gelince ve odakta duraklatmak için <Button> üzerine yayın. |
status | Geçerli ButtonStatus. |
error | Son ret nedeni. |
reset() | İsteği iptal eder ve boşta (idle) durumuna döner. |
isPending() | Bir isteğin sürüp sürmediği. |
- SpinnerApple tarzı çentiklere ya da nefes alan bir halkaya sahip, göstermeden önce bekleyebilen ve titremesin diye yeterince uzun kalan bir yükleme göstergesi.
- useButtonFeedbackBir asenkron eylemi yükleme, başarı ve hata aşamalarından geçirir; hızlı isteklerde spinner'ı atlar ve hatayı siz okurken ekranda tutar.
- Button groupTek bir kontrol olarak birleşen düğmeler; ortak birleşim yerleri, ayırıcılar, metin eklentileri, iç içe geçme ve dikey yığınlar.
- ToggleAçık ya da kapalı kalan; basıldığında yerleşen bir dolgusu, belirgin bir hover-açık geçişi ve duruma göre dolabilen simgeleri olan bir düğme.
- Toggle groupTek ya da çoklu seçim için bir düğme sırası; seçilen öğeye kayan bir dolgu, bitişik ya da aralıklı öğeler ve ok tuşlarıyla odaklanma sunar.
- AlertDurum ve geri bildirim için satır içi mesajlar; nötr bir yüzey, renkli bir simge ve yumuşakça daralan bir kapatma düğmesi içerir.
Kullanıldığı bloklar
Button ü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.
- Agent TodosBir ajanın planını çalışırken gösterin. Her adım backlog'dan yapılacak, devam eden ve tamamlanana ilerler; canlı süreler, başarısızlıklar ve arkasındaki araç çağrıları ile birlikte. Yazma alanının üstü için bir durum hapı, görebildiğiniz plan değişiklikleri ve çalışmadan önce planı düzenlemek için bir gözden geçirme adımı.
- 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.
- AppearanceBir yapay zeka ürününün ayarlarındaki Görünüm bölümü: tema, vurgu rengi, arka plan tonu, yoğunluk, sohbet yazı tipi, metin boyutları ve erişilebilirlik seçenekleri; kullanıcılar kaydedene kadar hepsi taslak olarak tutulur.