Popover
Bir trigger'a sabitlenen, içeriğiyle birlikte düzgünce yeniden boyutlanan ve trigger'ın yönünü izleyen yüzen bir panel.
pnpm dlx shadcn@latest add https://hextaui.com/r/popover.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 cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/popover.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Boyutu değişen içerik
İçerik büyüdüğünde veya küçüldüğünde açılır pencere zıplamak yerine yüksekliğini animasyonla değiştirir. Yazma gibi sürekli değişimler içeriği doğrudan izler, böylece hiçbir şey geride kalmaz.
Kontrollü
Kendi durumunuzdan yönetmek için open ve onOpenChange verin. İkinci argüman değişimin nedenini söyler: trigger-press, outside-press veya escape-key gibi.
Yerleşim
side ve align tercih edilen konumu belirler. Yer olmadığında açılır pencere diğer tarafa çevrilir ve kenarlardan 8px uzakta kalarak ekranda kalmak için kayar.
Üzerine gelince aç
Önizleme kartları için tetikleyicide openOnHover ayarlayın. delay ve closeDelay, imleç üzerinden geçerken titremesini önler.
Ayrık tetikleyiciler
Ağacın herhangi bir yerindeki birden çok tetikleyici arasında tek bir popover paylaşmak için createPopoverHandle ile bir handle oluşturun. Her tetikleyici bir payload geçirir ve açılır pencere onu bir fonksiyon alt öğesiyle işler.
Takvimle
Kendi dolgusunu getiren içeriğe uymak için className="w-auto p-0" kullanın. Açılır pencere, takvim ay değiştirdikçe onu izler.
İç içe
Başka bir popover veya sheet içindeki popover, üst öğesinin üzerinde katmanlanır. Alt öğenin içindeki tıklamalar üst öğeyi açık tutar ve Escape yalnızca en üstteki katmanı kapatır.
Uzun içerik
Bölünmeyen metin açılır pencerenin içinde sarar. İçerik mevcut alandan uzunsa açılır pencere ekran dışına taşmak yerine kendi içinde kayar.
Modal
modal ile sayfa kaydırma kilitlenir ve dış tıklamalar yalnızca popover'ı kapatır. Odağın tuzağa alınabilmesi ve dokunmatik ekran okuyucuların bir çıkış yolu olması için içeride bir <PopoverClose /> işleyin.
Devre dışı
disabled bir tetikleyici popover'ını hiç açmaz.
Sağdan sola
Açılır pencere bir portal içinde işlense de onu açan tetikleyicinin yönünü alır. inline-end gibi mantıksal taraflar onunla birlikte döner.
| Tuş | Action |
|---|---|
| EnterSpace | Tetikleyicide popover'ı açar veya kapatır. Odak açılır pencereye geçer. |
| Tab | Açılır pencerenin içeriğinde gezinir. Modal olmayan bir popover'dan Tab ile çıkmak onu kapatır. |
| Esc | Popover'ı kapatır ve odağı tetikleyiciye döndürür. |
<PopoverTitle />ve<PopoverDescription />açılır pencereyi ekran okuyucular için etiketler ve tanımlar. Açılır pencere bir cümleden fazlasını içerdiğinde mutlaka bir başlık ekleyin.- Odak açılırken ilk odaklanabilir öğeye, kapanırken tetikleyiciye geri döner. Bunu
initialFocusvefinalFocusile değiştirin. - Azaltılmış hareket açıkken açılır pencere ölçeklenmeden solar.
Base UI popover üzerine kuruludur. Her parça sardığı ilkelin prop'larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
defaultOpen | boolean | false |
open | boolean | – |
onOpenChangedetails.reason değişikliğe neyin yol açtığını belirtir. | (open: boolean, details) => void | – |
onOpenChangeCompleteAçma ya da kapatma animasyonu bittikten sonra çağrılır. | (open: boolean) => void | – |
modaltrue sayfa kaydırmayı ve dış etkileşimi kilitler. trap-focus yalnızca odağı tuzağa alır. | boolean | "trap-focus" | false |
handleAyrık tetikleyicileri bağlar. | PopoverHandle<Payload> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
openOnHover | boolean | false |
delayHover'da açılmadan önceki milisaniye. | number | 300 |
closeDelayHover bittikten sonra kapanmadan önceki milisaniye. | number | 0 |
handle | PopoverHandle<Payload> | – |
payloadBu tetikleyici açtığında açılır pencereye iletilir. | Payload | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="popover-trigger" | CSS'te tetikleyiciyi hedefleyin. |
data-popup-open | Popover'ı açıkken bulunur. |
data-pressed | Tetikleyiciye basılıyken bulunur. |
data-disabled | Trigger devre dışıyken bulunur. |
Portal'ı, konumlandırıcıyı ve açılır pencereyi tek bir parçada işler.
| Prop | Tür | Varsayılan |
|---|---|---|
side | "top" | "right" | "bottom" | "left" | "inline-start" | "inline-end" | "bottom" |
align | "start" | "center" | "end" | "center" |
sideOffsetTetikleyici ile açılır pencere arasındaki boşluk. | number | (data) => number | 6 |
alignOffset | number | (data) => number | 0 |
collisionPaddingViewport kenarlarından bırakılan boşluk. | number | Rect | 8 |
collisionAvoidanceYer bittiğinde çevrilip çevrilmeyeceği, kaydırılıp kaydırılmayacağı veya hiçbirinin yapılmayacağı. | CollisionAvoidance | – |
collisionBoundary | Boundary | – |
anchorTrigger dışında bir şeye göre konumlandırın. | Element | RefObject | VirtualElement | () => Element | – |
sticky | boolean | false |
positionMethod | "absolute" | "fixed" | "absolute" |
initialFocusPopover açıldığında odağın gittiği yer. | boolean | RefObject | (type) => HTMLElement | boolean | – |
finalFocusPopover kapandığında odağın gittiği yer. | boolean | RefObject | (type) => HTMLElement | boolean | – |
portalPropscontainer gibi portal prop'ları. | PortalProps | – |
classNameAçılır pencere varsayılan olarak w-72'dir. | string | (state) => string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="popover-content" | Açılır pencere. |
data-slot="popover-positioner" | Açılır pencereyi konumlandıran öğe. |
data-open | Popover açıkken bulunur. |
data-starting-style | Açılır pencere animasyonla girerken bulunur. |
data-ending-style | Açılır pencere animasyonla çıkarken bulunur. |
data-side | Açılır pencerenin sonunda yerleştiği taraf. |
data-align | Açılır pencerenin sonunda aldığı hizalama. |
data-instant | Değişim animasyonlu olmamalıyken bulunur. |
--transform-origin | Açılır pencerenin tetikleyicide ölçeklendiği nokta. |
--available-width | Tetikleyici ile viewport kenarı arasındaki boşluk. |
--available-height | Tetikleyici ile viewport kenarı arasındaki boşluk. Açılır pencerenin azami yüksekliği. |
--anchor-width | Tetikleyicinin genişliği. |
--anchor-height | Tetikleyicinin yüksekliği. |
Başlığı ve açıklamayı üst üste dizen düz bir <div>.
| Öznitelik | Açıklama |
|---|---|
data-slot="popover-header" | CSS'te başlığı hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <h2> |
| Öznitelik | Açıklama |
|---|---|
data-slot="popover-title" | Açılır pencereyi etiketler. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <p> |
| Öznitelik | Açıklama |
|---|---|
data-slot="popover-description" | Açılır pencereyi tanımlar. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="popover-close" | Basıldığında popover'ı kapatır. |
createPopoverHandle<Payload>(), bir <Popover /> öğesini başka bir yerde render edilen tetikleyicilere bağlayan bir tanıtıcı döndürür. Bileşeninizin dışında, yalnızca bir kez oluşturun.
- 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.
- 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.
Kullanıldığı bloklar
Popover ü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.
- Agent TodosBir ajanın planını çalışırken gösterin. Her adım backlog'dan yapılacak, devam eden ve tamamlanana ilerler; canlı süreler, başarısızlıklar ve arkasındaki araç çağrıları ile birlikte. Yazma alanının üstü için bir durum hapı, görebildiğiniz plan değişiklikleri ve çalışmadan önce planı düzenlemek için bir gözden geçirme adımı.
- 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.
- Voice ModeAsistanınızla konuşun. Bulutlu bir gökyüzünden ve ferrofluid damlasından dithered piksellere, ASCII'ye, bir CRT gezegenine, yarım ton noktalara, tek bir halkaya ve yumuşak bir aurayaya uzanan sese duyarlı sekiz stil, ayrıca dört duyarlı nokta. Sessize alma, kesme ve altyazılı tam ekran oturum, sohbet içi ses hapı, ses seçici ve dinleyen, konuşmanızın bitmesini bekleyen ve yanıtlayan bir tarayıcı motoru.