import { forwardRef, useState } from 'react' import StatCard from '../StatCard' import { StatCardVariant, StatCardDirection, ChangeType, type ChartDataPoint, } from '../types' import { statCardAccessibilityReport } from './StatCardAccessibilityReport' import { generateAccessibilityReport, downloadReport, getMimeType, getFileExtension, type ReportFormat, } from '../../shared/accessibility/reportGenerator' import { Download as DownloadIcon, DollarSign, TrendingUp, Users, Activity, } from 'lucide-react' import Button from '../../Button/Button' import { ButtonType, ButtonSize } from '../../Button/types' export type StatCardAccessibilityProps = { className?: string } // Helper function to generate sample chart data const generateChartData = ( days: number, baseValue: number, variance: number ): ChartDataPoint[] => { const data: ChartDataPoint[] = [] const today = new Date() for (let i = days - 1; i >= 0; i--) { const date = new Date(today) date.setDate(date.getDate() - i) const value = baseValue + (Math.random() - 0.5) * variance data.push({ value: Math.round(value), name: date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', }), }) } return data } const StatCardAccessibility = forwardRef< HTMLDivElement, StatCardAccessibilityProps >(({ className }, ref) => { const [selectedFormat, setSelectedFormat] = useState('markdown') const [includeTestResults, setIncludeTestResults] = useState(true) const [includeRecommendations, setIncludeRecommendations] = useState(true) const [reportHtmlContent, setReportHtmlContent] = useState( null ) const [showFullReport, setShowFullReport] = useState(false) const handleDownload = () => { try { const content = generateAccessibilityReport( statCardAccessibilityReport, { format: selectedFormat, includeTestResults, includeRecommendations, } ) const filename = `statcard-accessibility-report-${statCardAccessibilityReport.reportDate}.${getFileExtension(selectedFormat)}` const mimeType = getMimeType(selectedFormat) downloadReport(content, filename, mimeType) } catch (error) { console.error('Error generating report:', error) alert('Failed to generate report. Please try again.') } } const handleViewReport = () => { try { const htmlContent = generateAccessibilityReport( statCardAccessibilityReport, { format: 'html', includeTestResults, includeRecommendations, } ) setReportHtmlContent(htmlContent) setShowFullReport(true) } catch (error) { console.error('Error generating report:', error) alert('Failed to generate report. Please try again.') } } const report = statCardAccessibilityReport const compliantCount = report.criteria.filter( (c) => c.status === 'compliant' ).length const nonCompliantCount = report.criteria.filter( (c) => c.status === 'non-compliant' ).length const unsureCount = report.criteria.filter( (c) => c.status === 'unsure' ).length const totalApplicable = report.criteria.filter( (c) => c.status !== 'not-applicable' ).length const complianceRate = totalApplicable > 0 ? Math.round((compliantCount / totalApplicable) * 100) : 0 const revenueData = generateChartData(30, 5000, 1000) const conversionData = generateChartData(30, 3.5, 0.8) return (

StatCard Component Accessibility

WCAG {report.wcagVersion} • {report.conformanceLevel} • {report.reportDate}
Evaluates: WCAG 2.0, 2.1, 2.2
{report.overallStatus.toUpperCase()}
{compliantCount}
Compliant ✅
Verified & tested
{nonCompliantCount}
Non-Compliant ❌
Issues found
{unsureCount}
Unsure ⚠️
Needs verification
{complianceRate}%
Compliance Rate
Based on verified items
{unsureCount > 0 && (
⚠️

Manual Verification Required

{unsureCount} criterion/criteria marked as "unsure" require manual verification. These items need testing with contrast checkers, screen readers, or depend on application context.

)}

Summary

{report.summary}

Download Report

{showFullReport && reportHtmlContent && (

Full Accessibility Report

Interactive HTML report