import { forwardRef, useState } from 'react' import { Button } from '../../Button' import { ButtonType, ButtonSize } from '../../Button/types' import { Upload, UploadState } from '../index' import { uploadAccessibilityReport } from './UploadAccessibilityReport' import { generateAccessibilityReport, downloadReport, type ReportFormat, } from '../../shared/accessibility/reportGenerator' import { Download as DownloadIcon, FileUp, X, CheckCircle2 } from 'lucide-react' export type UploadAccessibilityProps = { className?: string } const UploadAccessibility = forwardRef< HTMLDivElement, UploadAccessibilityProps >(({ 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 handleViewReport = () => { try { const htmlContent = generateAccessibilityReport( uploadAccessibilityReport, { 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 = uploadAccessibilityReport 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 return (

Upload 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 ❌
Needs attention
{unsureCount}
Verification Needed ⚠️
Manual testing required
{complianceRate}%
Compliance Rate
{compliantCount}/{totalApplicable} criteria

{report.summary}

{/* Component Demo */}

Component Demo

Default Upload

{}} />

Multiple Files Upload

{}} />

Upload with Error State

{}} />

Upload with Success State

{}} />

Disabled Upload

{}} />
{/* WCAG Criteria Overview */}

WCAG Success Criteria Evaluation

Level A Criteria ( {report.testMethodology.wcagLevels.A.length}{' '} evaluated)

Minimum requirements for basic accessibility.

Criteria:

{report.testMethodology.wcagLevels.A.join( ', ' )}

Level AA Criteria ( {report.testMethodology.wcagLevels.AA.length}{' '} evaluated)

Enhanced accessibility requirements.

Criteria:

{report.testMethodology.wcagLevels.AA.join( ', ' )}

Level AAA Criteria ( {report.testMethodology.wcagLevels.AAA.length}{' '} evaluated)

Highest level of accessibility (optional).

Criteria:

{report.testMethodology.wcagLevels.AAA.join( ', ' )}

{/* Strengths */}

Strengths

    {report.strengths.map((strength, index) => (
  • {strength}
  • ))}
{/* Recommendations */}

Recommendations

    {report.recommendations.map((rec, index) => (
  • {index + 1}. {rec}
  • ))}
{/* Report Download */}

Download Accessibility Report

Report generated on{' '} {new Date().toLocaleString()}

{/* Full Report View */} {showFullReport && reportHtmlContent && (

Full Report