@ordojs/core
Version:
Core compiler and runtime for OrdoJS framework
261 lines • 6.83 kB
TypeScript
/**
* @fileoverview OrdoJS Core - Accessibility Manager
*/
export interface AccessibilityConfig {
enableAriaGeneration: boolean;
enableKeyboardNavigation: boolean;
enableFocusManagement: boolean;
enableScreenReaderSupport: boolean;
enableSemanticHTML: boolean;
enableAccessibilityTesting: boolean;
ariaLabels: Record<string, string>;
keyboardShortcuts: Record<string, string>;
focusOrder: string[];
}
export interface AriaAttributes {
'aria-label'?: string;
'aria-labelledby'?: string;
'aria-describedby'?: string;
'aria-hidden'?: boolean;
'aria-expanded'?: boolean;
'aria-pressed'?: boolean;
'aria-checked'?: boolean;
'aria-disabled'?: boolean;
'aria-required'?: boolean;
'aria-invalid'?: boolean;
'aria-valuenow'?: number;
'aria-valuemin'?: number;
'aria-valuemax'?: number;
'aria-valuetext'?: string;
'aria-multiline'?: boolean;
'aria-readonly'?: boolean;
'aria-placeholder'?: string;
'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both';
'aria-haspopup'?: boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';
'aria-controls'?: string;
'aria-owns'?: string;
'aria-activedescendant'?: string;
'aria-selected'?: boolean;
'aria-current'?: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';
'aria-live'?: 'off' | 'polite' | 'assertive';
'aria-atomic'?: boolean;
'aria-relevant'?: 'additions' | 'additions text' | 'all' | 'removals' | 'text';
'aria-busy'?: boolean;
'aria-grabbed'?: boolean;
'aria-dropeffect'?: 'none' | 'copy' | 'execute' | 'link' | 'move' | 'popup';
'aria-dragged'?: boolean;
'aria-flowto'?: string;
}
export interface KeyboardNavigationConfig {
enableTabNavigation: boolean;
enableArrowKeys: boolean;
enableEnterKey: boolean;
enableEscapeKey: boolean;
enableSpaceKey: boolean;
customShortcuts: Record<string, () => void>;
focusTraps: string[];
skipLinks: string[];
}
export interface FocusManagementConfig {
enableFocusTrapping: boolean;
enableFocusRestoration: boolean;
enableFocusIndicators: boolean;
focusOrder: string[];
focusableSelectors: string[];
skipFocusSelectors: string[];
}
/**
* Accessibility Manager for OrdoJS applications
*/
export declare class AccessibilityManager {
private config;
private keyboardConfig;
private focusConfig;
private focusHistory;
private currentFocusIndex;
private ariaIdCounter;
constructor(config?: Partial<AccessibilityConfig>);
/**
* Initialize accessibility features
*/
private initialize;
/**
* Generate ARIA attributes for an element
*/
private generateAriaAttributes;
/**
* Determine the appropriate ARIA role for an element
*/
private determineRole;
/**
* Generate appropriate label for an element
*/
private generateLabel;
/**
* Generate description for an element
*/
private generateDescription;
/**
* Check if element is interactive
*/
private isInteractiveElement;
/**
* Check if element is a form element
*/
private isFormElement;
/**
* Check if element is a navigation element
*/
private isNavigationElement;
/**
* Check if element is a list element
*/
private isListElement;
/**
* Add ARIA attributes for interactive elements
*/
private addInteractiveAriaAttributes;
/**
* Add ARIA attributes for form elements
*/
private addFormAriaAttributes;
/**
* Add ARIA attributes for navigation elements
*/
private addNavigationAriaAttributes;
/**
* Add ARIA attributes for list elements
*/
private addListAriaAttributes;
/**
* Setup keyboard navigation
*/
private setupKeyboardNavigation;
/**
* Handle keyboard navigation
*/
private handleKeyboardNavigation;
/**
* Handle Tab navigation
*/
private handleTabNavigation;
/**
* Handle Arrow key navigation
*/
private handleArrowKeyNavigation;
/**
* Handle Enter key
*/
private handleEnterKey;
/**
* Handle Escape key
*/
private handleEscapeKey;
/**
* Handle Space key
*/
private handleSpaceKey;
/**
* Handle custom shortcuts
*/
private handleCustomShortcuts;
/**
* Get key combination string
*/
private getKeyCombo;
/**
* Setup focus management
*/
private setupFocusManagement;
/**
* Handle focus in
*/
private handleFocusIn;
/**
* Handle focus out
*/
private handleFocusOut;
/**
* Setup screen reader support
*/
private setupScreenReaderSupport;
/**
* Setup accessibility testing
*/
private setupAccessibilityTesting;
/**
* Get focusable elements
*/
private getFocusableElements;
/**
* Move focus forward
*/
private moveFocusForward;
/**
* Move focus backward
*/
private moveFocusBackward;
/**
* Close dialog
*/
private closeDialog;
/**
* Generate unique ARIA ID
*/
private generateAriaId;
/**
* Check ARIA attributes
*/
private checkAriaAttributes;
/**
* Get required ARIA attributes for a role
*/
private getRequiredAriaAttributes;
/**
* Check keyboard navigation
*/
private checkKeyboardNavigation;
/**
* Check focus management
*/
private checkFocusManagement;
/**
* Check screen reader support
*/
private checkScreenReaderSupport;
/**
* Generate accessibility report
*/
private generateAccessibilityReport;
/**
* Announce to screen readers
*/
announce(message: string, priority?: 'polite' | 'assertive'): void;
/**
* Set focus to element
*/
setFocus(element: HTMLElement): void;
/**
* Restore previous focus
*/
restoreFocus(): void;
/**
* Add custom keyboard shortcut
*/
addKeyboardShortcut(keyCombo: string, callback: () => void): void;
/**
* Remove custom keyboard shortcut
*/
removeKeyboardShortcut(keyCombo: string): void;
/**
* Update configuration
*/
updateConfig(newConfig: Partial<AccessibilityConfig>): void;
private navigateToNextItem;
private navigateToPreviousItem;
validateAccessibility(component: HTMLElement): AccessibilityIssue[];
validateKeyboardNavigation(component: HTMLElement): AccessibilityIssue[];
validateScreenReaderSupport(component: HTMLElement): AccessibilityIssue[];
validateSemanticHTML(component: HTMLElement): AccessibilityIssue[];
}
//# sourceMappingURL=accessibility-manager.d.ts.map