/** * Accessibility Validator * * Static a11y checks on Eddie markup — the class of defect that renders fine * but fails real users, which neither the token nor naming nor slot-contract * validators catch. Added after a generated bradfrost.com footer shipped * placeholder/non-descriptive link text and plain (non-knockout) links on the * dark footer band (see #637). * * Scope: * - `.html` files (consumer projects, boilerplates) * - Lit `html`...`` template regions inside `.ts` / `.tsx` / `.js` / `.mjs` / `.jsx` * * Checks: * 1. LINK TEXT — link-bearing elements (`ed-link-list-item`, * `ed-primary-nav-item`, `ed-utility-nav-item`, `ed-icon-link-list-item`, * bare ``) whose accessible label is a placeholder ("Nav Item", * "primary nav 1") or a non-descriptive generic ("Click here", "Read more", * empty). WCAG 2.4.4 — link text must describe its destination out of * context. * 2. KNOCKOUT-ON-DARK — `ed-link-list` / `ed-logo` inside an `ed-footer` or * `ed-r-site-footer` (a knockout/dark band) that omit the `knockout` * variant, so their links fail contrast against the dark surface. * WCAG 1.4.3. * * Conservatism: like the slot-contract validator, false positives are worse * than false negatives here — noisy a11y output gets ignored. The placeholder * list is tight and the generic-CTA list is graded to `warning`, not `error`. */ import type { HealthIssue } from '../types.js'; export declare class AccessibilityValidator { validateFile(filePath: string): Promise; private scanRegion; private checkLinkText; /** * True when the matched open tag encloses non-empty content that would act as * the item's accessible label — slotted text, an interpolated expression, or a * nested element. Self-closing tags never have one. */ private hasSlottedLabel; private classifyLabel; private linkIssue; private checkKnockoutContext; private scanForMissingKnockout; } //# sourceMappingURL=accessibility-validator.d.ts.map