Dropdown menu
Bir düğmenin ardındaki eylem ve seçenek menüsü; gruplar, alt menüler, onay kutusu ve radyo öğeleri ile kısayollar içerir.
pnpm dlx shadcn@latest add https://hextaui.com/r/dropdown-menu.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/dropdown-menu.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Güvenli alan
Bir alt menü trigger'ından alt menüsüne doğru çapraz hareket etmek kardeş trigger'ları keser. Güvenli alan, işaretçi alt menüye doğru giderken alt menüyü açık tutar. Canlı görmek için showSafeArea'yı açın: nokta alanın içinde yeşile, alt menünün değişeceği yerde kırmızıya döner.
Onay kutuları
<DropdownMenuCheckboxItem /> bir ayarı değiştirir ve menüyü açık tutar; böylece birkaçı art arda değiştirilebilir. Onay işareti belirmek yerine çizilerek girer ve çıkar.
Radio group
Bir seçenek seçmek için <DropdownMenuRadioItem /> bileşenini bir <DropdownMenuRadioGroup /> içine sarın. Gruptaki bir etiket onu ekran okuyucular için adlandırır.
Sağda onay
Onay işaretini girintilemek yerine etiketten sonra göstermek için checkbox ve radio öğelerinde indicator="end" ayarlayın; bu, her seçeneğin altında açıklaması olan seçicilere uygundur.
Select benzeri
Menü asla trigger'ından dar olmaz. Birini seçmenin menüyü de kapatması gerekiyorsa radio öğelerinde closeOnClick ayarlayın.
Satır eylemleri
Tek bir menü her satıra hizmet eder. createDropdownMenuHandle ile bir handle oluşturun, her trigger'a bir payload ile geçirin ve payload'u menüde okuyun. Delete bir alert dialog'a devreder.
Kontrollü
open ve onOpenChange geçin. İkinci argüman, menünün neden değiştiğini söyler; örneğin bir trigger basışı, bir öğe basışı veya Escape. closeOnClick={false} olan öğeler menüyü açık tutar.
Üzerine gelince aç
Trigger üzerindeki openOnHover menüyü delay sonra açar ve closeDelay sonra kapatır. Tıklama ve klavye yine çalışır; böylece dokunmatik ve klavye kullanıcıları dışarıda kalmaz.
Devre dışı
Devre dışı bir trigger asla açılmaz. Devre dışı öğeler görünür kalır ve ok tuşlarıyla atlanır.
Uzun içerik
Etiketler menüyü 20rem'in ötesine uzatmak yerine sarar, kırılmayan dizeler herhangi bir yerde bölünür ve kısayollar ilk satırda kalır.
Kaydırma
Her öğeye yer olmadığında menü görünüm alanı içinde kayar ve vurgulanan öğe görünüme kayar.
Sheet içinde
Menü sheet'in üstünde katmanlanır. Escape önce menüyü, sonra sheet'i kapatır.
Sağdan sola
Menü, alt menü oku ve alt menü tarafı trigger'ın yönünü izler. Kısayollar soldan sağa sıralarını korur.
| Tuş | Action |
|---|---|
| EnterSpace↓ | Trigger üzerinde, menüyü açar ve ilk öğeyi vurgular. |
| ↓ | Sonraki öğeyi vurgular; sonda başa sarar. |
| ↑ | Önceki öğeyi vurgular; başta sona sarar. |
| Home | İlk öğeyi vurgular. |
| End | Son öğeyi vurgular. |
| EnterSpace | Vurgulanan öğeyi çalıştırır. Checkbox ve radio öğeleri değişir ve menüyü açık tutar. |
| → | Vurgulanan alt menüyü açar ve içine geçer. Sağdan sola düzenlerde ←. |
| ← | Geçerli alt menüyü kapatır ve trigger'ına döner. Sağdan sola düzenlerde →. |
| Esc | Geçerli menüyü kapatır ve odağı trigger'ına geri verir. Bir alt menüde yalnızca o alt menü kapanır. |
| A–Z | O harfle başlayan sonraki öğeyi vurgular. |
- Trigger bir menü düğmesi olarak duyurulur ve menü kapandığında odak ona geri döner.
- Yalnızca simgeli trigger'lara, satır eylemleri örneğindeki gibi bir
aria-labelverin. <DropdownMenuShortcut />yalnızca görsel bir etikettir. Tuşları kendiniz bağlayın.- Azaltılmış hareket açıkken menü ölçeklenmeden solar ve öğe yanıp sönmesi atlanır.
Base UI menu üzerine kuruludur. Her parça, sardığı primitive'in prop'larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
showSafeAreaMenü açıkken alt menü güvenli alanını çizer. Hata ayıklama ve demolar için. | boolean | false |
onOpenChangedetails.reason değişikliğe neyin yol açtığını belirtir. | (open: boolean, details) => void | – |
modalAçıkken sayfa kaydırmasını kilitler ve dış tıklamaları engeller. | boolean | true |
loopFocusOk tuşlarını iki uçta da sarın. | boolean | true |
handleAyrılmış trigger'ları bu menüye bağlar. | DropdownMenuHandle<Payload> | – |
childrenAçan trigger'ın payload'unu okumak için fonksiyon biçimini kullanın. | ReactNode | ({ payload }) => ReactNode | – |
disabled | boolean | false |
| Prop | Tür | Varsayılan |
|---|---|---|
openOnHover | boolean | false |
delayÜzerine gelmenin menüyü açmasından önceki milisaniye. | number | 100 |
closeDelayÜzerine gelince açılan bir menünün kapanmasından önceki milisaniye. | number | 0 |
handle | DropdownMenuHandle<Payload> | – |
payloadBu trigger menüyü açtığında menüye geçirilir. | Payload | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="dropdown-menu-trigger" | CSS'te tetikleyiciyi hedefleyin. |
data-popup-open | Menüsü açıkken bulunur. |
data-pressed | Tetikleyiciye basılıyken bulunur. |
data-disabled | Trigger devre dışıyken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
side | "top" | "bottom" | "left" | "right" | "inline-start" | "inline-end" | "bottom" |
align | "start" | "center" | "end" | "start" |
sideOffset | number | 4 |
alignOffset | number | 0 |
collisionPaddingMenü ile görünüm alanı kenarı arasında bırakılan boşluk. | number | Rect | 8 |
anchorTrigger yerine başka bir öğeye göre konumlandırın. | Element | RefObject | VirtualElement | – |
sticky | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="dropdown-menu-content" | CSS'te menüyü hedefleyin. |
data-open | Menü açıkken bulunur. |
data-starting-style | Menü açılma animasyonu sırasında bulunur. |
data-ending-style | Menü kapanma animasyonu sırasında bulunur. |
data-side | Çarpışma işlemesinden sonra menünün yerleştiği taraf. |
data-align | Yerleştiği hizalama. |
data-chosen | Bir öğe tıklandıktan sonra bulunur; menü kapanmadan önce öğenin onay yanıp sönmesini bekler. |
--anchor-width | Trigger'ın genişliği. Menü en az bu kadar geniştir. |
--available-height | Görünüm alanında kalan yer. Uzun menüler içinde kayar. |
--transform-origin | Ölçek animasyonunun büyüdüğü, trigger'ın yanındaki nokta. |
| Prop | Tür | Varsayılan |
|---|---|---|
variant | "default" | "destructive" | "default" |
insetÖğeyi checkbox öğeleriyle hizalamak için girintiler. | boolean | false |
closeOnClick | boolean | true |
onClick | (event) => void | – |
labelAlt öğeler düz metin olmadığında type-ahead için kullanılan metin. | string | – |
disabled | boolean | false |
renderrender={<a href="…" />} ile bir bağlantı render edin. | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="dropdown-menu-item" | CSS'te öğeleri hedefleyin. |
data-variant | Geçerli varyant. |
data-highlighted | Öğe işaretçi veya klavye tarafından vurgulanırken bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
data-chosen | Yanıp sönerken az önce tıklanan öğede bulunur. |
data-inset | inset ayarlandığında bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
checked | boolean | – |
defaultChecked | boolean | false |
onCheckedChange | (checked: boolean, details) => void | – |
closeOnClick | boolean | false |
inset | boolean | false |
indicator | "start" | "end" | "start" |
disabled | boolean | false |
| Öznitelik | Açıklama |
|---|---|
data-slot="dropdown-menu-checkbox-item" | CSS'te checkbox öğelerini hedefleyin. |
data-checked | İşaretliyken bulunur. |
data-unchecked | İşaretli değilken bulunur. |
data-highlighted | Öğe işaretçi veya klavye tarafından vurgulanırken bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
data-chosen | Yanıp sönerken az önce tıklanan öğede bulunur. |
data-inset | inset ayarlandığında bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
value | Value | – |
defaultValue | Value | – |
onValueChange | (value: Value, details) => void | – |
disabled | boolean | false |
| Prop | Tür | Varsayılan |
|---|---|---|
value | Value | – |
closeOnClick | boolean | false |
inset | boolean | false |
indicator | "start" | "end" | "start" |
disabled | boolean | false |
| Öznitelik | Açıklama |
|---|---|
data-slot="dropdown-menu-radio-item" | CSS'te radio öğelerini hedefleyin. |
data-checked | Seçili öğede bulunur. |
data-unchecked | Diğer öğelerde bulunur. |
data-highlighted | Öğe işaretçi veya klavye tarafından vurgulanırken bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
data-chosen | Yanıp sönerken az önce tıklanan öğede bulunur. |
data-inset | inset ayarlandığında bulunur. |
İlgili öğeleri gruplar. İçindeki bir <DropdownMenuLabel /> grubun erişilebilir adı olur.
| Prop | Tür | Varsayılan |
|---|---|---|
inset | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
Gruplar arasındaki, ayırıcı olarak duyurulan bir bölücü.
| Prop | Tür | Varsayılan |
|---|---|---|
dirKısayollar sağdan sola menülerde tuş sıralarını korur. | "ltr" | "rtl" | "ltr" |
| Prop | Tür | Varsayılan |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open: boolean, details) => void | – |
closeParentOnEscEscape'te yalnızca bu alt menüyü değil, tüm menüyü kapatın. | boolean | false |
| Prop | Tür | Varsayılan |
|---|---|---|
inset | boolean | false |
disabled | boolean | false |
delayÜzerine gelmenin alt menüyü açmasından önceki milisaniye. | number | 100 |
closeDelay | number | 0 |
| Öznitelik | Açıklama |
|---|---|
data-slot="dropdown-menu-sub-trigger" | CSS'te alt menü trigger'larını hedefleyin. |
data-popup-open | Alt menüsü açıkken bulunur. |
data-highlighted | Vurgulanmışken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
sideOffset | number | 0 |
alignOffset | number | -4 |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="dropdown-menu-sub-content" | CSS'te alt menüleri hedefleyin. |
data-open | Menü açıkken bulunur. |
data-starting-style | Menü açılma animasyonu sırasında bulunur. |
data-ending-style | Menü kapanma animasyonu sırasında bulunur. |
data-side | Çarpışma işlemesinden sonra menünün yerleştiği taraf. |
data-align | Yerleştiği hizalama. |
data-chosen | Bir öğe tıklandıktan sonra bulunur; menü kapanmadan önce öğenin onay yanıp sönmesini bekler. |
--available-height | Görünüm alanında kalan yer. Uzun menüler içinde kayar. |
--transform-origin | Ölçek animasyonunun büyüdüğü, trigger'ın yanındaki nokta. |
- 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.
- DialogFormlar 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.
- 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.
- Hover cardBir bağlantının üzerine gelindiğinde ya da odaklanıldığında açılan, görme engeli olmayan kullanıcıların göz atabileceği içerikler için bir önizleme kartı.
Kullanıldığı bloklar
Dropdown menu ü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.
- ArtifactModelin ürettiğini gösteren, yapay zeka sohbetinin yanındaki panel. Web sayfaları, SVG'ler, belgeler ve kod canlı olarak akar, ardından korumalı bir önizlemeye geçer; karşılaştırıp geri yükleyebileceğiniz sürümler, yeniden boyutlandırılabilir bir bölme ve telefonlarda alt sayfa sunar.
- Chat SidebarBir sohbet uygulaması için kenar çubuğu. Üstte logo, arama ve Yeni sohbet, altında kendi bağlantılarınız, sabitlenmiş sohbetler, sohbetlerini göstermek için genişleyen projeler, güne göre gruplanmış son sohbetler ve hover ile sağ tık menüleri, satır içi yeniden adlandırma, geri alınabilir silme ve canlı yanıt durumları olan satırlar.