1use leptos::*;
2
3pub struct SidebarTabs<const TLENGTH: usize = 0, const BLENGTH: usize = 0> {
4 pub top: Option<[(View, View); TLENGTH]>,
5 pub bottom: Option<[(View, View); BLENGTH]>,
6}
7
8#[component]
11pub fn Sidebar<T, TIV, B, BIV, M, MIV >(
12 #[prop(into, optional)] id: Option<String>,
13 #[prop(into, optional)] class: Option<String>,
14 #[prop(into, optional)] style: Option<String>,
15 top_icons: T,
21 bottom_icons: B,
22 menu: M,
23) -> impl IntoView
24where
25 T: Fn() -> TIV,
26 TIV: IntoView,
27 B: Fn() -> BIV,
28 BIV: IntoView,
29 M: Fn() -> MIV,
30 MIV: IntoView,
31{
32 view! {
33 <div
34 id=id.unwrap_or("Sidebar".to_string())
35 class=class.unwrap_or("flex flex-row zero-divide-x w-64".to_string())
36 style=style
37 >
38 <div id="SidebarIcons" class="flex flex-col min-h-screen overflow-y-auto">
39 {top_icons()}
40 <div class="grow"></div>
41 {bottom_icons()}
42 </div>
43 <div id="SidebarMenu" class="flex flex-1 flex-col min-h-screen overflow-y-auto">
44 {menu()}
45 </div>
46
47 </div>
48 }
49}
50