@a13y/devtools 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/warnings/warning-system.ts","../../src/runtime/warnings/warning-types.ts","../../src/runtime/invariants/invariants.ts","../../src/runtime/validators/aria-validator.ts","../../src/runtime/validators/focus-validator.ts","../../src/runtime/validators/keyboard-validator.ts"],"names":["isDevelopment"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @a13y/devtools - Warning System\n * Structured warning system with styled console output\n */\n\nimport type { AccessibilityWarning, WarningSeverity } from './warning-types';\n\n/**\n * Console styling for warnings\n */\nconst Styles = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n\n // Colors\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n cyan: '\\x1b[36m',\n gray: '\\x1b[90m',\n\n // Backgrounds\n bgRed: '\\x1b[41m',\n bgYellow: '\\x1b[43m',\n bgBlue: '\\x1b[44m',\n} as const;\n\n/**\n * Format a message with console styling\n */\nconst style = (text: string, ...styles: string[]): string => {\n return `${styles.join('')}${text}${Styles.reset}`;\n};\n\n/**\n * Configuration for warning system\n */\nexport interface WarningSystemConfig {\n /**\n * Enable/disable warnings\n * @default true in development\n */\n enabled?: boolean;\n\n /**\n * Minimum severity to show\n * @default 'warn'\n */\n minSeverity?: WarningSeverity;\n\n /**\n * Show element in console\n * @default true\n */\n showElement?: boolean;\n\n /**\n * Show stack traces for errors\n * @default true\n */\n showStackTrace?: boolean;\n\n /**\n * Deduplicate warnings\n * @default true\n */\n deduplicate?: boolean;\n\n /**\n * Custom warning handler\n */\n onWarning?: (warning: AccessibilityWarning) => void;\n}\n\n/**\n * Warning system class\n */\nclass WarningSystemClass {\n private config: Required<WarningSystemConfig> = {\n enabled: true,\n minSeverity: 'warn',\n showElement: true,\n showStackTrace: true,\n deduplicate: true,\n onWarning: () => {},\n };\n\n private warningCache = new Set<string>();\n\n /**\n * Configure the warning system\n */\n configure(config: WarningSystemConfig): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Emit a warning\n */\n warn(warning: AccessibilityWarning): void {\n if (!this.config.enabled) {\n return;\n }\n\n // Check severity threshold\n const severityLevel = { info: 0, warn: 1, error: 2 };\n if (severityLevel[warning.severity] < severityLevel[this.config.minSeverity]) {\n return;\n }\n\n // Deduplicate\n if (this.config.deduplicate) {\n const key = this.getWarningKey(warning);\n if (this.warningCache.has(key)) {\n return;\n }\n this.warningCache.add(key);\n }\n\n // Custom handler\n if (this.config.onWarning) {\n this.config.onWarning(warning);\n }\n\n // Console output\n this.printWarning(warning);\n }\n\n /**\n * Clear warning cache\n */\n clearCache(): void {\n this.warningCache.clear();\n }\n\n /**\n * Generate a unique key for a warning\n */\n private getWarningKey(warning: AccessibilityWarning): string {\n const parts = [warning.code, warning.message];\n\n if (warning.element) {\n // Use element's tag, id, and classes for uniqueness\n const tag = warning.element.tagName.toLowerCase();\n const id = warning.element.id;\n const classes = Array.from(warning.element.classList).join('.');\n parts.push(`${tag}#${id}.${classes}`);\n }\n\n return parts.join('|');\n }\n\n /**\n * Print warning to console\n */\n private printWarning(warning: AccessibilityWarning): void {\n const { severity, code, category, message, element, wcag, fixes } = warning;\n\n // Severity badge\n const badge = this.getSeverityBadge(severity);\n\n // Header\n console.group(\n `${badge} ${style(code, Styles.bold, Styles.cyan)} ${style(category, Styles.dim)}`\n );\n\n // Message\n console.log(style(message, Styles.bold));\n\n // Element\n if (element && this.config.showElement) {\n console.log(style('\\nElement:', Styles.bold));\n console.log(element);\n }\n\n // WCAG info\n if (wcag) {\n console.log(style('\\nWCAG:', Styles.bold), `${wcag.criterion} (Level ${wcag.level})`);\n console.log(style('Learn more:', Styles.blue), wcag.url);\n }\n\n // Fix suggestions\n if (fixes.length > 0) {\n console.log(style('\\nHow to fix:', Styles.bold, Styles.cyan));\n fixes.forEach((fix, index) => {\n console.log(`${index + 1}. ${fix.description}`);\n\n if (fix.example) {\n console.log(style('\\n Example:', Styles.dim));\n console.log(style(` ${fix.example}`, Styles.dim, Styles.gray));\n }\n\n if (fix.learnMoreUrl) {\n console.log(style(' Learn more:', Styles.blue), fix.learnMoreUrl);\n }\n });\n }\n\n // Stack trace for errors\n if (severity === 'error' && this.config.showStackTrace) {\n console.log(style('\\nStack trace:', Styles.dim));\n console.trace();\n }\n\n console.groupEnd();\n console.log(''); // Empty line for spacing\n }\n\n /**\n * Get severity badge for console\n */\n private getSeverityBadge(severity: WarningSeverity): string {\n switch (severity) {\n case 'error':\n return style(' ERROR ', Styles.bold, Styles.bgRed);\n case 'warn':\n return style(' WARN ', Styles.bold, Styles.bgYellow);\n case 'info':\n return style(' INFO ', Styles.bold, Styles.bgBlue);\n }\n }\n}\n\n/**\n * Singleton warning system\n */\nexport const WarningSystem = new WarningSystemClass();\n\n/**\n * Helper to create a warning\n */\nexport const createWarning = (\n partial: Omit<AccessibilityWarning, 'fixes'> & {\n fixes?: AccessibilityWarning['fixes'];\n }\n): AccessibilityWarning => {\n return {\n fixes: [],\n ...partial,\n };\n};\n","/**\n * @a13y/devtools - Warning Types\n * Type definitions for accessibility warnings\n */\n\n/**\n * Warning severity level\n */\nexport type WarningSeverity = 'error' | 'warn' | 'info';\n\n/**\n * WCAG level for the violation\n */\nexport type WCAGLevel = 'A' | 'AA' | 'AAA';\n\n/**\n * Category of accessibility issue\n */\nexport type WarningCategory =\n | 'focus-management'\n | 'keyboard-navigation'\n | 'aria-usage'\n | 'accessible-name'\n | 'semantic-html'\n | 'wcag-compliance'\n | 'performance';\n\n/**\n * Fix suggestion for a warning\n */\nexport interface FixSuggestion {\n /**\n * Description of how to fix the issue\n */\n description: string;\n\n /**\n * Code example showing the fix\n */\n example?: string;\n\n /**\n * Link to documentation\n */\n learnMoreUrl?: string;\n}\n\n/**\n * Accessibility warning\n */\nexport interface AccessibilityWarning {\n /**\n * Unique warning code (e.g., \"A13Y001\")\n */\n code: string;\n\n /**\n * Severity level\n */\n severity: WarningSeverity;\n\n /**\n * Category of the issue\n */\n category: WarningCategory;\n\n /**\n * Human-readable message\n */\n message: string;\n\n /**\n * Element that caused the warning\n */\n element?: Element;\n\n /**\n * WCAG criterion violated\n */\n wcag?: {\n criterion: string;\n level: WCAGLevel;\n url: string;\n };\n\n /**\n * Suggestions for fixing the issue\n */\n fixes: FixSuggestion[];\n\n /**\n * Additional context\n */\n context?: Record<string, unknown>;\n}\n\n/**\n * Warning code definitions\n */\nexport const WarningCodes = {\n // Focus Management (001-099)\n FOCUS_LOST: 'A13Y001',\n FOCUS_NOT_VISIBLE: 'A13Y002',\n FOCUS_TRAP_BROKEN: 'A13Y003',\n FOCUS_ORDER_INVALID: 'A13Y004',\n FOCUS_NOT_RESTORED: 'A13Y005',\n\n // Keyboard Navigation (100-199)\n NOT_KEYBOARD_ACCESSIBLE: 'A13Y100',\n MISSING_KEYBOARD_HANDLER: 'A13Y101',\n INVALID_TABINDEX: 'A13Y102',\n ROVING_TABINDEX_BROKEN: 'A13Y103',\n MISSING_ESC_HANDLER: 'A13Y104',\n\n // Accessible Name (200-299)\n MISSING_ACCESSIBLE_NAME: 'A13Y200',\n EMPTY_ACCESSIBLE_NAME: 'A13Y201',\n DUPLICATE_ID: 'A13Y202',\n INVALID_LABELLEDBY: 'A13Y203',\n PLACEHOLDER_AS_LABEL: 'A13Y204',\n\n // ARIA Usage (300-399)\n INVALID_ARIA_ROLE: 'A13Y300',\n INVALID_ARIA_ATTRIBUTE: 'A13Y301',\n CONFLICTING_ARIA: 'A13Y302',\n REDUNDANT_ARIA: 'A13Y303',\n MISSING_REQUIRED_ARIA: 'A13Y304',\n INVALID_ARIA_VALUE: 'A13Y305',\n\n // Semantic HTML (400-499)\n DIV_BUTTON: 'A13Y400',\n DIV_LINK: 'A13Y401',\n MISSING_LANDMARK: 'A13Y402',\n INVALID_NESTING: 'A13Y403',\n\n // WCAG Compliance (500-599)\n CONTRAST_INSUFFICIENT: 'A13Y500',\n TARGET_SIZE_TOO_SMALL: 'A13Y501',\n ANIMATION_NO_REDUCE_MOTION: 'A13Y502',\n\n // Performance (600-699)\n TOO_MANY_LIVE_REGIONS: 'A13Y600',\n EXCESSIVE_ANNOUNCEMENTS: 'A13Y601',\n} as const;\n\n/**\n * WCAG criterion URLs\n */\nexport const WCAGUrls = {\n '1.3.1': 'https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html',\n '1.4.3': 'https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html',\n '2.1.1': 'https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html',\n '2.1.2': 'https://www.w3.org/WAI/WCAG22/Understanding/no-keyboard-trap.html',\n '2.4.3': 'https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html',\n '2.4.7': 'https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html',\n '2.5.5': 'https://www.w3.org/WAI/WCAG22/Understanding/target-size.html',\n '4.1.2': 'https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html',\n '4.1.3': 'https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html',\n} as const;\n","/**\n * @a13y/devtools - Invariants\n * Development-only assertions for accessibility constraints\n */\n\nimport { isDevelopment } from '@a13y/core/runtime/env';\nimport { createWarning, WarningSystem } from '../warnings/warning-system';\nimport { WarningCodes, WCAGUrls } from '../warnings/warning-types';\n\n/**\n * Assert that a condition is true, throw error if false (development only)\n */\nexport const invariant = (condition: boolean, message: string): void => {\n if (!isDevelopment()) {\n return;\n }\n\n if (!condition) {\n throw new Error(`[@a13y/devtools] Invariant violation: ${message}`);\n }\n};\n\n/**\n * Assert that an element has an accessible name\n */\nexport const assertHasAccessibleName = (element: Element, context?: string): void => {\n if (!isDevelopment()) {\n return;\n }\n\n // Import getAccessibleName at runtime to avoid circular deps\n import('@a13y/core/runtime/aria')\n .then(({ getAccessibleName }) => {\n const name = getAccessibleName(element);\n\n if (!name || name.trim().length === 0) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.MISSING_ACCESSIBLE_NAME,\n severity: 'error',\n category: 'accessible-name',\n message: `Element is missing an accessible name${context ? ` in ${context}` : ''}`,\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Add an aria-label attribute',\n example: `<${element.tagName.toLowerCase()} aria-label=\"Descriptive name\">`,\n },\n {\n description: 'Add text content',\n example: `<${element.tagName.toLowerCase()}>Click me</${element.tagName.toLowerCase()}>`,\n },\n {\n description: 'Use aria-labelledby to reference another element',\n example: `<${element.tagName.toLowerCase()} aria-labelledby=\"label-id\">`,\n },\n ],\n })\n );\n }\n })\n .catch(() => {\n // Silently fail if @a13y/core is not available\n });\n};\n\n/**\n * Assert that an element is keyboard accessible\n */\nexport const assertKeyboardAccessible = (element: Element, context?: string): void => {\n if (!isDevelopment()) {\n return;\n }\n\n const isButton = element instanceof HTMLButtonElement;\n const isLink = element instanceof HTMLAnchorElement && element.hasAttribute('href');\n const isInput = element instanceof HTMLInputElement;\n const hasTabindex = element.hasAttribute('tabindex');\n const tabindex = hasTabindex ? parseInt(element.getAttribute('tabindex') || '0', 10) : -1;\n\n // Check if element is naturally keyboard accessible or has tabindex >= 0\n const isAccessible = isButton || isLink || isInput || (hasTabindex && tabindex >= 0);\n\n if (!isAccessible) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.NOT_KEYBOARD_ACCESSIBLE,\n severity: 'error',\n category: 'keyboard-navigation',\n message: `Element is not keyboard accessible${context ? ` in ${context}` : ''}`,\n element,\n wcag: {\n criterion: '2.1.1',\n level: 'A',\n url: WCAGUrls['2.1.1'],\n },\n fixes: [\n {\n description: 'Use a semantic HTML element (button, a, input)',\n example: `<button type=\"button\">Click me</button>`,\n },\n {\n description: 'Add tabindex=\"0\" to make it focusable',\n example: `<${element.tagName.toLowerCase()} tabindex=\"0\">`,\n },\n {\n description: 'Add keyboard event handlers (Enter, Space)',\n example: `element.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // Handle activation\n }\n});`,\n },\n ],\n })\n );\n }\n\n // Check for click handler without keyboard handler\n const hasClickHandler = element.getAttribute('onclick') !== null;\n if (hasClickHandler && !isButton && !isLink) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.MISSING_KEYBOARD_HANDLER,\n severity: 'warn',\n category: 'keyboard-navigation',\n message: `Element has click handler but no keyboard handlers${context ? ` in ${context}` : ''}`,\n element,\n wcag: {\n criterion: '2.1.1',\n level: 'A',\n url: WCAGUrls['2.1.1'],\n },\n fixes: [\n {\n description: 'Add onKeyDown handler for Enter and Space keys',\n example: `const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e);\n }\n};`,\n },\n ],\n })\n );\n }\n};\n\n/**\n * Assert that tabindex value is valid\n */\nexport const assertValidTabindex = (element: Element): void => {\n if (!isDevelopment()) {\n return;\n }\n\n const tabindex = element.getAttribute('tabindex');\n if (tabindex === null) {\n return;\n }\n\n const value = parseInt(tabindex, 10);\n\n // Warn about positive tabindex (antipattern)\n if (value > 0) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.INVALID_TABINDEX,\n severity: 'warn',\n category: 'keyboard-navigation',\n message: `Positive tabindex (${value}) creates confusing tab order`,\n element,\n wcag: {\n criterion: '2.4.3',\n level: 'A',\n url: WCAGUrls['2.4.3'],\n },\n fixes: [\n {\n description: 'Use tabindex=\"0\" to add element to natural tab order',\n example: `<div tabindex=\"0\">Focusable in natural order</div>`,\n },\n {\n description: 'Use tabindex=\"-1\" to remove from tab order (programmatic focus only)',\n example: `<div tabindex=\"-1\">Not in tab order</div>`,\n },\n {\n description: 'Restructure DOM to achieve desired focus order',\n learnMoreUrl: 'https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html',\n },\n ],\n })\n );\n }\n};\n\n/**\n * Assert that ARIA attributes are valid for the element's role\n */\nexport const assertValidAriaAttributes = (element: Element): void => {\n if (!isDevelopment()) {\n return;\n }\n\n const role = element.getAttribute('role');\n const ariaAttributes = Array.from(element.attributes).filter((attr) =>\n attr.name.startsWith('aria-')\n );\n\n // Check for ARIA attributes without role\n if (!role && ariaAttributes.length > 0 && !isSemanticElement(element)) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.MISSING_REQUIRED_ARIA,\n severity: 'warn',\n category: 'aria-usage',\n message: 'Element has ARIA attributes but no explicit role',\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Add an appropriate role attribute',\n example: `<div role=\"button\" aria-pressed=\"false\">Toggle</div>`,\n },\n {\n description: 'Use a semantic HTML element instead',\n example: `<button aria-pressed=\"false\">Toggle</button>`,\n },\n ],\n })\n );\n }\n\n // Check for redundant ARIA on semantic elements\n if (role && isSemanticElement(element)) {\n const semanticRole = getImplicitRole(element);\n if (role === semanticRole) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.REDUNDANT_ARIA,\n severity: 'info',\n category: 'aria-usage',\n message: `Role \"${role}\" is redundant on <${element.tagName.toLowerCase()}>`,\n element,\n fixes: [\n {\n description: 'Remove the redundant role attribute',\n example: `<${element.tagName.toLowerCase()}> (role=\"${role}\" is implicit)`,\n },\n ],\n })\n );\n }\n }\n};\n\n/**\n * Assert that focus is visible after an action\n */\nexport const assertFocusVisible = (context?: string): void => {\n if (!isDevelopment()) {\n return;\n }\n\n // Delay check to allow focus to settle\n setTimeout(() => {\n const activeElement = document.activeElement;\n\n if (!activeElement || activeElement === document.body) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.FOCUS_LOST,\n severity: 'warn',\n category: 'focus-management',\n message: `Focus was lost${context ? ` after ${context}` : ''}`,\n wcag: {\n criterion: '2.4.3',\n level: 'A',\n url: WCAGUrls['2.4.3'],\n },\n fixes: [\n {\n description: 'Ensure focus is moved to an appropriate element',\n example: `// After closing dialog\nconst returnElement = document.getElementById('trigger-button');\nreturnElement?.focus();`,\n },\n {\n description: 'Use FocusManager to save and restore focus',\n example: `import { FocusManager } from '@a13y/core/runtime/focus';\n\nconst restore = FocusManager.saveFocus();\n// ... perform action ...\nrestore();`,\n },\n ],\n })\n );\n }\n }, 100);\n};\n\n/**\n * Check if element is a semantic HTML element\n */\nconst isSemanticElement = (element: Element): boolean => {\n const tag = element.tagName.toLowerCase();\n const semanticTags = [\n 'button',\n 'a',\n 'input',\n 'select',\n 'textarea',\n 'nav',\n 'main',\n 'article',\n 'section',\n 'header',\n 'footer',\n 'aside',\n ];\n return semanticTags.includes(tag);\n};\n\n/**\n * Get implicit ARIA role of an element\n */\nconst getImplicitRole = (element: Element): string | null => {\n const tag = element.tagName.toLowerCase();\n\n const roleMap: Record<string, string> = {\n button: 'button',\n a: 'link',\n nav: 'navigation',\n main: 'main',\n article: 'article',\n section: 'region',\n header: 'banner',\n footer: 'contentinfo',\n aside: 'complementary',\n };\n\n return roleMap[tag] || null;\n};\n","/**\n * @a13y/devtools - ARIA Validator\n * Validates ARIA attributes and usage\n */\n\nimport { isDevelopment } from '@a13y/core/runtime/env';\nimport { createWarning, WarningSystem } from '../warnings/warning-system';\nimport { WarningCodes, WCAGUrls } from '../warnings/warning-types';\n\n/**\n * Valid ARIA roles\n */\nconst VALID_ROLES = new Set([\n 'alert',\n 'alertdialog',\n 'application',\n 'article',\n 'banner',\n 'button',\n 'cell',\n 'checkbox',\n 'columnheader',\n 'combobox',\n 'complementary',\n 'contentinfo',\n 'definition',\n 'dialog',\n 'directory',\n 'document',\n 'feed',\n 'figure',\n 'form',\n 'grid',\n 'gridcell',\n 'group',\n 'heading',\n 'img',\n 'link',\n 'list',\n 'listbox',\n 'listitem',\n 'log',\n 'main',\n 'marquee',\n 'math',\n 'menu',\n 'menubar',\n 'menuitem',\n 'menuitemcheckbox',\n 'menuitemradio',\n 'navigation',\n 'none',\n 'note',\n 'option',\n 'presentation',\n 'progressbar',\n 'radio',\n 'radiogroup',\n 'region',\n 'row',\n 'rowgroup',\n 'rowheader',\n 'scrollbar',\n 'search',\n 'searchbox',\n 'separator',\n 'slider',\n 'spinbutton',\n 'status',\n 'switch',\n 'tab',\n 'table',\n 'tablist',\n 'tabpanel',\n 'term',\n 'textbox',\n 'timer',\n 'toolbar',\n 'tooltip',\n 'tree',\n 'treegrid',\n 'treeitem',\n]);\n\n/**\n * Required ARIA attributes for specific roles\n */\nconst REQUIRED_ARIA_PROPS: Record<string, string[]> = {\n checkbox: ['aria-checked'],\n combobox: ['aria-expanded', 'aria-controls'],\n gridcell: ['aria-colindex'],\n heading: ['aria-level'],\n listbox: ['aria-orientation'],\n option: ['aria-selected'],\n progressbar: ['aria-valuenow', 'aria-valuemin', 'aria-valuemax'],\n radio: ['aria-checked'],\n scrollbar: ['aria-valuenow', 'aria-valuemin', 'aria-valuemax', 'aria-controls'],\n separator: ['aria-valuenow', 'aria-valuemin', 'aria-valuemax'],\n slider: ['aria-valuenow', 'aria-valuemin', 'aria-valuemax'],\n spinbutton: ['aria-valuenow', 'aria-valuemin', 'aria-valuemax'],\n switch: ['aria-checked'],\n tab: ['aria-selected'],\n tabpanel: ['aria-labelledby'],\n textbox: ['aria-multiline'],\n treegrid: ['aria-multiselectable'],\n};\n\n/**\n * Global ARIA attributes (can be used on any element)\n */\nconst GLOBAL_ARIA_ATTRS = new Set([\n 'aria-atomic',\n 'aria-busy',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-details',\n 'aria-disabled',\n 'aria-dropeffect',\n 'aria-errormessage',\n 'aria-flowto',\n 'aria-grabbed',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-live',\n 'aria-owns',\n 'aria-relevant',\n 'aria-roledescription',\n]);\n\n/**\n * ARIA validator class\n */\nexport class AriaValidator {\n /**\n * Validate ARIA attributes on an element\n */\n validateElement(element: Element): void {\n if (!isDevelopment()) {\n return;\n }\n\n const role = element.getAttribute('role');\n const ariaAttrs = this.getAriaAttributes(element);\n\n // Validate role\n if (role) {\n this.validateRole(element, role);\n }\n\n // Validate ARIA attributes\n ariaAttrs.forEach((attr) => {\n this.validateAriaAttribute(element, attr, role);\n });\n\n // Check for required ARIA props\n if (role && REQUIRED_ARIA_PROPS[role]) {\n this.validateRequiredProps(element, role);\n }\n\n // Check for redundant ARIA\n this.checkRedundantAria(element, role);\n\n // Check for conflicting ARIA\n this.checkConflictingAria(element, ariaAttrs);\n }\n\n /**\n * Validate accessible name\n */\n validateAccessibleName(element: Element, context?: string): void {\n if (!isDevelopment()) {\n return;\n }\n\n // Import at runtime to avoid circular deps\n import('@a13y/core/runtime/aria')\n .then(({ getAccessibleName }) => {\n const name = getAccessibleName(element);\n\n if (!name || name.trim().length === 0) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.MISSING_ACCESSIBLE_NAME,\n severity: 'error',\n category: 'accessible-name',\n message: `Element is missing an accessible name${context ? ` in ${context}` : ''}`,\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Add aria-label',\n example: `<${element.tagName.toLowerCase()} aria-label=\"Description\">`,\n },\n {\n description: 'Add text content',\n example: `<${element.tagName.toLowerCase()}>Button text</${element.tagName.toLowerCase()}>`,\n },\n {\n description: 'Use aria-labelledby',\n example: `<${element.tagName.toLowerCase()} aria-labelledby=\"label-id\">`,\n },\n ],\n })\n );\n }\n\n // Warn if using placeholder as label\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n const placeholder = element.placeholder;\n if (placeholder && (!name || name === placeholder)) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.PLACEHOLDER_AS_LABEL,\n severity: 'warn',\n category: 'accessible-name',\n message: 'Using placeholder as accessible name is not recommended',\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Add a visible label',\n example: `<label for=\"input-id\">Label text</label>\n<input id=\"input-id\" placeholder=\"Example\">`,\n },\n {\n description: 'Add aria-label',\n example: `<input aria-label=\"Label text\" placeholder=\"Example\">`,\n },\n ],\n })\n );\n }\n }\n })\n .catch(() => {\n // Silently fail if @a13y/core is not available\n });\n }\n\n /**\n * Validate role attribute\n */\n private validateRole(element: Element, role: string): void {\n if (!VALID_ROLES.has(role)) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.INVALID_ARIA_ROLE,\n severity: 'error',\n category: 'aria-usage',\n message: `Invalid ARIA role: \"${role}\"`,\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Use a valid ARIA role from the specification',\n learnMoreUrl: 'https://www.w3.org/TR/wai-aria-1.2/#role_definitions',\n },\n {\n description: 'Remove the role attribute if not needed',\n },\n ],\n })\n );\n }\n }\n\n /**\n * Validate ARIA attribute\n */\n private validateAriaAttribute(element: Element, attr: string, role: string | null): void {\n // Check if attribute name is valid (starts with aria-)\n if (!attr.startsWith('aria-')) {\n return;\n }\n\n // Extract value\n const value = element.getAttribute(attr);\n\n // Validate boolean attributes\n if (\n [\n 'aria-atomic',\n 'aria-busy',\n 'aria-disabled',\n 'aria-hidden',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-readonly',\n 'aria-required',\n ].includes(attr)\n ) {\n if (value !== 'true' && value !== 'false') {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.INVALID_ARIA_VALUE,\n severity: 'warn',\n category: 'aria-usage',\n message: `ARIA attribute \"${attr}\" must be \"true\" or \"false\", got \"${value}\"`,\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Use \"true\" or \"false\"',\n example: `<element ${attr}=\"true\">`,\n },\n ],\n })\n );\n }\n }\n\n // Validate ID references\n if (['aria-labelledby', 'aria-describedby', 'aria-controls', 'aria-owns'].includes(attr)) {\n this.validateIdReferences(element, attr, value);\n }\n\n // Validate that attribute is appropriate for role\n if (role && !GLOBAL_ARIA_ATTRS.has(attr)) {\n // This is simplified - full validation would need role-specific allowed attrs\n // For now, we just ensure it's not obviously wrong\n }\n }\n\n /**\n * Validate ID references in ARIA attributes\n */\n private validateIdReferences(element: Element, attr: string, value: string | null): void {\n if (!value) return;\n\n const ids = value.split(/\\s+/);\n\n ids.forEach((id) => {\n const referencedElement = document.getElementById(id);\n\n if (!referencedElement) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.INVALID_LABELLEDBY,\n severity: 'warn',\n category: 'aria-usage',\n message: `${attr} references non-existent element with id=\"${id}\"`,\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Ensure the referenced element exists',\n example: `<div id=\"${id}\">Label text</div>\n<button ${attr}=\"${id}\">Button</button>`,\n },\n {\n description: 'Use aria-label instead',\n example: `<button aria-label=\"Button text\">Button</button>`,\n },\n ],\n })\n );\n }\n });\n\n // Check for duplicate IDs in the document\n const allElements = document.querySelectorAll(`[id]`);\n const idCounts = new Map<string, number>();\n\n allElements.forEach((el) => {\n const id = el.id;\n idCounts.set(id, (idCounts.get(id) || 0) + 1);\n });\n\n ids.forEach((id) => {\n if ((idCounts.get(id) || 0) > 1) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.DUPLICATE_ID,\n severity: 'error',\n category: 'aria-usage',\n message: `Duplicate id=\"${id}\" found in document`,\n element,\n wcag: {\n criterion: '4.1.1',\n level: 'A',\n url: 'https://www.w3.org/WAI/WCAG22/Understanding/parsing.html',\n },\n fixes: [\n {\n description: 'Ensure all IDs are unique',\n example: `<!-- Make sure each ID is used only once -->\n<div id=\"unique-id-1\">First</div>\n<div id=\"unique-id-2\">Second</div>`,\n },\n ],\n })\n );\n }\n });\n }\n\n /**\n * Validate required ARIA props for a role\n */\n private validateRequiredProps(element: Element, role: string): void {\n const requiredProps = REQUIRED_ARIA_PROPS[role] || [];\n\n requiredProps.forEach((prop) => {\n if (!element.hasAttribute(prop)) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.MISSING_REQUIRED_ARIA,\n severity: 'error',\n category: 'aria-usage',\n message: `Role \"${role}\" requires \"${prop}\" attribute`,\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: `Add the required ${prop} attribute`,\n example: `<${element.tagName.toLowerCase()} role=\"${role}\" ${prop}=\"value\">`,\n learnMoreUrl: `https://www.w3.org/TR/wai-aria-1.2/#${role}`,\n },\n ],\n })\n );\n }\n });\n }\n\n /**\n * Check for redundant ARIA\n */\n private checkRedundantAria(element: Element, role: string | null): void {\n const tagName = element.tagName.toLowerCase();\n\n // Check for redundant role on semantic elements\n const implicitRoles: Record<string, string> = {\n button: 'button',\n a: 'link',\n nav: 'navigation',\n main: 'main',\n header: 'banner',\n footer: 'contentinfo',\n article: 'article',\n aside: 'complementary',\n section: 'region',\n };\n\n if (role && implicitRoles[tagName] === role) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.REDUNDANT_ARIA,\n severity: 'info',\n category: 'aria-usage',\n message: `Role \"${role}\" is redundant on <${tagName}>`,\n element,\n fixes: [\n {\n description: 'Remove the redundant role attribute',\n example: `<${tagName}> (role=\"${role}\" is implicit)`,\n },\n ],\n })\n );\n }\n }\n\n /**\n * Check for conflicting ARIA attributes\n */\n private checkConflictingAria(element: Element, ariaAttrs: string[]): void {\n // Check for aria-label and aria-labelledby together\n if (ariaAttrs.includes('aria-label') && ariaAttrs.includes('aria-labelledby')) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.CONFLICTING_ARIA,\n severity: 'warn',\n category: 'aria-usage',\n message: 'Element has both aria-label and aria-labelledby (labelledby takes precedence)',\n element,\n fixes: [\n {\n description: 'Remove aria-label and keep aria-labelledby',\n example: `<element aria-labelledby=\"label-id\">`,\n },\n {\n description: 'Remove aria-labelledby and keep aria-label',\n example: `<element aria-label=\"Label text\">`,\n },\n ],\n })\n );\n }\n\n // Check for aria-hidden=\"true\" on focusable element\n if (element.getAttribute('aria-hidden') === 'true') {\n const isFocusable =\n element instanceof HTMLButtonElement ||\n element instanceof HTMLAnchorElement ||\n element instanceof HTMLInputElement ||\n (element.hasAttribute('tabindex') &&\n parseInt(element.getAttribute('tabindex') || '0', 10) >= 0);\n\n if (isFocusable) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.CONFLICTING_ARIA,\n severity: 'error',\n category: 'aria-usage',\n message: 'Focusable element has aria-hidden=\"true\"',\n element,\n wcag: {\n criterion: '4.1.2',\n level: 'A',\n url: WCAGUrls['4.1.2'],\n },\n fixes: [\n {\n description: 'Remove aria-hidden',\n example: `<button>Visible button</button>`,\n },\n {\n description: 'Make element non-focusable',\n example: `<div aria-hidden=\"true\" tabindex=\"-1\">Hidden content</div>`,\n },\n ],\n })\n );\n }\n }\n }\n\n /**\n * Get all ARIA attributes from an element\n */\n private getAriaAttributes(element: Element): string[] {\n return Array.from(element.attributes)\n .filter((attr) => attr.name.startsWith('aria-'))\n .map((attr) => attr.name);\n }\n}\n\n/**\n * Singleton ARIA validator\n */\nexport const ariaValidator = new AriaValidator();\n","/**\n * @a13y/devtools - Focus Validator\n * Validates focus management and visual focus indicators\n */\n\nimport { isDevelopment } from '@a13y/core/runtime/env';\nimport { createWarning, WarningSystem } from '../warnings/warning-system';\nimport { WarningCodes, WCAGUrls } from '../warnings/warning-types';\n\n/**\n * Focus validator class\n */\nexport class FocusValidator {\n private focusHistory: Element[] = [];\n private isActive = false;\n\n /**\n * Start monitoring focus changes\n */\n start(): void {\n if (!isDevelopment() || this.isActive) {\n return;\n }\n\n document.addEventListener('focusin', this.handleFocusIn);\n document.addEventListener('focusout', this.handleFocusOut);\n\n this.isActive = true;\n }\n\n /**\n * Stop monitoring focus changes\n */\n stop(): void {\n if (!this.isActive) {\n return;\n }\n\n document.removeEventListener('focusin', this.handleFocusIn);\n document.removeEventListener('focusout', this.handleFocusOut);\n\n this.isActive = false;\n this.focusHistory = [];\n }\n\n /**\n * Validate that focus is visible\n */\n validateFocusVisible(element: Element): void {\n if (!isDevelopment()) {\n return;\n }\n\n if (!(element instanceof HTMLElement)) {\n return;\n }\n\n // Check if element has visible focus indicator\n const computedStyle = window.getComputedStyle(element);\n const outline = computedStyle.outline;\n const outlineWidth = computedStyle.outlineWidth;\n\n const hasFocusIndicator = outline !== 'none' && outlineWidth !== '0px' && outlineWidth !== '0';\n\n if (!hasFocusIndicator) {\n // Check for custom focus styles (data-focus-visible-added or :focus-visible support)\n const hasCustomFocus =\n element.hasAttribute('data-focus-visible-added') || element.matches(':focus-visible');\n\n if (!hasCustomFocus) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.FOCUS_NOT_VISIBLE,\n severity: 'warn',\n category: 'focus-management',\n message: 'Focused element has no visible focus indicator',\n element,\n wcag: {\n criterion: '2.4.7',\n level: 'AA',\n url: WCAGUrls['2.4.7'],\n },\n fixes: [\n {\n description: 'Add a visible outline or border on focus',\n example: `.my-element:focus {\n outline: 2px solid blue;\n outline-offset: 2px;\n}`,\n },\n {\n description: 'Use :focus-visible for keyboard-only focus indicators',\n example: `.my-element:focus-visible {\n outline: 2px solid blue;\n}`,\n },\n {\n description: 'Use FocusVisible from @a13y/core',\n example: `import { FocusVisible } from '@a13y/core/runtime/focus';\nFocusVisible.init();\n\n// Then in CSS:\n[data-focus-visible-added] {\n outline: 2px solid blue;\n}`,\n },\n ],\n })\n );\n }\n }\n }\n\n /**\n * Validate focus trap\n */\n validateFocusTrap(container: Element, expectedTrapped: boolean): void {\n if (!isDevelopment()) {\n return;\n }\n\n // Simulate Tab key to check if focus escapes\n const focusableElements = this.getFocusableElements(container);\n\n if (focusableElements.length === 0) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.FOCUS_TRAP_BROKEN,\n severity: 'error',\n category: 'focus-management',\n message: 'Focus trap container has no focusable elements',\n element: container,\n wcag: {\n criterion: '2.1.2',\n level: 'A',\n url: WCAGUrls['2.1.2'],\n },\n fixes: [\n {\n description: 'Add at least one focusable element inside the container',\n example: `<div role=\"dialog\">\n <button>Close</button>\n</div>`,\n },\n {\n description: 'Make container focusable with tabindex=\"-1\"',\n example: `<div role=\"dialog\" tabindex=\"-1\">\n Content\n</div>`,\n },\n ],\n })\n );\n }\n\n if (expectedTrapped && focusableElements.length > 0) {\n const lastElement = focusableElements[focusableElements.length - 1];\n\n // Check if Tab from last element returns to first\n if (document.activeElement === lastElement) {\n // This is a simplified check - in real usage, we'd need to simulate Tab\n // For now, we'll just warn if the setup looks suspicious\n const hasTabHandler = container.getAttribute('data-focus-trap') === 'true';\n\n if (!hasTabHandler) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.FOCUS_TRAP_BROKEN,\n severity: 'warn',\n category: 'focus-management',\n message: 'Focus trap may not be working correctly',\n element: container,\n wcag: {\n criterion: '2.1.2',\n level: 'A',\n url: WCAGUrls['2.1.2'],\n },\n fixes: [\n {\n description: 'Use createFocusTrap from @a13y/core',\n example: `import { createFocusTrap } from '@a13y/core/runtime/focus';\n\nconst trap = createFocusTrap(container);\ntrap.activate();`,\n },\n ],\n })\n );\n }\n }\n }\n }\n\n /**\n * Validate focus order\n */\n validateFocusOrder(container: Element): void {\n if (!isDevelopment()) {\n return;\n }\n\n const focusableElements = this.getFocusableElements(container);\n\n // Check for positive tabindex (creates confusing tab order)\n focusableElements.forEach((element) => {\n const tabindex = element.getAttribute('tabindex');\n if (tabindex && parseInt(tabindex, 10) > 0) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.FOCUS_ORDER_INVALID,\n severity: 'warn',\n category: 'focus-management',\n message: `Positive tabindex (${tabindex}) creates confusing focus order`,\n element,\n wcag: {\n criterion: '2.4.3',\n level: 'A',\n url: WCAGUrls['2.4.3'],\n },\n fixes: [\n {\n description: 'Remove positive tabindex and restructure DOM',\n example: `<!-- Instead of using tabindex to change order -->\n<div tabindex=\"2\">Second</div>\n<div tabindex=\"1\">First</div>\n\n<!-- Restructure DOM to match desired order -->\n<div tabindex=\"0\">First</div>\n<div tabindex=\"0\">Second</div>`,\n },\n ],\n })\n );\n }\n });\n\n // Check for non-sequential visual order\n // This would require measuring element positions - simplified for now\n }\n\n /**\n * Track focus restoration after actions\n */\n expectFocusRestoration(expectedElement: Element, action: string): void {\n if (!isDevelopment()) {\n return;\n }\n\n // Wait for async operations to complete\n setTimeout(() => {\n if (document.activeElement !== expectedElement) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.FOCUS_NOT_RESTORED,\n severity: 'warn',\n category: 'focus-management',\n message: `Focus was not restored after ${action}`,\n element: expectedElement,\n wcag: {\n criterion: '2.4.3',\n level: 'A',\n url: WCAGUrls['2.4.3'],\n },\n fixes: [\n {\n description: 'Restore focus to the expected element',\n example: `// Save focus before action\nconst returnElement = document.activeElement;\n\n// Perform action\nperformAction();\n\n// Restore focus\nreturnElement?.focus();`,\n },\n {\n description: 'Use FocusManager.saveFocus()',\n example: `import { FocusManager } from '@a13y/core/runtime/focus';\n\nconst restore = FocusManager.saveFocus();\nperformAction();\nrestore();`,\n },\n ],\n })\n );\n }\n }, 100);\n }\n\n private handleFocusIn = (event: FocusEvent): void => {\n const target = event.target as Element;\n\n if (target && target !== document.body) {\n this.focusHistory.push(target);\n\n // Keep history limited\n if (this.focusHistory.length > 10) {\n this.focusHistory.shift();\n }\n\n // Validate focus visible\n this.validateFocusVisible(target);\n }\n };\n\n private handleFocusOut = (_event: FocusEvent): void => {\n // Track focus changes\n };\n\n private getFocusableElements(container: Element): HTMLElement[] {\n const selector = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n\n return Array.from(container.querySelectorAll(selector)) as HTMLElement[];\n }\n}\n\n/**\n * Singleton focus validator\n */\nexport const focusValidator = new FocusValidator();\n","/**\n * @a13y/devtools - Keyboard Validator\n * Validates keyboard accessibility\n */\n\nimport { isDevelopment } from '@a13y/core/runtime/env';\nimport { createWarning, WarningSystem } from '../warnings/warning-system';\nimport { WarningCodes, WCAGUrls } from '../warnings/warning-types';\n\n/**\n * Interactive element that should be keyboard accessible\n */\ninterface InteractiveElement {\n element: Element;\n hasClickHandler: boolean;\n hasKeyHandler: boolean;\n isFocusable: boolean;\n}\n\n/**\n * Keyboard validator class\n */\nexport class KeyboardValidator {\n /**\n * Validate that interactive elements are keyboard accessible\n */\n validateInteractiveElement(element: Element): void {\n if (!isDevelopment()) {\n return;\n }\n\n const info = this.analyzeElement(element);\n\n // Check if element has click handler but no keyboard access\n if (info.hasClickHandler && !info.isFocusable) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.NOT_KEYBOARD_ACCESSIBLE,\n severity: 'error',\n category: 'keyboard-navigation',\n message: 'Interactive element is not keyboard accessible',\n element,\n wcag: {\n criterion: '2.1.1',\n level: 'A',\n url: WCAGUrls['2.1.1'],\n },\n fixes: [\n {\n description: 'Use a semantic button element',\n example: `<button onClick={handleClick}>Click me</button>`,\n },\n {\n description: 'Add tabindex=\"0\" and keyboard handlers',\n example: `<div\n tabindex=\"0\"\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n }}\n>\n Click me\n</div>`,\n },\n ],\n })\n );\n }\n\n // Check if element has click but no keyboard handler\n if (info.hasClickHandler && info.isFocusable && !info.hasKeyHandler) {\n // Only warn for non-semantic elements\n const isSemanticInteractive =\n element instanceof HTMLButtonElement ||\n (element instanceof HTMLAnchorElement && element.hasAttribute('href')) ||\n element instanceof HTMLInputElement;\n\n if (!isSemanticInteractive) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.MISSING_KEYBOARD_HANDLER,\n severity: 'warn',\n category: 'keyboard-navigation',\n message: 'Element has click handler but no keyboard event handler',\n element,\n wcag: {\n criterion: '2.1.1',\n level: 'A',\n url: WCAGUrls['2.1.1'],\n },\n fixes: [\n {\n description: 'Add onKeyDown handler for Enter and Space keys',\n example: `element.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // Trigger click or custom action\n }\n});`,\n },\n ],\n })\n );\n }\n }\n\n // Check for divs/spans styled as buttons\n this.checkForDivButton(element);\n }\n\n /**\n * Validate that a container's children are reachable via keyboard\n */\n validateContainer(container: Element): void {\n if (!isDevelopment()) {\n return;\n }\n\n const interactiveElements = this.findInteractiveElements(container);\n\n interactiveElements.forEach((info) => {\n if (info.hasClickHandler && !info.isFocusable) {\n this.validateInteractiveElement(info.element);\n }\n });\n }\n\n /**\n * Validate roving tabindex implementation\n */\n validateRovingTabindex(container: Element): void {\n if (!isDevelopment()) {\n return;\n }\n\n const items = Array.from(container.children);\n const tabindexValues = items.map((item) =>\n item.hasAttribute('tabindex') ? parseInt(item.getAttribute('tabindex') || '0', 10) : null\n );\n\n // Check if exactly one item has tabindex=\"0\" and others have tabindex=\"-1\"\n const zeroCount = tabindexValues.filter((v) => v === 0).length;\n const negativeOneCount = tabindexValues.filter((v) => v === -1).length;\n\n if (zeroCount !== 1 || negativeOneCount !== items.length - 1) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.ROVING_TABINDEX_BROKEN,\n severity: 'warn',\n category: 'keyboard-navigation',\n message: 'Roving tabindex pattern is not correctly implemented',\n element: container,\n wcag: {\n criterion: '2.1.1',\n level: 'A',\n url: WCAGUrls['2.1.1'],\n },\n fixes: [\n {\n description: 'Set exactly one item to tabindex=\"0\" and all others to tabindex=\"-1\"',\n example: `<!-- Correct roving tabindex -->\n<div role=\"toolbar\">\n <button tabindex=\"0\">First (active)</button>\n <button tabindex=\"-1\">Second</button>\n <button tabindex=\"-1\">Third</button>\n</div>`,\n },\n {\n description: 'Use RovingTabindexManager from @a13y/core',\n example: `import { RovingTabindexManager } from '@a13y/core/runtime/keyboard';\n\nconst manager = new RovingTabindexManager(toolbar, {\n orientation: 'horizontal',\n});\nmanager.init();`,\n },\n ],\n })\n );\n }\n }\n\n /**\n * Check for escape key handler in dialogs/modals\n */\n validateEscapeHandler(container: Element, shouldHaveEscape: boolean): void {\n if (!isDevelopment() || !shouldHaveEscape) {\n return;\n }\n\n // Check if container or any child has keydown listener\n // This is a simplified check - in practice, we'd need to track listeners\n const hasEscapeAttr = container.hasAttribute('data-escape-closes');\n\n if (!hasEscapeAttr) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.MISSING_ESC_HANDLER,\n severity: 'warn',\n category: 'keyboard-navigation',\n message: 'Dialog/Modal should close on Escape key',\n element: container,\n wcag: {\n criterion: '2.1.2',\n level: 'A',\n url: WCAGUrls['2.1.2'],\n },\n fixes: [\n {\n description: 'Add Escape key handler',\n example: `container.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n closeDialog();\n }\n});`,\n },\n {\n description: 'Use createFocusTrap with onEscape callback',\n example: `import { createFocusTrap } from '@a13y/core/runtime/focus';\n\nconst trap = createFocusTrap(dialog, {\n onEscape: () => closeDialog(),\n});`,\n },\n ],\n })\n );\n }\n }\n\n /**\n * Analyze an element for keyboard accessibility\n */\n private analyzeElement(element: Element): InteractiveElement {\n // Check for click handlers (including React/Vue event handlers)\n const hasClickHandler =\n element.hasAttribute('onclick') ||\n element.hasAttribute('@click') ||\n element.hasAttribute('v-on:click') ||\n // Check for React synthetic events (harder to detect)\n Object.keys(element).some((key) => key.startsWith('__react'));\n\n // Check for keyboard handlers\n const hasKeyHandler =\n element.hasAttribute('onkeydown') ||\n element.hasAttribute('onkeyup') ||\n element.hasAttribute('onkeypress') ||\n element.hasAttribute('@keydown') ||\n element.hasAttribute('v-on:keydown');\n\n // Check if focusable\n const isFocusable = this.isFocusable(element);\n\n return {\n element,\n hasClickHandler,\n hasKeyHandler,\n isFocusable,\n };\n }\n\n /**\n * Check if element is focusable\n */\n private isFocusable(element: Element): boolean {\n // Semantic interactive elements\n if (\n element instanceof HTMLButtonElement ||\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement ||\n (element instanceof HTMLAnchorElement && element.hasAttribute('href'))\n ) {\n return true;\n }\n\n // Elements with tabindex >= 0\n const tabindex = element.getAttribute('tabindex');\n if (tabindex !== null && parseInt(tabindex, 10) >= 0) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Find all interactive elements in a container\n */\n private findInteractiveElements(container: Element): InteractiveElement[] {\n const elements: InteractiveElement[] = [];\n\n // Find elements with click handlers\n const clickableSelector = '[onclick], [data-clickable]';\n const clickables = container.querySelectorAll(clickableSelector);\n\n clickables.forEach((element) => {\n elements.push(this.analyzeElement(element));\n });\n\n return elements;\n }\n\n /**\n * Check for div/span styled as button (antipattern)\n */\n private checkForDivButton(element: Element): void {\n const tagName = element.tagName.toLowerCase();\n\n if (tagName === 'div' || tagName === 'span') {\n const role = element.getAttribute('role');\n const hasClickHandler =\n element.hasAttribute('onclick') ||\n Object.keys(element).some((key) => key.startsWith('__react'));\n\n if ((role === 'button' || hasClickHandler) && !this.isFocusable(element)) {\n WarningSystem.warn(\n createWarning({\n code: WarningCodes.DIV_BUTTON,\n severity: 'warn',\n category: 'semantic-html',\n message: `<${tagName}> used as button - use <button> instead`,\n element,\n fixes: [\n {\n description: 'Use a semantic <button> element',\n example: `<!-- Instead of -->\n<div role=\"button\" onClick={handleClick}>Click me</div>\n\n<!-- Use -->\n<button onClick={handleClick}>Click me</button>`,\n },\n {\n description: 'If you must use a div, add tabindex and keyboard handlers',\n example: `<div\n role=\"button\"\n tabindex=\"0\"\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n }}\n>\n Click me\n</div>`,\n },\n ],\n })\n );\n }\n }\n }\n}\n\n/**\n * Singleton keyboard validator\n */\nexport const keyboardValidator = new KeyboardValidator();\n"]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @a13y/devtools - Invariants
3
+ * Development-only assertions for accessibility constraints
4
+ */
5
+ /**
6
+ * Assert that a condition is true, throw error if false (development only)
7
+ */
8
+ declare const invariant: (condition: boolean, message: string) => void;
9
+ /**
10
+ * Assert that an element has an accessible name
11
+ */
12
+ declare const assertHasAccessibleName: (element: Element, context?: string) => void;
13
+ /**
14
+ * Assert that an element is keyboard accessible
15
+ */
16
+ declare const assertKeyboardAccessible: (element: Element, context?: string) => void;
17
+ /**
18
+ * Assert that tabindex value is valid
19
+ */
20
+ declare const assertValidTabindex: (element: Element) => void;
21
+ /**
22
+ * Assert that ARIA attributes are valid for the element's role
23
+ */
24
+ declare const assertValidAriaAttributes: (element: Element) => void;
25
+ /**
26
+ * Assert that focus is visible after an action
27
+ */
28
+ declare const assertFocusVisible: (context?: string) => void;
29
+
30
+ export { assertFocusVisible, assertHasAccessibleName, assertKeyboardAccessible, assertValidAriaAttributes, assertValidTabindex, invariant };