Tree
Dosyalar ve hiyerarşiler için girinti kılavuzları, bağlayıcı çizgiler, basamaklı onay kutuları, typeahead ve tam klavye desteğiyle iç içe, genişletilebilir satırlar.
pnpm dlx shadcn@latest add https://hextaui.com/r/tree.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/tree.tsx components/ui/checkbox.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
<TreeGroup /> içeren bir öğe bir daldır: ok işareti alır, açılıp kapanır ve ok tuşlarına yanıt verir. Her öğenin ağaç içinde benzersiz bir value değeri olmalıdır.
Girinti kılavuzları
variant="lines" her seviye için bir kılavuz çizer. Seçili veya odaktaki satırı tutan dalın kılavuzu koyulaşır; böylece derin ağaçlarda nerede olduğunuzu görebilirsiniz.
Bağlayıcılar
variant="connectors" her öğeyi, bir terminal ağaç listesi gibi, üst öğesine dirsekle bağlar. Sürümler, boyutlar veya sayılar için meta kullanın.
Onay kutuları
checkboxes ile bir dalı işaretlemek içindeki her etkin öğeyi işaretler ve kısmen işaretli bir dal tire gösterir. Bir dalı işaretlemek sonradan yükleyeceğiniz alt öğeleri işaretlemek de sayılır. Bir satıra tıklamak onu işaretler, ok işareti açar.
Gezinti
Satırları render ile bağlantı olarak işleyin. Geçerli sayfayı selectedValues'a verin, bölümünü açın ve satırında aria-current ayarlayın.
Çoklu seçim
selectionMode="multiple" bir dosya yöneticisi gibi çalışır: tek satır seçmek için tıklayın, birini eklemek veya kaldırmak için Cmd/Ctrl+tıklayın, aralık seçmek için Shift+tıklayın. Dokunmatik ekranlarda dokunuş satırı ekler veya kaldırır.
Kontrollü
Açık dalları expandedValues ve onExpandedValuesChange ile kendi durumunuzda tutun. Bu örnek ağacı ayrıca özyinelemeli bir fonksiyonla veriden oluşturur.
Tembel yükleme
Alt öğeleri <TreeItem /> üzerindeki onExpandedChange içinde getirin. Gelene kadar devre dışı bir yükleniyor satırı işleyin; böylece dal ok işaretini korur.
Küçük
size="sm" kenar çubukları için daha kısa satırlar ve daha dar girintiler kullanır. Satırlar her iki boyutta da dokunmatik ekranlarda büyür.
Devre dışı
Devre dışı bir öğe seçilemez, işaretlenemez veya açılamaz ve ok tuşları onu atlar. Devre dışı bir dalın içindeki öğeler de devre dışıdır.
Uzun adlar
Adlar üç noktayla kesilir ve meta görünür kalır. Tam adı hover'da göstermek için title verin.
Sağdan sola
Girintiler, bağlayıcılar ve ok işaretleri yansıtılır; sol ve sağ ok tuşları yer değiştirir.
| Tuş | Action |
|---|---|
| ↓ | Odağı sonraki görünen satıra taşır. |
| ↑ | Odağı önceki görünen satıra taşır. |
| → | Kapalı bir dalı açar. Açık bir dalda odağı ilk alt öğesine taşır. |
| ← | Açık bir dalı kapatır. Aksi halde odağı üst öğeye taşır. |
| Home | Odağı ilk satıra taşır. |
| End | Odağı son görünen satıra taşır. |
| Enter | Satırı seçer ve dalsa açar veya kapatır. Bağlantı satırlarında bağlantıyı izler. |
| Space | Satırı seçer, çoklu modda ekler veya kaldırır ya da onay kutularıyla işaretler. |
| Shift + ↑Shift + ↓ | Çoklu modda seçimi genişletir. |
| Cmd/Ctrl + A | Çoklu modda her görünen satırı seçer. |
| * | Odaktaki satırın seviyesindeki her dalı açar. |
| a–z | Odağı adı yazılan harflerle başlayan sonraki satıra taşır. |
Ağaç WAI-ARIA tree view kalıbını izler. Her satır treeitem'dır ve grubuna aria-owns ile sahip olur; böylece bir satırın adı yalnızca kendi etiketidir ve bağlantı satırları gerçek bağlantı olarak çalışır. Sekme sırasında aynı anda yalnızca bir satır bulunur. Odaktaki satırın çevresindeki bir dal kapanırsa odak kaybolmak yerine o dala taşınır.
Kapalı gruplar sayfada kalır; böylece tarayıcının sayfada bul özelliği bir eşleşmenin çevresindeki klasörleri açar ve bir dalı işaretlemek içindeki her öğeyi görür. Ağaca bir aria-label verin.
Dallar Base UI collapsible ile açılıp kapanır. <TreeItem /> ve <TreeGroup /> sardıkları parçaların prop'larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
variant | "default" | "lines" | "connectors" | "default" |
size | "default" | "sm" | "default" |
selectionMode | "none" | "single" | "multiple" | "single" |
selectedValues | string[] | – |
defaultSelectedValues | string[] | – |
onSelectedValuesChange | (values: string[]) => void | – |
expandedValues | string[] | – |
defaultExpandedValues | string[] | – |
onExpandedValuesChange | (values: string[]) => void | – |
checkboxesBasamaklı onay kutularını gösterir. Satırlar seçilmek yerine işaretlenir. | boolean | false |
checkedValuesİşaretli öğeler. Listedeki bir dal, alt öğelerinin işaretlenmesi sayılır. | string[] | – |
defaultCheckedValues | string[] | – |
onCheckedValuesChangeİşaretli her yaprak ve tamamen işaretli her dalla çağrılır. | (values: string[]) => void | – |
disabled | boolean | false |
hiddenUntilFoundSayfada bul özelliğinin bir eşleşmenin çevresindeki kapalı dalları açmasına izin verir. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="tree" | CSS'te kökü hedefleyin. |
data-variant | Geçerli varyant. |
data-size | Geçerli boyut. |
--tree-row-height | Satır yüksekliği. Dokunmatik ekranlarda daha büyük. |
--tree-indent | Her seviyenin ne kadar girintileneceği. |
| Prop | Tür | Varsayılan |
|---|---|---|
valueZorunlu. Ağaç içinde benzersiz. | string | – |
disabled | boolean | false |
onExpandedChangeBu öğe açıldığında veya kapandığında çağrılır. | (expanded: boolean) => void | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="tree-item" | CSS'te öğeleri hedefleyin. |
data-open | Öğe açık olduğunda bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
iconEtiketten önce gösterilir. | ReactNode | – |
expandedIconDal açıkken icon için çapraz solarak girer. | ReactNode | – |
metaSatırın sonunda gösterilir; boyut, sayı veya durum gibi. | ReactNode | – |
className | string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="tree-item-label" | CSS'te satırları hedefler. |
data-value | Öğenin değeri. |
data-expanded | Dal açıkken bulunur. |
data-selected | Satır seçiliyken bulunur. |
data-checked | Satır işaretliyken bulunur. |
data-indeterminate | Yalnızca bazı alt öğeler işaretliyken bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
classNameİç sarmalayıcıya uygulanır; böylece dolgu hiçbir zaman yükseklik animasyonuyla çakışmaz. | string | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="tree-group" | CSS'te grupları hedefleyin. |
data-open | Grup açıkken bulunur. |
data-starting-style | Grup animasyonla girerken bulunur. |
data-ending-style | Grup animasyonla çıkarken bulunur. |
--collapsible-panel-height | Grubun ölçülen yüksekliği; yükseklik animasyonu için kullanılır. |
- Checkboxİşareti çizilerek beliren, belirsiz üst öğeleri, grupları ve hover durumunu paylaşan etiketleri olan bir onay kutusu.
- AvatarBaş harf yedekli kullanıcı fotoğrafları, durum rozetleri ve sayıya daralan yığılmış gruplar.
- BadgeRenkli noktalı durum etiketleri, kayarak kapanan kaldırılabilir etiketler ve yeni değerine dönen sayaçlar.
- Cardİçeriği gruplamak için bir yüzey; üç varyant, kenardan kenara medya, eşmerkezli yarıçaplar ve tüm kartı kaplayan bağlantılar içerir.
- ChartTema renkli Recharts grafikleri; etiketleri tek bir yapılandırmadan okuyan bir tooltip ve gösterge, ayrıca görünür odak halkalı klavye gezintisi.
- Data tableGerçek veriler için bir tablo; sıralama, arama, satır seçimi, sabitlenmiş sütunlar, yapışkan başlık ve sayfalama içerir.
Kullanıldığı bloklar
Tree üzerine kurulan bloklar.
- Diff ReviewBir ajanın dosyalardaki düzenlemelerini uygulanmadan önce gözden geçirin. Sayaçlı bir dosya ağacı, her değişikliği, her dosyayı ya da hepsini kabul veya reddetme, herhangi bir satıra ya da aralığa ajana geri giden yorumlar, birleşik ve bölünmüş görünümler, kelime düzeyinde vurgular, geri alma, akışla gelen düzenlemeler ve sohbet için bir “4 dosya düzenlendi” özeti.
- Tool CallsBir ajanın ne yaptığını adım başına bir satırla gösterin. Okuma ve aramalar kısa bir özete katlanırken düzenlemeler, komutlar, onaylar ve hatalar görünür kalır. Her adım gerçek bir görünüme açılır: dosya, fark, terminal ya da sonuçlar. Onay yerine gerekçe verme seçeneği dahil, her AI SDK araç durumu kapsanır.