backend-lehrer (11 files): - llm_gateway/routes/schools.py (867 → 5), recording_api.py (848 → 6) - messenger_api.py (840 → 5), print_generator.py (824 → 5) - unit_analytics_api.py (751 → 5), classroom/routes/context.py (726 → 4) - llm_gateway/routes/edu_search_seeds.py (710 → 4) klausur-service (12 files): - ocr_labeling_api.py (845 → 4), metrics_db.py (833 → 4) - legal_corpus_api.py (790 → 4), page_crop.py (758 → 3) - mail/ai_service.py (747 → 4), github_crawler.py (767 → 3) - trocr_service.py (730 → 4), full_compliance_pipeline.py (723 → 4) - dsfa_rag_api.py (715 → 4), ocr_pipeline_auto.py (705 → 4) website (6 pages): - audit-checklist (867 → 8), content (806 → 6) - screen-flow (790 → 4), scraper (789 → 5) - zeugnisse (776 → 5), modules (745 → 4) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
'use client'
|
|
|
|
import { SearchResult } from './types'
|
|
|
|
export default function SearchResults({ results, onSelect }: {
|
|
results: SearchResult[]
|
|
onSelect: (result: SearchResult) => void
|
|
}) {
|
|
if (results.length === 0) {
|
|
return (
|
|
<div className="text-center py-12">
|
|
<span className="text-4xl">🔍</span>
|
|
<p className="mt-4 text-gray-500 dark:text-gray-400">Keine Ergebnisse gefunden</p>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<div className="space-y-4">
|
|
{results.map((result) => (
|
|
<button
|
|
key={result.id}
|
|
onClick={() => onSelect(result)}
|
|
className="w-full text-left p-4 bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 hover:shadow-md hover:border-blue-300 transition"
|
|
>
|
|
<div className="flex items-start justify-between">
|
|
<div className="flex-1">
|
|
<h4 className="font-medium text-gray-900 dark:text-white mb-1">{result.title}</h4>
|
|
<p className="text-sm text-gray-500 dark:text-gray-400 mb-2">{result.bundesland_name} - {result.doc_type}</p>
|
|
<p className="text-sm text-gray-600 dark:text-gray-300 line-clamp-2">{result.snippet}</p>
|
|
</div>
|
|
<div className="ml-4 flex items-center gap-2">
|
|
<span className={`px-2 py-1 text-xs rounded-full ${
|
|
result.relevance_score > 0.8
|
|
? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200'
|
|
: result.relevance_score > 0.5
|
|
? 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200'
|
|
: 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200'
|
|
}`}>
|
|
{Math.round(result.relevance_score * 100)}%
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</button>
|
|
))}
|
|
</div>
|
|
)
|
|
}
|