Context menu
Sağ 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.
Last action: Nothing yet
pnpm dlx shadcn@latest add https://hextaui.com/r/context-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/context-menu.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Dosya listesi
Her satıra kendi menüsünü verin. Açık satır vurgulu kalır ve yıkıcı bir öğe onay için bir alert dialog'a devreder.
Kontrollü
State'i kendiniz yönetmek için open ve onOpenChange geçin. İkinci argüman trigger-press, outside-press veya escape-key gibi değişimin nedenini söyler. closeOnClick={false} olan öğeler menüyü açık tutar.
Devre dışı
Devre dışı bir <ContextMenu /> alanı tarayıcının kendi menüsüne geri verir. Devre dışı öğeler görünür kalır ancak klavye tarafından atlanır.
Basılı tutma geri bildirimi
Dokunmatik ekranlarda menü uzun basıştan sonra açılır. Parmak basılıyken alan hafifçe küçülür; böylece kişiler basışın algılandığını anlar. Parmağı hareket ettirmek iptal eder. Kapatmak için holdFeedback={false} ayarlayın.
Uzun içerik
Uzun etiketler 20rem azami genişlik içinde sarar ve uzun menüler görünüm alanında kalan alan içinde kayar.
İç içe alt menüler
Alt menüler herhangi bir derinlikte üzerine gelince veya ok tuşlarıyla açılır. Devre dışı bir alt menü trigger'ı asla açılmaz.
Sheet içinde
Menü diğer bindirmelerin üstünde katmanlanır ve Escape yalnızca menüyü kapatır, arkadaki sheet'i kapatmaz.
Başka bir öğe olarak render edin
Trigger'ı bir figure gibi herhangi bir öğe yapmak veya bir öğeyi bağlantıya dönüştürmek için render kullanın.
Sağdan sola
Menü trigger'ın yönünü okur; böylece alt menüler sola açılır ve ok tuşları ters döner.
| Tuş | Action |
|---|---|
| ↓ | 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. Bir alt menüde yalnızca o alt menü kapanır. |
| A–Z | O harfle başlayan sonraki öğeyi vurgular. |
- Bir context menu bir kısayoldur. Çoğu kişi sağ tıklamadığı veya uzun basmadığı için içindeki her eyleme görünür bir düğme veya dropdown menü gibi başka bir yolla da ulaşılabilmelidir.
- Tarayıcılar odaklı bir öğede Shift F10 ve Menu tuşu için de context menu olayını tetikler; bu yüzden trigger'ın içindeki odaklanabilir bir öğe klavye kullanıcılarının menüyü açmasını sağlar.
<ContextMenuShortcut />içindeki kısayollar yalnızca etikettir. Tuşları kendiniz bağlayın.- Azaltılmış hareket açıkken basılı tutma geri bildirimi ve öğe yanıp sönmesi atlanır; menü yalnızca solar.
Base UI context menu üzerine kuruludur. Her parça, sardığı primitive'in prop'larını ve parçanın state'ini alan bir fonksiyon className'i kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChangedetails.reason değişikliğe neyin yol açtığını belirtir. | (open: boolean, details) => void | – |
onOpenChangeCompleteAçılma veya kapanma animasyonu bittikten sonra çalışır. | (open: boolean) => void | – |
disabledBunun yerine tarayıcının yerel menüsünü gösterir. | boolean | false |
loopFocusOk tuşuyla gezinmeyi uçlarda sarın. | boolean | true |
highlightItemOnHover | boolean | true |
actionsRefMenüyü kod üzerinden kapatın. | RefObject<{ close, unmount }> | – |
| Prop | Tür | Varsayılan |
|---|---|---|
holdFeedbackDokunmatik ekranlarda uzun basış sürerken alanı hafifçe küçültün. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-menu-trigger" | CSS'te tetikleyiciyi hedefleyin. |
data-popup-open | Menüsü açıkken bulunur. |
data-holding | Uzun basış sürerken bulunur. |
data-pressed | Tetikleyiciye basılıyken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
sideİşaretçiye göre tercih edilen taraf. | "top" | "right" | "bottom" | "left" | "inline-start" | "inline-end" | "bottom" |
align | "start" | "center" | "end" | "start" |
sideOffset | number | 0 |
alignOffset | number | 0 |
collisionPaddingMenü ile görünüm alanı kenarları arasında bırakılacak boşluk. | number | { top, right, bottom, left } | – |
collisionAvoidanceMenü taşacağı zaman nasıl ters döner veya kayar. | CollisionAvoidance | – |
anchorİşaretçiden başka bir şeye göre konumlandırın. | Element | VirtualElement | RefObject | – |
finalFocusMenü kapandıktan sonra odağın gittiği yer. | boolean | RefObject | (closeType) => HTMLElement | boolean | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-menu-content" | Menü popup'ı. |
data-open | 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ışmalardan sonra yerleştirildiği taraf. |
data-chosen | Bir öğe tıklandıktan sonra bulunur. Solarak kaybolma, yanıp sönmeyi bekler. |
--transform-origin | Ölçek animasyonunun büyüdüğü nokta. |
--available-height | Görünüm alanında kalan alan. Menü yüksekliğini sınırlar. |
| Prop | Tür | Varsayılan |
|---|---|---|
variant | "default" | "destructive" | "default" |
insetEtiketi checkbox öğeleriyle hizalamak için girintileyin. | boolean | false |
onClickTıklamada, Enter'da veya Space'te çalışır. Menü kısa bir yanıp sönmeden sonra kapanır. | (event) => void | – |
closeOnClick | boolean | true |
disabled | boolean | false |
labelAlt öğeler düz metin olmadığında typeahead için kullanılan metin. | string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-menu-item" | CSS'te öğeleri hedefleyin. |
data-variant | Geçerli varyant. |
data-highlighted | İşaretçinin veya klavye odağının altındaki öğede bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
data-inset | inset ayarlandığında bulunur. |
data-chosen | Yanıp sönerken tıklanan öğede bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
checked | boolean | – |
defaultChecked | boolean | false |
onCheckedChange | (checked: boolean, details) => void | – |
closeOnClick | boolean | false |
inset | boolean | false |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-menu-checkbox-item" | CSS'te checkbox öğelerini hedefleyin. |
data-checked | İşaretliyken bulunur. |
data-unchecked | İşaretsizken bulunur. |
data-highlighted | İşaretçinin veya klavye odağının altındaki öğede bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
data-inset | inset ayarlandığında bulunur. |
data-chosen | Yanıp sönerken tıklanan öğede bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
value | any | – |
defaultValue | any | – |
onValueChange | (value: any, details) => void | – |
disabled | boolean | false |
| Prop | Tür | Varsayılan |
|---|---|---|
value | any | – |
closeOnClick | boolean | false |
inset | boolean | false |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-menu-radio-item" | CSS'te radio öğelerini hedefleyin. |
data-checked | Seçiliyken bulunur. |
data-highlighted | İşaretçinin veya klavye odağının altındaki öğede bulunur. |
data-disabled | Öğe devre dışıyken bulunur. |
data-inset | inset ayarlandığında bulunur. |
data-chosen | Yanıp sönerken tıklanan öğede bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
inset | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
<ContextMenuGroup /> veya <ContextMenuRadioGroup /> içinde grubu yardımcı teknolojiler için etiketler. Başka yerde düz bir başlıktır.
| Prop | Tür | Varsayılan |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open: boolean, details) => void | – |
disabled | boolean | false |
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 |
openOnHover | boolean | true |
delayAlt menü açılmadan önce üzerine gelme süresi, milisaniye olarak. | number | 100 |
closeDelay | number | 0 |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-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. |
data-disabled | Devre dışıyken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
sideVarsayılan olarak satır içi sona doğru açılır. | "top" | "right" | "bottom" | "left" | "inline-start" | "inline-end" | – |
align | "start" | "center" | "end" | – |
sideOffset | number | 0 |
alignOffset | number | -4 |
collisionPaddingMenü ile görünüm alanı kenarları arasında bırakılacak boşluk. | number | { top, right, bottom, left } | – |
collisionAvoidanceMenü taşacağı zaman nasıl ters döner veya kayar. | CollisionAvoidance | – |
anchorİşaretçiden başka bir şeye göre konumlandırın. | Element | VirtualElement | RefObject | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-menu-sub-content" | Alt menü popup'ı. Menüyle aynı state niteliklerini alır. |
| Prop | Tür | Varsayılan |
|---|---|---|
dir⇧⌘S gibi kısayolları sağdan sola menülerde sırasında tutar. | "ltr" | "rtl" | "ltr" |
| Öznitelik | Açıklama |
|---|---|
data-slot="context-menu-shortcut" | Kısayol etiketi. |
<ContextMenuGroup /> ilgili öğeleri bir etiket altında gruplar. <ContextMenuSeparator /> bir ayırıcı çizer. İkisi de render ve className kabul eder ve data-slot olarak context-menu-group ve context-menu-separator taşır.
- 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.
- 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.
- Dropdown menuBir düğmenin ardındaki eylem ve seçenek menüsü; gruplar, alt menüler, onay kutusu ve radyo öğeleri ile kısayollar 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
Context menu üzerine kurulan bloklar.