Files
socweb/frontend/components/workspace/cards/SearchResultCard.tsx
T
gongzhiyongandClaude Sonnet 4.6 c6ca9dc126 fix: restore workspace components accidentally dropped from git index
workspace/ files existed on disk but were not included in previous
incremental commit, causing git to record them as deleted. Re-adding
all workspace card components, AgentWorkspace, ActivityTimeline, and
WorkspaceCardRenderer to properly track them.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 03:09:41 +08:00

55 lines
1.9 KiB
TypeScript

"use client";
import { Search, ExternalLink } from "lucide-react";
interface SearchResult {
title: string;
url: string;
snippet: string;
}
interface SearchResultCardProps {
query: string;
total: number;
results: SearchResult[];
}
export function SearchResultCard({ query, total, results }: SearchResultCardProps) {
return (
<div className="rounded-xl border border-[var(--gem-border)] bg-[var(--gem-surface)] p-4">
<div className="flex items-center gap-2 mb-3">
<Search size={15} className="text-[var(--gem-blue,#4285f4)]" />
<span className="text-sm font-medium text-[var(--gem-text)]">网络搜索</span>
<span className="ml-auto text-xs text-[var(--gem-text-muted)] bg-[var(--gem-surface-2)] px-2 py-0.5 rounded-full">
{total} 条来源
</span>
</div>
{query && (
<p className="text-xs text-[var(--gem-text-muted)] mb-3">查询:{query}</p>
)}
<div className="space-y-3">
{results.map((r, i) => (
<div key={i} className="border-t border-[var(--gem-border)] pt-2 first:border-0 first:pt-0">
<div className="flex items-start gap-1">
<a
href={r.url}
target="_blank"
rel="noopener noreferrer"
className="text-xs font-medium text-[var(--gem-blue,#4285f4)] hover:underline flex-1 leading-snug"
>
{r.title}
</a>
<ExternalLink size={10} className="text-[var(--gem-text-muted)] flex-shrink-0 mt-0.5" />
</div>
{r.url && (
<p className="text-[10px] text-[var(--gem-text-muted)] truncate mt-0.5">{r.url}</p>
)}
{r.snippet && (
<p className="text-xs text-[var(--gem-text-muted)] mt-1 leading-relaxed line-clamp-2">{r.snippet}</p>
)}
</div>
))}
</div>
</div>
);
}