1+ import { MobileMenuButton } from '@/components/layout/MobileMenuButton' ;
12import { useState , useEffect , useRef } from 'react' ;
23import { Publication , Tag , Vault } from '@/types/database' ;
34import { PublicationCard } from './PublicationCard' ;
@@ -12,15 +13,15 @@ import {
1213 Plus ,
1314 Search ,
1415 Download ,
15- Menu ,
1616 SortAsc ,
1717 CheckSquare ,
1818 Square ,
1919 Sparkles ,
2020 Command ,
2121 Upload ,
2222 Network ,
23- Settings
23+ Settings ,
24+ MoreVertical
2425} from 'lucide-react' ;
2526import {
2627 DropdownMenu ,
@@ -140,50 +141,33 @@ export function PublicationList({
140141 return (
141142 < div className = "flex-1 flex flex-col min-h-0" >
142143 { /* Header */ }
143- < header className = "bg-card/50 backdrop-blur-xl border-b-2 border-border px-4 lg:px-8 py-5 shrink-0 sticky top-0 z-10" >
144- < div className = "flex items-center gap-4" >
145- < Button
146- variant = "ghost"
147- size = "icon"
148- className = "lg:hidden shrink-0"
144+ < header className = "bg-card/50 backdrop-blur-xl border-b-2 border-border px-4 lg:px-8 py-4 shrink-0 sticky top-0 z-10" >
145+ < div className = "flex items-center gap-3" >
146+ < MobileMenuButton
149147 onClick = { onMobileMenuOpen }
150- >
151- < Menu className = "w-5 h-5" />
152- </ Button >
148+ className = "shrink-0"
149+ />
153150
154151 < div className = "flex-1 min-w-0" >
155- < div className = "flex items-center gap-3 " >
152+ < div className = "flex items-center gap-2 " >
156153 { selectedVault && (
157154 < div
158155 className = "w-4 h-4 rounded-md shrink-0 shadow-sm"
159156 style = { { backgroundColor : selectedVault . color } }
160157 />
161158 ) }
162- < h1 className = "text-2xl lg:text-3xl font-bold truncate font-mono" >
159+ < h1 className = "text-lg sm:text-xl lg:text-2xl font-bold truncate font-mono leading-none " >
163160 { selectedVault ? selectedVault . name : (
164161 < >
165162 < span className = "text-gradient" > all_papers</ span >
166163 </ >
167164 ) }
168165 </ h1 >
169166 { selectedVault && (
170- < >
171- < QRCodeDialog vault = { selectedVault } onVaultUpdate = { onVaultUpdate } />
172- { onEditVault && (
173- < Button
174- variant = "ghost"
175- size = "icon"
176- className = "h-8 w-8 text-muted-foreground hover:text-primary shrink-0"
177- onClick = { ( ) => onEditVault ( selectedVault ) }
178- title = "Edit vault settings"
179- >
180- < Settings className = "w-4 h-4" />
181- </ Button >
182- ) }
183- </ >
167+ < QRCodeDialog vault = { selectedVault } onVaultUpdate = { onVaultUpdate } />
184168 ) }
185169 </ div >
186- < p className = "text-sm text-muted-foreground mt-1 font-mono" >
170+ < p className = "text-xs text-muted-foreground mt-1 font-mono truncate leading-none " >
187171 { filteredPublications . length } item{ filteredPublications . length !== 1 ? 's' : '' }
188172 { filters . length > 0 && (
189173 < span className = "text-primary" > • { filters . length } filter{ filters . length !== 1 ? 's' : '' } </ span >
@@ -194,21 +178,39 @@ export function PublicationList({
194178 </ p >
195179 </ div >
196180
197- < NotificationDropdown />
198-
199- < Button onClick = { onOpenGraph } variant = "outline" size = "icon" className = "shrink-0" title = "View relationship graph" >
200- < Network className = "w-4 h-4" />
201- </ Button >
181+ < div className = "flex items-center gap-2 shrink-0" >
182+ < NotificationDropdown />
202183
203- < Button onClick = { onImportPublications } variant = "outline" className = "shrink-0 font-mono" >
204- < Upload className = "w-4 h-4 lg:mr-2" />
205- < span className = "hidden lg:inline" > import</ span >
206- </ Button >
184+ { /* Actions Dropdown - Groups Settings, Network Graph, and Import */ }
185+ < DropdownMenu >
186+ < DropdownMenuTrigger asChild >
187+ < Button variant = "outline" size = "icon" className = "h-9 w-9" title = "More actions" >
188+ < MoreVertical className = "w-4 h-4" />
189+ </ Button >
190+ </ DropdownMenuTrigger >
191+ < DropdownMenuContent align = "end" className = "font-mono" >
192+ < DropdownMenuItem onClick = { onOpenGraph } >
193+ < Network className = "w-4 h-4 mr-2" />
194+ relationship_graph
195+ </ DropdownMenuItem >
196+ < DropdownMenuItem onClick = { onImportPublications } >
197+ < Upload className = "w-4 h-4 mr-2" />
198+ import_bibtex
199+ </ DropdownMenuItem >
200+ { selectedVault && onEditVault && (
201+ < DropdownMenuItem onClick = { ( ) => onEditVault ( selectedVault ) } >
202+ < Settings className = "w-4 h-4 mr-2" />
203+ vault_settings
204+ </ DropdownMenuItem >
205+ ) }
206+ </ DropdownMenuContent >
207+ </ DropdownMenu >
207208
208- < Button onClick = { onAddPublication } variant = "glow" className = "shrink-0 font-mono" >
209- < Plus className = "w-4 h-4 lg:mr-2" />
210- < span className = "hidden lg:inline" > add_paper</ span >
211- </ Button >
209+ < Button onClick = { onAddPublication } variant = "glow" className = "h-9 font-mono" >
210+ < Plus className = "w-4 h-4 sm:mr-2" />
211+ < span className = "hidden sm:inline" > add_paper</ span >
212+ </ Button >
213+ </ div >
212214 </ div >
213215
214216 { /* Search, filters and view settings */ }
0 commit comments