@@ -113,17 +113,57 @@ export function JobsPage() {
113113 }
114114 />
115115
116- { /* ── Search bar (Beetle-style below header) ─── */ }
117- < div className = "relative" >
118- < Search size = { 14 } className = "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none" />
119- < input
120- type = "text"
121- id = "pr-search"
122- placeholder = "Search PRs, title, repo, number"
123- value = { filters . search }
124- onChange = { ( e ) => setFilters ( ( f ) => ( { ...f , search : e . target . value , page : 1 } ) ) }
125- className = "h-9 w-full max-w-sm rounded-md border border-border bg-background pl-9 pr-3 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring"
126- />
116+ { /* ── Search bar ─── */ }
117+ < div className = "surface p-4 flex flex-col sm:flex-row gap-4" >
118+ { /* Search Input */ }
119+ < div className = "flex flex-col gap-1.5 flex-1" >
120+ < label htmlFor = "pr-search" className = "text-[10px] font-bold uppercase tracking-wider text-muted-foreground/70" >
121+ Search
122+ </ label >
123+ < input
124+ type = "text"
125+ id = "pr-search"
126+ placeholder = "Title or #number..."
127+ value = { filters . search }
128+ onChange = { ( e ) => setFilters ( ( f ) => ( { ...f , search : e . target . value , page : 1 } ) ) }
129+ className = "h-9 w-full rounded-md border border-border bg-transparent px-3 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring"
130+ />
131+ </ div >
132+
133+ { /* Status Dropdown */ }
134+ < div className = "w-full sm:w-48" >
135+ < Select
136+ label = "Status"
137+ value = { filters . status }
138+ onValueChange = { ( v ) => setFilters ( ( f ) => ( { ...f , status : v , page : 1 } ) ) }
139+ placeholder = "All statuses"
140+ options = { [
141+ { value : '' , label : 'All statuses' } ,
142+ { value : 'queued' , label : 'Queued' } ,
143+ { value : 'running' , label : 'Running' } ,
144+ { value : 'done' , label : 'Done' } ,
145+ { value : 'failed' , label : 'Failed' } ,
146+ { value : 'superseded' , label : 'Superseded' }
147+ ] }
148+ triggerClassName = "bg-transparent"
149+ />
150+ </ div >
151+
152+ { /* Verdict Dropdown */ }
153+ < div className = "w-full sm:w-48" >
154+ < Select
155+ label = "Verdict"
156+ value = { filters . verdict }
157+ onValueChange = { ( v ) => setFilters ( ( f ) => ( { ...f , verdict : v , page : 1 } ) ) }
158+ placeholder = "All verdicts"
159+ options = { [
160+ { value : '' , label : 'All verdicts' } ,
161+ { value : 'approve' , label : 'Approve' } ,
162+ { value : 'comment' , label : 'Comment' }
163+ ] }
164+ triggerClassName = "bg-transparent"
165+ />
166+ </ div >
127167 </ div >
128168
129169 { /* System Failures (DLQ) Section */ }
0 commit comments