/**
 * Accessibility utilities for web components
 * @countermeasure/web-components/utils/a11y
 *
 * Provides focus trap, live region announcements, roving tabindex,
 * and ARIA linking helpers for WCAG 2.1 AA compliance.
 */
export interface FocusTrap {
    /** Activate the focus trap */
    activate: () => void;
    /** Deactivate the focus trap */
    deactivate: () => void;
    /** Update focusable elements (call after DOM changes) */
    update: () => void;
    /** Check if focus trap is active */
    isActive: () => boolean;
}
export interface LiveRegion {
    /** Announce a message to screen readers */
    announce: (message: string) => void;
    /** Clear the live region content */
    clear: () => void;
    /** Remove the live region from DOM */
    destroy: () => void;
}
export interface RovingTabindex {
    /** Move focus to the next item */
    next: () => void;
    /** Move focus to the previous item */
    prev: () => void;
    /** Move focus to the first item */
    first: () => void;
    /** Move focus to the last item */
    last: () => void;
    /** Get the currently focused index */
    getCurrentIndex: () => number;
    /** Set focus to a specific index */
    setIndex: (index: number) => void;
    /** Update items (call after DOM changes) */
    update: () => void;
    /** Clean up event listeners */
    destroy: () => void;
}
/**
 * Get all focusable elements within a container
 */
export declare function getFocusableElements(container: HTMLElement): HTMLElement[];
/**
 * Create a focus trap within a container element.
 * Traps Tab/Shift+Tab navigation within the container.
 */
export declare function createFocusTrap(container: HTMLElement): FocusTrap;
/**
 * Announce a message to screen readers via ARIA live region.
 *
 * @param message - The message to announce
 * @param politeness - 'polite' waits for idle, 'assertive' interrupts immediately
 */
export declare function announce(message: string, politeness?: 'polite' | 'assertive'): void;
/**
 * Create a local live region for component-specific announcements.
 */
export declare function createLiveRegion(politeness?: 'polite' | 'assertive'): LiveRegion;
/**
 * Create a roving tabindex for keyboard navigation within a widget.
 * Only one item is focusable at a time (tabindex="0"), others are tabindex="-1".
 *
 * @param container - The container element
 * @param selector - CSS selector for navigable items
 * @param options - Configuration options
 */
export declare function createRovingTabindex(container: HTMLElement, selector: string, options?: {
    /** Initial focused index (default: 0) */
    initialIndex?: number;
    /** Whether to wrap around at ends (default: true) */
    wrap?: boolean;
    /** Whether navigation is horizontal or vertical (default: 'vertical') */
    orientation?: 'horizontal' | 'vertical' | 'both';
    /** Callback when focus changes */
    onFocusChange?: (index: number, element: HTMLElement) => void;
}): RovingTabindex;
/**
 * Link an element to its description using aria-describedby.
 * Appends to existing descriptions if present.
 */
export declare function linkDescribedBy(element: HTMLElement, descriptionId: string): void;
/**
 * Link an element to its label using aria-labelledby.
 * Appends to existing labels if present.
 */
export declare function linkLabelledBy(element: HTMLElement, labelId: string): void;
/**
 * Set up a relationship between a control and a region it controls.
 */
export declare function linkControls(control: HTMLElement, regionId: string): void;
/**
 * Set up an owns relationship for virtual children.
 */
export declare function linkOwns(parent: HTMLElement, childIds: string[]): void;
/**
 * Create a visually hidden element for screen readers only.
 */
export declare function createSrOnlyElement(text: string): HTMLElement;
/**
 * Check if focus-visible is natively supported.
 */
export declare function isFocusVisibleSupported(): boolean;
/**
 * Add focus-visible class when element receives keyboard focus.
 * Falls back for browsers without native :focus-visible support.
 */
export declare function manageFocusVisible(element: HTMLElement): () => void;
//# sourceMappingURL=a11y.d.ts.map