1- import { Search } from 'lucide-react' ;
21import { useMe } from '../../features/auth/hooks/useAuth' ;
3- import { NotificationBell } from '../../features/notifications/components/NotificationBell' ;
42import { Logo } from '../brand/Logo' ;
53import { SidebarNav } from './SidebarNav' ;
64import { UserFooter } from './UserFooter' ;
@@ -9,17 +7,16 @@ import { WorkspaceSwitcher } from './WorkspaceSwitcher';
97interface SidebarProps {
108 /** Called after a nav link is activated (closes the mobile drawer). */
119 onNavigate ?: ( ) => void ;
12- /** Opens the command palette, optionally seeded with typed text. */
13- onSearch : ( seed ?: string ) => void ;
1410}
1511
1612/**
1713 * The persistent navigation frame: workspace identity + switcher fixed at the
1814 * top, an independently scrollable nav list in the middle, and the user
1915 * footer fixed at the bottom. Rendered both as the desktop rail and inside
20- * the mobile drawer.
16+ * the mobile drawer. Search and the notification bell live in the shell's
17+ * top bar (TopBar on desktop, MobileTopBar below lg), not here.
2118 */
22- export function Sidebar ( { onNavigate, onSearch } : SidebarProps ) {
19+ export function Sidebar ( { onNavigate } : SidebarProps ) {
2320 const { data : me } = useMe ( ) ;
2421 if ( ! me ?. workspace ) return null ; // guarded by WorkspaceRoute; satisfies types
2522
@@ -29,34 +26,6 @@ export function Sidebar({ onNavigate, onSearch }: SidebarProps) {
2926 < div className = "flex items-center gap-1.5" >
3027 < Logo size = "sm" withWordmark = { false } className = "shrink-0 px-1 text-charcoal" />
3128 < WorkspaceSwitcher workspace = { me . workspace } />
32- { /* Operational inbox: right edge of the shell header, before the
33- user's own controls — the "top of the app" position. */ }
34- < div className = "shrink-0" >
35- < NotificationBell />
36- </ div >
37- </ div >
38- { /* Real search input, centered at the top of the sidebar. Focusing
39- or typing hands off to the floating palette (seeded with the
40- typed text) — one search surface, so the input itself stays
41- empty and the palette owns the query. */ }
42- < div className = "relative mx-auto mt-3 w-full" >
43- < Search
44- size = { 14 }
45- aria-hidden = "true"
46- className = "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-steel"
47- />
48- < input
49- type = "search"
50- aria-label = "Search workspace"
51- placeholder = "Search…"
52- value = ""
53- onFocus = { ( ) => onSearch ( ) }
54- onChange = { ( event ) => onSearch ( event . target . value ) }
55- className = "w-full rounded border border-steel/20 bg-canvas py-1.5 pl-8 pr-14 text-sm text-charcoal transition-colors placeholder:text-steel hover:border-steel/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary"
56- />
57- < kbd className = "pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 rounded border border-steel/20 bg-surface px-1.5 font-sans text-[11px] text-steel" >
58- Ctrl K
59- </ kbd >
6029 </ div >
6130 </ div >
6231 < nav aria-label = "Workspace" className = "mt-4 min-h-0 flex-1 overflow-y-auto px-3 pb-4" >
0 commit comments