Spaces:
Runtime error
Runtime error
File size: 2,847 Bytes
5752a28 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | import { Download, FileText } from 'lucide-react';
import { Button } from './ui/button';
import { AnalysisData } from '../types/analysis';
interface ExportReportProps {
data: AnalysisData;
}
export function ExportReport({ data }: ExportReportProps) {
const generateReport = () => {
const reportContent = `
FINTECH DARK PATTERN DETECTION REPORT
Generated: ${new Date(data.timestamp).toLocaleString()}
=======================================================
EXECUTIVE SUMMARY
-----------------
Trust Score: ${data.overallScore}/100
Risk Level: ${data.riskLevel.toUpperCase()}
Dark Patterns Detected: ${data.darkPatterns.length}
CFPB Compliance: ${data.complianceReport.cfpbAlignment}%
DETECTED DARK PATTERNS
-----------------------
${data.darkPatterns.map((pattern, index) => `
${index + 1}. ${pattern.type} [${pattern.severity.toUpperCase()}]
Description: ${pattern.description}
CFPB Violation: ${pattern.cfpbViolation}
Recommendation: ${pattern.recommendation}
Confidence: ${pattern.confidence}%
Location: (${pattern.location.x}%, ${pattern.location.y}%)
`).join('\n')}
CFPB COMPLIANCE ISSUES
----------------------
${data.complianceReport.issues.map((issue, index) => `${index + 1}. ${issue}`).join('\n')}
RECOMMENDATIONS
---------------
${data.complianceReport.recommendations.map((rec, index) => `${index + 1}. ${rec}`).join('\n')}
=======================================================
This report was generated by the Fintech Dark Pattern Detector
using AI-powered XAI analysis and CFPB compliance heuristics.
`.trim();
// Create and download the report
const blob = new Blob([reportContent], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `dark-pattern-report-${Date.now()}.txt`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
};
const generateJSON = () => {
const jsonContent = JSON.stringify(data, null, 2);
const blob = new Blob([jsonContent], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `dark-pattern-report-${Date.now()}.json`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
};
return (
<div className="flex gap-3">
<Button onClick={generateReport} variant="outline" size="sm">
<FileText className="w-4 h-4 mr-2" />
Export Report (TXT)
</Button>
<Button onClick={generateJSON} variant="outline" size="sm">
<Download className="w-4 h-4 mr-2" />
Export Data (JSON)
</Button>
</div>
);
}
|