@@ -62,23 +62,27 @@ export function NavMain({ items }: { items: NavItem[] }) {
6262 < SidebarMenu >
6363 { memoizedItems . map ( ( item , index ) => {
6464 const translatedTitle = translateTitle ( item . title ) ;
65+ const hasSub = ! ! item . items ?. length ;
6566 return (
6667 < Collapsible key = { `${ item . title } -${ index } ` } asChild defaultOpen = { item . isActive } >
6768 < SidebarMenuItem >
68- < SidebarMenuButton
69- asChild
70- tooltip = { translatedTitle }
71- isActive = { item . isActive }
72- aria-label = { `${ translatedTitle } ${ item . items ?. length ? " with submenu" : "" } ` }
73- >
74- < a href = { item . url } >
75- < item . icon />
76- < span > { translatedTitle } </ span >
77- </ a >
78- </ SidebarMenuButton >
79-
80- { item . items ?. length ? (
69+ { hasSub ? (
70+ // When the item has children, make the whole row a collapsible trigger
8171 < >
72+ < CollapsibleTrigger asChild >
73+ < SidebarMenuButton
74+ asChild
75+ tooltip = { translatedTitle }
76+ isActive = { item . isActive }
77+ aria-label = { `${ translatedTitle } with submenu` }
78+ >
79+ < button type = "button" className = "flex items-center gap-2 w-full text-left" >
80+ < item . icon />
81+ < span > { translatedTitle } </ span >
82+ </ button >
83+ </ SidebarMenuButton >
84+ </ CollapsibleTrigger >
85+
8286 < CollapsibleTrigger asChild >
8387 < SidebarMenuAction
8488 className = "data-[state=open]:rotate-90 transition-transform duration-200"
@@ -88,6 +92,7 @@ export function NavMain({ items }: { items: NavItem[] }) {
8892 < span className = "sr-only" > Toggle submenu</ span >
8993 </ SidebarMenuAction >
9094 </ CollapsibleTrigger >
95+
9196 < CollapsibleContent className = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 duration-200" >
9297 < SidebarMenuSub >
9398 { item . items ?. map ( ( subItem , subIndex ) => {
@@ -105,7 +110,20 @@ export function NavMain({ items }: { items: NavItem[] }) {
105110 </ SidebarMenuSub >
106111 </ CollapsibleContent >
107112 </ >
108- ) : null }
113+ ) : (
114+ // Leaf item: treat as a normal link
115+ < SidebarMenuButton
116+ asChild
117+ tooltip = { translatedTitle }
118+ isActive = { item . isActive }
119+ aria-label = { translatedTitle }
120+ >
121+ < a href = { item . url } >
122+ < item . icon />
123+ < span > { translatedTitle } </ span >
124+ </ a >
125+ </ SidebarMenuButton >
126+ ) }
109127 </ SidebarMenuItem >
110128 </ Collapsible >
111129 ) ;
0 commit comments