Improve agent status search view with consistent search fields

Standardize search placeholder text to "Search for X..." format across
agent, workspace, and worktree pickers. Update input styling for visual
consistency with design system (borders, background, focus states, and
text size). Add new i18n entries for agent search string.
This commit is contained in:
Jinjing
2026-09-10 23:59:06 -07:00
parent b3e0a33fa4
commit be72ee09ca
13 changed files with 26 additions and 18 deletions
@@ -74,11 +74,11 @@ export function ActivityThreadListToolbar({
value={query}
onChange={(event) => onQueryChange(event.target.value)}
placeholder={translate(
'auto.components.activity.ActivityPrototypePage.795cbf26e2',
'Filter...'
'auto.components.activity.ActivityPrototypePage.searchAgent',
'Search for agents...'
)}
className={cn(
'h-7 w-full pl-6 text-[11px] shadow-none focus-visible:ring-0',
'h-7 w-full border border-border/80 bg-background pl-6 text-xs shadow-none placeholder:text-xs focus-visible:border-ring/70 focus-visible:ring-0 dark:border-white/15 dark:bg-white/[0.04]',
query ? 'pr-6' : ''
)}
/>
@@ -109,7 +109,7 @@ export function ActivityThreadListToolbar({
>
<SelectTrigger
size="sm"
className="h-7 w-[116px] shrink-0 px-2 text-[11px]"
className="h-7 w-[116px] shrink-0 px-2 text-xs"
aria-label={translate(
'auto.components.activity.ActivityPrototypePage.770d458144',
'Group agent activity by'
@@ -194,7 +194,7 @@ export function ActivityThreadListToolbar({
type="button"
variant="ghost"
size="sm"
className="h-7 gap-1 px-2 text-[11px] text-muted-foreground hover:text-foreground"
className="h-7 gap-1 px-2 text-xs text-muted-foreground hover:text-foreground"
onClick={onMarkAllThreadsRead}
disabled={!hasUnreadThreads}
>
@@ -212,7 +212,7 @@ export function ActivityThreadListToolbar({
type="button"
variant="ghost"
size="sm"
className="h-7 gap-1 px-2 text-[11px] text-muted-foreground hover:text-foreground"
className="h-7 gap-1 px-2 text-xs text-muted-foreground hover:text-foreground"
onClick={onClearCompleted}
disabled={!hasCompletedThreads}
>
@@ -300,7 +300,7 @@ describe('Agent Map workspace context menu', () => {
fireEvent.click(setParent)
// Candidate rows are virtualized and measure 0 in happy-dom; the mounted
// search input is the picker's lifecycle signal.
expect(await screen.findByPlaceholderText('Search worktrees...')).toBeInTheDocument()
expect(await screen.findByPlaceholderText('Search for worktrees...')).toBeInTheDocument()
})
it('opens the existing worktree composer from a project ring', async () => {
@@ -358,7 +358,7 @@ function ParentWorktreeCandidateList({
wrapperClassName="shrink-0"
placeholder={translate(
'auto.components.ComposerParentWorktreePicker.searchPlaceholder',
'Search workspaces...'
'Search for workspaces...'
)}
/>
<CommandList ref={listRef} className="max-h-72 min-h-0 flex-1">
@@ -42,7 +42,9 @@ it('preserves workspace focus on mount and focuses search only when explicitly e
</TooltipProvider>
)
expect(view.getByRole('textbox', { name: 'Search' })).toBeTruthy()
const searchInput = view.getByRole('textbox', { name: 'Search' })
expect(searchInput).toBeTruthy()
expect(searchInput.getAttribute('placeholder')).toBe('Search for agents...')
expect(document.activeElement).toBe(workspaceInput)
fireEvent.keyDown(view.getByRole('textbox', { name: 'Search' }), { key: 'Escape' })
@@ -124,10 +124,10 @@ export default function SidebarAgentsList({
}
}}
placeholder={translate(
'auto.components.activity.ActivityPrototypePage.795cbf26e2',
'Filter...'
'auto.components.activity.ActivityPrototypePage.searchAgent',
'Search for agents...'
)}
className="h-7 w-full text-[11px] shadow-none focus-visible:ring-0"
className="h-7 w-full border border-border/80 bg-background text-[11px] shadow-none placeholder:text-[10px] focus-visible:border-ring/70 focus-visible:ring-0 dark:border-white/15 dark:bg-white/[0.04]"
aria-label={translate(
'auto.components.activity.ActivityPrototypePage.search',
'Search'
@@ -104,11 +104,11 @@ export default function WorkspaceKanbanSearchField({
value={query}
aria-label={translate(
'auto.components.sidebar.WorkspaceKanbanSearchField.c0cd6bdf6c',
'Search workspaces'
'Search for workspaces...'
)}
placeholder={translate(
'auto.components.sidebar.WorkspaceKanbanSearchField.c0cd6bdf6c',
'Search workspaces'
'Search for workspaces...'
)}
aria-invalid={isTooLarge || undefined}
className="h-7 border-worktree-sidebar-border bg-background pl-7 text-xs"
@@ -357,7 +357,7 @@ export function WorktreeParentPickerPopover({
wrapperClassName="shrink-0"
placeholder={translate(
'auto.components.sidebar.WorktreeParentPickerPopover.searchPlaceholder',
'Search worktrees...'
'Search for worktrees...'
)}
/>
<CommandList ref={listRef} className="max-h-72 min-h-0 flex-1">
+4 -3
View File
@@ -6032,7 +6032,7 @@
"WorktreeParentPickerPopover": {
"failedSetParent": "Failed to set parent worktree",
"current": "Current",
"searchPlaceholder": "Search worktrees...",
"searchPlaceholder": "Search for worktrees...",
"empty": "No matching eligible worktrees.",
"setParentFor": "Set parent for"
},
@@ -6167,7 +6167,7 @@
"WorkspaceKanbanSearchField": {
"bdb753c78d": "No workspaces match",
"4d96c209d6": "{{value0}} of {{value1}} workspaces match",
"c0cd6bdf6c": "Search workspaces",
"c0cd6bdf6c": "Search for workspaces...",
"3b7ea51793": "Clear search",
"7f1c2e94a5": "Search text is too long — the board is unfiltered",
"9a4d0f6b21": "Too long"
@@ -16253,6 +16253,7 @@
"clearCompleted": "Clear completed",
"none": "None",
"search": "Search",
"searchAgent": "Search for agents...",
"showUnreadOnly": "Show unread only",
"showChildAgents": "Show child agents",
"activityOptions": "Activity options",
@@ -16879,7 +16880,7 @@
"label": "Parent worktree",
"noParent": "No parent",
"description": "Nests this workspace under another in the sidebar. Does not change the base branch.",
"searchPlaceholder": "Search workspaces...",
"searchPlaceholder": "Search for workspaces...",
"noMatches": "No matches."
},
"browserPane": {
+1
View File
@@ -14190,6 +14190,7 @@
"clearCompleted": "Borrar completados",
"none": "Ninguno",
"search": "Buscar",
"searchAgent": "Buscar agentes...",
"showUnreadOnly": "Mostrar solo no leídos",
"showChildAgents": "Mostrar agentes secundarios",
"activityOptions": "Opciones de actividad",
+1
View File
@@ -15458,6 +15458,7 @@
"4a3986b200": "Statut",
"770d458144": "Grouper l'activité des agents par",
"795cbf26e2": "Filtrer...",
"searchAgent": "Rechercher des agents...",
"4616ea39fd": "Aller à l'espace de travail",
"threadListOptionsFiltered": "Options de la liste des fils, filtres actifs",
"showSearch": "Afficher la recherche",
+1
View File
@@ -14190,6 +14190,7 @@
"clearCompleted": "完了済みをクリア",
"none": "なし",
"search": "検索",
"searchAgent": "エージェントを検索...",
"showUnreadOnly": "未読のみ表示",
"showChildAgents": "子 Agent を表示",
"activityOptions": "アクティビティのオプション",
+1
View File
@@ -14268,6 +14268,7 @@
"clearCompleted": "완료된 항목 지우기",
"none": "없음",
"search": "검색",
"searchAgent": "에이전트 검색...",
"showUnreadOnly": "읽지 않은 항목만 표시",
"showChildAgents": "하위 에이전트 표시",
"activityOptions": "활동 옵션",
+1
View File
@@ -14268,6 +14268,7 @@
"clearCompleted": "清除已完成",
"none": "无",
"search": "搜索",
"searchAgent": "搜索 Agent...",
"showUnreadOnly": "仅显示未读",
"showChildAgents": "显示子智能体",
"activityOptions": "活动选项",