@angular/cdk
Version:
Angular Material Component Development Kit
314 lines (307 loc) • 14 kB
TypeScript
import * as i0 from '@angular/core';
import { NgZone, Injector, OnDestroy, AfterContentInit, OnChanges, DoCheck, SimpleChanges, InjectionToken } from '@angular/core';
import { O as ObserversModule } from './observe-content.d-8b3dea1d.js';
import { C as CdkMonitorFocus } from './focus-monitor.d-b42086db.js';
/**
* Configuration for the isFocusable method.
*/
declare class IsFocusableConfig {
/**
* Whether to count an element as focusable even if it is not currently visible.
*/
ignoreVisibility: boolean;
}
/**
* Utility for checking the interactivity of an element, such as whether it is focusable or
* tabbable.
*/
declare class InteractivityChecker {
private _platform;
constructor(...args: unknown[]);
/**
* Gets whether an element is disabled.
*
* @param element Element to be checked.
* @returns Whether the element is disabled.
*/
isDisabled(element: HTMLElement): boolean;
/**
* Gets whether an element is visible for the purposes of interactivity.
*
* This will capture states like `display: none` and `visibility: hidden`, but not things like
* being clipped by an `overflow: hidden` parent or being outside the viewport.
*
* @returns Whether the element is visible.
*/
isVisible(element: HTMLElement): boolean;
/**
* Gets whether an element can be reached via Tab key.
* Assumes that the element has already been checked with isFocusable.
*
* @param element Element to be checked.
* @returns Whether the element is tabbable.
*/
isTabbable(element: HTMLElement): boolean;
/**
* Gets whether an element can be focused by the user.
*
* @param element Element to be checked.
* @param config The config object with options to customize this method's behavior
* @returns Whether the element is focusable.
*/
isFocusable(element: HTMLElement, config?: IsFocusableConfig): boolean;
static ɵfac: i0.ɵɵFactoryDeclaration<InteractivityChecker, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<InteractivityChecker>;
}
/**
* Class that allows for trapping focus within a DOM element.
*
* This class currently uses a relatively simple approach to focus trapping.
* It assumes that the tab order is the same as DOM order, which is not necessarily true.
* Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to be misaligned.
*/
declare class FocusTrap {
readonly _element: HTMLElement;
private _checker;
readonly _ngZone: NgZone;
readonly _document: Document;
/** @breaking-change 20.0.0 param to become required */
readonly _injector?: Injector | undefined;
private _startAnchor;
private _endAnchor;
private _hasAttached;
protected startAnchorListener: () => boolean;
protected endAnchorListener: () => boolean;
/** Whether the focus trap is active. */
get enabled(): boolean;
set enabled(value: boolean);
protected _enabled: boolean;
constructor(_element: HTMLElement, _checker: InteractivityChecker, _ngZone: NgZone, _document: Document, deferAnchors?: boolean,
/** @breaking-change 20.0.0 param to become required */
_injector?: Injector | undefined);
/** Destroys the focus trap by cleaning up the anchors. */
destroy(): void;
/**
* Inserts the anchors into the DOM. This is usually done automatically
* in the constructor, but can be deferred for cases like directives with `*ngIf`.
* @returns Whether the focus trap managed to attach successfully. This may not be the case
* if the target element isn't currently in the DOM.
*/
attachAnchors(): boolean;
/**
* Waits for the zone to stabilize, then focuses the first tabbable element.
* @returns Returns a promise that resolves with a boolean, depending
* on whether focus was moved successfully.
*/
focusInitialElementWhenReady(options?: FocusOptions): Promise<boolean>;
/**
* Waits for the zone to stabilize, then focuses
* the first tabbable element within the focus trap region.
* @returns Returns a promise that resolves with a boolean, depending
* on whether focus was moved successfully.
*/
focusFirstTabbableElementWhenReady(options?: FocusOptions): Promise<boolean>;
/**
* Waits for the zone to stabilize, then focuses
* the last tabbable element within the focus trap region.
* @returns Returns a promise that resolves with a boolean, depending
* on whether focus was moved successfully.
*/
focusLastTabbableElementWhenReady(options?: FocusOptions): Promise<boolean>;
/**
* Get the specified boundary element of the trapped region.
* @param bound The boundary to get (start or end of trapped region).
* @returns The boundary element.
*/
private _getRegionBoundary;
/**
* Focuses the element that should be focused when the focus trap is initialized.
* @returns Whether focus was moved successfully.
*/
focusInitialElement(options?: FocusOptions): boolean;
/**
* Focuses the first tabbable element within the focus trap region.
* @returns Whether focus was moved successfully.
*/
focusFirstTabbableElement(options?: FocusOptions): boolean;
/**
* Focuses the last tabbable element within the focus trap region.
* @returns Whether focus was moved successfully.
*/
focusLastTabbableElement(options?: FocusOptions): boolean;
/**
* Checks whether the focus trap has successfully been attached.
*/
hasAttached(): boolean;
/** Get the first tabbable element from a DOM subtree (inclusive). */
private _getFirstTabbableElement;
/** Get the last tabbable element from a DOM subtree (inclusive). */
private _getLastTabbableElement;
/** Creates an anchor element. */
private _createAnchor;
/**
* Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.
* @param isEnabled Whether the focus trap is enabled.
* @param anchor Anchor on which to toggle the tabindex.
*/
private _toggleAnchorTabIndex;
/**
* Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape.
* @param enabled: Whether the anchors should trap Tab.
*/
protected toggleAnchors(enabled: boolean): void;
/** Executes a function when the zone is stable. */
private _executeOnStable;
}
/**
* Factory that allows easy instantiation of focus traps.
*/
declare class FocusTrapFactory {
private _checker;
private _ngZone;
private _document;
private _injector;
constructor(...args: unknown[]);
/**
* Creates a focus-trapped region around the given element.
* @param element The element around which focus will be trapped.
* @param deferCaptureElements Defers the creation of focus-capturing elements to be done
* manually by the user.
* @returns The created focus trap instance.
*/
create(element: HTMLElement, deferCaptureElements?: boolean): FocusTrap;
static ɵfac: i0.ɵɵFactoryDeclaration<FocusTrapFactory, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<FocusTrapFactory>;
}
/** Directive for trapping focus within a region. */
declare class CdkTrapFocus implements OnDestroy, AfterContentInit, OnChanges, DoCheck {
private _elementRef;
private _focusTrapFactory;
/** Underlying FocusTrap instance. */
focusTrap: FocusTrap;
/** Previously focused element to restore focus to upon destroy when using autoCapture. */
private _previouslyFocusedElement;
/** Whether the focus trap is active. */
get enabled(): boolean;
set enabled(value: boolean);
/**
* Whether the directive should automatically move focus into the trapped region upon
* initialization and return focus to the previous activeElement upon destruction.
*/
autoCapture: boolean;
constructor(...args: unknown[]);
ngOnDestroy(): void;
ngAfterContentInit(): void;
ngDoCheck(): void;
ngOnChanges(changes: SimpleChanges): void;
private _captureFocus;
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTrapFocus, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTrapFocus, "[cdkTrapFocus]", ["cdkTrapFocus"], { "enabled": { "alias": "cdkTrapFocus"; "required": false; }; "autoCapture": { "alias": "cdkTrapFocusAutoCapture"; "required": false; }; }, {}, never, never, true, never>;
static ngAcceptInputType_enabled: unknown;
static ngAcceptInputType_autoCapture: unknown;
}
/** Possible politeness levels. */
type AriaLivePoliteness = 'off' | 'polite' | 'assertive';
declare const LIVE_ANNOUNCER_ELEMENT_TOKEN: InjectionToken<HTMLElement | null>;
/**
* @docs-private
* @deprecated No longer used, will be removed.
* @breaking-change 21.0.0
*/
declare function LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY(): null;
/** Object that can be used to configure the default options for the LiveAnnouncer. */
interface LiveAnnouncerDefaultOptions {
/** Default politeness for the announcements. */
politeness?: AriaLivePoliteness;
/** Default duration for the announcement messages. */
duration?: number;
}
/** Injection token that can be used to configure the default options for the LiveAnnouncer. */
declare const LIVE_ANNOUNCER_DEFAULT_OPTIONS: InjectionToken<LiveAnnouncerDefaultOptions>;
declare class LiveAnnouncer implements OnDestroy {
private _ngZone;
private _defaultOptions;
private _liveElement;
private _document;
private _previousTimeout;
private _currentPromise;
private _currentResolve;
constructor(...args: unknown[]);
/**
* Announces a message to screen readers.
* @param message Message to be announced to the screen reader.
* @returns Promise that will be resolved when the message is added to the DOM.
*/
announce(message: string): Promise<void>;
/**
* Announces a message to screen readers.
* @param message Message to be announced to the screen reader.
* @param politeness The politeness of the announcer element.
* @returns Promise that will be resolved when the message is added to the DOM.
*/
announce(message: string, politeness?: AriaLivePoliteness): Promise<void>;
/**
* Announces a message to screen readers.
* @param message Message to be announced to the screen reader.
* @param duration Time in milliseconds after which to clear out the announcer element. Note
* that this takes effect after the message has been added to the DOM, which can be up to
* 100ms after `announce` has been called.
* @returns Promise that will be resolved when the message is added to the DOM.
*/
announce(message: string, duration?: number): Promise<void>;
/**
* Announces a message to screen readers.
* @param message Message to be announced to the screen reader.
* @param politeness The politeness of the announcer element.
* @param duration Time in milliseconds after which to clear out the announcer element. Note
* that this takes effect after the message has been added to the DOM, which can be up to
* 100ms after `announce` has been called.
* @returns Promise that will be resolved when the message is added to the DOM.
*/
announce(message: string, politeness?: AriaLivePoliteness, duration?: number): Promise<void>;
/**
* Clears the current text from the announcer element. Can be used to prevent
* screen readers from reading the text out again while the user is going
* through the page landmarks.
*/
clear(): void;
ngOnDestroy(): void;
private _createLiveElement;
/**
* Some browsers won't expose the accessibility node of the live announcer element if there is an
* `aria-modal` and the live announcer is outside of it. This method works around the issue by
* pointing the `aria-owns` of all modals to the live announcer element.
*/
private _exposeAnnouncerToModals;
static ɵfac: i0.ɵɵFactoryDeclaration<LiveAnnouncer, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<LiveAnnouncer>;
}
/**
* A directive that works similarly to aria-live, but uses the LiveAnnouncer to ensure compatibility
* with a wider range of browsers and screen readers.
*/
declare class CdkAriaLive implements OnDestroy {
private _elementRef;
private _liveAnnouncer;
private _contentObserver;
private _ngZone;
/** The aria-live politeness level to use when announcing messages. */
get politeness(): AriaLivePoliteness;
set politeness(value: AriaLivePoliteness);
private _politeness;
/** Time in milliseconds after which to clear out the announcer element. */
duration: number;
private _previousAnnouncedText?;
private _subscription;
constructor(...args: unknown[]);
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<CdkAriaLive, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkAriaLive, "[cdkAriaLive]", ["cdkAriaLive"], { "politeness": { "alias": "cdkAriaLive"; "required": false; }; "duration": { "alias": "cdkAriaLiveDuration"; "required": false; }; }, {}, never, never, true, never>;
}
declare class A11yModule {
constructor();
static ɵfac: i0.ɵɵFactoryDeclaration<A11yModule, never>;
static ɵmod: i0.ɵɵNgModuleDeclaration<A11yModule, never, [typeof ObserversModule, typeof CdkAriaLive, typeof CdkTrapFocus, typeof CdkMonitorFocus], [typeof CdkAriaLive, typeof CdkTrapFocus, typeof CdkMonitorFocus]>;
static ɵinj: i0.ɵɵInjectorDeclaration<A11yModule>;
}
export { type AriaLivePoliteness as A, CdkTrapFocus as C, FocusTrap as F, InteractivityChecker as I, LiveAnnouncer as L, FocusTrapFactory as a, IsFocusableConfig as b, CdkAriaLive as c, LIVE_ANNOUNCER_ELEMENT_TOKEN as d, LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY as e, type LiveAnnouncerDefaultOptions as f, LIVE_ANNOUNCER_DEFAULT_OPTIONS as g, A11yModule as h };