Sheet
Herhangi bir kenardan kayarak gelen bir panel; kaydırarak kapatma, kaydırma kilidi ve üst üste iç içe geçme desteği vardır.
pnpm dlx shadcn@latest add https://hextaui.com/r/sheet.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/sheet.tsx components/ui/button.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Kenarlar
Herhangi bir kenardan kayarak girmesi için side ayarlayın. Her sheet kendi kenarına doğru kaydırılarak geri alınabilir ve kapatma hareketi parmağınızı ivmeyle izler.
Uzun içerik
<SheetBody /> kendi başına kayar, böylece içerik ne kadar uzarsa uzasın başlık ve alt bilgi yerinde kalır.
Kapatma düğmesi olmadan
Alt bilginin zaten bir çıkış yolu varsa showCloseButton={false} ayarlayın. Escape, arka plan ve kaydırarak kapatma yine de kapatır.
İç içe
Bir sheet'ten açılan sheet veya alert dialog üstte katmanlanır. Üst öğe hafifçe geri ölçeklenir ve her ek katman daha açık bir arka plan ekler; böylece yığın okunabilir kalır. Escape yalnızca en üst katmanı kapatır.
Kontrollü
Trigger olmadan her yerden açmak için open ve onOpenChange geçin.
Ayrık tetikleyiciler
createSheetHandle ile birden çok tetikleyici arasında tek bir sheet paylaşın. Her tetikleyici, sheet'in bir fonksiyon alt öğesiyle işlediği bir payload geçirir.
Sağdan sola
dir="rtl" ile sağ taraf sol kenara yansır, oradan kayarak girer ve aynı şekilde kaydırılarak kapanır.
| Tuş | Action |
|---|---|
| EnterSpace | Tetikleyicide sheet'i açar ve odağı içine taşır. |
| TabShift + Tab | Odaklanabilir öğeler arasında gezinir. Odak sheet'in içinde kalır. |
| Esc | En üstteki sheet'i kapatır ve odağı tetikleyicisine döndürür. |
- Sheet modal bir dialog'dur.
<SheetTitle />onu etiketler ve<SheetDescription />tanımlar, bu yüzden her zaman bir başlık ekleyin. - Sheet açıkken sayfa kaydırma kilitlenir ve arkasındaki içerik yardımcı teknolojilerden gizlenir.
- Kapatma düğmesi “Close” olarak etiketlenmiştir. İç kenardaki tutamaç sheet'in sürüklenebildiğini gösterir ve yardımcı teknolojilerden gizlidir.
- Azaltılmış hareket açıkken sheet kayarak değil solarak girer ve çıkar.
Base UI drawer üzerine kuruludur. Her parça, sardığı primitive'in prop'larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
defaultOpen | boolean | false |
open | boolean | – |
onOpenChange | (open: boolean, details) => void | – |
onOpenChangeCompleteAçma ya da kapatma animasyonu bittikten sonra çağrılır. | (open: boolean) => void | – |
modal | boolean | "trap-focus" | true |
disablePointerDismissalArka plana tıklandığında açık tutun. | boolean | false |
swipeDirectionİçeriğin tarafı ve yönünden otomatik ayarlanır. | "up" | "down" | "left" | "right" | – |
handle | SheetHandle<Payload> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
handle | SheetHandle<Payload> | – |
payload | Payload | – |
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="sheet-trigger" | CSS'te tetikleyiciyi hedefleyin. |
data-popup-open | Sheet'i açıkken bulunur. |
Portal'ı, arka planı, viewport'u ve açılır pencereyi, ayrıca sürükleme tutamacını ve kapatma düğmesini işler.
| Prop | Tür | Varsayılan |
|---|---|---|
side | "top" | "right" | "bottom" | "left" | "right" |
showCloseButton | boolean | true |
dirSheet'in yönünü belirler. right ve left rtl'de yansıtılır. | "ltr" | "rtl" | – |
initialFocus | boolean | RefObject | (type) => HTMLElement | boolean | – |
finalFocus | boolean | RefObject | (type) => HTMLElement | boolean | – |
classNameYan sheet'ler %75 genişliğindedir, sm breakpoint'inden itibaren en fazla 24rem. | string | (state) => string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="sheet-content" | Sheet paneli. |
data-side | Açıldığı kenar. |
data-open | Sheet açıkken bulunur. |
data-starting-style | Animasyonla belirirken bulunur. |
data-ending-style | Animasyonla kaybolurken bulunur. |
data-swiping | Sürüklenirken bulunur. |
data-swipe-direction | Onu kapatan yön. |
data-nested-drawer-open | Üstte iç içe bir sheet açıkken bulunur. |
data-slot="sheet-handle" | İç kenardaki sürükleme tutamacı. |
data-slot="sheet-close-button" | Yerleşik kapatma düğmesi. |
--drawer-swipe-movement-x | Yatay sürükleme mesafesi. Bir -y değişkeni de vardır. |
--nested-drawers | Üstte kaç iç içe sheet'in açık olduğu. |
<SheetContent /> tarafından işlenir. İç içe katmanlar daha açık bir arka plan alır.
| Öznitelik | Açıklama |
|---|---|
data-slot="sheet-overlay" | Arka plan. |
data-nested | İç içe katmanların arka planlarında bulunur. |
Sheet'i düzenleyen düz <div> öğeleri. Başlık kapatma düğmesine yer bırakır, gövde kayar ve kalan yüksekliği alır, alt bilgi ise küçük ekranlarda eylemlerini üst üste dizer ve sm breakpoint'inden itibaren sonda hizalar.
| Öznitelik | Açıklama |
|---|---|
data-slot="sheet-header" | Başlık ve açıklama. |
data-slot="sheet-body" | Kaydırılabilir içerik. |
data-slot="sheet-footer" | Eylemler. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <h2> |
| Öznitelik | Açıklama |
|---|---|
data-slot="sheet-title" | Sheet'i etiketler. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <p> |
| Öznitelik | Açıklama |
|---|---|
data-slot="sheet-description" | Sheet'i tanımlar. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <button> |
| Öznitelik | Açıklama |
|---|---|
data-slot="sheet-close" | Basıldığında sheet'i kapatır. |
createSheetHandle<Payload>(), bir <Sheet /> öğ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.
- ButtonHer varyant ve boyutta düğmeler; hızlı istekler için spinner'ı atlayan yerleşik yükleme, başarı ve hata akışı.
- 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.
Kullanıldığı bloklar
Sheet üzerine kurulan bloklar.