Ayarlar
Cursor ve Claude gibi düzenlenmiş, bir yapay zeka ürünü için ayarlar. Arama, gruplar ve harici bağlantılı dolu bir kenar çubuğu, sakin seçiciler ve iç içe seçenekler içeren satır kartları, yalnızca bir şey değiştiğinde yükselen koyu bir kaydetme adası, kaydetmek için ⌘S, kontrollerinizden ya da sunucunuzdan gelen alan hataları ve içeriğin şeklini alan yükleme durumları.
Cursor, Claude ve Codex aynı ayarlar sayfasında anlaştı: arama ve bir avuç gruplanmış bölüm içeren dolu bir kenar çubuğu, sağda ise solda etiket ve açıklama, sağda sakin bir kontrol bulunan satır kartları. Settings bu sayfadır. Bölümlerinizi tutar ve her ayarlar sayfasının yanlış yaptığı kısımları ele alır: düzenlemelerin kaybolması, iki kez kaydetme ve masaüstündeki kenar çubuğundan telefondaki bir listeye geçiş.
Satırlar herhangi bir kontrolü alır. SettingsSelect, bu uygulamaların kullandığı kompakt değer seçicidir; bir seçenek menüsü açan küçük çerçeveli bir düğme. SettingsNumber ise basılı tutarak tekrar ettirebileceğiniz bir artırıcıdır. İkisi de satırıyla adlandırılır; böylece ekran okuyucular "Chat font, Serif" duyar. SettingsLink, başka bir şey açan bir satırdır; uygulamadan çıkan bağlantılar için şeron ya da ok içerir. SettingsNested, bir anahtarın altında bağımlı seçenekleri kaydırarak açar, örneğin Run code altında ağ erişimi. Arama, kenar çubuğunu etikete, açıklamaya ve anahtar kelimelere göre filtreler ve Enter ilk eşleşmeyi açar. SettingsChoice bir seçimi resimli kartlara çevirir; böylece insanlar bir temayı ya da yoğunluğu nasıl göründüğüne göre seçer.
Siz söyleyene kadar hiçbir şey kaydedilmez. Bir değer kayıtlı olandan farklılaşır farklılaşmaz, alttan Discard ve Save içeren koyu bir ada yükselir ve bölümün kenar çubuğundaki girdisi bir nokta alır. Geri değiştirirseniz çubuk kaybolur. Başka bir bölüm açmayı, telefonda geri gitmeyi ya da sekmeyi kapatmayı denerseniz geçiş engellenir: çubuk sallanır ve önce kaydet ya da vazgeç der, tarayıcı da sekme kapanmadan önce sorar. ⌘S veya Ctrl+S her yerden kaydeder.
Kaydetme ilerlemesini düğmede gösterir, ardından ada bir Saved işaretine küçülür ve kayarak gider. Kontrolleriniz başarısız olursa alanlar hatalarını gösterir, odak ilkine geçer ve çubuk kaç tanesinin düzeltilmesi gerektiğini söyler. Sunucu hayır derse alanlar için hata döndürün ya da hata fırlatın; taslak tam yazıldığı gibi kalır. Kaydederken yazmaya devam ederseniz çubuk daha yeni düzenlemeler için açık kalır.
Telefonda kenar çubuğu, açıklamalar ve şeronlarla gruplanmış bir listeye dönüşür. Bir bölüme dokunmak onu geri düğmesiyle listenin üzerine kaydırır ve odak başlığına geçer. Bir bölümün verisi yüklenirken anahtar satırları şeklinde bir skeleton ya da skeleton prop'uyla kendi skeleton'unuz gösterilir; yükleme başarısız olursa Try again ile bir hata gösterilir.
Pro registry'yi components.json dosyasına ekleyin
components.json Token'ınızı ekleyin
Hesap sayfanızda bir token oluşturun ve
.env.localdosyasınaHEXTAUI_PRO_TOKENolarak ekleyin.Bloğu ekleyin
pnpm dlx shadcn@latest add @hextaui-pro/settings
Bir bölümü API'nize bağlayın
useSettingsForm, ilettiğiniz değerlerin bir taslağını tutar. Alan hatalarını alanın altında göstermek için onSave'den döndürün ya da mesajı kaydetme çubuğunda göstermek için hata fırlatın. Her iki durumda da taslak korunur.
Bölüm başına bir route
Her bölüme kendi URL'sini vermek için etkin bölümü value ve onValueChange ile kontrol edin. Kabuk, bir şey kaydedilmemişken geçişi yine engeller; bu yüzden onValueChange yalnızca ayrılmak güvenliyken tetiklenir.
Yükleme ve hatalar
Bir bölümün verisi yüklenirken status iletin. Skeleton 150ms bekler; böylece hızlı yüklemeler asla yanıp sönmez ve hata durumu onRetry ile Try again sunar.
Yapı
Dıştan içe doğru birleştirdiğiniz parçalar.
| Parça | Açıklama |
|---|---|
SettingsShell | Sayfa: bölüm gezintisi, içerik sütunu, kaydetme çubuğu ve kaydedilmemiş değişikliklerle ayrılmaya karşı koruma. |
SettingsSection | Bir bölüm. Yalnızca açıkken, başlığı, isteğe bağlı eylemleri ve yükleme veya hata durumlarıyla render edilir. |
SettingsGroup | Satırlardan oluşan, grup hakkında bir not için isteğe bağlı alt bilgisi olan başlıklı bir kart. |
SettingsRow | Ekran okuyucular için birbirine bağlı bir etiket, açıklama ve kontrol; altında alan hatası. |
SettingsSelect | Kısa bir listeden tek bir değer için sakin bir seçici. |
SettingsLink | Bir sayfayı, iletişim kutusunu ya da harici bir bağlantıyı açan satır. |
SettingsNested | Üst anahtar açıkken kayarak açılan bağımlı seçenekler. |
SettingsNumber | Basılı tutulduğunda tekrar eden − ve + içeren, Base UI'nin Number Field'ı üzerine kurulu bir sayı artırıcı. |
SettingsChoice | Tema ya da yoğunluk gibi tek bir seçeneği seçmek için, radio semantiğine sahip resimli kartlar. |
SettingsSkeleton | Grup başına satır sayısı ve kontrol şekliyle yapılandırılabilen yükleme yer tutucusu. |
useSettingsForm | Bir bölümün taslağı. Neyin değiştiğini izler, doğrular, kaydeder ve bölümü kaydetme çubuğuna bağlar. |
useSettingsNavigate | İçerikten bir bölüm açar, kenar çubuğu gibi korunur. |
SettingsShell
Ayrıca her div prop'unu kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
sections{ id, label, description?, icon?, group?, keywords?, href? }. Aynı group değerine sahip ardışık öğeler bir başlığı paylaşır. keywords aramanın bir bölümü bulmasına yardım eder ve href öğeyi harici bir bağlantı yapar. | SettingsSectionItem[] | – |
valueSiz kontrol ettiğinizde açık olan bölüm. | string | – |
defaultValueBaşlangıçta açık olan bölüm. | string | first section |
onValueChangeBiri başka bir bölüm açtığında çağrılır. Bir şey kaydedilmemişken ya da kaydedilirken asla çağrılmaz. | (value: string) => void | – |
titleGezintinin üstündeki sayfa başlığı ve telefonlarda geri düğmesinin etiketi. | ReactNode | "Settings" |
descriptionBaşlığın altında bir satır. | ReactNode | – |
navHeaderKenar çubuğunun üstündeki içerik, uygulamaya dönen bir Back bağlantısı gibi. | ReactNode | – |
searchableBölümlerin üstüne bir arama alanı ekler. | boolean | false |
navFooterKenar çubuğunun altına sabitlenmiş içerik, oturum açmış kullanıcı gibi. | ReactNode | – |
groupLabelsHer grubun adını üstünde gösterir. Grupları yalnızca boşlukla ayırmak için kapatın; adlar yine de ekran okuyucular için grupları etiketler. | boolean | true |
SettingsSection
Ayrıca her section prop'unu kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
idsections içindeki bir id ile eşleşir. | string | – |
titleBaşlık. | ReactNode | the section's label |
descriptionBaşlığın altındaki satır. | ReactNode | the section's description |
actionsBaşlığın yanındaki düğmeler. | ReactNode | – |
statuschildren yerine bir skeleton ya da hata gösterir. | "ready" | "loading" | "error" | "ready" |
skeletonstatus loading iken ne gösterileceği. | ReactNode | <SettingsSkeleton /> |
errorHata durumu için mesaj. | ReactNode | – |
onRetryHata durumuna Try again ekler. | () => void | – |
| Prop | Tür | Varsayılan |
|---|---|---|
titleKartın üstündeki başlık. | ReactNode | – |
descriptionBaşlığın altında, grubun ne hakkında olduğunu anlatan soluk bir satır. | ReactNode | – |
footerKartın altında, bir değişikliğin neyi etkilediği gibi notlar için soluk bir şerit. | ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
labelSatırın içindeki kontrolü etiketler. | ReactNode | – |
descriptionKontrolle birlikte okunan yardım metni. | ReactNode | – |
errorKontrolü geçersiz olarak işaretler ve mesajı satırın altında gösterir. | string | – |
layoutauto, kart genişken kontrolü etiketin yanına, darken altına koyar. inline, anahtarlar için kontrolü etiketin yanında tutar. stacked, metin alanları için her zaman altına koyar. | "auto" | "inline" | "stacked" | "auto" |
disabledSatırın alanını devre dışı bırakır. | boolean | false |
SettingsSelect
Ayrıca her Button prop'unu kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
valueSeçilen değer. | string | – |
onValueChangeYeni değerle çağrılır. | (value: string) => void | – |
optionsSeçenekler, sırayla. | { value, label }[] | – |
SettingsChoice
Bir radio group; böylece ok tuşları kartlar arasında gezinir. Ayrıca her Base UI RadioGroup prop'unu kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
valueSeçilen seçenek. | string | – |
onValueChangeYeni seçenekle çağrılır. | (value: string) => void | – |
optionsHer kartın resmi ve altındaki ad. | { value, label, preview }[] | – |
columnsSatır başına kart. Satır dar olduğunda 4, 2'ye düşer. | 2 | 3 | 4 | 3 |
ratio16:10 önizlemeler, daha kısa olanlar için 2:1. | "card" | "wide" | "card" |
SettingsNumber
Ayrıca format ve smallStep gibi her Base UI NumberField.Root prop'unu kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
valueGeçerli sayı. | number | null | – |
onValueChangeSayı değiştikçe çağrılır. | (value: number | null) => void | – |
minEn düşük değer. − düğmesi orada devre dışı kalır. | number | – |
maxEn yüksek değer. + düğmesi orada devre dışı kalır. | number | – |
stepHer basış ya da ok tuşunun değeri ne kadar değiştirdiği. | number | 1 |
SettingsLink
Ayrıca her anchor prop'unu kabul eder. href yoksa bir düğme render eder.
| Prop | Tür | Varsayılan |
|---|---|---|
labelSatırın başlığı. | ReactNode | – |
descriptionBaşlığın altında bir satır. | ReactNode | – |
externalhref'i yeni sekmede açar ve şeron yerine ok gösterir. | boolean | false |
| Prop | Tür | Varsayılan |
|---|---|---|
openSeçenekleri gösterir. Genellikle üst anahtarın değeri. | boolean | – |
| Prop | Tür | Varsayılan |
|---|---|---|
groupsHer yer tutucu grubunun kaç satırı olduğu. | number[] | [3, 2] |
controlHer satırın sağındaki şekil. | "switch" | "select" | "input" | "switch" |
useSettingsForm
{ values, setValue, errors, dirty, status, save, discard } döndürür.
| Prop | Tür | Varsayılan |
|---|---|---|
valuesŞu an kayıtlı olan. Değiştiğinde ve düzenleme yoksa taslak onu izler. | Values | – |
onSaveTaslağı kaydeder. Alan hatalarını göstermek için { field: message } döndürün ya da mesajı kaydetme çubuğunda göstermek için hata fırlatın. | (values) => void | errors | Promise<void | errors> | – |
validateonSave'den önce çalışır. Herhangi bir hata kaydetmeyi durdurur ve ilk geçersiz alana odaklanır. | (values) => errors | undefined | – |
useSettingsNavigate
Kabuğun içinde herhangi bir yerden bir bölüm açan bir fonksiyon döndürür, örneğin bir banner'ın Open düğmesi. Kaydedilmemiş değişikliklere kenar çubuğuyla aynı şekilde saygı gösterir.
| Prop | Tür | Varsayılan |
|---|---|---|
navigateBölümü açar ya da bir şey kaydedilmemişse kaydetme çubuğunu sallar. | (id: string) => void | – |
| Tuş | Action |
|---|---|
| Tab | Gezinti, ardından bölüm, ardından açıksa kaydetme çubuğu arasında gezinir. |
| Enter | Odaktaki bölümü açar. |
| ↑↓ | Bir artırıcıda sayıyı bir adım değiştirir. Shift on adım değiştirir. |
| Enter | Arama alanında ilk eşleşen bölümü açar. Escape aramayı temizler. |
| ⌘S | Kaydedilmemiş bir şey varken kaydeder. Windows ve Linux'ta Ctrl+S. |
- Gezinti bir landmark'tır ve açık bölüm geçerli sayfa olarak işaretlenir.
- Her bölüm, başlığıyla adlandırılmış bir bölgedir. Telefonlarda bir bölüm açıldığında odak başlığa, geri gidildiğinde satırına döner.
- Satırlar Field kullanır; böylece etiketler, açıklamalar ve hatalar kontrole bağlanır.
- Engellenen gezinme polite olarak duyurulur ve başarısız bir kaydetme alert olarak duyurulur.
- Kaydetme çubuğu ve gizli paneller etkisizdir; bu yüzden sekme sırasının dışındadır ve ekran okuyuculardan gizlenir.
- Azaltılmış harekette paneller kaymak yerine solar ve kaydetme çubuğunun sallanması bir halkaya dönüşür.
Şunlarla geliştirildi
Settings bloğunun yapıldığı ücretsiz HextaUI bileşenleri. Her biri tek başına yüklenir.
Kod
6 dosya, components/blocks/settings konumuna eklendi.