claritykit-svelte
Version:
A comprehensive Svelte component library focused on accessibility, ADHD-optimized design, developer experience, and full SSR compatibility
206 lines • 5.98 kB
TypeScript
/**
* Accessibility Utilities for ClarityKit
*
* Comprehensive utilities for managing ARIA attributes, live regions,
* keyboard navigation, and other accessibility features.
*/
/**
* Generates a unique ID for ARIA associations
*/
export declare function generateId(prefix?: string): string;
/**
* Creates ARIA association attributes for form fields
*/
export interface AriaAssociationOptions {
fieldId: string;
labelId?: string;
errorId?: string;
helperId?: string;
isInvalid?: boolean;
isRequired?: boolean;
}
export declare function createAriaAssociations(options: AriaAssociationOptions): {
id: string;
'aria-labelledby': string | undefined;
'aria-describedby': string | undefined;
'aria-invalid': string | undefined;
'aria-required': string | undefined;
};
/**
* Creates comprehensive ARIA attributes for form inputs
*/
export interface FormInputAriaOptions {
id: string;
required?: boolean;
invalid?: boolean;
disabled?: boolean;
readonly?: boolean;
labelId?: string;
errorId?: string;
helperId?: string;
expanded?: boolean;
hasPopup?: boolean | 'listbox' | 'menu' | 'tree' | 'grid' | 'dialog';
role?: string;
multiline?: boolean;
autocomplete?: string;
}
export declare function createFormInputAria(options: FormInputAriaOptions): {
[k: string]: string | undefined;
};
/**
* Form validation announcements
*/
export declare function announceFormValidation(isValid: boolean, errorCount?: number, fieldName?: string): void;
/**
* Live Region Management
*/
export type LiveRegionPoliteness = 'polite' | 'assertive' | 'off';
export interface LiveRegionOptions {
politeness?: LiveRegionPoliteness;
atomic?: boolean;
relevant?: 'additions' | 'removals' | 'text' | 'all';
timeout?: number;
}
declare class LiveRegionManager {
private container;
private regions;
constructor();
private initialize;
/**
* Announces a message via live region
*/
announce(message: string, options?: LiveRegionOptions): void;
/**
* Removes a specific live region
*/
remove(regionId: string): void;
/**
* Clears all live regions
*/
clear(): void;
/**
* Updates container politeness level
*/
setPoliteness(politeness: LiveRegionPoliteness): void;
}
export declare const liveRegion: LiveRegionManager;
/**
* Convenience functions for common live region announcements
*/
export declare function announcePolitely(message: string, timeout?: number): void;
export declare function announceAssertively(message: string, timeout?: number): void;
export declare function announceStatus(message: string): void;
export declare function announceError(message: string): void;
/**
* Form Validation Announcements
*/
export interface ValidationAnnouncementOptions {
fieldName: string;
isValid: boolean;
errorCount?: number;
errors?: string[];
}
export declare function announceValidation(options: ValidationAnnouncementOptions): void;
/**
* Focus Management
*/
export interface FocusOptions {
preventScroll?: boolean;
restoreFocus?: boolean;
}
export declare class FocusManager {
private focusStack;
/**
* Saves current focus for later restoration
*/
saveFocus(): void;
/**
* Restores the most recently saved focus
*/
restoreFocus(): void;
/**
* Sets focus to an element with options
*/
setFocus(element: HTMLElement | string, options?: FocusOptions): void;
/**
* Creates a focus trap within a container
*/
createFocusTrap(container: HTMLElement): () => void;
}
export declare const focusManager: FocusManager;
/**
* Keyboard Navigation Utilities
*/
export type NavigationDirection = 'horizontal' | 'vertical' | 'grid';
export interface KeyboardNavigationOptions {
direction: NavigationDirection;
wrap?: boolean;
homeEndKeys?: boolean;
enterActivates?: boolean;
spaceActivates?: boolean;
}
export declare function createKeyboardNavigation(container: HTMLElement, options: KeyboardNavigationOptions): () => void;
/**
* Data Table Accessibility Utilities
*/
export interface TableAccessibilityOptions {
caption?: string;
summary?: string;
sortable?: boolean;
rowHeaders?: boolean;
columnHeaders?: boolean;
}
export declare function enhanceTableAccessibility(table: HTMLTableElement, options: TableAccessibilityOptions): void;
/**
* Chart Accessibility Utilities
*/
export interface ChartAccessibilityOptions {
title: string;
description: string;
data: Array<{
label: string;
value: number | string;
}>;
type?: string;
}
export declare function createChartTextAlternative(options: ChartAccessibilityOptions): {
titleId: string;
descriptionId: string;
tableId: string;
ariaAttributes: Record<string, string>;
};
/**
* Reduced Motion Utilities
*/
export declare function prefersReducedMotion(): boolean;
export declare function prefersHighContrast(): boolean;
/**
* Screen Reader Testing Utilities
*/
export declare function getAccessibleText(element: HTMLElement): string;
/**
* ARIA Live Region Testing
*/
export declare function getAriaLiveRegions(): HTMLElement[];
export declare function getAriaLiveContent(): string[];
/**
* Form Key Navigation Handler
*/
export interface FormKeyNavigationOptions {
onSubmit?: () => void;
onCancel?: () => void;
onNext?: () => void;
onPrevious?: () => void;
submitKeys?: string[];
cancelKeys?: string[];
nextKeys?: string[];
previousKeys?: string[];
}
export declare function handleFormKeyNavigation(event: KeyboardEvent, options?: FormKeyNavigationOptions): void;
/**
* Convenience function for common announce patterns
*/
export declare function announce(message: string, priority?: LiveRegionPoliteness): void;
export declare const manager: LiveRegionManager;
export {};
//# sourceMappingURL=accessibility.d.ts.map