Slider
Sürükleyerek, ize dokunarak veya tuşlarla bir değer ya da aralık seçin; süzülen atlamalar ve isteğe bağlı bir değer balonuyla.
pnpm dlx shadcn@latest add https://hextaui.com/r/slider.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 class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/slider.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
<Slider /> değer başına bir başparmak çizer; bu yüzden bir sayı veya tek öğeli bir dizi tek bir slider, iki öğe ise bir aralık oluşturur. <SliderLabel /> ve <SliderValue /> gibi alt öğeler izin üstünde tek satırda durur.
Sürüklerken başparmak işaretçiyi tam olarak izler. Değer ize basma, bir tuş veya yeni kontrollü bir değerle atladığında başparmak ve dolgu ışınlanmak yerine 180ms'de oraya süzülür.
Boyutlar
sm, default ve lg başparmağı ve izi birlikte ölçekler.
Aralık
Bir aralık için iki değer verin. Her başparmağı getAriaLabel ile adlandırın ve minStepsBetweenValues ile birbirinden uzak tutun. draggableRange ile ikisini birden hareket ettirmek için başparmaklar arasında herhangi bir yeri sürükleyin; oraya dokunmak yine en yakın başparmağı hareket ettirir.
Değer balonu
showValue sürüklenirken veya klavyeyle odaklanırken biçimlendirilmiş değeri başparmağın üstünde gösterir. Balon izin üstündeki boşluğa yükseldiği için bunu bir etiket satırı yerine kullanın.
Adımlar ve biçim
step değeri yakalar, largeStep Page Up ve Shift + ok atlamasını belirler, format ise slider'ın gösterdiği veya duyurduğu her sayıyı biçimlendirir.
Kontrollü
onValueChange her harekette, onValueCommitted ise bırakıldığında bir kez tetiklenir; kaydetmek için doğru an budur. Değeri dışarıdan ayarlamak da süzülür.
Dikey
orientation="vertical" ile slider üst öğesinin yüksekliğini doldurur ve Yukarı değeri artırır.
Simgelerle
Simgeleri slider'ın yanına bir flex satırında yerleştirin. Slider kalan genişliği alır.
Devre dışı
Tüm slider solar ve işaretçi ile klavye girdisini yok sayar.
Uzun etiketler
Uzun etiketler sarar ve değer sonda kalır.
Sağdan sola
Sağdan sola bir üst öğenin içinde dolgu sağdan başlar ve ok tuşları onu izler. Okuyucunun rakamları için locale verin.
| Tuş | Action |
|---|---|
| Tab | Odağı sonraki başparmağa taşır. |
| →↑ | Değeri bir adım artırır. Sağdan solda → azaltır. |
| ←↓ | Değeri bir adım azaltır. Sağdan solda ← artırır. |
| Shift + ArrowPage UpPage Down | largeStep kadar hareket eder. |
| Home | Minimumu ya da bir aralıkta önceki başparmağın değerini ayarlar. |
| End | Maksimumu ya da bir aralıkta sonraki başparmağın değerini ayarlar. |
- Her başparmak yerel bir
input type="range"tutar; yani kendi değeri, min ve max değerleri olan birslider'dır. <SliderLabel />her başparmağı adlandırır. Olmadan<Slider />üzerindekiaria-labelsarmalayıcıya değil başparmaklara iletilir; böylece slider hiçbir zaman adsız kalmaz. Bir aralıkta başparmakları ayırt etmek içingetAriaLabelkullanın.<SliderValue />ve değer balonu her değişiklikte duyurulmaz; başparmak değerini zaten bildirir.- Bir başparmağa basmak odak halkası göstermez; ok tuşları gösterir. Azaltılmış harekette başparmak süzülmek yerine atlar.
- Dokunmatik ekranlarda tıklama alanı düzeni değiştirmeden en az 44px'e büyür.
Base UI slider üzerine kuruludur. Her parça sardığı ilkelin prop'larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
valueKontrollü değer. Öğe başına bir başparmak. | number | number[] | – |
defaultValue | number | number[] | – |
onValueChangeSürüklerken her değişiklikte tetiklenir. | (value, eventDetails) => void | – |
onValueCommittedBir değişiklik bittiğinde bir kez tetiklenir. | (value, eventDetails) => void | – |
min | number | 0 |
max | number | 100 |
step | number | 1 |
largeStep | number | 10 |
minStepsBetweenValues | number | 0 |
size | "sm" | "default" | "lg" | "default" |
orientation | "horizontal" | "vertical" | "horizontal" |
draggableRangeBir aralıkta başparmaklar arasında sürüklemek aradaki boşluğu koruyarak ikisini birlikte hareket ettirir. | boolean | false |
showValueSürüklerken veya klavye odağındayken değeri başparmağın üstünde gösterir. | boolean | false |
thumbAlignmentedge, başparmağı min ve max değerlerinde izin içinde tutar. | "edge" | "center" | "edge-client-only" | "edge" |
thumbCollisionBehavior | "push" | "swap" | "none" | "push" |
format | Intl.NumberFormatOptions | – |
locale | Intl.LocalesArgument | "en-US" |
aria-labelBaşparmakları adlandırır. | string | – |
getAriaLabelBir aralığın her başparmağını adlandırır. | (index: number) => string | – |
getAriaValueText | (formattedValue: string, value: number, index: number) => string | – |
name | string | – |
disabled | boolean | false |
className | string | (state) => string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="slider" | Kök. |
data-size | sm, default veya lg. |
data-jump | Başparmak yeni bir değere süzülürken 220ms boyunca bulunur. |
data-range-dragging | Tüm aralık sürüklenirken bulunur. |
data-orientation | horizontal veya vertical. |
data-dragging | İşaretçi basılıyken bulunur. |
data-disabled | Devre dışıyken bulunur. |
data-invalid | Bir Field içinde geçersizken bulunur. |
--slider-thumb | Başparmağın çapı; size ile belirlenir. |
--slider-track | İzin kalınlığı; size ile belirlenir. |
data-slot="slider-control" | İzin çevresindeki basılabilir alan. |
data-slot="slider-track" | İz. |
data-slot="slider-range" | Başlangıç veya ilk başparmak ile son başparmak arasındaki dolgu. |
data-slot="slider-thumb" | Her başparmak. data-index konumunu verir. |
data-active | Odaktaki veya sürüklenen başparmakta. |
data-slot="slider-thumb-value" | showValue'dan gelen değer balonu. |
Başparmakları adlandırır ve satırı dolduracak şekilde büyür. Bir <div> işler.
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="slider-label" | Etiket. |
Biçimlendirilmiş değerleri gösterir; aralıkta bir en tire ile birleştirilir. Bir <output> işler.
| Prop | Tür | Varsayılan |
|---|---|---|
childrenÖzel metin. | (formattedValues: string[], values: number[]) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | <output> |
| Öznitelik | Açıklama |
|---|---|
data-slot="slider-value" | Değer. |
data-orientation | horizontal veya vertical. |
data-dragging | İşaretçi basılıyken bulunur. |
data-disabled | Devre dışıyken bulunur. |
data-invalid | Bir Field içinde geçersizken bulunur. |
- CalendarTekli, aralık ve çoklu seçim için, kayan aylar, aralık önizlemeleri ve dokunmaya uygun boyutta günler içeren bir tarih ızgarası.
- Checkboxİşareti çizilerek beliren, belirsiz üst öğeleri, grupları ve hover durumunu paylaşan etiketleri olan bir onay kutusu.
- ComboboxÇipler, gruplar ve asenkron sonuçlar içeren, siz yazdıkça boyutu değişen bir açılır pencerede filtrelenebilir bir select.
- Date pickerTek tarihler ve aralıklar için takvimi bir popover içinde, telefonlarda ise alt sayfa olarak açan bir düğme.
- FieldKontrolüne bağlanmış etiketler, açıklamalar ve hatalar; doğrulama durumları ve formlar için düzenler içerir.
- InputÜç boyutlu, geçersiz ve salt okunur durumları, yerel doğrulama stilleri ve telefonların asla yakınlaştırmaması için 16px dokunmatik yazı tipi olan bir metin girişi.
Kullanıldığı bloklar
Slider üzerine kurulan bloklar.
- 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.
- 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.
- ProfileBir yapay zeka ürününün ayarlarındaki Profil bölümü. Fotoğrafı daire içine kırpın, siz yazarken kontrol edilen bir kullanıcı adı seçin, yeni e-postayı 6 haneli bir kodla onaylayın, siteyi tanıyan bağlantılar ekleyin ve başkalarının sizi nasıl gördüğünü canlı bir kartta izleyin.
- SettingsCursor 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ı.