import { forwardRef, useState } from 'react' import Menu from '../Menu' import { Button, ButtonType, ButtonSize } from '../../Button' import type { MenuGroupType } from '../types' import { menuAccessibilityReport } from './MenuAccessibilityReport' import { generateAccessibilityReport, downloadReport, getMimeType, getFileExtension, type ReportFormat, } from '../../shared/accessibility/reportGenerator' import { Download as DownloadIcon } from 'lucide-react' import { User, Settings, LogOut, Plus, Save, Trash2 } from 'lucide-react' export type MenuAccessibilityProps = { className?: string } const MenuAccessibility = 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( menuAccessibilityReport, { format: selectedFormat, includeTestResults, includeRecommendations, } ) const filename = `menu-accessibility-report-${menuAccessibilityReport.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( menuAccessibilityReport, { 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 = menuAccessibilityReport 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 basicMenuItems: MenuGroupType[] = [ { items: [ { label: 'Profile', slot1: , onClick: () => console.log('Profile clicked'), }, { label: 'Settings', slot1: , onClick: () => console.log('Settings clicked'), }, { label: 'Sign Out', slot1: , onClick: () => console.log('Sign out clicked'), }, ], }, ] const groupedMenuItems: MenuGroupType[] = [ { label: 'File', items: [ { label: 'New', slot1: , onClick: () => console.log('New'), }, { label: 'Save', slot1: , onClick: () => console.log('Save'), }, ], }, { label: 'Edit', items: [ { label: 'Delete', slot1: , onClick: () => console.log('Delete'), }, ], showSeparator: true, }, ] const searchMenuItems: MenuGroupType[] = [ { items: Array.from({ length: 10 }, (_, i) => ({ label: `Item ${i + 1}`, onClick: () => console.log(`Item ${i + 1}`), })), }, ] return (

Menu Accessibility Report

WCAG 2.0, 2.1, 2.2 Compliance Analysis - Level AA

Report Date: {report.reportDate}

{report.overallStatus.toUpperCase()}
{/* Compliance Stats */}
{compliantCount}
Compliant
{nonCompliantCount}
Non-Compliant
{unsureCount}
Requires Verification
{complianceRate}%
Compliance Rate
{/* Summary & Download */}

Summary

{report.summary}

Download Report

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

Full Accessibility Report

Interactive HTML report (same as downloaded version)