{"version":3,"sources":["../src/accessibility-manager.ts","../src/aria/index.ts","../src/focus/index.ts","../src/screen-reader/index.ts","../src/testing/index.ts"],"names":["EventEmitter"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @fileoverview OrdoJS Accessibility - Accessibility Manager\n *\n * Central manager for coordinating all accessibility functionality.\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n    AccessibilityAudit,\n    AccessibilityConfig,\n    AccessibilityTestResult,\n    AccessibilityViolation\n} from './types/index.js';\n\n/**\n * Accessibility manager for coordinating all accessibility functionality\n */\nexport class AccessibilityManager extends EventEmitter {\n  private config: AccessibilityConfig;\n  private isInitialized: boolean;\n  private auditResults: Map<string, AccessibilityAudit>;\n  private violations: Map<string, AccessibilityViolation[]>;\n\n  /**\n   * Create a new AccessibilityManager instance\n   *\n   * @param config - Accessibility configuration\n   */\n  constructor(config: Partial<AccessibilityConfig> = {}) {\n    super();\n\n    this.config = {\n      enableARIA: true,\n      enableTesting: true,\n      enableFocusManagement: true,\n      enableScreenReader: true,\n      enableKeyboardNavigation: true,\n      enableColorContrast: true,\n      enableSemanticHTML: true,\n      enableLiveRegions: true,\n      enableSkipLinks: true,\n      enableFocusIndicators: true,\n      wcagLevel: 'AA',\n      customARIA: {},\n      testing: {\n        enabled: true,\n        framework: 'axe-core',\n        rules: [],\n        ignoreRules: [],\n        timeout: 30000,\n        retries: 3,\n        generateReports: true,\n        reportFormat: 'json',\n        reportDir: './accessibility-reports'\n      },\n      focus: {\n        enabled: true,\n        focusTrap: true,\n        focusIndicators: true,\n        skipLinks: true,\n        focusOrder: 'tab',\n        focusRestoration: true,\n        focusDelegation: false\n      },\n      screenReader: {\n        enabled: true,\n        announcements: true,\n        liveRegions: true,\n        ariaLabels: true,\n        ariaDescriptions: true,\n        ariaLandmarks: true,\n        ariaRoles: true,\n        ariaStates: true,\n        ariaProperties: true\n      },\n      ...config\n    };\n\n    this.isInitialized = false;\n    this.auditResults = new Map();\n    this.violations = new Map();\n  }\n\n  /**\n   * Initialize the accessibility system\n   */\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      console.warn('Accessibility system is already initialized');\n      return;\n    }\n\n    try {\n      // Initialize ARIA system\n      if (this.config.enableARIA) {\n        await this.initializeARIA();\n      }\n\n      // Initialize testing system\n      if (this.config.enableTesting) {\n        await this.initializeTesting();\n      }\n\n      // Initialize focus management\n      if (this.config.enableFocusManagement) {\n        await this.initializeFocusManagement();\n      }\n\n      // Initialize screen reader support\n      if (this.config.enableScreenReader) {\n        await this.initializeScreenReader();\n      }\n\n      this.isInitialized = true;\n      console.log('Accessibility system initialized successfully');\n\n      this.emit('initialized');\n    } catch (error) {\n      console.error('Failed to initialize accessibility system:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Run accessibility audit\n   *\n   * @param url - URL to audit\n   * @param options - Audit options\n   * @returns Audit result\n   */\n  async runAudit(\n    url: string,\n    options: {\n      level?: 'A' | 'AA' | 'AAA';\n      rules?: string[];\n      ignoreRules?: string[];\n      timeout?: number;\n    } = {}\n  ): Promise<AccessibilityAudit> {\n    if (!this.isInitialized) {\n      throw new Error('Accessibility system not initialized');\n    }\n\n    try {\n      const auditId = `audit_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n      const startTime = Date.now();\n\n      console.log(`Running accessibility audit for ${url}...`);\n\n      // Run tests based on configuration\n      const testResults: AccessibilityTestResult[] = [];\n\n      if (this.config.enableTesting) {\n        const testingResults = await this.runAccessibilityTests(url, options);\n        testResults.push(...testingResults);\n      }\n\n      // Collect violations\n      const violations: AccessibilityViolation[] = [];\n      for (const result of testResults) {\n        violations.push(...result.violations);\n      }\n\n      // Calculate score\n      const totalTests = testResults.length;\n      const passedTests = testResults.filter(r => r.status === 'pass').length;\n      const score = totalTests > 0 ? (passedTests / totalTests) * 100 : 0;\n\n      // Determine compliance\n      const level = options.level || this.config.wcagLevel;\n      const compliant = this.isCompliant(violations, level);\n\n      // Create audit summary\n      const summary = this.createAuditSummary(violations, testResults);\n\n      const audit: AccessibilityAudit = {\n        id: auditId,\n        timestamp: new Date(),\n        url,\n        violations,\n        passes: testResults.filter(r => r.status === 'pass'),\n        inapplicable: testResults.filter(r => r.status === 'inapplicable'),\n        score,\n        level,\n        compliant,\n        summary,\n        metadata: {\n          config: this.config,\n          options,\n          duration: Date.now() - startTime\n        }\n      };\n\n      this.auditResults.set(auditId, audit);\n      this.violations.set(auditId, violations);\n\n      console.log(`Accessibility audit completed: ${score.toFixed(1)}% score`);\n\n      this.emit('auditCompleted', audit);\n      return audit;\n    } catch (error) {\n      console.error('Failed to run accessibility audit:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Generate ARIA attributes for an element\n   *\n   * @param element - Element to generate ARIA for\n   * @param context - Element context\n   * @returns Generated ARIA attributes\n   */\n  generateARIA(\n    element: string,\n    context: {\n      role?: string;\n      label?: string;\n      description?: string;\n      state?: Record<string, any>;\n      properties?: Record<string, any>;\n    } = {}\n  ): Record<string, string> {\n    if (!this.config.enableARIA) {\n      return {};\n    }\n\n    const ariaAttributes: Record<string, string> = {};\n\n    // Add role if provided\n    if (context.role) {\n      ariaAttributes['role'] = context.role;\n    }\n\n    // Add label if provided\n    if (context.label) {\n      ariaAttributes['aria-label'] = context.label;\n    }\n\n    // Add description if provided\n    if (context.description) {\n      ariaAttributes['aria-describedby'] = context.description;\n    }\n\n    // Add states\n    if (context.state) {\n      for (const [key, value] of Object.entries(context.state)) {\n        ariaAttributes[`aria-${key}`] = String(value);\n      }\n    }\n\n    // Add properties\n    if (context.properties) {\n      for (const [key, value] of Object.entries(context.properties)) {\n        ariaAttributes[`aria-${key}`] = String(value);\n      }\n    }\n\n    return ariaAttributes;\n  }\n\n  /**\n   * Check color contrast\n   *\n   * @param foreground - Foreground color\n   * @param background - Background color\n   * @returns Color contrast information\n   */\n  checkColorContrast(foreground: string, background: string): {\n    ratio: number;\n    wcagAA: boolean;\n    wcagAAA: boolean;\n    largeText: boolean;\n    uiComponent: boolean;\n    suggestions: string[];\n  } {\n    if (!this.config.enableColorContrast) {\n      return {\n        ratio: 0,\n        wcagAA: false,\n        wcagAAA: false,\n        largeText: false,\n        uiComponent: false,\n        suggestions: []\n      };\n    }\n\n    // This is a simplified implementation\n    // In a real implementation, you would use a proper color contrast library\n    const ratio = this.calculateContrastRatio(foreground, background);\n\n    const wcagAA = ratio >= 4.5;\n    const wcagAAA = ratio >= 7;\n    const largeText = ratio >= 3;\n    const uiComponent = ratio >= 3;\n\n    const suggestions: string[] = [];\n    if (!wcagAA) {\n      suggestions.push('Increase contrast ratio to meet WCAG AA standards (4.5:1)');\n    }\n    if (!wcagAAA) {\n      suggestions.push('Increase contrast ratio to meet WCAG AAA standards (7:1)');\n    }\n\n    return {\n      ratio,\n      wcagAA,\n      wcagAAA,\n      largeText,\n      uiComponent,\n      suggestions\n    };\n  }\n\n  /**\n   * Generate semantic HTML\n   *\n   * @param content - Content to make semantic\n   * @param options - Semantic options\n   * @returns Semantic HTML\n   */\n  generateSemanticHTML(\n    content: string,\n    options: {\n      headingLevel?: number;\n      listType?: 'ul' | 'ol';\n      tableHeaders?: string[];\n      formLabels?: Record<string, string>;\n    } = {}\n  ): string {\n    if (!this.config.enableSemanticHTML) {\n      return content;\n    }\n\n    // This is a simplified implementation\n    // In a real implementation, you would parse and transform the HTML\n    let semanticContent = content;\n\n    // Add proper heading structure\n    if (options.headingLevel) {\n      semanticContent = this.addHeadingStructure(semanticContent, options.headingLevel);\n    }\n\n    // Add proper list structure\n    if (options.listType) {\n      semanticContent = this.addListStructure(semanticContent, options.listType);\n    }\n\n    // Add proper table structure\n    if (options.tableHeaders) {\n      semanticContent = this.addTableStructure(semanticContent, options.tableHeaders);\n    }\n\n    // Add proper form structure\n    if (options.formLabels) {\n      semanticContent = this.addFormStructure(semanticContent, options.formLabels);\n    }\n\n    return semanticContent;\n  }\n\n  /**\n   * Get accessibility statistics\n   *\n   * @returns Statistics\n   */\n  getStats(): {\n    totalAudits: number;\n    totalViolations: number;\n    averageScore: number;\n    complianceRate: number;\n    config: AccessibilityConfig;\n  } {\n    const totalAudits = this.auditResults.size;\n    let totalViolations = 0;\n    let totalScore = 0;\n\n    for (const audit of this.auditResults.values()) {\n      totalViolations += audit.violations.length;\n      totalScore += audit.score;\n    }\n\n    const averageScore = totalAudits > 0 ? totalScore / totalAudits : 0;\n    const complianceRate = totalAudits > 0\n      ? Array.from(this.auditResults.values()).filter(a => a.compliant).length / totalAudits\n      : 0;\n\n    return {\n      totalAudits,\n      totalViolations,\n      averageScore,\n      complianceRate,\n      config: this.config\n    };\n  }\n\n  /**\n   * Update accessibility configuration\n   *\n   * @param newConfig - New configuration\n   */\n  updateConfig(newConfig: Partial<AccessibilityConfig>): void {\n    this.config = { ...this.config, ...newConfig };\n    this.emit('configUpdated', this.config);\n  }\n\n  /**\n   * Get audit result by ID\n   *\n   * @param auditId - Audit ID\n   * @returns Audit result or undefined\n   */\n  getAuditResult(auditId: string): AccessibilityAudit | undefined {\n    return this.auditResults.get(auditId);\n  }\n\n  /**\n   * Get all audit results\n   *\n   * @returns Array of audit results\n   */\n  getAllAuditResults(): AccessibilityAudit[] {\n    return Array.from(this.auditResults.values());\n  }\n\n  /**\n   * Clear audit results\n   */\n  clearAuditResults(): void {\n    this.auditResults.clear();\n    this.violations.clear();\n    this.emit('auditResultsCleared');\n  }\n\n  /**\n   * Initialize ARIA system\n   */\n  private async initializeARIA(): Promise<void> {\n    // Initialize ARIA system\n    console.log('Initializing ARIA system...');\n  }\n\n  /**\n   * Initialize testing system\n   */\n  private async initializeTesting(): Promise<void> {\n    // Initialize testing system\n    console.log('Initializing testing system...');\n  }\n\n  /**\n   * Initialize focus management\n   */\n  private async initializeFocusManagement(): Promise<void> {\n    // Initialize focus management\n    console.log('Initializing focus management...');\n  }\n\n  /**\n   * Initialize screen reader support\n   */\n  private async initializeScreenReader(): Promise<void> {\n    // Initialize screen reader support\n    console.log('Initializing screen reader support...');\n  }\n\n  /**\n   * Run accessibility tests\n   *\n   * @param url - URL to test\n   * @param options - Test options\n   * @returns Test results\n   */\n  private async runAccessibilityTests(\n    url: string,\n    options: {\n      level?: 'A' | 'AA' | 'AAA';\n      rules?: string[];\n      ignoreRules?: string[];\n      timeout?: number;\n    } = {}\n  ): Promise<AccessibilityTestResult[]> {\n    // This is a simplified implementation\n    // In a real implementation, you would use axe-core or similar\n    const results: AccessibilityTestResult[] = [];\n\n    // Simulate some test results\n    results.push({\n      id: 'test_1',\n      name: 'Color Contrast',\n      status: 'pass',\n      description: 'Check color contrast ratios',\n      impact: 'serious',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 1000,\n      url,\n      metadata: {}\n    });\n\n    return results;\n  }\n\n  /**\n   * Check if violations are compliant with WCAG level\n   *\n   * @param violations - Violations to check\n   * @param level - WCAG level\n   * @returns True if compliant\n   */\n  private isCompliant(violations: AccessibilityViolation[], level: 'A' | 'AA' | 'AAA'): boolean {\n    const criticalViolations = violations.filter(v => v.impact === 'critical');\n    const seriousViolations = violations.filter(v => v.impact === 'serious');\n\n    // For compliance, we need no critical violations and limited serious violations\n    if (criticalViolations.length > 0) {\n      return false;\n    }\n\n    // Level-specific compliance checks\n    switch (level) {\n      case 'A':\n        return seriousViolations.length <= 5;\n      case 'AA':\n        return seriousViolations.length <= 2;\n      case 'AAA':\n        return seriousViolations.length === 0;\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Create audit summary\n   *\n   * @param violations - Violations\n   * @param testResults - Test results\n   * @returns Audit summary\n   */\n  private createAuditSummary(\n    violations: AccessibilityViolation[],\n    testResults: AccessibilityTestResult[]\n  ): {\n    totalViolations: number;\n    criticalViolations: number;\n    seriousViolations: number;\n    moderateViolations: number;\n    minorViolations: number;\n    totalPasses: number;\n    totalInapplicable: number;\n  } {\n    const criticalViolations = violations.filter(v => v.impact === 'critical').length;\n    const seriousViolations = violations.filter(v => v.impact === 'serious').length;\n    const moderateViolations = violations.filter(v => v.impact === 'moderate').length;\n    const minorViolations = violations.filter(v => v.impact === 'minor').length;\n    const totalPasses = testResults.filter(r => r.status === 'pass').length;\n    const totalInapplicable = testResults.filter(r => r.status === 'inapplicable').length;\n\n    return {\n      totalViolations: violations.length,\n      criticalViolations,\n      seriousViolations,\n      moderateViolations,\n      minorViolations,\n      totalPasses,\n      totalInapplicable\n    };\n  }\n\n  /**\n   * Calculate contrast ratio\n   *\n   * @param foreground - Foreground color\n   * @param background - Background color\n   * @returns Contrast ratio\n   */\n  private calculateContrastRatio(foreground: string, background: string): number {\n    // This is a simplified implementation\n    // In a real implementation, you would use proper color contrast calculation\n    return 4.5; // Placeholder value\n  }\n\n  /**\n   * Add heading structure\n   *\n   * @param content - Content\n   * @param level - Heading level\n   * @returns Content with heading structure\n   */\n  private addHeadingStructure(content: string, level: number): string {\n    // Simplified implementation\n    return content;\n  }\n\n  /**\n   * Add list structure\n   *\n   * @param content - Content\n   * @param type - List type\n   * @returns Content with list structure\n   */\n  private addListStructure(content: string, type: 'ul' | 'ol'): string {\n    // Simplified implementation\n    return content;\n  }\n\n  /**\n   * Add table structure\n   *\n   * @param content - Content\n   * @param headers - Table headers\n   * @returns Content with table structure\n   */\n  private addTableStructure(content: string, headers: string[]): string {\n    // Simplified implementation\n    return content;\n  }\n\n  /**\n   * Add form structure\n   *\n   * @param content - Content\n   * @param labels - Form labels\n   * @returns Content with form structure\n   */\n  private addFormStructure(content: string, labels: Record<string, string>): string {\n    // Simplified implementation\n    return content;\n  }\n}\n","/**\n * @fileoverview OrdoJS Accessibility - ARIA Module\n *\n * Automatic ARIA attribute generation and management.\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n    ARIAAttribute,\n    ARIARole,\n    AccessibilityConfig\n} from '../types/index.js';\n\n/**\n * ARIA manager for handling ARIA attribute generation and management\n */\nexport class ARIAManager extends EventEmitter {\n  private config: AccessibilityConfig;\n  private roles: Map<string, ARIARole>;\n  private attributes: Map<string, ARIAAttribute>;\n  private isInitialized: boolean;\n\n  /**\n   * Create a new ARIAManager instance\n   *\n   * @param config - Accessibility configuration\n   */\n  constructor(config: AccessibilityConfig) {\n    super();\n\n    this.config = config;\n    this.roles = new Map();\n    this.attributes = new Map();\n    this.isInitialized = false;\n  }\n\n  /**\n   * Initialize the ARIA manager\n   */\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      console.warn('ARIA manager is already initialized');\n      return;\n    }\n\n    try {\n      // Load ARIA roles and attributes\n      await this.loadARIARoles();\n      await this.loadARIAAttributes();\n\n      this.isInitialized = true;\n      console.log('ARIA manager initialized successfully');\n\n      this.emit('initialized');\n    } catch (error) {\n      console.error('Failed to initialize ARIA manager:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Generate ARIA attributes for an element\n   *\n   * @param element - Element information\n   * @param context - Element context\n   * @returns Generated ARIA attributes\n   */\n  generateARIA(\n    element: {\n      tag: string;\n      content: string;\n      attributes: Record<string, string>;\n    },\n    context: {\n      role?: string;\n      label?: string;\n      description?: string;\n      state?: Record<string, any>;\n      properties?: Record<string, any>;\n      interactive?: boolean;\n      landmark?: boolean;\n    } = {}\n  ): Record<string, string> {\n    const ariaAttributes: Record<string, string> = {};\n\n    // Add role if provided or infer from element\n    if (context.role) {\n      ariaAttributes['role'] = context.role;\n    } else {\n      const inferredRole = this.inferRole(element.tag, element.content, element.attributes);\n      if (inferredRole) {\n        ariaAttributes['role'] = inferredRole;\n      }\n    }\n\n    // Add label\n    if (context.label) {\n      ariaAttributes['aria-label'] = context.label;\n    } else {\n      const inferredLabel = this.inferLabel(element.content, element.attributes);\n      if (inferredLabel) {\n        ariaAttributes['aria-label'] = inferredLabel;\n      }\n    }\n\n    // Add description\n    if (context.description) {\n      ariaAttributes['aria-describedby'] = context.description;\n    }\n\n    // Add states\n    if (context.state) {\n      for (const [key, value] of Object.entries(context.state)) {\n        ariaAttributes[`aria-${key}`] = String(value);\n      }\n    }\n\n    // Add properties\n    if (context.properties) {\n      for (const [key, value] of Object.entries(context.properties)) {\n        ariaAttributes[`aria-${key}`] = String(value);\n      }\n    }\n\n    // Add landmark attributes\n    if (context.landmark) {\n      ariaAttributes['aria-label'] = ariaAttributes['aria-label'] || this.generateLandmarkLabel(element.tag);\n    }\n\n    // Add interactive attributes\n    if (context.interactive) {\n      ariaAttributes['tabindex'] = '0';\n      if (!ariaAttributes['role']) {\n        ariaAttributes['role'] = 'button';\n      }\n    }\n\n    return ariaAttributes;\n  }\n\n  /**\n   * Validate ARIA attributes\n   *\n   * @param attributes - ARIA attributes to validate\n   * @returns Validation result\n   */\n  validateARIA(attributes: Record<string, string>): {\n    isValid: boolean;\n    errors: string[];\n    warnings: string[];\n    suggestions: string[];\n  } {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n    const suggestions: string[] = [];\n\n    for (const [key, value] of Object.entries(attributes)) {\n      if (key.startsWith('aria-')) {\n        const attributeName = key.replace('aria-', '');\n        const attribute = this.attributes.get(attributeName);\n\n        if (attribute) {\n          // Check if value is valid for this attribute\n          if (attribute.allowedValues && !attribute.allowedValues.includes(value)) {\n            errors.push(`Invalid value '${value}' for attribute '${key}'`);\n          }\n\n          // Check if attribute is required\n          if (attribute.required && !value) {\n            errors.push(`Required attribute '${key}' is missing`);\n          }\n        } else {\n          warnings.push(`Unknown ARIA attribute '${key}'`);\n        }\n      }\n    }\n\n    // Check role-attribute compatibility\n    const role = attributes['role'];\n    if (role) {\n      const roleInfo = this.roles.get(role);\n      if (roleInfo) {\n        // Check if all required attributes are present\n        for (const requiredAttr of roleInfo.requiredAttributes) {\n          const attrKey = `aria-${requiredAttr}`;\n          if (!attributes[attrKey]) {\n            errors.push(`Required attribute '${attrKey}' for role '${role}' is missing`);\n          }\n        }\n\n        // Check for prohibited attributes\n        for (const prohibitedAttr of roleInfo.prohibitedAttributes) {\n          const attrKey = `aria-${prohibitedAttr}`;\n          if (attributes[attrKey]) {\n            warnings.push(`Prohibited attribute '${attrKey}' for role '${role}'`);\n          }\n        }\n      }\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings,\n      suggestions\n    };\n  }\n\n  /**\n   * Get ARIA role information\n   *\n   * @param role - Role name\n   * @returns Role information or undefined\n   */\n  getRoleInfo(role: string): ARIARole | undefined {\n    return this.roles.get(role);\n  }\n\n  /**\n   * Get ARIA attribute information\n   *\n   * @param attribute - Attribute name\n   * @returns Attribute information or undefined\n   */\n  getAttributeInfo(attribute: string): ARIAAttribute | undefined {\n    return this.attributes.get(attribute);\n  }\n\n  /**\n   * Get all available roles\n   *\n   * @returns Array of role names\n   */\n  getAvailableRoles(): string[] {\n    return Array.from(this.roles.keys());\n  }\n\n  /**\n   * Get all available attributes\n   *\n   * @returns Array of attribute names\n   */\n  getAvailableAttributes(): string[] {\n    return Array.from(this.attributes.keys());\n  }\n\n  /**\n   * Get roles by type\n   *\n   * @param type - Role type\n   * @returns Array of roles\n   */\n  getRolesByType(type: 'abstract' | 'widget' | 'document' | 'landmark' | 'window'): ARIARole[] {\n    return Array.from(this.roles.values()).filter(role => role.type === type);\n  }\n\n  /**\n   * Get ARIA manager statistics\n   *\n   * @returns Statistics\n   */\n  getStats(): {\n    totalRoles: number;\n    totalAttributes: number;\n    rolesByType: Record<string, number>;\n  } {\n    const rolesByType: Record<string, number> = {};\n    for (const role of this.roles.values()) {\n      rolesByType[role.type] = (rolesByType[role.type] || 0) + 1;\n    }\n\n    return {\n      totalRoles: this.roles.size,\n      totalAttributes: this.attributes.size,\n      rolesByType\n    };\n  }\n\n  /**\n   * Infer role from element\n   *\n   * @param tag - Element tag\n   * @param content - Element content\n   * @param attributes - Element attributes\n   * @returns Inferred role or undefined\n   */\n  private inferRole(tag: string, content: string, attributes: Record<string, string>): string | undefined {\n    // Check if role is explicitly set\n    if (attributes.role) {\n      return attributes.role;\n    }\n\n    // Infer role based on tag and content\n    switch (tag.toLowerCase()) {\n      case 'button':\n        return 'button';\n      case 'a':\n        return 'link';\n      case 'input':\n        const type = attributes.type || 'text';\n        switch (type) {\n          case 'checkbox':\n            return 'checkbox';\n          case 'radio':\n            return 'radio';\n          case 'search':\n            return 'searchbox';\n          default:\n            return 'textbox';\n        }\n      case 'select':\n        return 'combobox';\n      case 'textarea':\n        return 'textbox';\n      case 'nav':\n        return 'navigation';\n      case 'main':\n        return 'main';\n      case 'aside':\n        return 'complementary';\n      case 'header':\n        return 'banner';\n      case 'footer':\n        return 'contentinfo';\n      case 'article':\n        return 'article';\n      case 'section':\n        return 'region';\n      case 'form':\n        return 'form';\n      case 'table':\n        return 'table';\n      case 'ul':\n      case 'ol':\n        return 'list';\n      case 'li':\n        return 'listitem';\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return 'heading';\n      case 'img':\n        return 'img';\n      case 'progress':\n        return 'progressbar';\n      case 'meter':\n        return 'meter';\n      default:\n        return undefined;\n    }\n  }\n\n  /**\n   * Infer label from content and attributes\n   *\n   * @param content - Element content\n   * @param attributes - Element attributes\n   * @returns Inferred label or undefined\n   */\n  private inferLabel(content: string, attributes: Record<string, string>): string | undefined {\n    // Check for explicit label\n    if (attributes['aria-label']) {\n      return attributes['aria-label'];\n    }\n\n    // Check for title attribute\n    if (attributes.title) {\n      return attributes.title;\n    }\n\n    // Check for alt attribute (for images)\n    if (attributes.alt) {\n      return attributes.alt;\n    }\n\n    // Check for placeholder attribute\n    if (attributes.placeholder) {\n      return attributes.placeholder;\n    }\n\n    // Use content if it's meaningful\n    const trimmedContent = content.trim();\n    if (trimmedContent && trimmedContent.length > 0 && trimmedContent.length < 100) {\n      return trimmedContent;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Generate landmark label\n   *\n   * @param tag - Element tag\n   * @returns Landmark label\n   */\n  private generateLandmarkLabel(tag: string): string {\n    switch (tag.toLowerCase()) {\n      case 'nav':\n        return 'Navigation';\n      case 'main':\n        return 'Main content';\n      case 'aside':\n        return 'Complementary content';\n      case 'header':\n        return 'Header';\n      case 'footer':\n        return 'Footer';\n      case 'article':\n        return 'Article';\n      case 'section':\n        return 'Section';\n      case 'form':\n        return 'Form';\n      default:\n        return 'Landmark';\n    }\n  }\n\n  /**\n   * Load ARIA roles\n   */\n  private async loadARIARoles(): Promise<void> {\n    // Load common ARIA roles\n    const commonRoles: Record<string, ARIARole> = {\n      'button': {\n        name: 'button',\n        type: 'widget',\n        requiredAttributes: [],\n        supportedAttributes: ['aria-expanded', 'aria-pressed', 'aria-haspopup'],\n        requiredOwnedElements: [],\n        requiredContextRoles: [],\n        prohibitedAttributes: [],\n        description: 'An input that allows for user-triggered actions',\n        examples: ['<button>Click me</button>', '<div role=\"button\">Click me</div>']\n      },\n      'link': {\n        name: 'link',\n        type: 'widget',\n        requiredAttributes: [],\n        supportedAttributes: ['aria-expanded', 'aria-haspopup'],\n        requiredOwnedElements: [],\n        requiredContextRoles: [],\n        prohibitedAttributes: [],\n        description: 'An interactive reference to an internal or external resource',\n        examples: ['<a href=\"/\">Home</a>', '<div role=\"link\">Home</div>']\n      },\n      'navigation': {\n        name: 'navigation',\n        type: 'landmark',\n        requiredAttributes: [],\n        supportedAttributes: ['aria-label', 'aria-labelledby'],\n        requiredOwnedElements: [],\n        requiredContextRoles: [],\n        prohibitedAttributes: [],\n        description: 'A landmark containing navigation links',\n        examples: ['<nav>Navigation</nav>', '<div role=\"navigation\">Navigation</div>']\n      },\n      'main': {\n        name: 'main',\n        type: 'landmark',\n        requiredAttributes: [],\n        supportedAttributes: ['aria-label', 'aria-labelledby'],\n        requiredOwnedElements: [],\n        requiredContextRoles: [],\n        prohibitedAttributes: [],\n        description: 'The main content of a document',\n        examples: ['<main>Main content</main>', '<div role=\"main\">Main content</div>']\n      },\n      'banner': {\n        name: 'banner',\n        type: 'landmark',\n        requiredAttributes: [],\n        supportedAttributes: ['aria-label', 'aria-labelledby'],\n        requiredOwnedElements: [],\n        requiredContextRoles: [],\n        prohibitedAttributes: [],\n        description: 'A landmark that contains site-oriented content',\n        examples: ['<header>Header</header>', '<div role=\"banner\">Header</div>']\n      },\n      'contentinfo': {\n        name: 'contentinfo',\n        type: 'landmark',\n        requiredAttributes: [],\n        supportedAttributes: ['aria-label', 'aria-labelledby'],\n        requiredOwnedElements: [],\n        requiredContextRoles: [],\n        prohibitedAttributes: [],\n        description: 'A landmark containing information about the parent document',\n        examples: ['<footer>Footer</footer>', '<div role=\"contentinfo\">Footer</div>']\n      }\n    };\n\n    for (const [name, role] of Object.entries(commonRoles)) {\n      this.roles.set(name, role);\n    }\n  }\n\n  /**\n   * Load ARIA attributes\n   */\n  private async loadARIAAttributes(): Promise<void> {\n    // Load common ARIA attributes\n    const commonAttributes: Record<string, ARIAAttribute> = {\n      'label': {\n        name: 'label',\n        value: '',\n        type: 'string',\n        required: false,\n        description: 'Defines a string value that labels the current element'\n      },\n      'describedby': {\n        name: 'describedby',\n        value: '',\n        type: 'idrefs',\n        required: false,\n        description: 'Identifies the element that describes the current element'\n      },\n      'expanded': {\n        name: 'expanded',\n        value: '',\n        type: 'boolean',\n        required: false,\n        allowedValues: ['true', 'false', 'undefined'],\n        description: 'Indicates whether the element is expanded or collapsed'\n      },\n      'pressed': {\n        name: 'pressed',\n        value: '',\n        type: 'boolean',\n        required: false,\n        allowedValues: ['true', 'false', 'mixed', 'undefined'],\n        description: 'Indicates the current pressed state of toggle buttons'\n      },\n      'haspopup': {\n        name: 'haspopup',\n        value: '',\n        type: 'boolean',\n        required: false,\n        allowedValues: ['true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog'],\n        description: 'Indicates that the element has a popup context menu or sub-level menu'\n      }\n    };\n\n    for (const [name, attribute] of Object.entries(commonAttributes)) {\n      this.attributes.set(name, attribute);\n    }\n  }\n}\n","/**\n * @fileoverview OrdoJS Accessibility - Focus Management Module\n *\n * Focus management, skip links, and keyboard navigation.\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n  FocusConfig,\n  FocusInfo,\n  KeyboardNavigation\n} from '../types/index.js';\n\n/**\n * Focus manager for handling focus management and keyboard navigation\n */\nexport class FocusManager extends EventEmitter {\n  private config: FocusConfig;\n  private focusableElements: Map<string, FocusInfo>;\n  private focusTraps: Map<string, string[]>;\n  private skipLinks: Map<string, string>;\n  private isInitialized: boolean;\n\n  /**\n   * Create a new FocusManager instance\n   *\n   * @param config - Focus configuration\n   */\n  constructor(config: FocusConfig) {\n    super();\n\n    this.config = config;\n    this.focusableElements = new Map();\n    this.focusTraps = new Map();\n    this.skipLinks = new Map();\n    this.isInitialized = false;\n  }\n\n  /**\n   * Initialize the focus manager\n   */\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      console.warn('Focus manager is already initialized');\n      return;\n    }\n\n    try {\n      // Initialize focus management\n      await this.initializeFocusManagement();\n\n      this.isInitialized = true;\n      console.log('Focus manager initialized successfully');\n\n      this.emit('initialized');\n    } catch (error) {\n      console.error('Failed to initialize focus manager:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Register focusable element\n   *\n   * @param element - Element selector\n   * @param info - Focus information\n   */\n  registerFocusableElement(element: string, info: Partial<FocusInfo> = {}): void {\n    const focusInfo: FocusInfo = {\n      element,\n      tabIndex: info.tabIndex || 0,\n      focusOrder: info.focusOrder || 0,\n      focusable: info.focusable !== false,\n      focused: false,\n      focusTrap: info.focusTrap || false,\n      skipLink: info.skipLink || false,\n      ariaState: info.ariaState || {},\n      ariaProperty: info.ariaProperty || {}\n    };\n\n    // Only set optional properties if they have values\n    if (info.ariaLabel) {\n      focusInfo.ariaLabel = info.ariaLabel;\n    }\n    if (info.ariaDescription) {\n      focusInfo.ariaDescription = info.ariaDescription;\n    }\n    if (info.ariaRole) {\n      focusInfo.ariaRole = info.ariaRole;\n    }\n\n    this.focusableElements.set(element, focusInfo);\n    this.emit('elementRegistered', focusInfo);\n  }\n\n  /**\n   * Create focus trap\n   *\n   * @param trapId - Focus trap ID\n   * @param elements - Elements in the trap\n   * @param options - Trap options\n   */\n  createFocusTrap(\n    trapId: string,\n    elements: string[],\n    options: {\n      restoreFocus?: boolean;\n      initialFocus?: string;\n      returnFocus?: boolean;\n    } = {}\n  ): void {\n    this.focusTraps.set(trapId, elements);\n\n    // Set focus order for trapped elements\n    elements.forEach((element, index) => {\n      const focusInfo = this.focusableElements.get(element);\n      if (focusInfo) {\n        focusInfo.focusOrder = index;\n        focusInfo.focusTrap = true;\n        this.focusableElements.set(element, focusInfo);\n      }\n    });\n\n    // Set initial focus\n    if (options.initialFocus) {\n      this.setFocus(options.initialFocus);\n    }\n\n    this.emit('focusTrapCreated', { trapId, elements, options });\n  }\n\n  /**\n   * Remove focus trap\n   *\n   * @param trapId - Focus trap ID\n   * @param options - Removal options\n   */\n  removeFocusTrap(\n    trapId: string,\n    options: {\n      restoreFocus?: boolean;\n      returnFocus?: boolean;\n    } = {}\n  ): void {\n    const elements = this.focusTraps.get(trapId);\n    if (elements) {\n      // Remove focus trap from elements\n      elements.forEach(element => {\n        const focusInfo = this.focusableElements.get(element);\n        if (focusInfo) {\n          focusInfo.focusTrap = false;\n          this.focusableElements.set(element, focusInfo);\n        }\n      });\n\n      this.focusTraps.delete(trapId);\n      this.emit('focusTrapRemoved', { trapId, options });\n    }\n  }\n\n  /**\n   * Set focus to element\n   *\n   * @param element - Element selector\n   */\n  setFocus(element: string): void {\n    const focusInfo = this.focusableElements.get(element);\n    if (focusInfo && focusInfo.focusable) {\n      // Clear previous focus\n      for (const info of this.focusableElements.values()) {\n        info.focused = false;\n      }\n\n      // Set new focus\n      focusInfo.focused = true;\n      this.focusableElements.set(element, focusInfo);\n\n      this.emit('focusChanged', focusInfo);\n    }\n  }\n\n  /**\n   * Move focus to next element\n   *\n   * @param currentElement - Current element\n   * @returns Next focused element or undefined\n   */\n  moveToNextElement(currentElement: string): FocusInfo | undefined {\n    const current = this.focusableElements.get(currentElement);\n    if (!current) return undefined;\n\n    const focusableElements = Array.from(this.focusableElements.values())\n      .filter(info => info.focusable)\n      .sort((a, b) => a.focusOrder - b.focusOrder);\n\n    const currentIndex = focusableElements.findIndex(info => info.element === currentElement);\n    if (currentIndex === -1) return undefined;\n\n    const nextIndex = (currentIndex + 1) % focusableElements.length;\n    const nextElement = focusableElements[nextIndex];\n\n    if (nextElement) {\n      this.setFocus(nextElement.element);\n      return nextElement;\n    }\n    return undefined;\n  }\n\n  /**\n   * Move focus to previous element\n   *\n   * @param currentElement - Current element\n   * @returns Previous focused element or undefined\n   */\n  moveToPreviousElement(currentElement: string): FocusInfo | undefined {\n    const current = this.focusableElements.get(currentElement);\n    if (!current) return undefined;\n\n    const focusableElements = Array.from(this.focusableElements.values())\n      .filter(info => info.focusable)\n      .sort((a, b) => a.focusOrder - b.focusOrder);\n\n    const currentIndex = focusableElements.findIndex(info => info.element === currentElement);\n    if (currentIndex === -1) return undefined;\n\n    const prevIndex = currentIndex === 0 ? focusableElements.length - 1 : currentIndex - 1;\n    const prevElement = focusableElements[prevIndex];\n\n    if (prevElement) {\n      this.setFocus(prevElement.element);\n      return prevElement;\n    }\n    return undefined;\n  }\n\n  /**\n   * Add skip link\n   *\n   * @param target - Target element\n   * @param label - Skip link label\n   * @param position - Skip link position\n   */\n  addSkipLink(\n    target: string,\n    label: string,\n    position: 'top' | 'bottom' = 'top'\n  ): void {\n    this.skipLinks.set(target, label);\n    this.emit('skipLinkAdded', { target, label, position });\n  }\n\n  /**\n   * Remove skip link\n   *\n   * @param target - Target element\n   */\n  removeSkipLink(target: string): void {\n    this.skipLinks.delete(target);\n    this.emit('skipLinkRemoved', { target });\n  }\n\n  /**\n   * Handle keyboard navigation\n   *\n   * @param event - Keyboard event\n   * @param currentElement - Current element\n   * @returns Navigation result\n   */\n  handleKeyboardNavigation(\n    event: KeyboardEvent,\n    currentElement: string\n  ): {\n    handled: boolean;\n    action: string;\n    target?: string;\n  } {\n    const navigation: KeyboardNavigation = {\n      id: `nav_${Date.now()}`,\n      type: 'custom',\n      key: event.key,\n      keyCode: event.keyCode,\n      target: currentElement,\n      action: '',\n      description: '',\n      enabled: true,\n      visible: true\n    };\n\n    let handled = false;\n    let action = '';\n\n    switch (event.key) {\n      case 'Tab':\n        if (event.shiftKey) {\n          const prevElement = this.moveToPreviousElement(currentElement);\n          if (prevElement) {\n            action = 'moveToPrevious';\n            handled = true;\n          }\n        } else {\n          const nextElement = this.moveToNextElement(currentElement);\n          if (nextElement) {\n            action = 'moveToNext';\n            handled = true;\n          }\n        }\n        break;\n\n      case 'Escape':\n        // Exit focus trap or close modal\n        action = 'escape';\n        handled = true;\n        break;\n\n      case 'Enter':\n      case ' ':\n        // Activate element\n        action = 'activate';\n        handled = true;\n        break;\n\n      case 'ArrowUp':\n        // Navigate up\n        action = 'navigateUp';\n        handled = true;\n        break;\n\n      case 'ArrowDown':\n        // Navigate down\n        action = 'navigateDown';\n        handled = true;\n        break;\n\n      case 'ArrowLeft':\n        // Navigate left\n        action = 'navigateLeft';\n        handled = true;\n        break;\n\n      case 'ArrowRight':\n        // Navigate right\n        action = 'navigateRight';\n        handled = true;\n        break;\n\n      case 'Home':\n        // Move to first element\n        action = 'moveToFirst';\n        handled = true;\n        break;\n\n      case 'End':\n        // Move to last element\n        action = 'moveToLast';\n        handled = true;\n        break;\n    }\n\n    if (handled) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n\n    navigation.action = action;\n    this.emit('keyboardNavigation', navigation);\n\n    return {\n      handled,\n      action,\n      target: currentElement\n    };\n  }\n\n  /**\n   * Get focusable elements\n   *\n   * @returns Array of focusable elements\n   */\n  getFocusableElements(): FocusInfo[] {\n    return Array.from(this.focusableElements.values())\n      .filter(info => info.focusable)\n      .sort((a, b) => a.focusOrder - b.focusOrder);\n  }\n\n  /**\n   * Get focus trap elements\n   *\n   * @param trapId - Focus trap ID\n   * @returns Array of trapped elements\n   */\n  getFocusTrapElements(trapId: string): FocusInfo[] {\n    const elements = this.focusTraps.get(trapId);\n    if (!elements) return [];\n\n    return elements\n      .map(element => this.focusableElements.get(element))\n      .filter((info): info is FocusInfo => info !== undefined)\n      .sort((a, b) => a.focusOrder - b.focusOrder);\n  }\n\n  /**\n   * Get skip links\n   *\n   * @returns Array of skip links\n   */\n  getSkipLinks(): Array<{ target: string; label: string }> {\n    return Array.from(this.skipLinks.entries()).map(([target, label]) => ({\n      target,\n      label\n    }));\n  }\n\n  /**\n   * Get currently focused element\n   *\n   * @returns Focused element or undefined\n   */\n  getFocusedElement(): FocusInfo | undefined {\n    return Array.from(this.focusableElements.values()).find(info => info.focused);\n  }\n\n  /**\n   * Get focus manager statistics\n   *\n   * @returns Statistics\n   */\n  getStats(): {\n    totalElements: number;\n    focusableElements: number;\n    focusedElements: number;\n    focusTraps: number;\n    skipLinks: number;\n  } {\n    const totalElements = this.focusableElements.size;\n    const focusableElements = Array.from(this.focusableElements.values())\n      .filter(info => info.focusable).length;\n    const focusedElements = Array.from(this.focusableElements.values())\n      .filter(info => info.focused).length;\n\n    return {\n      totalElements,\n      focusableElements,\n      focusedElements,\n      focusTraps: this.focusTraps.size,\n      skipLinks: this.skipLinks.size\n    };\n  }\n\n  /**\n   * Initialize focus management\n   */\n  private async initializeFocusManagement(): Promise<void> {\n    console.log('Initializing focus management...');\n\n    // Set up focus indicators if enabled\n    if (this.config.focusIndicators) {\n      this.setupFocusIndicators();\n    }\n\n    // Set up skip links if enabled\n    if (this.config.skipLinks) {\n      this.setupSkipLinks();\n    }\n\n    // Set up focus restoration if enabled\n    if (this.config.focusRestoration) {\n      this.setupFocusRestoration();\n    }\n  }\n\n  /**\n   * Setup focus indicators\n   */\n  private setupFocusIndicators(): void {\n    // This is a simplified implementation\n    // In a real implementation, you would add CSS for focus indicators\n    console.log('Setting up focus indicators...');\n  }\n\n  /**\n   * Setup skip links\n   */\n  private setupSkipLinks(): void {\n    // This is a simplified implementation\n    // In a real implementation, you would create skip link elements\n    console.log('Setting up skip links...');\n  }\n\n  /**\n   * Setup focus restoration\n   */\n  private setupFocusRestoration(): void {\n    // This is a simplified implementation\n    // In a real implementation, you would track focus history\n    console.log('Setting up focus restoration...');\n  }\n}\n","/**\n * @fileoverview OrdoJS Accessibility - Screen Reader Module\n *\n * Screen reader support with announcements and live regions.\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n    LiveRegion,\n    ScreenReaderAnnouncement,\n    ScreenReaderConfig\n} from '../types/index.js';\n\n/**\n * Screen reader manager for handling announcements and live regions\n */\nexport class ScreenReaderManager extends EventEmitter {\n  private config: ScreenReaderConfig;\n  private announcements: Map<string, ScreenReaderAnnouncement>;\n  private liveRegions: Map<string, LiveRegion>;\n  private isInitialized: boolean;\n\n  /**\n   * Create a new ScreenReaderManager instance\n   *\n   * @param config - Screen reader configuration\n   */\n  constructor(config: ScreenReaderConfig) {\n    super();\n\n    this.config = config;\n    this.announcements = new Map();\n    this.liveRegions = new Map();\n    this.isInitialized = false;\n  }\n\n  /**\n   * Initialize the screen reader manager\n   */\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      console.warn('Screen reader manager is already initialized');\n      return;\n    }\n\n    try {\n      // Initialize screen reader support\n      await this.initializeScreenReader();\n\n      this.isInitialized = true;\n      console.log('Screen reader manager initialized successfully');\n\n      this.emit('initialized');\n    } catch (error) {\n      console.error('Failed to initialize screen reader manager:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Announce message to screen readers\n   *\n   * @param message - Message to announce\n   * @param options - Announcement options\n   * @returns Announcement ID\n   */\n  announce(\n    message: string,\n    options: {\n      priority?: 'polite' | 'assertive';\n      type?: 'status' | 'alert' | 'log' | 'timer' | 'marquee' | 'progressbar';\n      duration?: number;\n      element?: string;\n      context?: string;\n    } = {}\n  ): string {\n    const announcementId = `announcement_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n    const announcement: ScreenReaderAnnouncement = {\n      id: announcementId,\n      message,\n      priority: options.priority || 'polite',\n      type: options.type || 'status',\n      timestamp: new Date()\n    };\n\n    // Set optional properties only if they have values\n    if (options.duration !== undefined) {\n      announcement.duration = options.duration;\n    }\n    if (options.element) {\n      announcement.element = options.element;\n    }\n    if (options.context) {\n      announcement.context = options.context;\n    }\n\n    this.announcements.set(announcementId, announcement);\n    this.emit('announcementCreated', announcement);\n\n    return announcementId;\n  }\n\n  /**\n   * Create live region\n   *\n   * @param regionId - Region ID\n   * @param element - Element selector\n   * @param options - Region options\n   * @returns Live region\n   */\n  createLiveRegion(\n    regionId: string,\n    element: string,\n    options: {\n      type?: 'status' | 'alert' | 'log' | 'timer' | 'marquee' | 'progressbar';\n      priority?: 'polite' | 'assertive';\n      atomic?: boolean;\n      relevant?: 'additions' | 'removals' | 'text' | 'all';\n      busy?: boolean;\n      expanded?: boolean;\n      controls?: string;\n      describedBy?: string;\n      label?: string;\n    } = {}\n  ): LiveRegion {\n    const region: LiveRegion = {\n      id: regionId,\n      type: options.type || 'status',\n      priority: options.priority || 'polite',\n      element,\n      content: '',\n      atomic: options.atomic || false,\n      relevant: options.relevant || 'additions',\n      busy: options.busy || false\n    };\n\n    // Set optional properties\n    if (options.expanded !== undefined) {\n      region.expanded = options.expanded;\n    }\n    if (options.controls) {\n      region.controls = options.controls;\n    }\n    if (options.describedBy) {\n      region.describedBy = options.describedBy;\n    }\n    if (options.label) {\n      region.label = options.label;\n    }\n\n    this.liveRegions.set(regionId, region);\n    this.emit('liveRegionCreated', region);\n\n    return region;\n  }\n\n  /**\n   * Update live region content\n   *\n   * @param regionId - Region ID\n   * @param content - New content\n   * @param options - Update options\n   */\n  updateLiveRegion(\n    regionId: string,\n    content: string,\n    options: {\n      busy?: boolean;\n      expanded?: boolean;\n    } = {}\n  ): void {\n    const region = this.liveRegions.get(regionId);\n    if (region) {\n      region.content = content;\n\n      if (options.busy !== undefined) {\n        region.busy = options.busy;\n      }\n      if (options.expanded !== undefined) {\n        region.expanded = options.expanded;\n      }\n\n      this.liveRegions.set(regionId, region);\n      this.emit('liveRegionUpdated', region);\n    }\n  }\n\n  /**\n   * Remove live region\n   *\n   * @param regionId - Region ID\n   */\n  removeLiveRegion(regionId: string): void {\n    const region = this.liveRegions.get(regionId);\n    if (region) {\n      this.liveRegions.delete(regionId);\n      this.emit('liveRegionRemoved', region);\n    }\n  }\n\n  /**\n   * Get live region by ID\n   *\n   * @param regionId - Region ID\n   * @returns Live region or undefined\n   */\n  getLiveRegion(regionId: string): LiveRegion | undefined {\n    return this.liveRegions.get(regionId);\n  }\n\n  /**\n   * Get all live regions\n   *\n   * @returns Array of live regions\n   */\n  getAllLiveRegions(): LiveRegion[] {\n    return Array.from(this.liveRegions.values());\n  }\n\n  /**\n   * Get announcement by ID\n   *\n   * @param announcementId - Announcement ID\n   * @returns Announcement or undefined\n   */\n  getAnnouncement(announcementId: string): ScreenReaderAnnouncement | undefined {\n    return this.announcements.get(announcementId);\n  }\n\n  /**\n   * Get all announcements\n   *\n   * @returns Array of announcements\n   */\n  getAllAnnouncements(): ScreenReaderAnnouncement[] {\n    return Array.from(this.announcements.values());\n  }\n\n  /**\n   * Clear announcements\n   */\n  clearAnnouncements(): void {\n    this.announcements.clear();\n    this.emit('announcementsCleared');\n  }\n\n  /**\n   * Get screen reader manager statistics\n   *\n   * @returns Statistics\n   */\n  getStats(): {\n    totalAnnouncements: number;\n    totalLiveRegions: number;\n    announcementsByType: Record<string, number>;\n    liveRegionsByType: Record<string, number>;\n  } {\n    const announcementsByType: Record<string, number> = {};\n    const liveRegionsByType: Record<string, number> = {};\n\n    // Count announcements by type\n    for (const announcement of this.announcements.values()) {\n      announcementsByType[announcement.type] = (announcementsByType[announcement.type] || 0) + 1;\n    }\n\n    // Count live regions by type\n    for (const region of this.liveRegions.values()) {\n      liveRegionsByType[region.type] = (liveRegionsByType[region.type] || 0) + 1;\n    }\n\n    return {\n      totalAnnouncements: this.announcements.size,\n      totalLiveRegions: this.liveRegions.size,\n      announcementsByType,\n      liveRegionsByType\n    };\n  }\n\n  /**\n   * Initialize screen reader support\n   */\n  private async initializeScreenReader(): Promise<void> {\n    console.log('Initializing screen reader support...');\n\n    // Set up announcements if enabled\n    if (this.config.announcements) {\n      this.setupAnnouncements();\n    }\n\n    // Set up live regions if enabled\n    if (this.config.liveRegions) {\n      this.setupLiveRegions();\n    }\n\n    // Set up ARIA support if enabled\n    if (this.config.ariaLabels || this.config.ariaDescriptions || this.config.ariaLandmarks) {\n      this.setupARIASupport();\n    }\n  }\n\n  /**\n   * Setup announcements\n   */\n  private setupAnnouncements(): void {\n    // This is a simplified implementation\n    // In a real implementation, you would set up announcement elements\n    console.log('Setting up announcements...');\n  }\n\n  /**\n   * Setup live regions\n   */\n  private setupLiveRegions(): void {\n    // This is a simplified implementation\n    // In a real implementation, you would set up live region elements\n    console.log('Setting up live regions...');\n  }\n\n  /**\n   * Setup ARIA support\n   */\n  private setupARIASupport(): void {\n    // This is a simplified implementation\n    // In a real implementation, you would set up ARIA attributes\n    console.log('Setting up ARIA support...');\n  }\n}\n","/**\n * @fileoverview OrdoJS Accessibility - Testing Module\n *\n * Automated accessibility testing and auditing.\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n    AccessibilityTestResult,\n    TestingConfig\n} from '../types/index.js';\n\n/**\n * Testing manager for handling automated accessibility testing\n */\nexport class TestingManager extends EventEmitter {\n  private config: TestingConfig;\n  private testResults: Map<string, AccessibilityTestResult>;\n  private isInitialized: boolean;\n\n  /**\n   * Create a new TestingManager instance\n   *\n   * @param config - Testing configuration\n   */\n  constructor(config: TestingConfig) {\n    super();\n\n    this.config = config;\n    this.testResults = new Map();\n    this.isInitialized = false;\n  }\n\n  /**\n   * Initialize the testing manager\n   */\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      console.warn('Testing manager is already initialized');\n      return;\n    }\n\n    try {\n      // Initialize testing framework\n      await this.initializeTestingFramework();\n\n      this.isInitialized = true;\n      console.log('Testing manager initialized successfully');\n\n      this.emit('initialized');\n    } catch (error) {\n      console.error('Failed to initialize testing manager:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Run accessibility tests\n   *\n   * @param url - URL to test\n   * @param options - Test options\n   * @returns Test results\n   */\n  async runTests(\n    url: string,\n    options: {\n      rules?: string[];\n      ignoreRules?: string[];\n      timeout?: number;\n      retries?: number;\n    } = {}\n  ): Promise<AccessibilityTestResult[]> {\n    if (!this.isInitialized) {\n      throw new Error('Testing manager not initialized');\n    }\n\n    const results: AccessibilityTestResult[] = [];\n    const rules = options.rules || this.config.rules;\n    const ignoreRules = options.ignoreRules || this.config.ignoreRules;\n    const timeout = options.timeout || this.config.timeout;\n    const retries = options.retries || this.config.retries;\n\n    try {\n      console.log(`Running accessibility tests for ${url}...`);\n\n      // Run tests based on framework\n      switch (this.config.framework) {\n        case 'axe-core':\n          results.push(...await this.runAxeCoreTests(url, rules, ignoreRules, timeout));\n          break;\n        case 'puppeteer':\n          results.push(...await this.runPuppeteerTests(url, rules, ignoreRules, timeout));\n          break;\n        case 'jsdom':\n          results.push(...await this.runJSDOMTests(url, rules, ignoreRules, timeout));\n          break;\n        default:\n          throw new Error(`Unsupported testing framework: ${this.config.framework}`);\n      }\n\n      // Store results\n      for (const result of results) {\n        this.testResults.set(result.id, result);\n      }\n\n      console.log(`Accessibility tests completed: ${results.length} tests run`);\n\n      this.emit('testsCompleted', results);\n      return results;\n    } catch (error) {\n      console.error('Failed to run accessibility tests:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Run specific accessibility test\n   *\n   * @param testName - Test name\n   * @param url - URL to test\n   * @param options - Test options\n   * @returns Test result\n   */\n  async runTest(\n    testName: string,\n    url: string,\n    options: {\n      timeout?: number;\n      retries?: number;\n    } = {}\n  ): Promise<AccessibilityTestResult> {\n    const testId = `test_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n    const startTime = Date.now();\n\n    try {\n      console.log(`Running test: ${testName}`);\n\n      let result: AccessibilityTestResult;\n      let attempts = 0;\n      const maxAttempts = options.retries || this.config.retries;\n\n      do {\n        attempts++;\n        result = await this.executeTest(testName, url, options.timeout || this.config.timeout);\n\n        if (result.status === 'pass' || attempts >= maxAttempts) {\n          break;\n        }\n\n        console.log(`Test failed, retrying (${attempts}/${maxAttempts})...`);\n        await this.delay(1000); // Wait 1 second before retry\n      } while (attempts < maxAttempts);\n\n      result.id = testId;\n      result.duration = Date.now() - startTime;\n      result.timestamp = new Date();\n\n      this.testResults.set(testId, result);\n      this.emit('testCompleted', result);\n\n      return result;\n    } catch (error) {\n      console.error(`Test '${testName}' failed:`, error);\n\n      const errorResult: AccessibilityTestResult = {\n        id: testId,\n        name: testName,\n        status: 'fail',\n        description: `Test failed: ${error instanceof Error ? error.message : String(error)}`,\n        impact: 'serious',\n        violations: [],\n        passes: [],\n        inapplicable: [],\n        timestamp: new Date(),\n        duration: Date.now() - startTime,\n        url,\n        metadata: { error: error instanceof Error ? error.message : String(error) }\n      };\n\n      this.testResults.set(testId, errorResult);\n      this.emit('testFailed', errorResult);\n      throw error;\n    }\n  }\n\n  /**\n   * Generate accessibility report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns Report content\n   */\n  generateReport(\n    results: AccessibilityTestResult[],\n    options: {\n      format?: 'json' | 'html' | 'csv';\n      includePasses?: boolean;\n      includeViolations?: boolean;\n      includeSuggestions?: boolean;\n    } = {}\n  ): string {\n    const format = options.format || this.config.reportFormat;\n    const includePasses = options.includePasses !== false;\n    const includeViolations = options.includeViolations !== false;\n    const includeSuggestions = options.includeSuggestions !== false;\n\n    switch (format) {\n      case 'json':\n        return this.generateJSONReport(results, { includePasses, includeViolations, includeSuggestions });\n      case 'html':\n        return this.generateHTMLReport(results, { includePasses, includeViolations, includeSuggestions });\n      case 'csv':\n        return this.generateCSVReport(results, { includePasses, includeViolations, includeSuggestions });\n      default:\n        throw new Error(`Unsupported report format: ${format}`);\n    }\n  }\n\n  /**\n   * Get test result by ID\n   *\n   * @param testId - Test ID\n   * @returns Test result or undefined\n   */\n  getTestResult(testId: string): AccessibilityTestResult | undefined {\n    return this.testResults.get(testId);\n  }\n\n  /**\n   * Get all test results\n   *\n   * @returns Array of test results\n   */\n  getAllTestResults(): AccessibilityTestResult[] {\n    return Array.from(this.testResults.values());\n  }\n\n  /**\n   * Clear test results\n   */\n  clearTestResults(): void {\n    this.testResults.clear();\n    this.emit('testResultsCleared');\n  }\n\n  /**\n   * Get testing statistics\n   *\n   * @returns Statistics\n   */\n  getStats(): {\n    totalTests: number;\n    passedTests: number;\n    failedTests: number;\n    averageDuration: number;\n    framework: string;\n  } {\n    const totalTests = this.testResults.size;\n    const passedTests = Array.from(this.testResults.values()).filter(r => r.status === 'pass').length;\n    const failedTests = Array.from(this.testResults.values()).filter(r => r.status === 'fail').length;\n    const totalDuration = Array.from(this.testResults.values()).reduce((sum, r) => sum + r.duration, 0);\n    const averageDuration = totalTests > 0 ? totalDuration / totalTests : 0;\n\n    return {\n      totalTests,\n      passedTests,\n      failedTests,\n      averageDuration,\n      framework: this.config.framework\n    };\n  }\n\n  /**\n   * Initialize testing framework\n   */\n  private async initializeTestingFramework(): Promise<void> {\n    console.log(`Initializing ${this.config.framework} testing framework...`);\n\n    // Framework-specific initialization\n    switch (this.config.framework) {\n      case 'axe-core':\n        // Initialize axe-core\n        break;\n      case 'puppeteer':\n        // Initialize puppeteer\n        break;\n      case 'jsdom':\n        // Initialize jsdom\n        break;\n      default:\n        throw new Error(`Unsupported testing framework: ${this.config.framework}`);\n    }\n  }\n\n  /**\n   * Run axe-core tests\n   *\n   * @param url - URL to test\n   * @param rules - Rules to test\n   * @param ignoreRules - Rules to ignore\n   * @param timeout - Test timeout\n   * @returns Test results\n   */\n  private async runAxeCoreTests(\n    url: string,\n    rules: string[],\n    ignoreRules: string[],\n    timeout: number\n  ): Promise<AccessibilityTestResult[]> {\n    // This is a simplified implementation\n    // In a real implementation, you would use axe-core\n    const results: AccessibilityTestResult[] = [];\n\n    // Simulate axe-core test results\n    results.push({\n      id: `axe_${Date.now()}`,\n      name: 'Color Contrast',\n      status: 'pass',\n      description: 'Check color contrast ratios',\n      impact: 'serious',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 1000,\n      url,\n      metadata: { framework: 'axe-core' }\n    });\n\n    return results;\n  }\n\n  /**\n   * Run puppeteer tests\n   *\n   * @param url - URL to test\n   * @param rules - Rules to test\n   * @param ignoreRules - Rules to ignore\n   * @param timeout - Test timeout\n   * @returns Test results\n   */\n  private async runPuppeteerTests(\n    url: string,\n    rules: string[],\n    ignoreRules: string[],\n    timeout: number\n  ): Promise<AccessibilityTestResult[]> {\n    // This is a simplified implementation\n    // In a real implementation, you would use puppeteer\n    const results: AccessibilityTestResult[] = [];\n\n    // Simulate puppeteer test results\n    results.push({\n      id: `puppeteer_${Date.now()}`,\n      name: 'Keyboard Navigation',\n      status: 'pass',\n      description: 'Check keyboard navigation functionality',\n      impact: 'serious',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 2000,\n      url,\n      metadata: { framework: 'puppeteer' }\n    });\n\n    return results;\n  }\n\n  /**\n   * Run JSDOM tests\n   *\n   * @param url - URL to test\n   * @param rules - Rules to test\n   * @param ignoreRules - Rules to ignore\n   * @param timeout - Test timeout\n   * @returns Test results\n   */\n  private async runJSDOMTests(\n    url: string,\n    rules: string[],\n    ignoreRules: string[],\n    timeout: number\n  ): Promise<AccessibilityTestResult[]> {\n    // This is a simplified implementation\n    // In a real implementation, you would use jsdom\n    const results: AccessibilityTestResult[] = [];\n\n    // Simulate jsdom test results\n    results.push({\n      id: `jsdom_${Date.now()}`,\n      name: 'Semantic HTML',\n      status: 'pass',\n      description: 'Check semantic HTML structure',\n      impact: 'moderate',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 500,\n      url,\n      metadata: { framework: 'jsdom' }\n    });\n\n    return results;\n  }\n\n  /**\n   * Execute a specific test\n   *\n   * @param testName - Test name\n   * @param url - URL to test\n   * @param timeout - Test timeout\n   * @returns Test result\n   */\n  private async executeTest(\n    testName: string,\n    url: string,\n    timeout: number\n  ): Promise<AccessibilityTestResult> {\n    // This is a simplified implementation\n    // In a real implementation, you would execute the actual test\n    return {\n      id: '',\n      name: testName,\n      status: 'pass',\n      description: `Test: ${testName}`,\n      impact: 'moderate',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 1000,\n      url,\n      metadata: {}\n    };\n  }\n\n  /**\n   * Generate JSON report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns JSON report\n   */\n  private generateJSONReport(\n    results: AccessibilityTestResult[],\n    options: {\n      includePasses: boolean;\n      includeViolations: boolean;\n      includeSuggestions: boolean;\n    }\n  ): string {\n    const report = {\n      timestamp: new Date().toISOString(),\n      summary: {\n        totalTests: results.length,\n        passedTests: results.filter(r => r.status === 'pass').length,\n        failedTests: results.filter(r => r.status === 'fail').length,\n        inapplicableTests: results.filter(r => r.status === 'inapplicable').length\n      },\n      results: results.map(result => ({\n        id: result.id,\n        name: result.name,\n        status: result.status,\n        description: result.description,\n        impact: result.impact,\n        duration: result.duration,\n        url: result.url,\n        violations: options.includeViolations ? result.violations : [],\n        passes: options.includePasses ? result.passes : [],\n        inapplicable: result.inapplicable\n      }))\n    };\n\n    return JSON.stringify(report, null, 2);\n  }\n\n  /**\n   * Generate HTML report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns HTML report\n   */\n  private generateHTMLReport(\n    results: AccessibilityTestResult[],\n    options: {\n      includePasses: boolean;\n      includeViolations: boolean;\n      includeSuggestions: boolean;\n    }\n  ): string {\n    const passedTests = results.filter(r => r.status === 'pass').length;\n    const failedTests = results.filter(r => r.status === 'fail').length;\n    const totalTests = results.length;\n\n    return `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Accessibility Test Report</title>\n    <style>\n        body { font-family: Arial, sans-serif; margin: 20px; }\n        .summary { background: #f5f5f5; padding: 20px; border-radius: 5px; margin-bottom: 20px; }\n        .test { border: 1px solid #ddd; margin: 10px 0; padding: 15px; border-radius: 5px; }\n        .pass { border-left: 5px solid #4CAF50; }\n        .fail { border-left: 5px solid #f44336; }\n        .inapplicable { border-left: 5px solid #ff9800; }\n    </style>\n</head>\n<body>\n    <h1>Accessibility Test Report</h1>\n    <div class=\"summary\">\n        <h2>Summary</h2>\n        <p>Total Tests: ${totalTests}</p>\n        <p>Passed: ${passedTests}</p>\n        <p>Failed: ${failedTests}</p>\n        <p>Success Rate: ${totalTests > 0 ? ((passedTests / totalTests) * 100).toFixed(1) : 0}%</p>\n    </div>\n    <h2>Test Results</h2>\n    ${results.map(result => `\n        <div class=\"test ${result.status}\">\n            <h3>${result.name}</h3>\n            <p><strong>Status:</strong> ${result.status}</p>\n            <p><strong>Description:</strong> ${result.description}</p>\n            <p><strong>Impact:</strong> ${result.impact}</p>\n            <p><strong>Duration:</strong> ${result.duration}ms</p>\n            ${result.url ? `<p><strong>URL:</strong> ${result.url}</p>` : ''}\n        </div>\n    `).join('')}\n</body>\n</html>`;\n  }\n\n  /**\n   * Generate CSV report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns CSV report\n   */\n  private generateCSVReport(\n    results: AccessibilityTestResult[],\n    options: {\n      includePasses: boolean;\n      includeViolations: boolean;\n      includeSuggestions: boolean;\n    }\n  ): string {\n    const headers = ['Test Name', 'Status', 'Description', 'Impact', 'Duration (ms)', 'URL'];\n    const rows = results.map(result => [\n      result.name,\n      result.status,\n      result.description,\n      result.impact,\n      result.duration,\n      result.url || ''\n    ]);\n\n    return [headers, ...rows].map(row => row.map(cell => `\"${cell}\"`).join(',')).join('\\n');\n  }\n\n  /**\n   * Delay function\n   *\n   * @param ms - Milliseconds to delay\n   */\n  private delay(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n}\n"]}