import { forwardRef, useState } from 'react' import Alert from '../Alert' import { Button } from '../../Button' import { ButtonType, ButtonSize } from '../../Button/types' import { AlertTriangle, CheckCircle, Info } from 'lucide-react' import { alertAccessibilityReport, type AccessibilityReport, } from './AlertAccessibilityReport' import { generateAccessibilityReport, downloadReport, getMimeType, getFileExtension, type ReportFormat, } from '../../shared/accessibility/reportGenerator' import { Download as DownloadIcon } from 'lucide-react' import { AlertVariant, AlertActionPlacement } from '../types' export type AlertAccessibilityProps = { className?: string } const AlertAccessibility = forwardRef( ({ className }, ref) => { const [selectedFormat, setSelectedFormat] = useState('markdown') const [includeTestResults, setIncludeTestResults] = useState(true) const [includeRecommendations, setIncludeRecommendations] = useState(true) const [reportHtmlContent, setReportHtmlContent] = useState< string | null >(null) const [showFullReport, setShowFullReport] = useState(false) const handleDownload = () => { try { const content = generateAccessibilityReport( alertAccessibilityReport as AccessibilityReport, { format: selectedFormat, includeTestResults, includeRecommendations, } ) const filename = `alert-accessibility-report-${alertAccessibilityReport.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( alertAccessibilityReport as AccessibilityReport, { 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 handleCloseReport = () => { setShowFullReport(false) setReportHtmlContent(null) } const report = alertAccessibilityReport return (

{report.componentName} Accessibility Report

{/* Report Summary */}

Summary

{report.summary}

WCAG Version

{report.wcagVersion}

Conformance Level

{report.conformanceLevel}

Overall Status

{report.overallStatus}

{showFullReport && reportHtmlContent && (

Full Accessibility Report

)}
{/* Strengths and Recommendations */}

Strengths & Recommendations

Strengths

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

Recommendations

    {report.recommendations.map( (recommendation, index) => (
  • {recommendation}
  • ) )}
{/* Interactive Demo Section */}

Interactive Accessibility Demo

This section demonstrates key accessibility features of the {report.componentName} component. Use keyboard navigation (Tab, Enter, Space) and screen readers to experience these features.

{/* ARIA Roles */}

1. ARIA Roles (WCAG 4.1.2, 4.1.3)

Error Alert (role="alert" - Assertive)

} />

Warning Alert (role="alert" - Assertive)

} />

Success Alert (role="status" - Polite)

} />

Info Alert (role="status" - Polite)

} />
{/* Semantic HTML */}

2. Semantic HTML Structure (WCAG 1.3.1)

{/* ARIA Relationships */}

3. ARIA Relationships (WCAG 4.1.2)

{/* Keyboard Navigation */}

4. Keyboard Navigation (WCAG 2.1.1)

alert('Primary action clicked'), }} secondaryAction={{ label: 'Secondary Action', onClick: () => alert('Secondary action clicked'), }} onClose={() => alert('Close clicked')} />
{/* Focus Indicators */}

5. Focus Visible Indicators (WCAG 2.4.7)

{}, }} onClose={() => {}} />
{/* Decorative Content */}

6. Decorative Content Handling (WCAG 1.1.1)

} />
{/* Action Placement */}

7. Action Placement

Actions on Right

{}, }} onClose={() => {}} actionPlacement={AlertActionPlacement.RIGHT} />

Actions on Bottom

{}, }} onClose={() => {}} actionPlacement={ AlertActionPlacement.BOTTOM } />
) } ) AlertAccessibility.displayName = 'AlertAccessibility' export default AlertAccessibility