admin08077/Githubgemini
0
1{"version":3,"file":"AccessibilityAuditor-9k2YK-kF.js","sources":["../../components/features/AccessibilityAuditor.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react';\nimport { suggestA11yFix } from '../../services/index.ts';\nimport { runAxeAudit, AxeResult } from '../../services/auditing/accessibilityService.ts';\nimport { EyeIcon, SparklesIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\nexport const AccessibilityAuditor: React.FC = () => {\n const [url, setUrl] = useState('https://react.dev');\n const [auditUrl, setAuditUrl] = useState('');\n const [results, setResults] = useState<AxeResult | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingAi, setIsLoadingAi] = useState<string | null>(null);\n const [aiFixes, setAiFixes] = useState<Record<string, string>>({});\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n const handleAudit = () => {\n const targetUrl = url.startsWith('http') ? url : `https://${url}`;\n setAuditUrl(targetUrl);\n setIsLoading(true);\n setResults(null);\n setAiFixes({});\n };\n \n const handleIframeLoad = async () => {\n if (isLoading && iframeRef.current) {\n try {\n const auditResults = await runAxeAudit(iframeRef.current.contentWindow!.document);\n setResults(auditResults);\n } catch (error) {\n console.error(error);\n alert('Could not audit this page. This may be due to security restrictions (CORS).');\n } finally {\n setIsLoading(false);\n }\n }\n };\n \n const handleGetFix = async (issue: any) => {\n const issueId = issue.id;\n setIsLoadingAi(issueId);\n try {\n const fix = await suggestA11yFix(issue);\n setAiFixes(prev => ({...prev, [issueId]: fix}));\n } catch(e) {\n setAiFixes(prev => ({...prev, [issueId]: 'Could not get suggestion.'}));\n } finally {\n setIsLoadingAi(null);\n }\n };\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\"><h1 className=\"text-3xl font-bold flex items-center\"><EyeIcon /><span className=\"ml-3\">Automated Accessibility Auditor</span></h1><p className=\"text-text-secondary mt-1\">Audit a live URL for accessibility issues and get AI-powered fixes.</p></header>\n <div className=\"flex gap-2 mb-4\"><input type=\"text\" value={url} onChange={e => setUrl(e.target.value)} placeholder=\"https://example.com\" className=\"flex-grow p-2 border rounded\"/><button onClick={handleAudit} disabled={isLoading} className=\"btn-primary px-6 py-2\">{isLoading ? 'Auditing...' : 'Audit'}</button></div>\n <div className=\"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0\">\n <div className=\"bg-background border-2 border-dashed border-border rounded-lg overflow-hidden\"><iframe ref={iframeRef} src={auditUrl} title=\"Audit Target\" className=\"w-full h-full bg-white\" onLoad={handleIframeLoad} sandbox=\"allow-scripts allow-same-origin\"/></div>\n <div className=\"bg-surface p-4 border border-border rounded-lg flex flex-col\">\n <h3 className=\"text-lg font-bold mb-2\">Audit Results</h3>\n <div className=\"flex-grow overflow-y-auto pr-2\">\n {isLoading && <div className=\"flex justify-center items-center h-full\"><LoadingSpinner/></div>}\n {results && (results.violations.length === 0 ? <p>No violations found!</p> :\n results.violations.map((v, i) => (\n <div key={v.id + i} className=\"p-3 mb-2 bg-background border border-border rounded\">\n <p className=\"font-bold text-red-600\">{v.help}</p>\n <p className=\"text-sm my-1\">{v.description}</p>\n <button onClick={() => handleGetFix(v)} disabled={!!isLoadingAi} className=\"text-xs flex items-center gap-1 text-primary font-semibold\"><SparklesIcon/> {isLoadingAi === v.id ? 'Getting fix...' : 'Ask AI for a fix'}</button>\n {aiFixes[v.id] && <div className=\"mt-2 text-xs border-t pt-2\"><MarkdownRenderer content={aiFixes[v.id]}/></div>}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["AccessibilityAuditor","url","setUrl","useState","auditUrl","setAuditUrl","results","setResults","isLoading","setIsLoading","isLoadingAi","setIsLoadingAi","aiFixes","setAiFixes","iframeRef","useRef","handleAudit","targetUrl","handleIframeLoad","auditResults","runAxeAudit","error","handleGetFix","issue","issueId","fix","suggestA11yFix","prev","jsxs","jsx","EyeIcon","e","LoadingSpinner","v","i","SparklesIcon","MarkdownRenderer"],"mappings":"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"}