LivaLayout
Uygulamanın genel iskeletini kuran yerleşim bileşeni: üst bar (header), daraltılabilir kenar çubuğu (sidebar), alt bilgi (footer) ve ana içerik alanını tek bileşende toplar. Kenar çubuğunda gezinme menüsü, kullanıcı kartı ve isteğe bağlı spotlight araması bulunur.
import { LivaLayout } from "@dataliva/livalib";
Tam yerleşim
navigationItems ile gezinme ağacı, user ile kullanıcı kartı ve
footerText ile alt bilgi tanımlanır. currentPathname verilen öğe menüde
aktif olarak vurgulanır. Bileşen normalde height="100vh" ile tüm ekranı
kaplar; aşağıdaki önizlemede sınırlı yükseklikteki bir kapsayıcı içinde
height="100%" ile gösterilmektedir.
Her gezinme öğesinde items alanı zorunludur; alt öğesi olmayanlar için
boş dizi verilir. icon alanı bir CSS sınıfı bekler (ör. DevExtreme
ikonları için dx-icon dx-icon-home).
Sade yerleşim
showSidebar, showFooter ve showUserCard ile bölümler tek tek
kapatılabilir. headerRightElement üst barın sağına özel içerik yerleştirir.
Alt menü açılış şekli
submenuMode kenar çubuğundaki menüye aktarılır. Varsayılan 'inline' kipinde
her grup yerinde aşağı açılır. 'flyout' verildiğinde alt öğelerinin tamamı
yaprak olan iç gruplar, kenar çubuğunun sağında yüzen bir panel olarak açılır;
üst düzey gruplar ve içinde başka grup barındıran dallar yine yerinde açılır.
Davranışın ayrıntıları ve canlı örnek için
LivaNavbar → Flyout alt menü bölümüne bakın.
<LivaLayout
navigationItems={navigationItems}
menuMode="accordion"
submenuMode="flyout"
>
{children}
</LivaLayout>
Bu ayar yalnızca kenar çubuğu menüsünü etkiler. Üst menü
(layoutPosition="header") iç grupları her zaman yana açılan panellerle
gösterir.
Üst menü yerleşimi
layoutPosition="header" menüyü kenar çubuğundan alıp üst bara yatay bir menü
olarak taşır. Masaüstünde kenar çubuğu hiç çizilmez ve içerik tüm genişliği
kullanır. Menü aynı navigationItems ağacından beslenir:
- Üst düzey öğeler barda düğme olarak durur. Alt öğesi olan bir başlığa
tıklanınca altında bir panel açılır; panel açıkken başka bir başlığın üzerine
gelmek doğrudan o başlığın paneline geçer. Escape, panel dışına tıklama ve
currentPathname'in değişmesi paneli kapatır. - Daha derin gruplar, panelin içinde üzerine gelince yana doğru açılır. İmleç açık alt menüye çapraz giderken yol üstünde değdiği satırlar o alt menüyü kapatmaz.
- Bara sığmayan başlıklar sağdaki taşma düğmesinin ("Daha fazla") paneline geçer. Pencerenin sağ kenarından taşacak bir panel düğmenin sağ kenarına hizalanır ve alt menülerini sola doğru açar.
logoIconvelogoTextbirlikte verildiyse yer daraldığında öncelogoTextgizlenir,logoIconher zaman kalır. Başlıkların taşma düğmesine geçmesi en son çaredir.- Kenar çubuğuna ait içerikler üst barın sağ bölümüne taşınır. Bu bölüm
soldan sağa arama simgesi (
spotlightEnabled),sidebarHeaderElement,sidebarFooterElement,sidebarFooterItems(simge düğmeleri; alt öğesi olanlar açılır pencereyle),headerRightElementve kompakt kullanıcı kartından oluşur. onNavigationItemContextMenuile bir alt menü öğesinde bağlam menüsü açıldığında, öğeyi barındıran alt menü bağlam menüsü kapanana kadar açık kalır.
Bu kipte yerleşik üst bar her zaman çizilir; headerElement ve headerTitle
kullanılmaz. Küçük ekranlarda (768px altı) menü barı çizilmez; showSidebar
açıksa menü, hamburger düğmesiyle açılan kenar çubuğu çekmecesinde yer alır.
Kullanıcı Erişilebilirlik ayarlarından bir menü yeri
(menuPosition: side veya header) seçtiyse bu tercih layoutPosition
prop'unu ezer; auto seçiliyken prop geçerlidir. LivaLayout tercihi kendisi
okur, uygulamanın ek bir şey yapması gerekmez.
| Prop | Tip | Varsayılan |
|---|---|---|
showHeader | boolean | true |
showSidebar | boolean | true |
showFooter | boolean | true |
headerTitle | ReactNode | '' |
headerRightElement | ReactNode | — |
logoText | ReactNode | — |
logoIcon | ReactNode | — |
showUserCard | boolean | true |
user | { FullName: string | null; Role?: string | null } | — |
navigationItems | NavigationItem[] | — |
currentPathname | string | window.location.pathname |
onNavigationItemClick | (item: NavigationItem) => void | — |
onNavigationItemContextMenu | (item: NavigationItem, event: React.MouseEvent) => void | — |
sidebarWidth | number | string | 330 |
sidebarCollapsed | boolean | false |
sidebarPosition | 'left' | 'right' | 'left' |
menuMode | 'standard' | 'accordion' | 'standard' |
submenuMode | 'inline' | 'flyout' | 'inline' |
layoutPosition | 'side' | 'header' | 'side' |
sidebarHeaderElement | ReactNode | — |
sidebarFooterElement | ReactNode | — |
height | number | string | '100vh' |
layoutPosition="header" menüyü kenar çubuğu yerine üst bara taşır. Bu kipte
yerleşik başlık her zaman çizilir (menüyü o barındırır), bu yüzden verilen
headerElement yok sayılır. Erişilebilirlik ayarlarında seçilmiş bir menü yeri
varsa layoutPosition yerine o kullanılır.
submenuMode yalnızca kenar çubuğu menüsünü etkiler; 'flyout' kipinde alt
öğelerinin tamamı yaprak olan iç gruplar kenar çubuğunun sağında panel olarak
açılır.
LivaLayout menü bağlantılarındaki tarayıcı gezinmesini her zaman engeller;
yönlendirmeyi onNavigationItemClick içinde uygulama yapar (ör. router'ın
navigate fonksiyonu). Bu prop verilmezse menü öğesine tıklamak sayfayı
değiştirmez. Küçük ekranlarda tıklama ayrıca menü çekmecesini kapatır.
sidebarHeaderElement kenar çubuğunun en üstüne, navigasyon ve aramanın
üzerine yerleşir ve yalnızca çubuk açıkken görünür. sidebarFooterElement ise
kullanıcı kartının üstünde durur ve hem açık hem daraltılmış durumda çizilir.
Ayrıca footerText, withBorders (varsayılan true), layoutPadding
(varsayılan 24), onSidebarToggle, spotlightEnabled ve
sidebarFooterItems gibi prop'lar da desteklenir.
NavigationItem şu alanlardan oluşur: id, text, href?, icon?,
expanded? ve zorunlu items dizisi.
LivaHeaderNav
layoutPosition="header" kipindeki yatay menü barı LivaHeaderNav
bileşenidir. Paketten dışa aktarılır, ancak LivaLayout onu bu kipte kendisi
oluşturur ve navigationItems, currentPathname, onNavigationItemClick,
onNavigationItemContextMenu ile alan eşleme prop'larını ona aktarır;
uygulamaların doğrudan kullanması gerekmez. LivaNavbar'dan farklı olarak açık
panelin durumu bileşenin içinde tutulur, expandedKeys yoktur.
| Prop | Tip | Varsayılan |
|---|---|---|
items | LivaNavItem[] | [] |
currentPathname | string | — |
onItemClick | (item: LivaNavItem) => void | — |
onItemContextMenu | (item, event) => void | — |
overflowText | string | 'Daha fazla' |
onNaturalWidthChange | (width: number) => void | — |
dataStructure, keyExpr, parentIdExpr, displayExpr, itemsExpr,
expandedExpr, iconExpr ve hrefExpr LivaNavbar'dakiyle aynı anlama ve
varsayılanlara sahiptir. onItemClick verildiğinde bağlantının varsayılan
gezinmesi engellenir ve açık panel kapanır. overflowText taşma düğmesinin
ipucu ve erişilebilir adıdır; LivaLayout bu prop'u geçirmediği için yerleşik
menüde her zaman "Daha fazla" görünür. onNaturalWidthChange, barın tüm üst
düzey başlıkları göstermek için ihtiyaç duyduğu genişliği bu değer her
değiştiğinde bildirir; LivaLayout markanın metnini ne zaman gizleyeceğine bu
değerle karar verir.