import { DarkPattern } from '../types/analysis'; import { Badge } from './ui/badge'; import { AlertTriangle, Brain, FileText, Lightbulb } from 'lucide-react'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from './ui/accordion'; interface DarkPatternsListProps { patterns: DarkPattern[]; } export function DarkPatternsList({ patterns }: DarkPatternsListProps) { const getSeverityBadgeClass = (severity: string) => { switch (severity) { case 'critical': return 'bg-rose-500/10 text-rose-400 border border-rose-500/20'; case 'high': return 'bg-orange-500/10 text-orange-400 border border-orange-500/20'; case 'medium': return 'bg-amber-500/10 text-amber-400 border border-amber-500/20'; default: return 'bg-indigo-500/10 text-indigo-400 border border-indigo-500/20'; } }; const getSeverityBorderColor = (severity: string) => { switch (severity) { case 'critical': return 'border-rose-500/25 bg-rose-500/5 hover:border-rose-500/40'; case 'high': return 'border-orange-500/25 bg-orange-500/5 hover:border-orange-500/40'; case 'medium': return 'border-amber-500/25 bg-amber-500/5 hover:border-amber-500/40'; default: return 'border-indigo-500/25 bg-indigo-500/5 hover:border-indigo-500/40'; } }; // Sort by severity const sortedPatterns = [...patterns].sort((a, b) => { const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 }; return severityOrder[a.severity] - severityOrder[b.severity]; }); return (
Identified {patterns.length} deceptive copy triggers in the layout layers. Expand each item below for compliance details and XAI fixes.
{pattern.description}
{pattern.cfpbViolation}
{pattern.recommendation}
The models run OCR to extract text boundaries and classify the linguistic copy structure. All recommendations are generated by parsing structural cues against TILA, EFTA, and CFPB administrative records.