mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
71 KiB
1 lines
71 KiB
{"version":3,"file":"_a11y-module-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/a11y/interactivity-checker/interactivity-checker.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/a11y/focus-trap/focus-trap.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/a11y/live-announcer/live-announcer-tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/a11y/live-announcer/live-announcer.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/a11y/a11y-module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Platform} from '../../platform';\nimport {Injectable, inject} from '@angular/core';\n\n/**\n * Configuration for the isFocusable method.\n */\nexport class IsFocusableConfig {\n /**\n * Whether to count an element as focusable even if it is not currently visible.\n */\n ignoreVisibility: boolean = false;\n}\n\n// The InteractivityChecker leans heavily on the ally.js accessibility utilities.\n// Methods like `isTabbable` are only covering specific edge-cases for the browsers which are\n// supported.\n\n/**\n * Utility for checking the interactivity of an element, such as whether it is focusable or\n * tabbable.\n */\n@Injectable({providedIn: 'root'})\nexport class InteractivityChecker {\n private _platform = inject(Platform);\n\n constructor(...args: unknown[]);\n constructor() {}\n\n /**\n * Gets whether an element is disabled.\n *\n * @param element Element to be checked.\n * @returns Whether the element is disabled.\n */\n isDisabled(element: HTMLElement): boolean {\n // This does not capture some cases, such as a non-form control with a disabled attribute or\n // a form control inside of a disabled form, but should capture the most common cases.\n return element.hasAttribute('disabled');\n }\n\n /**\n * Gets whether an element is visible for the purposes of interactivity.\n *\n * This will capture states like `display: none` and `visibility: hidden`, but not things like\n * being clipped by an `overflow: hidden` parent or being outside the viewport.\n *\n * @returns Whether the element is visible.\n */\n isVisible(element: HTMLElement): boolean {\n return hasGeometry(element) && getComputedStyle(element).visibility === 'visible';\n }\n\n /**\n * Gets whether an element can be reached via Tab key.\n * Assumes that the element has already been checked with isFocusable.\n *\n * @param element Element to be checked.\n * @returns Whether the element is tabbable.\n */\n isTabbable(element: HTMLElement): boolean {\n // Nothing is tabbable on the server 😎\n if (!this._platform.isBrowser) {\n return false;\n }\n\n const frameElement = getFrameElement(getWindow(element));\n\n if (frameElement) {\n // Frame elements inherit their tabindex onto all child elements.\n if (getTabIndexValue(frameElement) === -1) {\n return false;\n }\n\n // Browsers disable tabbing to an element inside of an invisible frame.\n if (!this.isVisible(frameElement)) {\n return false;\n }\n }\n\n let nodeName = element.nodeName.toLowerCase();\n let tabIndexValue = getTabIndexValue(element);\n\n if (element.hasAttribute('contenteditable')) {\n return tabIndexValue !== -1;\n }\n\n if (nodeName === 'iframe' || nodeName === 'object') {\n // The frame or object's content may be tabbable depending on the content, but it's\n // not possibly to reliably detect the content of the frames. We always consider such\n // elements as non-tabbable.\n return false;\n }\n\n // In iOS, the browser only considers some specific elements as tabbable.\n if (this._platform.WEBKIT && this._platform.IOS && !isPotentiallyTabbableIOS(element)) {\n return false;\n }\n\n if (nodeName === 'audio') {\n // Audio elements without controls enabled are never tabbable, regardless\n // of the tabindex attribute explicitly being set.\n if (!element.hasAttribute('controls')) {\n return false;\n }\n // Audio elements with controls are by default tabbable unless the\n // tabindex attribute is set to `-1` explicitly.\n return tabIndexValue !== -1;\n }\n\n if (nodeName === 'video') {\n // For all video elements, if the tabindex attribute is set to `-1`, the video\n // is not tabbable. Note: We cannot rely on the default `HTMLElement.tabIndex`\n // property as that one is set to `-1` in Chrome, Edge and Safari v13.1. The\n // tabindex attribute is the source of truth here.\n if (tabIndexValue === -1) {\n return false;\n }\n // If the tabindex is explicitly set, and not `-1` (as per check before), the\n // video element is always tabbable (regardless of whether it has controls or not).\n if (tabIndexValue !== null) {\n return true;\n }\n // Otherwise (when no explicit tabindex is set), a video is only tabbable if it\n // has controls enabled. Firefox is special as videos are always tabbable regardless\n // of whether there are controls or not.\n return this._platform.FIREFOX || element.hasAttribute('controls');\n }\n\n return element.tabIndex >= 0;\n }\n\n /**\n * Gets whether an element can be focused by the user.\n *\n * @param element Element to be checked.\n * @param config The config object with options to customize this method's behavior\n * @returns Whether the element is focusable.\n */\n isFocusable(element: HTMLElement, config?: IsFocusableConfig): boolean {\n // Perform checks in order of left to most expensive.\n // Again, naive approach that does not capture many edge cases and browser quirks.\n return (\n isPotentiallyFocusable(element) &&\n !this.isDisabled(element) &&\n (config?.ignoreVisibility || this.isVisible(element))\n );\n }\n}\n\n/**\n * Returns the frame element from a window object. Since browsers like MS Edge throw errors if\n * the frameElement property is being accessed from a different host address, this property\n * should be accessed carefully.\n */\nfunction getFrameElement(window: Window) {\n try {\n return window.frameElement as HTMLElement;\n } catch {\n return null;\n }\n}\n\n/** Checks whether the specified element has any geometry / rectangles. */\nfunction hasGeometry(element: HTMLElement): boolean {\n // Use logic from jQuery to check for an invisible element.\n // See https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js#L12\n return !!(\n element.offsetWidth ||\n element.offsetHeight ||\n (typeof element.getClientRects === 'function' && element.getClientRects().length)\n );\n}\n\n/** Gets whether an element's */\nfunction isNativeFormElement(element: Node) {\n let nodeName = element.nodeName.toLowerCase();\n return (\n nodeName === 'input' ||\n nodeName === 'select' ||\n nodeName === 'button' ||\n nodeName === 'textarea'\n );\n}\n\n/** Gets whether an element is an `<input type=\"hidden\">`. */\nfunction isHiddenInput(element: HTMLElement): boolean {\n return isInputElement(element) && element.type == 'hidden';\n}\n\n/** Gets whether an element is an anchor that has an href attribute. */\nfunction isAnchorWithHref(element: HTMLElement): boolean {\n return isAnchorElement(element) && element.hasAttribute('href');\n}\n\n/** Gets whether an element is an input element. */\nfunction isInputElement(element: HTMLElement): element is HTMLInputElement {\n return element.nodeName.toLowerCase() == 'input';\n}\n\n/** Gets whether an element is an anchor element. */\nfunction isAnchorElement(element: HTMLElement): element is HTMLAnchorElement {\n return element.nodeName.toLowerCase() == 'a';\n}\n\n/** Gets whether an element has a valid tabindex. */\nfunction hasValidTabIndex(element: HTMLElement): boolean {\n if (!element.hasAttribute('tabindex') || element.tabIndex === undefined) {\n return false;\n }\n\n let tabIndex = element.getAttribute('tabindex');\n return !!(tabIndex && !isNaN(parseInt(tabIndex, 10)));\n}\n\n/**\n * Returns the parsed tabindex from the element attributes instead of returning the\n * evaluated tabindex from the browsers defaults.\n */\nfunction getTabIndexValue(element: HTMLElement): number | null {\n if (!hasValidTabIndex(element)) {\n return null;\n }\n\n // See browser issue in Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n const tabIndex = parseInt(element.getAttribute('tabindex') || '', 10);\n\n return isNaN(tabIndex) ? -1 : tabIndex;\n}\n\n/** Checks whether the specified element is potentially tabbable on iOS */\nfunction isPotentiallyTabbableIOS(element: HTMLElement): boolean {\n let nodeName = element.nodeName.toLowerCase();\n let inputType = nodeName === 'input' && (element as HTMLInputElement).type;\n\n return (\n inputType === 'text' ||\n inputType === 'password' ||\n nodeName === 'select' ||\n nodeName === 'textarea'\n );\n}\n\n/**\n * Gets whether an element is potentially focusable without taking current visible/disabled state\n * into account.\n */\nfunction isPotentiallyFocusable(element: HTMLElement): boolean {\n // Inputs are potentially focusable *unless* they're type=\"hidden\".\n if (isHiddenInput(element)) {\n return false;\n }\n\n return (\n isNativeFormElement(element) ||\n isAnchorWithHref(element) ||\n element.hasAttribute('contenteditable') ||\n hasValidTabIndex(element)\n );\n}\n\n/** Gets the parent window of a DOM node with regards of being inside of an iframe. */\nfunction getWindow(node: HTMLElement): Window {\n // ownerDocument is null if `node` itself *is* a document.\n return (node.ownerDocument && node.ownerDocument.defaultView) || window;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Platform, _getFocusedElementPierceShadowDom} from '../../platform';\n\nimport {\n AfterContentInit,\n Directive,\n DoCheck,\n ElementRef,\n Injectable,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n afterNextRender,\n booleanAttribute,\n inject,\n DOCUMENT,\n} from '@angular/core';\nimport {InteractivityChecker} from '../interactivity-checker/interactivity-checker';\nimport {_CdkPrivateStyleLoader, _VisuallyHiddenLoader} from '../../private';\n\n/**\n * Class that allows for trapping focus within a DOM element.\n *\n * This class currently uses a relatively simple approach to focus trapping.\n * It assumes that the tab order is the same as DOM order, which is not necessarily true.\n * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to be misaligned.\n */\nexport class FocusTrap {\n private _startAnchor: HTMLElement | null = null;\n private _endAnchor: HTMLElement | null = null;\n private _hasAttached = false;\n\n // Event listeners for the anchors. Need to be regular functions so that we can unbind them later.\n protected startAnchorListener = () => this.focusLastTabbableElement();\n protected endAnchorListener = () => this.focusFirstTabbableElement();\n\n /** Whether the focus trap is active. */\n get enabled(): boolean {\n return this._enabled;\n }\n set enabled(value: boolean) {\n this._enabled = value;\n\n if (this._startAnchor && this._endAnchor) {\n this._toggleAnchorTabIndex(value, this._startAnchor);\n this._toggleAnchorTabIndex(value, this._endAnchor);\n }\n }\n protected _enabled: boolean = true;\n\n constructor(\n readonly _element: HTMLElement,\n private _checker: InteractivityChecker,\n readonly _ngZone: NgZone,\n readonly _document: Document,\n deferAnchors = false,\n /** @breaking-change 20.0.0 param to become required */\n readonly _injector?: Injector,\n ) {\n if (!deferAnchors) {\n this.attachAnchors();\n }\n }\n\n /** Destroys the focus trap by cleaning up the anchors. */\n destroy() {\n const startAnchor = this._startAnchor;\n const endAnchor = this._endAnchor;\n\n if (startAnchor) {\n startAnchor.removeEventListener('focus', this.startAnchorListener);\n startAnchor.remove();\n }\n\n if (endAnchor) {\n endAnchor.removeEventListener('focus', this.endAnchorListener);\n endAnchor.remove();\n }\n\n this._startAnchor = this._endAnchor = null;\n this._hasAttached = false;\n }\n\n /**\n * Inserts the anchors into the DOM. This is usually done automatically\n * in the constructor, but can be deferred for cases like directives with `*ngIf`.\n * @returns Whether the focus trap managed to attach successfully. This may not be the case\n * if the target element isn't currently in the DOM.\n */\n attachAnchors(): boolean {\n // If we're not on the browser, there can be no focus to trap.\n if (this._hasAttached) {\n return true;\n }\n\n this._ngZone.runOutsideAngular(() => {\n if (!this._startAnchor) {\n this._startAnchor = this._createAnchor();\n this._startAnchor!.addEventListener('focus', this.startAnchorListener);\n }\n\n if (!this._endAnchor) {\n this._endAnchor = this._createAnchor();\n this._endAnchor!.addEventListener('focus', this.endAnchorListener);\n }\n });\n\n if (this._element.parentNode) {\n this._element.parentNode.insertBefore(this._startAnchor!, this._element);\n this._element.parentNode.insertBefore(this._endAnchor!, this._element.nextSibling);\n this._hasAttached = true;\n }\n\n return this._hasAttached;\n }\n\n /**\n * Waits for the zone to stabilize, then focuses the first tabbable element.\n * @returns Returns a promise that resolves with a boolean, depending\n * on whether focus was moved successfully.\n */\n focusInitialElementWhenReady(options?: FocusOptions): Promise<boolean> {\n return new Promise<boolean>(resolve => {\n this._executeOnStable(() => resolve(this.focusInitialElement(options)));\n });\n }\n\n /**\n * Waits for the zone to stabilize, then focuses\n * the first tabbable element within the focus trap region.\n * @returns Returns a promise that resolves with a boolean, depending\n * on whether focus was moved successfully.\n */\n focusFirstTabbableElementWhenReady(options?: FocusOptions): Promise<boolean> {\n return new Promise<boolean>(resolve => {\n this._executeOnStable(() => resolve(this.focusFirstTabbableElement(options)));\n });\n }\n\n /**\n * Waits for the zone to stabilize, then focuses\n * the last tabbable element within the focus trap region.\n * @returns Returns a promise that resolves with a boolean, depending\n * on whether focus was moved successfully.\n */\n focusLastTabbableElementWhenReady(options?: FocusOptions): Promise<boolean> {\n return new Promise<boolean>(resolve => {\n this._executeOnStable(() => resolve(this.focusLastTabbableElement(options)));\n });\n }\n\n /**\n * Get the specified boundary element of the trapped region.\n * @param bound The boundary to get (start or end of trapped region).\n * @returns The boundary element.\n */\n private _getRegionBoundary(bound: 'start' | 'end'): HTMLElement | null {\n // Contains the deprecated version of selector, for temporary backwards comparability.\n const markers = this._element.querySelectorAll(\n `[cdk-focus-region-${bound}], ` + `[cdkFocusRegion${bound}], ` + `[cdk-focus-${bound}]`,\n ) as NodeListOf<HTMLElement>;\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n for (let i = 0; i < markers.length; i++) {\n // @breaking-change 8.0.0\n if (markers[i].hasAttribute(`cdk-focus-${bound}`)) {\n console.warn(\n `Found use of deprecated attribute 'cdk-focus-${bound}', ` +\n `use 'cdkFocusRegion${bound}' instead. The deprecated ` +\n `attribute will be removed in 8.0.0.`,\n markers[i],\n );\n } else if (markers[i].hasAttribute(`cdk-focus-region-${bound}`)) {\n console.warn(\n `Found use of deprecated attribute 'cdk-focus-region-${bound}', ` +\n `use 'cdkFocusRegion${bound}' instead. The deprecated attribute ` +\n `will be removed in 8.0.0.`,\n markers[i],\n );\n }\n }\n }\n\n if (bound == 'start') {\n return markers.length ? markers[0] : this._getFirstTabbableElement(this._element);\n }\n return markers.length\n ? markers[markers.length - 1]\n : this._getLastTabbableElement(this._element);\n }\n\n /**\n * Focuses the element that should be focused when the focus trap is initialized.\n * @returns Whether focus was moved successfully.\n */\n focusInitialElement(options?: FocusOptions): boolean {\n // Contains the deprecated version of selector, for temporary backwards comparability.\n const redirectToElement = this._element.querySelector(\n `[cdk-focus-initial], ` + `[cdkFocusInitial]`,\n ) as HTMLElement;\n\n if (redirectToElement) {\n // @breaking-change 8.0.0\n if (\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n redirectToElement.hasAttribute(`cdk-focus-initial`)\n ) {\n console.warn(\n `Found use of deprecated attribute 'cdk-focus-initial', ` +\n `use 'cdkFocusInitial' instead. The deprecated attribute ` +\n `will be removed in 8.0.0`,\n redirectToElement,\n );\n }\n\n // Warn the consumer if the element they've pointed to\n // isn't focusable, when not in production mode.\n if (\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n !this._checker.isFocusable(redirectToElement)\n ) {\n console.warn(`Element matching '[cdkFocusInitial]' is not focusable.`, redirectToElement);\n }\n\n if (!this._checker.isFocusable(redirectToElement)) {\n const focusableChild = this._getFirstTabbableElement(redirectToElement) as HTMLElement;\n focusableChild?.focus(options);\n return !!focusableChild;\n }\n\n redirectToElement.focus(options);\n return true;\n }\n\n return this.focusFirstTabbableElement(options);\n }\n\n /**\n * Focuses the first tabbable element within the focus trap region.\n * @returns Whether focus was moved successfully.\n */\n focusFirstTabbableElement(options?: FocusOptions): boolean {\n const redirectToElement = this._getRegionBoundary('start');\n\n if (redirectToElement) {\n redirectToElement.focus(options);\n }\n\n return !!redirectToElement;\n }\n\n /**\n * Focuses the last tabbable element within the focus trap region.\n * @returns Whether focus was moved successfully.\n */\n focusLastTabbableElement(options?: FocusOptions): boolean {\n const redirectToElement = this._getRegionBoundary('end');\n\n if (redirectToElement) {\n redirectToElement.focus(options);\n }\n\n return !!redirectToElement;\n }\n\n /**\n * Checks whether the focus trap has successfully been attached.\n */\n hasAttached(): boolean {\n return this._hasAttached;\n }\n\n /** Get the first tabbable element from a DOM subtree (inclusive). */\n private _getFirstTabbableElement(root: HTMLElement): HTMLElement | null {\n if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\n return root;\n }\n\n const children = root.children;\n\n for (let i = 0; i < children.length; i++) {\n const tabbableChild =\n children[i].nodeType === this._document.ELEMENT_NODE\n ? this._getFirstTabbableElement(children[i] as HTMLElement)\n : null;\n\n if (tabbableChild) {\n return tabbableChild;\n }\n }\n\n return null;\n }\n\n /** Get the last tabbable element from a DOM subtree (inclusive). */\n private _getLastTabbableElement(root: HTMLElement): HTMLElement | null {\n if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\n return root;\n }\n\n // Iterate in reverse DOM order.\n const children = root.children;\n\n for (let i = children.length - 1; i >= 0; i--) {\n const tabbableChild =\n children[i].nodeType === this._document.ELEMENT_NODE\n ? this._getLastTabbableElement(children[i] as HTMLElement)\n : null;\n\n if (tabbableChild) {\n return tabbableChild;\n }\n }\n\n return null;\n }\n\n /** Creates an anchor element. */\n private _createAnchor(): HTMLElement {\n const anchor = this._document.createElement('div');\n this._toggleAnchorTabIndex(this._enabled, anchor);\n anchor.classList.add('cdk-visually-hidden');\n anchor.classList.add('cdk-focus-trap-anchor');\n anchor.setAttribute('aria-hidden', 'true');\n return anchor;\n }\n\n /**\n * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.\n * @param isEnabled Whether the focus trap is enabled.\n * @param anchor Anchor on which to toggle the tabindex.\n */\n private _toggleAnchorTabIndex(isEnabled: boolean, anchor: HTMLElement) {\n // Remove the tabindex completely, rather than setting it to -1, because if the\n // element has a tabindex, the user might still hit it when navigating with the arrow keys.\n isEnabled ? anchor.setAttribute('tabindex', '0') : anchor.removeAttribute('tabindex');\n }\n\n /**\n * Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape.\n * @param enabled: Whether the anchors should trap Tab.\n */\n protected toggleAnchors(enabled: boolean) {\n if (this._startAnchor && this._endAnchor) {\n this._toggleAnchorTabIndex(enabled, this._startAnchor);\n this._toggleAnchorTabIndex(enabled, this._endAnchor);\n }\n }\n\n /** Executes a function when the zone is stable. */\n private _executeOnStable(fn: () => any): void {\n // TODO: remove this conditional when injector is required in the constructor.\n if (this._injector) {\n afterNextRender(fn, {injector: this._injector});\n } else {\n setTimeout(fn);\n }\n }\n}\n\n/**\n * Factory that allows easy instantiation of focus traps.\n */\n@Injectable({providedIn: 'root'})\nexport class FocusTrapFactory {\n private _checker = inject(InteractivityChecker);\n private _ngZone = inject(NgZone);\n\n private _document = inject(DOCUMENT);\n private _injector = inject(Injector);\n\n constructor(...args: unknown[]);\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);\n }\n\n /**\n * Creates a focus-trapped region around the given element.\n * @param element The element around which focus will be trapped.\n * @param deferCaptureElements Defers the creation of focus-capturing elements to be done\n * manually by the user.\n * @returns The created focus trap instance.\n */\n create(element: HTMLElement, deferCaptureElements: boolean = false): FocusTrap {\n return new FocusTrap(\n element,\n this._checker,\n this._ngZone,\n this._document,\n deferCaptureElements,\n this._injector,\n );\n }\n}\n\n/** Directive for trapping focus within a region. */\n@Directive({\n selector: '[cdkTrapFocus]',\n exportAs: 'cdkTrapFocus',\n})\nexport class CdkTrapFocus implements OnDestroy, AfterContentInit, OnChanges, DoCheck {\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _focusTrapFactory = inject(FocusTrapFactory);\n\n /** Underlying FocusTrap instance. */\n focusTrap: FocusTrap = undefined!;\n\n /** Previously focused element to restore focus to upon destroy when using autoCapture. */\n private _previouslyFocusedElement: HTMLElement | null = null;\n\n /** Whether the focus trap is active. */\n @Input({alias: 'cdkTrapFocus', transform: booleanAttribute})\n get enabled(): boolean {\n return this.focusTrap?.enabled || false;\n }\n set enabled(value: boolean) {\n if (this.focusTrap) {\n this.focusTrap.enabled = value;\n }\n }\n\n /**\n * Whether the directive should automatically move focus into the trapped region upon\n * initialization and return focus to the previous activeElement upon destruction.\n */\n @Input({alias: 'cdkTrapFocusAutoCapture', transform: booleanAttribute})\n autoCapture: boolean = false;\n\n constructor(...args: unknown[]);\n\n constructor() {\n const platform = inject(Platform);\n\n if (platform.isBrowser) {\n this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);\n }\n }\n\n ngOnDestroy() {\n this.focusTrap?.destroy();\n\n // If we stored a previously focused element when using autoCapture, return focus to that\n // element now that the trapped region is being destroyed.\n if (this._previouslyFocusedElement) {\n this._previouslyFocusedElement.focus();\n this._previouslyFocusedElement = null;\n }\n }\n\n ngAfterContentInit() {\n this.focusTrap?.attachAnchors();\n\n if (this.autoCapture) {\n this._captureFocus();\n }\n }\n\n ngDoCheck() {\n if (this.focusTrap && !this.focusTrap.hasAttached()) {\n this.focusTrap.attachAnchors();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const autoCaptureChange = changes['autoCapture'];\n\n if (\n autoCaptureChange &&\n !autoCaptureChange.firstChange &&\n this.autoCapture &&\n this.focusTrap?.hasAttached()\n ) {\n this._captureFocus();\n }\n }\n\n private _captureFocus() {\n this._previouslyFocusedElement = _getFocusedElementPierceShadowDom();\n this.focusTrap?.focusInitialElementWhenReady();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n// The tokens for the live announcer are defined in a separate file from LiveAnnouncer\n// as a workaround for https://github.com/angular/angular/issues/22559\n\n/** Possible politeness levels. */\nexport type AriaLivePoliteness = 'off' | 'polite' | 'assertive';\n\nexport const LIVE_ANNOUNCER_ELEMENT_TOKEN = new InjectionToken<HTMLElement | null>(\n 'liveAnnouncerElement',\n {\n providedIn: 'root',\n factory: () => null,\n },\n);\n\n/** Object that can be used to configure the default options for the LiveAnnouncer. */\nexport interface LiveAnnouncerDefaultOptions {\n /** Default politeness for the announcements. */\n politeness?: AriaLivePoliteness;\n\n /** Default duration for the announcement messages. */\n duration?: number;\n}\n\n/** Injection token that can be used to configure the default options for the LiveAnnouncer. */\nexport const LIVE_ANNOUNCER_DEFAULT_OPTIONS = new InjectionToken<LiveAnnouncerDefaultOptions>(\n 'LIVE_ANNOUNCER_DEFAULT_OPTIONS',\n);\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ContentObserver} from '../../observers';\n\nimport {\n Directive,\n ElementRef,\n Injectable,\n Input,\n NgZone,\n OnDestroy,\n inject,\n DOCUMENT,\n} from '@angular/core';\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\nimport {Subscription} from 'rxjs';\nimport {\n AriaLivePoliteness,\n LiveAnnouncerDefaultOptions,\n LIVE_ANNOUNCER_ELEMENT_TOKEN,\n LIVE_ANNOUNCER_DEFAULT_OPTIONS,\n} from './live-announcer-tokens';\nimport {_CdkPrivateStyleLoader, _VisuallyHiddenLoader, _setInnerHtml} from '../../private';\n\nlet uniqueIds = 0;\n\n/** Possible types for a message that can be announced by the `LiveAnnouncer`. */\nexport type LiveAnnouncerMessage = string | SafeHtml;\n\n@Injectable({providedIn: 'root'})\nexport class LiveAnnouncer implements OnDestroy {\n private _ngZone = inject(NgZone);\n private _defaultOptions = inject<LiveAnnouncerDefaultOptions>(LIVE_ANNOUNCER_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n private _liveElement: HTMLElement;\n private _document = inject(DOCUMENT);\n private _sanitizer = inject(DomSanitizer);\n private _previousTimeout: ReturnType<typeof setTimeout> | undefined;\n private _currentPromise: Promise<void> | undefined;\n private _currentResolve: (() => void) | undefined;\n\n constructor(...args: unknown[]);\n\n constructor() {\n const elementToken = inject(LIVE_ANNOUNCER_ELEMENT_TOKEN, {optional: true});\n this._liveElement = elementToken || this._createLiveElement();\n }\n\n /**\n * Announces a message to screen readers.\n * @param message Message to be announced to the screen reader.\n * @returns Promise that will be resolved when the message is added to the DOM.\n */\n announce(message: LiveAnnouncerMessage): Promise<void>;\n\n /**\n * Announces a message to screen readers.\n * @param message Message to be announced to the screen reader.\n * @param politeness The politeness of the announcer element.\n * @returns Promise that will be resolved when the message is added to the DOM.\n */\n announce(message: LiveAnnouncerMessage, politeness?: AriaLivePoliteness): Promise<void>;\n\n /**\n * Announces a message to screen readers.\n * @param message Message to be announced to the screen reader.\n * @param duration Time in milliseconds after which to clear out the announcer element. Note\n * that this takes effect after the message has been added to the DOM, which can be up to\n * 100ms after `announce` has been called.\n * @returns Promise that will be resolved when the message is added to the DOM.\n */\n announce(message: LiveAnnouncerMessage, duration?: number): Promise<void>;\n\n /**\n * Announces a message to screen readers.\n * @param message Message to be announced to the screen reader.\n * @param politeness The politeness of the announcer element.\n * @param duration Time in milliseconds after which to clear out the announcer element. Note\n * that this takes effect after the message has been added to the DOM, which can be up to\n * 100ms after `announce` has been called.\n * @returns Promise that will be resolved when the message is added to the DOM.\n */\n announce(\n message: LiveAnnouncerMessage,\n politeness?: AriaLivePoliteness,\n duration?: number,\n ): Promise<void>;\n\n announce(message: LiveAnnouncerMessage, ...args: any[]): Promise<void> {\n const defaultOptions = this._defaultOptions;\n let politeness: AriaLivePoliteness | undefined;\n let duration: number | undefined;\n\n if (args.length === 1 && typeof args[0] === 'number') {\n duration = args[0];\n } else {\n [politeness, duration] = args;\n }\n\n this.clear();\n clearTimeout(this._previousTimeout);\n\n if (!politeness) {\n politeness =\n defaultOptions && defaultOptions.politeness ? defaultOptions.politeness : 'polite';\n }\n\n if (duration == null && defaultOptions) {\n duration = defaultOptions.duration;\n }\n\n // TODO: ensure changing the politeness works on all environments we support.\n this._liveElement.setAttribute('aria-live', politeness);\n\n if (this._liveElement.id) {\n this._exposeAnnouncerToModals(this._liveElement.id);\n }\n\n // This 100ms timeout is necessary for some browser + screen-reader combinations:\n // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.\n // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a\n // second time without clearing and then using a non-zero delay.\n // (using JAWS 17 at time of this writing).\n return this._ngZone.runOutsideAngular(() => {\n if (!this._currentPromise) {\n this._currentPromise = new Promise(resolve => (this._currentResolve = resolve));\n }\n\n clearTimeout(this._previousTimeout);\n this._previousTimeout = setTimeout(() => {\n if (!message || typeof message === 'string') {\n this._liveElement.textContent = message;\n } else {\n _setInnerHtml(this._liveElement, message, this._sanitizer);\n }\n\n if (typeof duration === 'number') {\n this._previousTimeout = setTimeout(() => this.clear(), duration);\n }\n\n // For some reason in tests this can be undefined\n // Probably related to ZoneJS and every other thing that patches browser APIs in tests\n this._currentResolve?.();\n this._currentPromise = this._currentResolve = undefined;\n }, 100);\n\n return this._currentPromise;\n });\n }\n\n /**\n * Clears the current text from the announcer element. Can be used to prevent\n * screen readers from reading the text out again while the user is going\n * through the page landmarks.\n */\n clear() {\n if (this._liveElement) {\n this._liveElement.textContent = '';\n }\n }\n\n ngOnDestroy() {\n clearTimeout(this._previousTimeout);\n this._liveElement?.remove();\n this._liveElement = null!;\n this._currentResolve?.();\n this._currentPromise = this._currentResolve = undefined;\n }\n\n private _createLiveElement(): HTMLElement {\n const elementClass = 'cdk-live-announcer-element';\n const previousElements = this._document.getElementsByClassName(elementClass);\n const liveEl = this._document.createElement('div');\n\n // Remove any old containers. This can happen when coming in from a server-side-rendered page.\n for (let i = 0; i < previousElements.length; i++) {\n previousElements[i].remove();\n }\n\n liveEl.classList.add(elementClass);\n liveEl.classList.add('cdk-visually-hidden');\n\n liveEl.setAttribute('aria-atomic', 'true');\n liveEl.setAttribute('aria-live', 'polite');\n liveEl.id = `cdk-live-announcer-${uniqueIds++}`;\n\n this._document.body.appendChild(liveEl);\n\n return liveEl;\n }\n\n /**\n * Some browsers won't expose the accessibility node of the live announcer element if there is an\n * `aria-modal` and the live announcer is outside of it. This method works around the issue by\n * pointing the `aria-owns` of all modals to the live announcer element.\n */\n private _exposeAnnouncerToModals(id: string) {\n // TODO(http://github.com/angular/components/issues/26853): consider de-duplicating this with\n // the `SnakBarContainer` and other usages.\n //\n // Note that the selector here is limited to CDK overlays at the moment in order to reduce the\n // section of the DOM we need to look through. This should cover all the cases we support, but\n // the selector can be expanded if it turns out to be too narrow.\n const modals = this._document.querySelectorAll(\n 'body > .cdk-overlay-container [aria-modal=\"true\"]',\n );\n\n for (let i = 0; i < modals.length; i++) {\n const modal = modals[i];\n const ariaOwns = modal.getAttribute('aria-owns');\n\n if (!ariaOwns) {\n modal.setAttribute('aria-owns', id);\n } else if (ariaOwns.indexOf(id) === -1) {\n modal.setAttribute('aria-owns', ariaOwns + ' ' + id);\n }\n }\n }\n}\n\n/**\n * A directive that works similarly to aria-live, but uses the LiveAnnouncer to ensure compatibility\n * with a wider range of browsers and screen readers.\n */\n@Directive({\n selector: '[cdkAriaLive]',\n exportAs: 'cdkAriaLive',\n})\nexport class CdkAriaLive implements OnDestroy {\n private _elementRef = inject(ElementRef);\n private _liveAnnouncer = inject(LiveAnnouncer);\n private _contentObserver = inject(ContentObserver);\n private _ngZone = inject(NgZone);\n\n /** The aria-live politeness level to use when announcing messages. */\n @Input('cdkAriaLive')\n get politeness(): AriaLivePoliteness {\n return this._politeness;\n }\n set politeness(value: AriaLivePoliteness) {\n this._politeness = value === 'off' || value === 'assertive' ? value : 'polite';\n if (this._politeness === 'off') {\n if (this._subscription) {\n this._subscription.unsubscribe();\n this._subscription = undefined;\n }\n } else if (!this._subscription) {\n this._subscription = this._ngZone.runOutsideAngular(() => {\n return this._contentObserver.observe(this._elementRef).subscribe(() => {\n // Note that we use textContent here, rather than innerText, in order to avoid a reflow.\n const elementText = this._elementRef.nativeElement.textContent;\n\n // The `MutationObserver` fires also for attribute\n // changes which we don't want to announce.\n if (elementText !== this._previousAnnouncedText) {\n this._liveAnnouncer.announce(elementText, this._politeness, this.duration);\n this._previousAnnouncedText = elementText;\n }\n });\n });\n }\n }\n private _politeness: AriaLivePoliteness = 'polite';\n\n /** Time in milliseconds after which to clear out the announcer element. */\n @Input('cdkAriaLiveDuration') duration!: number;\n\n private _previousAnnouncedText?: string;\n private _subscription: Subscription | undefined;\n\n constructor(...args: unknown[]);\n\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {inject, Injectable, OnDestroy, DOCUMENT} from '@angular/core';\nimport {BreakpointObserver} from '../../layout';\nimport {Platform} from '../../platform';\n\nimport {Subscription} from 'rxjs';\n\n/** Set of possible high-contrast mode backgrounds. */\nexport enum HighContrastMode {\n NONE,\n BLACK_ON_WHITE,\n WHITE_ON_BLACK,\n}\n\n/** CSS class applied to the document body when in black-on-white high-contrast mode. */\nexport const BLACK_ON_WHITE_CSS_CLASS = 'cdk-high-contrast-black-on-white';\n\n/** CSS class applied to the document body when in white-on-black high-contrast mode. */\nexport const WHITE_ON_BLACK_CSS_CLASS = 'cdk-high-contrast-white-on-black';\n\n/** CSS class applied to the document body when in high-contrast mode. */\nexport const HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS = 'cdk-high-contrast-active';\n\n/**\n * Service to determine whether the browser is currently in a high-contrast-mode environment.\n *\n * Microsoft Windows supports an accessibility feature called \"High Contrast Mode\". This mode\n * changes the appearance of all applications, including web applications, to dramatically increase\n * contrast.\n *\n * IE, Edge, and Firefox currently support this mode. Chrome does not support Windows High Contrast\n * Mode. This service does not detect high-contrast mode as added by the Chrome \"High Contrast\"\n * browser extension.\n */\n@Injectable({providedIn: 'root'})\nexport class HighContrastModeDetector implements OnDestroy {\n private _platform = inject(Platform);\n\n /**\n * Figuring out the high contrast mode and adding the body classes can cause\n * some expensive layouts. This flag is used to ensure that we only do it once.\n */\n private _hasCheckedHighContrastMode = false;\n private _document = inject(DOCUMENT);\n private _breakpointSubscription: Subscription;\n\n constructor(...args: unknown[]);\n\n constructor() {\n this._breakpointSubscription = inject(BreakpointObserver)\n .observe('(forced-colors: active)')\n .subscribe(() => {\n if (this._hasCheckedHighContrastMode) {\n this._hasCheckedHighContrastMode = false;\n this._applyBodyHighContrastModeCssClasses();\n }\n });\n }\n\n /** Gets the current high-contrast-mode for the page. */\n getHighContrastMode(): HighContrastMode {\n if (!this._platform.isBrowser) {\n return HighContrastMode.NONE;\n }\n\n // Create a test element with an arbitrary background-color that is neither black nor\n // white; high-contrast mode will coerce the color to either black or white. Also ensure that\n // appending the test element to the DOM does not affect layout by absolutely positioning it\n const testElement = this._document.createElement('div');\n testElement.style.backgroundColor = 'rgb(1,2,3)';\n testElement.style.position = 'absolute';\n this._document.body.appendChild(testElement);\n\n // Get the computed style for the background color, collapsing spaces to normalize between\n // browsers. Once we get this color, we no longer need the test element. Access the `window`\n // via the document so we can fake it in tests. Note that we have extra null checks, because\n // this logic will likely run during app bootstrap and throwing can break the entire app.\n const documentWindow = this._document.defaultView || window;\n const computedStyle =\n documentWindow && documentWindow.getComputedStyle\n ? documentWindow.getComputedStyle(testElement)\n : null;\n const computedColor = ((computedStyle && computedStyle.backgroundColor) || '').replace(\n / /g,\n '',\n );\n testElement.remove();\n\n switch (computedColor) {\n // Pre Windows 11 dark theme.\n case 'rgb(0,0,0)':\n // Windows 11 dark themes.\n case 'rgb(45,50,54)':\n case 'rgb(32,32,32)':\n return HighContrastMode.WHITE_ON_BLACK;\n // Pre Windows 11 light theme.\n case 'rgb(255,255,255)':\n // Windows 11 light theme.\n case 'rgb(255,250,239)':\n return HighContrastMode.BLACK_ON_WHITE;\n }\n return HighContrastMode.NONE;\n }\n\n ngOnDestroy(): void {\n this._breakpointSubscription.unsubscribe();\n }\n\n /** Applies CSS classes indicating high-contrast mode to document body (browser-only). */\n _applyBodyHighContrastModeCssClasses(): void {\n if (!this._hasCheckedHighContrastMode && this._platform.isBrowser && this._document.body) {\n const bodyClasses = this._document.body.classList;\n bodyClasses.remove(\n HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS,\n BLACK_ON_WHITE_CSS_CLASS,\n WHITE_ON_BLACK_CSS_CLASS,\n );\n this._hasCheckedHighContrastMode = true;\n\n const mode = this.getHighContrastMode();\n if (mode === HighContrastMode.BLACK_ON_WHITE) {\n bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS, BLACK_ON_WHITE_CSS_CLASS);\n } else if (mode === HighContrastMode.WHITE_ON_BLACK) {\n bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS, WHITE_ON_BLACK_CSS_CLASS);\n }\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ObserversModule} from '../observers';\nimport {NgModule, inject} from '@angular/core';\nimport {CdkMonitorFocus} from './focus-monitor/focus-monitor';\nimport {CdkTrapFocus} from './focus-trap/focus-trap';\nimport {HighContrastModeDetector} from './high-contrast-mode/high-contrast-mode-detector';\nimport {CdkAriaLive} from './live-announcer/live-announcer';\n\n@NgModule({\n imports: [ObserversModule, CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],\n exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],\n})\nexport class A11yModule {\n constructor() {\n inject(HighContrastModeDetector)._applyBodyHighContrastModeCssClasses();\n }\n}\n"],"names":["IsFocusableConfig","ignoreVisibility","InteractivityChecker","_platform","inject","Platform","constructor","isDisabled","element","hasAttribute","isVisible","hasGeometry","getComputedStyle","visibility","isTabbable","isBrowser","frameElement","getFrameElement","getWindow","getTabIndexValue","nodeName","toLowerCase","tabIndexValue","WEBKIT","IOS","isPotentiallyTabbableIOS","FIREFOX","tabIndex","isFocusable","config","isPotentiallyFocusable","deps","target","i0","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","type","decorators","providedIn","window","offsetWidth","offsetHeight","getClientRects","length","isNativeFormElement","isHiddenInput","isInputElement","isAnchorWithHref","isAnchorElement","hasValidTabIndex","undefined","getAttribute","isNaN","parseInt","inputType","node","ownerDocument","defaultView","FocusTrap","_element","_checker","_ngZone","_document","_injector","_startAnchor","_endAnchor","_hasAttached","startAnchorListener","focusLastTabbableElement","endAnchorListener","focusFirstTabbableElement","enabled","_enabled","value","_toggleAnchorTabIndex","deferAnchors","attachAnchors","destroy","startAnchor","endAnchor","removeEventListener","remove","runOutsideAngular","_createAnchor","addEventListener","parentNode","insertBefore","nextSibling","focusInitialElementWhenReady","options","Promise","resolve","_executeOnStable","focusInitialElement","focusFirstTabbableElementWhenReady","focusLastTabbableElementWhenReady","_getRegionBoundary","bound","markers","querySelectorAll","ngDevMode","i","console","warn","_getFirstTabbableElement","_getLastTabbableElement","redirectToElement","querySelector","focusableChild","focus","hasAttached","root","children","tabbableChild","nodeType","ELEMENT_NODE","anchor","createElement","classList","add","setAttribute","isEnabled","removeAttribute","toggleAnchors","fn","afterNextRender","injector","setTimeout","FocusTrapFactory","NgZone","DOCUMENT","Injector","_CdkPrivateStyleLoader","load","_VisuallyHiddenLoader","create","deferCaptureElements","CdkTrapFocus","_elementRef","ElementRef","_focusTrapFactory","focusTrap","_previouslyFocusedElement","autoCapture","platform","nativeElement","ngOnDestroy","ngAfterContentInit","_captureFocus","ngDoCheck","ngOnChanges","changes","autoCaptureChange","firstChange","_getFocusedElementPierceShadowDom","Directive","isStandalone","selector","inputs","booleanAttribute","exportAs","usesOnChanges","args","Input","alias","transform","LIVE_ANNOUNCER_ELEMENT_TOKEN","InjectionToken","factory","LIVE_ANNOUNCER_DEFAULT_OPTIONS","uniqueIds","LiveAnnouncer","_defaultOptions","optional","_liveElement","_sanitizer","DomSanitizer","_previousTimeout","_currentPromise","_currentResolve","elementToken","_createLiveElement","announce","message","defaultOptions","politeness","duration","clear","clearTimeout","id","_exposeAnnouncerToModals","textContent","_setInnerHtml","elementClass","previousElements","getElementsByClassName","liveEl","body","appendChild","modals","modal","ariaOwns","indexOf","CdkAriaLive","_liveAnnouncer","_contentObserver","ContentObserver","_politeness","_subscription","unsubscribe","observe","subscribe","elementText","_previousAnnouncedText","HighContrastMode","BLACK_ON_WHITE_CSS_CLASS","WHITE_ON_BLACK_CSS_CLASS","HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS","HighContrastModeDetector","_hasCheckedHighContrastMode","_breakpointSubscription","BreakpointObserver","_applyBodyHighContrastModeCssClasses","getHighContrastMode","NONE","testElement","style","backgroundColor","position","documentWindow","computedStyle","computedColor","replace","WHITE_ON_BLACK","BLACK_ON_WHITE","bodyClasses","mode","A11yModule","NgModule","ɵmod","ɵɵngDeclareNgModule","imports","ObserversModule","CdkMonitorFocus","exports","ɵinj","ɵɵngDeclareInjector"],"mappings":"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"}
|