import { forwardRef, useState } from 'react' import MultiSelect from '../MultiSelect' import { Button } from '../../Button' import { ButtonType, ButtonSize } from '../../Button/types' import { multiSelectAccessibilityReport } from './MultiSelectAccessibilityReport' import { generateAccessibilityReport, downloadReport, getMimeType, getFileExtension, type ReportFormat, } from '../../shared/accessibility/reportGenerator' import { Download as DownloadIcon, Check } from 'lucide-react' import { MultiSelectMenuSize, MultiSelectVariant } from '../types' export interface MultiSelectAccessibilityProps { className?: string } const MultiSelectAccessibility = forwardRef< HTMLDivElement, MultiSelectAccessibilityProps >(({ 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 [demoStates, setDemoStates] = useState({ selectedValues: [] as string[], required: false, error: false, }) const handleDownload = () => { try { if (!multiSelectAccessibilityReport) { console.error('Report data is missing') alert('Report data is not available. Please refresh the page.') return } const content = generateAccessibilityReport( multiSelectAccessibilityReport, { format: selectedFormat, includeTestResults, includeRecommendations, } ) if (!content) { console.error('Generated report content is empty') alert('Failed to generate report content. Please try again.') return } const filename = `multiselect-accessibility-report-${multiSelectAccessibilityReport.reportDate}.${getFileExtension(selectedFormat)}` const mimeType = getMimeType(selectedFormat) downloadReport(content, filename, mimeType) } catch (error) { console.error('Error generating report:', error) alert( `Failed to generate report: ${error instanceof Error ? error.message : 'Unknown error'}. Please check the console for details.` ) } } const handleViewReport = () => { try { const htmlContent = generateAccessibilityReport( multiSelectAccessibilityReport, { 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 = multiSelectAccessibilityReport 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 demoItems = [ { items: [ { label: 'Option 1', value: 'option1' }, { label: 'Option 2', value: 'option2' }, { label: 'Option 3', value: 'option3' }, ], }, ] return (

MultiSelect 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 ⚠️
Manual check needed
{complianceRate}%
Compliance Rate
{compliantCount}/{totalApplicable} criteria
{/* Summary & Download */}

Summary

{report.summary}

Download Report

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

Full Accessibility Report

Interactive HTML report (same as downloaded version)