source: trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/a11y.js.map@ e29cc2e

Last change on this file since e29cc2e was e29cc2e, checked in by Ema <ema_spirova@…>, 3 years ago

primeNG components

  • Property mode set to 100644
File size: 173.7 KB
Line 
1{"version":3,"file":"a11y.js","sources":["../../../../../../src/cdk/a11y/aria-describer/aria-reference.ts","../../../../../../src/cdk/a11y/aria-describer/aria-describer.ts","../../../../../../src/cdk/a11y/key-manager/list-key-manager.ts","../../../../../../src/cdk/a11y/key-manager/activedescendant-key-manager.ts","../../../../../../src/cdk/a11y/key-manager/focus-key-manager.ts","../../../../../../src/cdk/a11y/interactivity-checker/interactivity-checker.ts","../../../../../../src/cdk/a11y/focus-trap/focus-trap.ts","../../../../../../src/cdk/a11y/focus-trap/configurable-focus-trap.ts","../../../../../../src/cdk/a11y/focus-trap/configurable-focus-trap-config.ts","../../../../../../src/cdk/a11y/focus-trap/focus-trap-inert-strategy.ts","../../../../../../src/cdk/a11y/focus-trap/polyfill.ts","../../../../../../src/cdk/a11y/focus-trap/event-listener-inert-strategy.ts","../../../../../../src/cdk/a11y/focus-trap/focus-trap-manager.ts","../../../../../../src/cdk/a11y/focus-trap/configurable-focus-trap-factory.ts","../../../../../../src/cdk/a11y/fake-event-detection.ts","../../../../../../src/cdk/a11y/input-modality/input-modality-detector.ts","../../../../../../src/cdk/a11y/live-announcer/live-announcer-tokens.ts","../../../../../../src/cdk/a11y/live-announcer/live-announcer.ts","../../../../../../src/cdk/a11y/focus-monitor/focus-monitor.ts","../../../../../../src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.ts","../../../../../../src/cdk/a11y/a11y-module.ts","../../../../../../src/cdk/a11y/public-api.ts","../../../../../../src/cdk/a11y/index.ts"],"names":["observableOf"],"mappings":"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","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.io/license\n */\n\n/** IDs are delimited by an empty space, as per the spec. */\nconst ID_DELIMITER = ' ';\n\n/**\n * Adds the given ID to the specified ARIA attribute on an element.\n * Used for attributes such as aria-labelledby, aria-owns, etc.\n */\nexport function addAriaReferencedId(el: Element, attr: string, id: string) {\n const ids = getAriaReferenceIds(el, attr);\n if (ids.some(existingId => existingId.trim() == id.trim())) { return; }\n ids.push(id.trim());\n\n el.setAttribute(attr, ids.join(ID_DELIMITER));\n}\n\n/**\n * Removes the given ID from the specified ARIA attribute on an element.\n * Used for attributes such as aria-labelledby, aria-owns, etc.\n */\nexport function removeAriaReferencedId(el: Element, attr: string, id: string) {\n const ids = getAriaReferenceIds(el, attr);\n const filteredIds = ids.filter(val => val != id.trim());\n\n if (filteredIds.length) {\n el.setAttribute(attr, filteredIds.join(ID_DELIMITER));\n } else {\n el.removeAttribute(attr);\n }\n}\n\n/**\n * Gets the list of IDs referenced by the given ARIA attribute on an element.\n * Used for attributes such as aria-labelledby, aria-owns, etc.\n */\nexport function getAriaReferenceIds(el: Element, attr: string): string[] {\n // Get string array of all individual ids (whitespace delimited) in the attribute value\n return (el.getAttribute(attr) || '').match(/\\S+/g) || [];\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.io/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {addAriaReferencedId, getAriaReferenceIds, removeAriaReferencedId} from './aria-reference';\n\n\n/**\n * Interface used to register message elements and keep a count of how many registrations have\n * the same message and the reference to the message element used for the `aria-describedby`.\n */\nexport interface RegisteredMessage {\n /** The element containing the message. */\n messageElement: Element;\n\n /** The number of elements that reference this message element via `aria-describedby`. */\n referenceCount: number;\n}\n\n/** ID used for the body container where all messages are appended. */\nexport const MESSAGES_CONTAINER_ID = 'cdk-describedby-message-container';\n\n/** ID prefix used for each created message element. */\nexport const CDK_DESCRIBEDBY_ID_PREFIX = 'cdk-describedby-message';\n\n/** Attribute given to each host element that is described by a message element. */\nexport const CDK_DESCRIBEDBY_HOST_ATTRIBUTE = 'cdk-describedby-host';\n\n/** Global incremental identifier for each registered message element. */\nlet nextId = 0;\n\n/** Global map of all registered message elements that have been placed into the document. */\nconst messageRegistry = new Map<string|Element, RegisteredMessage>();\n\n/** Container for all registered messages. */\nlet messagesContainer: HTMLElement | null = null;\n\n/**\n * Utility that creates visually hidden elements with a message content. Useful for elements that\n * want to use aria-describedby to further describe themselves without adding additional visual\n * content.\n */\n@Injectable({providedIn: 'root'})\nexport class AriaDescriber implements OnDestroy {\n private _document: Document;\n\n constructor(\n @Inject(DOCUMENT) _document: any) {\n this._document = _document;\n }\n\n /**\n * Adds to the host element an aria-describedby reference to a hidden element that contains\n * the message. If the same message has already been registered, then it will reuse the created\n * message element.\n */\n describe(hostElement: Element, message: string, role?: string): void;\n\n /**\n * Adds to the host element an aria-describedby reference to an already-existing message element.\n */\n describe(hostElement: Element, message: HTMLElement): void;\n\n describe(hostElement: Element, message: string|HTMLElement, role?: string): void {\n if (!this._canBeDescribed(hostElement, message)) {\n return;\n }\n\n const key = getKey(message, role);\n\n if (typeof message !== 'string') {\n // We need to ensure that the element has an ID.\n setMessageId(message);\n messageRegistry.set(key, {messageElement: message, referenceCount: 0});\n } else if (!messageRegistry.has(key)) {\n this._createMessageElement(message, role);\n }\n\n if (!this._isElementDescribedByMessage(hostElement, key)) {\n this._addMessageReference(hostElement, key);\n }\n }\n\n /** Removes the host element's aria-describedby reference to the message. */\n removeDescription(hostElement: Element, message: string, role?: string): void;\n\n /** Removes the host element's aria-describedby reference to the message element. */\n removeDescription(hostElement: Element, message: HTMLElement): void;\n\n removeDescription(hostElement: Element, message: string|HTMLElement, role?: string): void {\n if (!message || !this._isElementNode(hostElement)) {\n return;\n }\n\n const key = getKey(message, role);\n\n if (this._isElementDescribedByMessage(hostElement, key)) {\n this._removeMessageReference(hostElement, key);\n }\n\n // If the message is a string, it means that it's one that we created for the\n // consumer so we can remove it safely, otherwise we should leave it in place.\n if (typeof message === 'string') {\n const registeredMessage = messageRegistry.get(key);\n if (registeredMessage && registeredMessage.referenceCount === 0) {\n this._deleteMessageElement(key);\n }\n }\n\n if (messagesContainer && messagesContainer.childNodes.length === 0) {\n this._deleteMessagesContainer();\n }\n }\n\n /** Unregisters all created message elements and removes the message container. */\n ngOnDestroy() {\n const describedElements =\n this._document.querySelectorAll(`[${CDK_DESCRIBEDBY_HOST_ATTRIBUTE}]`);\n\n for (let i = 0; i < describedElements.length; i++) {\n this._removeCdkDescribedByReferenceIds(describedElements[i]);\n describedElements[i].removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);\n }\n\n if (messagesContainer) {\n this._deleteMessagesContainer();\n }\n\n messageRegistry.clear();\n }\n\n /**\n * Creates a new element in the visually hidden message container element with the message\n * as its content and adds it to the message registry.\n */\n private _createMessageElement(message: string, role?: string) {\n const messageElement = this._document.createElement('div');\n setMessageId(messageElement);\n messageElement.textContent = message;\n\n if (role) {\n messageElement.setAttribute('role', role);\n }\n\n this._createMessagesContainer();\n messagesContainer!.appendChild(messageElement);\n messageRegistry.set(getKey(message, role), {messageElement, referenceCount: 0});\n }\n\n /** Deletes the message element from the global messages container. */\n private _deleteMessageElement(key: string|Element) {\n const registeredMessage = messageRegistry.get(key);\n const messageElement = registeredMessage && registeredMessage.messageElement;\n if (messagesContainer && messageElement) {\n messagesContainer.removeChild(messageElement);\n }\n messageRegistry.delete(key);\n }\n\n /** Creates the global container for all aria-describedby messages. */\n private _createMessagesContainer() {\n if (!messagesContainer) {\n const preExistingContainer = this._document.getElementById(MESSAGES_CONTAINER_ID);\n\n // When going from the server to the client, we may end up in a situation where there's\n // already a container on the page, but we don't have a reference to it. Clear the\n // old container so we don't get duplicates. Doing this, instead of emptying the previous\n // container, should be slightly faster.\n if (preExistingContainer && preExistingContainer.parentNode) {\n preExistingContainer.parentNode.removeChild(preExistingContainer);\n }\n\n messagesContainer = this._document.createElement('div');\n messagesContainer.id = MESSAGES_CONTAINER_ID;\n // We add `visibility: hidden` in order to prevent text in this container from\n // being searchable by the browser's Ctrl + F functionality.\n // Screen-readers will still read the description for elements with aria-describedby even\n // when the description element is not visible.\n messagesContainer.style.visibility = 'hidden';\n // Even though we use `visibility: hidden`, we still apply `cdk-visually-hidden` so that\n // the description element doesn't impact page layout.\n messagesContainer.classList.add('cdk-visually-hidden');\n\n this._document.body.appendChild(messagesContainer);\n }\n }\n\n /** Deletes the global messages container. */\n private _deleteMessagesContainer() {\n if (messagesContainer && messagesContainer.parentNode) {\n messagesContainer.parentNode.removeChild(messagesContainer);\n messagesContainer = null;\n }\n }\n\n /** Removes all cdk-describedby messages that are hosted through the element. */\n private _removeCdkDescribedByReferenceIds(element: Element) {\n // Remove all aria-describedby reference IDs that are prefixed by CDK_DESCRIBEDBY_ID_PREFIX\n const originalReferenceIds = getAriaReferenceIds(element, 'aria-describedby')\n .filter(id => id.indexOf(CDK_DESCRIBEDBY_ID_PREFIX) != 0);\n element.setAttribute('aria-describedby', originalReferenceIds.join(' '));\n }\n\n /**\n * Adds a message reference to the element using aria-describedby and increments the registered\n * message's reference count.\n */\n private _addMessageReference(element: Element, key: string|Element) {\n const registeredMessage = messageRegistry.get(key)!;\n\n // Add the aria-describedby reference and set the\n // describedby_host attribute to mark the element.\n addAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);\n element.setAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE, '');\n registeredMessage.referenceCount++;\n }\n\n /**\n * Removes a message reference from the element using aria-describedby\n * and decrements the registered message's reference count.\n */\n private _removeMessageReference(element: Element, key: string|Element) {\n const registeredMessage = messageRegistry.get(key)!;\n registeredMessage.referenceCount--;\n\n removeAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);\n element.removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);\n }\n\n /** Returns true if the element has been described by the provided message ID. */\n private _isElementDescribedByMessage(element: Element, key: string|Element): boolean {\n const referenceIds = getAriaReferenceIds(element, 'aria-describedby');\n const registeredMessage = messageRegistry.get(key);\n const messageId = registeredMessage && registeredMessage.messageElement.id;\n\n return !!messageId && referenceIds.indexOf(messageId) != -1;\n }\n\n /** Determines whether a message can be described on a particular element. */\n private _canBeDescribed(element: Element, message: string|HTMLElement|void): boolean {\n if (!this._isElementNode(element)) {\n return false;\n }\n\n if (message && typeof message === 'object') {\n // We'd have to make some assumptions about the description element's text, if the consumer\n // passed in an element. Assume that if an element is passed in, the consumer has verified\n // that it can be used as a description.\n return true;\n }\n\n const trimmedMessage = message == null ? '' : `${message}`.trim();\n const ariaLabel = element.getAttribute('aria-label');\n\n // We shouldn't set descriptions if they're exactly the same as the `aria-label` of the\n // element, because screen readers will end up reading out the same text twice in a row.\n return trimmedMessage ? (!ariaLabel || ariaLabel.trim() !== trimmedMessage) : false;\n }\n\n /** Checks whether a node is an Element node. */\n private _isElementNode(element: Node): element is Element {\n return element.nodeType === this._document.ELEMENT_NODE;\n }\n}\n\n/** Gets a key that can be used to look messages up in the registry. */\nfunction getKey(message: string|Element, role?: string): string|Element {\n return typeof message === 'string' ? `${role || ''}/${message}` : message;\n}\n\n/** Assigns a unique ID to an element, if it doesn't have one already. */\nfunction setMessageId(element: HTMLElement) {\n if (!element.id) {\n element.id = `${CDK_DESCRIBEDBY_ID_PREFIX}-${nextId++}`;\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.io/license\n */\n\nimport {QueryList} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {\n UP_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n RIGHT_ARROW,\n TAB,\n A,\n Z,\n ZERO,\n NINE,\n hasModifierKey,\n HOME,\n END,\n} from '@angular/cdk/keycodes';\nimport {debounceTime, filter, map, tap} from 'rxjs/operators';\n\n/** This interface is for items that can be passed to a ListKeyManager. */\nexport interface ListKeyManagerOption {\n /** Whether the option is disabled. */\n disabled?: boolean;\n\n /** Gets the label for this option. */\n getLabel?(): string;\n}\n\n/** Modifier keys handled by the ListKeyManager. */\nexport type ListKeyManagerModifierKey = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey';\n\n/**\n * This class manages keyboard events for selectable lists. If you pass it a query list\n * of items, it will set the active item correctly when arrow events occur.\n */\nexport class ListKeyManager<T extends ListKeyManagerOption> {\n private _activeItemIndex = -1;\n private _activeItem: T | null = null;\n private _wrap = false;\n private readonly _letterKeyStream = new Subject<string>();\n private _typeaheadSubscription = Subscription.EMPTY;\n private _vertical = true;\n private _horizontal: 'ltr' | 'rtl' | null;\n private _allowedModifierKeys: ListKeyManagerModifierKey[] = [];\n private _homeAndEnd = false;\n\n /**\n * Predicate function that can be used to check whether an item should be skipped\n * by the key manager. By default, disabled items are skipped.\n */\n private _skipPredicateFn = (item: T) => item.disabled;\n\n // Buffer for the letters that the user has pressed when the typeahead option is turned on.\n private _pressedLetters: string[] = [];\n\n constructor(private _items: QueryList<T> | T[]) {\n // We allow for the items to be an array because, in some cases, the consumer may\n // not have access to a QueryList of the items they want to manage (e.g. when the\n // items aren't being collected via `ViewChildren` or `ContentChildren`).\n if (_items instanceof QueryList) {\n _items.changes.subscribe((newItems: QueryList<T>) => {\n if (this._activeItem) {\n const itemArray = newItems.toArray();\n const newIndex = itemArray.indexOf(this._activeItem);\n\n if (newIndex > -1 && newIndex !== this._activeItemIndex) {\n this._activeItemIndex = newIndex;\n }\n }\n });\n }\n }\n\n /**\n * Stream that emits any time the TAB key is pressed, so components can react\n * when focus is shifted off of the list.\n */\n readonly tabOut = new Subject<void>();\n\n /** Stream that emits whenever the active item of the list manager changes. */\n readonly change = new Subject<number>();\n\n /**\n * Sets the predicate function that determines which items should be skipped by the\n * list key manager.\n * @param predicate Function that determines whether the given item should be skipped.\n */\n skipPredicate(predicate: (item: T) => boolean): this {\n this._skipPredicateFn = predicate;\n return this;\n }\n\n /**\n * Configures wrapping mode, which determines whether the active item will wrap to\n * the other end of list when there are no more items in the given direction.\n * @param shouldWrap Whether the list should wrap when reaching the end.\n */\n withWrap(shouldWrap = true): this {\n this._wrap = shouldWrap;\n return this;\n }\n\n /**\n * Configures whether the key manager should be able to move the selection vertically.\n * @param enabled Whether vertical selection should be enabled.\n */\n withVerticalOrientation(enabled: boolean = true): this {\n this._vertical = enabled;\n return this;\n }\n\n /**\n * Configures the key manager to move the selection horizontally.\n * Passing in `null` will disable horizontal movement.\n * @param direction Direction in which the selection can be moved.\n */\n withHorizontalOrientation(direction: 'ltr' | 'rtl' | null): this {\n this._horizontal = direction;\n return this;\n }\n\n /**\n * Modifier keys which are allowed to be held down and whose default actions will be prevented\n * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys.\n */\n withAllowedModifierKeys(keys: ListKeyManagerModifierKey[]): this {\n this._allowedModifierKeys = keys;\n return this;\n }\n\n /**\n * Turns on typeahead mode which allows users to set the active item by typing.\n * @param debounceInterval Time to wait after the last keystroke before setting the active item.\n */\n withTypeAhead(debounceInterval: number = 200): this {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && (this._items.length &&\n this._items.some(item => typeof item.getLabel !== 'function'))) {\n throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.');\n }\n\n this._typeaheadSubscription.unsubscribe();\n\n // Debounce the presses of non-navigational keys, collect the ones that correspond to letters\n // and convert those letters back into a string. Afterwards find the first item that starts\n // with that string and select it.\n this._typeaheadSubscription = this._letterKeyStream.pipe(\n tap(letter => this._pressedLetters.push(letter)),\n debounceTime(debounceInterval),\n filter(() => this._pressedLetters.length > 0),\n map(() => this._pressedLetters.join(''))\n ).subscribe(inputString => {\n const items = this._getItemsArray();\n\n // Start at 1 because we want to start searching at the item immediately\n // following the current active item.\n for (let i = 1; i < items.length + 1; i++) {\n const index = (this._activeItemIndex + i) % items.length;\n const item = items[index];\n\n if (!this._skipPredicateFn(item) &&\n item.getLabel!().toUpperCase().trim().indexOf(inputString) === 0) {\n\n this.setActiveItem(index);\n break;\n }\n }\n\n this._pressedLetters = [];\n });\n\n return this;\n }\n\n /**\n * Configures the key manager to activate the first and last items\n * respectively when the Home or End key is pressed.\n * @param enabled Whether pressing the Home or End key activates the first/last item.\n */\n withHomeAndEnd(enabled: boolean = true): this {\n this._homeAndEnd = enabled;\n return this;\n }\n\n /**\n * Sets the active item to the item at the index specified.\n * @param index The index of the item to be set as active.\n */\n setActiveItem(index: number): void;\n\n /**\n * Sets the active item to the specified item.\n * @param item The item to be set as active.\n */\n setActiveItem(item: T): void;\n\n setActiveItem(item: any): void {\n const previousActiveItem = this._activeItem;\n\n this.updateActiveItem(item);\n\n if (this._activeItem !== previousActiveItem) {\n this.change.next(this._activeItemIndex);\n }\n }\n\n /**\n * Sets the active item depending on the key event passed in.\n * @param event Keyboard event to be used for determining which element should be active.\n */\n onKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const modifiers: ListKeyManagerModifierKey[] = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];\n const isModifierAllowed = modifiers.every(modifier => {\n return !event[modifier] || this._allowedModifierKeys.indexOf(modifier) > -1;\n });\n\n switch (keyCode) {\n case TAB:\n this.tabOut.next();\n return;\n\n case DOWN_ARROW:\n if (this._vertical && isModifierAllowed) {\n this.setNextItemActive();\n break;\n } else {\n return;\n }\n\n case UP_ARROW:\n if (this._vertical && isModifierAllowed) {\n this.setPreviousItemActive();\n break;\n } else {\n return;\n }\n\n case RIGHT_ARROW:\n if (this._horizontal && isModifierAllowed) {\n this._horizontal === 'rtl' ? this.setPreviousItemActive() : this.setNextItemActive();\n break;\n } else {\n return;\n }\n\n case LEFT_ARROW:\n if (this._horizontal && isModifierAllowed) {\n this._horizontal === 'rtl' ? this.setNextItemActive() : this.setPreviousItemActive();\n break;\n } else {\n return;\n }\n\n case HOME:\n if (this._homeAndEnd && isModifierAllowed) {\n this.setFirstItemActive();\n break;\n } else {\n return;\n }\n\n case END:\n if (this._homeAndEnd && isModifierAllowed) {\n this.setLastItemActive();\n break;\n } else {\n return;\n }\n\n default:\n if (isModifierAllowed || hasModifierKey(event, 'shiftKey')) {\n // Attempt to use the `event.key` which also maps it to the user's keyboard language,\n // otherwise fall back to resolving alphanumeric characters via the keyCode.\n if (event.key && event.key.length === 1) {\n this._letterKeyStream.next(event.key.toLocaleUpperCase());\n } else if ((keyCode >= A && keyCode <= Z) || (keyCode >= ZERO && keyCode <= NINE)) {\n this._letterKeyStream.next(String.fromCharCode(keyCode));\n }\n }\n\n // Note that we return here, in order to avoid preventing\n // the default action of non-navigational keys.\n return;\n }\n\n this._pressedLetters = [];\n event.preventDefault();\n }\n\n /** Index of the currently active item. */\n get activeItemIndex(): number | null {\n return this._activeItemIndex;\n }\n\n /** The active item. */\n get activeItem(): T | null {\n return this._activeItem;\n }\n\n /** Gets whether the user is currently typing into the manager using the typeahead feature. */\n isTyping(): boolean {\n return this._pressedLetters.length > 0;\n }\n\n /** Sets the active item to the first enabled item in the list. */\n setFirstItemActive(): void {\n this._setActiveItemByIndex(0, 1);\n }\n\n /** Sets the active item to the last enabled item in the list. */\n setLastItemActive(): void {\n this._setActiveItemByIndex(this._items.length - 1, -1);\n }\n\n /** Sets the active item to the next enabled item in the list. */\n setNextItemActive(): void {\n this._activeItemIndex < 0 ? this.setFirstItemActive() : this._setActiveItemByDelta(1);\n }\n\n /** Sets the active item to a previous enabled item in the list. */\n setPreviousItemActive(): void {\n this._activeItemIndex < 0 && this._wrap ? this.setLastItemActive()\n : this._setActiveItemByDelta(-1);\n }\n\n /**\n * Allows setting the active without any other effects.\n * @param index Index of the item to be set as active.\n */\n updateActiveItem(index: number): void;\n\n /**\n * Allows setting the active item without any other effects.\n * @param item Item to be set as active.\n */\n updateActiveItem(item: T): void;\n\n updateActiveItem(item: any): void {\n const itemArray = this._getItemsArray();\n const index = typeof item === 'number' ? item : itemArray.indexOf(item);\n const activeItem = itemArray[index];\n\n // Explicitly check for `null` and `undefined` because other falsy values are valid.\n this._activeItem = activeItem == null ? null : activeItem;\n this._activeItemIndex = index;\n }\n\n /**\n * This method sets the active item, given a list of items and the delta between the\n * currently active item and the new active item. It will calculate differently\n * depending on whether wrap mode is turned on.\n */\n private _setActiveItemByDelta(delta: -1 | 1): void {\n this._wrap ? this._setActiveInWrapMode(delta) : this._setActiveInDefaultMode(delta);\n }\n\n /**\n * Sets the active item properly given \"wrap\" mode. In other words, it will continue to move\n * down the list until it finds an item that is not disabled, and it will wrap if it\n * encounters either end of the list.\n */\n private _setActiveInWrapMode(delta: -1 | 1): void {\n const items = this._getItemsArray();\n\n for (let i = 1; i <= items.length; i++) {\n const index = (this._activeItemIndex + (delta * i) + items.length) % items.length;\n const item = items[index];\n\n if (!this._skipPredicateFn(item)) {\n this.setActiveItem(index);\n return;\n }\n }\n }\n\n /**\n * Sets the active item properly given the default mode. In other words, it will\n * continue to move down the list until it finds an item that is not disabled. If\n * it encounters either end of the list, it will stop and not wrap.\n */\n private _setActiveInDefaultMode(delta: -1 | 1): void {\n this._setActiveItemByIndex(this._activeItemIndex + delta, delta);\n }\n\n /**\n * Sets the active item to the first enabled item starting at the index specified. If the\n * item is disabled, it will move in the fallbackDelta direction until it either\n * finds an enabled item or encounters the end of the list.\n */\n private _setActiveItemByIndex(index: number, fallbackDelta: -1 | 1): void {\n const items = this._getItemsArray();\n\n if (!items[index]) {\n return;\n }\n\n while (this._skipPredicateFn(items[index])) {\n index += fallbackDelta;\n\n if (!items[index]) {\n return;\n }\n }\n\n this.setActiveItem(index);\n }\n\n /** Returns the items as an array. */\n private _getItemsArray(): T[] {\n return this._items instanceof QueryList ? this._items.toArray() : this._items;\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.io/license\n */\n\nimport {ListKeyManager, ListKeyManagerOption} from './list-key-manager';\n\n/**\n * This is the interface for highlightable items (used by the ActiveDescendantKeyManager).\n * Each item must know how to style itself as active or inactive and whether or not it is\n * currently disabled.\n */\nexport interface Highlightable extends ListKeyManagerOption {\n /** Applies the styles for an active item to this item. */\n setActiveStyles(): void;\n\n /** Applies the styles for an inactive item to this item. */\n setInactiveStyles(): void;\n}\n\nexport class ActiveDescendantKeyManager<T> extends ListKeyManager<Highlightable & T> {\n\n /**\n * Sets the active item to the item at the specified index and adds the\n * active styles to the newly active item. Also removes active styles\n * from the previously active item.\n * @param index Index of the item to be set as active.\n */\n override setActiveItem(index: number): void;\n\n /**\n * Sets the active item to the item to the specified one and adds the\n * active styles to the it. Also removes active styles from the\n * previously active item.\n * @param item Item to be set as active.\n */\n override setActiveItem(item: T): void;\n\n override setActiveItem(index: any): void {\n if (this.activeItem) {\n this.activeItem.setInactiveStyles();\n }\n super.setActiveItem(index);\n if (this.activeItem) {\n this.activeItem.setActiveStyles();\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.io/license\n */\n\nimport {ListKeyManager, ListKeyManagerOption} from './list-key-manager';\nimport {FocusOrigin} from '../focus-monitor/focus-monitor';\n\n/**\n * This is the interface for focusable items (used by the FocusKeyManager).\n * Each item must know how to focus itself, whether or not it is currently disabled\n * and be able to supply its label.\n */\nexport interface FocusableOption extends ListKeyManagerOption {\n /** Focuses the `FocusableOption`. */\n focus(origin?: FocusOrigin): void;\n}\n\nexport class FocusKeyManager<T> extends ListKeyManager<FocusableOption & T> {\n private _origin: FocusOrigin = 'program';\n\n /**\n * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls.\n * @param origin Focus origin to be used when focusing items.\n */\n setFocusOrigin(origin: FocusOrigin): this {\n this._origin = origin;\n return this;\n }\n\n /**\n * Sets the active item to the item at the specified\n * index and focuses the newly active item.\n * @param index Index of the item to be set as active.\n */\n override setActiveItem(index: number): void;\n\n /**\n * Sets the active item to the item that is specified and focuses it.\n * @param item Item to be set as active.\n */\n override setActiveItem(item: T): void;\n\n override setActiveItem(item: any): void {\n super.setActiveItem(item);\n\n if (this.activeItem) {\n this.activeItem.focus(this._origin);\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.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Injectable} 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 is is focusable or\n * tabbable.\n */\n@Injectable({providedIn: 'root'})\nexport class InteractivityChecker {\n\n constructor(private _platform: Platform) {}\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 isPotentiallyFocusable(element) && !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 !!(element.offsetWidth || element.offsetHeight ||\n (typeof element.getClientRects === 'function' && element.getClientRects().length));\n}\n\n/** Gets whether an element's */\nfunction isNativeFormElement(element: Node) {\n let nodeName = element.nodeName.toLowerCase();\n return nodeName === 'input' ||\n nodeName === 'select' ||\n nodeName === 'button' ||\n nodeName === 'textarea';\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\n // IE11 parses tabindex=\"\" as the value \"-32768\"\n if (tabIndex == '-32768') {\n return false;\n }\n\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 inputType === 'text'\n || inputType === 'password'\n || nodeName === 'select'\n || nodeName === 'textarea';\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 isNativeFormElement(element) ||\n isAnchorWithHref(element) ||\n element.hasAttribute('contenteditable') ||\n hasValidTabIndex(element);\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.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n Inject,\n Injectable,\n Input,\n NgZone,\n OnDestroy,\n DoCheck,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport {take} from 'rxjs/operators';\nimport {InteractivityChecker} from '../interactivity-checker/interactivity-checker';\n\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 *\n * @deprecated Use `ConfigurableFocusTrap` instead.\n * @breaking-change 11.0.0\n */\nexport class FocusTrap {\n private _startAnchor: HTMLElement | null;\n private _endAnchor: HTMLElement | 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 { return this._enabled; }\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\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\n if (startAnchor.parentNode) {\n startAnchor.parentNode.removeChild(startAnchor);\n }\n }\n\n if (endAnchor) {\n endAnchor.removeEventListener('focus', this.endAnchorListener);\n\n if (endAnchor.parentNode) {\n endAnchor.parentNode.removeChild(endAnchor);\n }\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 either focuses the first element that the\n * user specified, or 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 let markers = this._element.querySelectorAll(`[cdk-focus-region-${bound}], ` +\n `[cdkFocusRegion${bound}], ` +\n `[cdk-focus-${bound}]`) as NodeListOf<HTMLElement>;\n\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(`Found use of deprecated attribute 'cdk-focus-${bound}', ` +\n `use 'cdkFocusRegion${bound}' instead. The deprecated ` +\n `attribute will be removed in 8.0.0.`, markers[i]);\n } else if (markers[i].hasAttribute(`cdk-focus-region-${bound}`)) {\n console.warn(`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.`, markers[i]);\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] : 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(`[cdk-focus-initial], ` +\n `[cdkFocusInitial]`) as HTMLElement;\n\n if (redirectToElement) {\n // @breaking-change 8.0.0\n if (redirectToElement.hasAttribute(`cdk-focus-initial`)) {\n console.warn(`Found use of deprecated attribute 'cdk-focus-initial', ` +\n `use 'cdkFocusInitial' instead. The deprecated attribute ` +\n `will be removed in 8.0.0`, redirectToElement);\n }\n\n // Warn the consumer if the element they've pointed to\n // isn't focusable, when not in production mode.\n if ((typeof ngDevMode === 'undefined' || ngDevMode) &&\n !this._checker.isFocusable(redirectToElement)) {\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 // Iterate in DOM order. Note that IE doesn't have `children` for SVG so we fall\n // back to `childNodes` which includes text nodes, comments etc.\n let children = root.children || root.childNodes;\n\n for (let i = 0; i < children.length; i++) {\n let tabbableChild = 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 let children = root.children || root.childNodes;\n\n for (let i = children.length - 1; i >= 0; i--) {\n let tabbableChild = 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 if (this._ngZone.isStable) {\n fn();\n } else {\n this._ngZone.onStable.pipe(take(1)).subscribe(fn);\n }\n }\n}\n\n/**\n * Factory that allows easy instantiation of focus traps.\n * @deprecated Use `ConfigurableFocusTrapFactory` instead.\n * @breaking-change 11.0.0\n */\n@Injectable({providedIn: 'root'})\nexport class FocusTrapFactory {\n private _document: Document;\n\n constructor(\n private _checker: InteractivityChecker,\n private _ngZone: NgZone,\n @Inject(DOCUMENT) _document: any) {\n\n this._document = _document;\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, this._checker, this._ngZone, this._document, deferCaptureElements);\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 /** Underlying FocusTrap instance. */\n focusTrap: FocusTrap;\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('cdkTrapFocus')\n get enabled(): boolean { return this.focusTrap.enabled; }\n set enabled(value: boolean) { this.focusTrap.enabled = coerceBooleanProperty(value); }\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('cdkTrapFocusAutoCapture')\n get autoCapture(): boolean { return this._autoCapture; }\n set autoCapture(value: boolean) { this._autoCapture = coerceBooleanProperty(value); }\n private _autoCapture: boolean;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _focusTrapFactory: FocusTrapFactory,\n /**\n * @deprecated No longer being used. To be removed.\n * @breaking-change 13.0.0\n */\n @Inject(DOCUMENT) _document: any) {\n this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);\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.hasAttached()) {\n this.focusTrap.attachAnchors();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const autoCaptureChange = changes['autoCapture'];\n\n if (autoCaptureChange && !autoCaptureChange.firstChange && this.autoCapture &&\n this.focusTrap.hasAttached()) {\n this._captureFocus();\n }\n }\n\n private _captureFocus() {\n this._previouslyFocusedElement = _getFocusedElementPierceShadowDom();\n this.focusTrap.focusInitialElementWhenReady();\n }\n\n static ngAcceptInputType_enabled: BooleanInput;\n static ngAcceptInputType_autoCapture: BooleanInput;\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.io/license\n */\n\nimport {NgZone} from '@angular/core';\nimport {InteractivityChecker} from '../interactivity-checker/interactivity-checker';\nimport {FocusTrap} from './focus-trap';\nimport {FocusTrapManager, ManagedFocusTrap} from './focus-trap-manager';\nimport {FocusTrapInertStrategy} from './focus-trap-inert-strategy';\nimport {ConfigurableFocusTrapConfig} from './configurable-focus-trap-config';\n\n/**\n * Class that allows for trapping focus within a DOM element.\n *\n * This class uses a strategy pattern that determines how it traps focus.\n * See FocusTrapInertStrategy.\n */\nexport class ConfigurableFocusTrap extends FocusTrap implements ManagedFocusTrap {\n /** Whether the FocusTrap is enabled. */\n override get enabled(): boolean { return this._enabled; }\n override set enabled(value: boolean) {\n this._enabled = value;\n if (this._enabled) {\n this._focusTrapManager.register(this);\n } else {\n this._focusTrapManager.deregister(this);\n }\n }\n\n constructor(\n _element: HTMLElement,\n _checker: InteractivityChecker,\n _ngZone: NgZone,\n _document: Document,\n private _focusTrapManager: FocusTrapManager,\n private _inertStrategy: FocusTrapInertStrategy,\n config: ConfigurableFocusTrapConfig) {\n super(_element, _checker, _ngZone, _document, config.defer);\n this._focusTrapManager.register(this);\n }\n\n /** Notifies the FocusTrapManager that this FocusTrap will be destroyed. */\n override destroy() {\n this._focusTrapManager.deregister(this);\n super.destroy();\n }\n\n /** @docs-private Implemented as part of ManagedFocusTrap. */\n _enable() {\n this._inertStrategy.preventFocus(this);\n this.toggleAnchors(true);\n }\n\n /** @docs-private Implemented as part of ManagedFocusTrap. */\n _disable() {\n this._inertStrategy.allowFocus(this);\n this.toggleAnchors(false);\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.io/license\n */\n\n/**\n * Options for creating a ConfigurableFocusTrap.\n */\nexport interface ConfigurableFocusTrapConfig {\n /**\n * Whether to defer the creation of FocusTrap elements to be done manually by the user.\n */\n defer: boolean;\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.io/license\n */\nimport {\n InjectionToken,\n} from '@angular/core';\nimport {FocusTrap} from './focus-trap';\n\n/** The injection token used to specify the inert strategy. */\nexport const FOCUS_TRAP_INERT_STRATEGY =\n new InjectionToken<FocusTrapInertStrategy>('FOCUS_TRAP_INERT_STRATEGY');\n\n/**\n * A strategy that dictates how FocusTrap should prevent elements\n * outside of the FocusTrap from being focused.\n */\nexport interface FocusTrapInertStrategy {\n /** Makes all elements outside focusTrap unfocusable. */\n preventFocus(focusTrap: FocusTrap): void;\n /** Reverts elements made unfocusable by preventFocus to their previous state. */\n allowFocus(focusTrap: FocusTrap): void;\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.io/license\n */\n\n/** IE 11 compatible closest implementation that is able to start from non-Element Nodes. */\nexport function closest(element: EventTarget|Element|null|undefined, selector: string):\n Element|null {\n if (!(element instanceof Node)) { return null; }\n\n let curr: Node|null = element;\n while (curr != null && !(curr instanceof Element)) {\n curr = curr.parentNode;\n }\n\n return curr && (hasNativeClosest ?\n curr.closest(selector) : polyfillClosest(curr, selector)) as Element|null;\n}\n\n/** Polyfill for browsers without Element.closest. */\nfunction polyfillClosest(element: Element, selector: string): Element|null {\n let curr: Node|null = element;\n while (curr != null && !(curr instanceof Element && matches(curr, selector))) {\n curr = curr.parentNode;\n }\n\n return (curr || null) as Element|null;\n}\n\nconst hasNativeClosest = typeof Element != 'undefined' && !!Element.prototype.closest;\n\n/** IE 11 compatible matches implementation. */\nfunction matches(element: Element, selector: string): boolean {\n return element.matches ?\n element.matches(selector) :\n (element as any)['msMatchesSelector'](selector);\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.io/license\n */\n\nimport {FocusTrapInertStrategy} from './focus-trap-inert-strategy';\nimport {ConfigurableFocusTrap} from './configurable-focus-trap';\nimport {closest} from './polyfill';\n\n/**\n * Lightweight FocusTrapInertStrategy that adds a document focus event\n * listener to redirect focus back inside the FocusTrap.\n */\nexport class EventListenerFocusTrapInertStrategy implements FocusTrapInertStrategy {\n /** Focus event handler. */\n private _listener: ((e: FocusEvent) => void) | null = null;\n\n /** Adds a document event listener that keeps focus inside the FocusTrap. */\n preventFocus(focusTrap: ConfigurableFocusTrap): void {\n // Ensure there's only one listener per document\n if (this._listener) {\n focusTrap._document.removeEventListener('focus', this._listener!, true);\n }\n\n this._listener = (e: FocusEvent) => this._trapFocus(focusTrap, e);\n focusTrap._ngZone.runOutsideAngular(() => {\n focusTrap._document.addEventListener('focus', this._listener!, true);\n });\n }\n\n /** Removes the event listener added in preventFocus. */\n allowFocus(focusTrap: ConfigurableFocusTrap): void {\n if (!this._listener) {\n return;\n }\n focusTrap._document.removeEventListener('focus', this._listener!, true);\n this._listener = null;\n }\n\n /**\n * Refocuses the first element in the FocusTrap if the focus event target was outside\n * the FocusTrap.\n *\n * This is an event listener callback. The event listener is added in runOutsideAngular,\n * so all this code runs outside Angular as well.\n */\n private _trapFocus(focusTrap: ConfigurableFocusTrap, event: FocusEvent) {\n const target = event.target as HTMLElement;\n const focusTrapRoot = focusTrap._element;\n\n // Don't refocus if target was in an overlay, because the overlay might be associated\n // with an element inside the FocusTrap, ex. mat-select.\n if (!focusTrapRoot.contains(target) && closest(target, 'div.cdk-overlay-pane') === null) {\n // Some legacy FocusTrap usages have logic that focuses some element on the page\n // just before FocusTrap is destroyed. For backwards compatibility, wait\n // to be sure FocusTrap is still enabled before refocusing.\n setTimeout(() => {\n // Check whether focus wasn't put back into the focus trap while the timeout was pending.\n if (focusTrap.enabled && !focusTrapRoot.contains(focusTrap._document.activeElement)) {\n focusTrap.focusFirstTabbableElement();\n }\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.io/license\n */\n\nimport {Injectable} from '@angular/core';\n\n/**\n * A FocusTrap managed by FocusTrapManager.\n * Implemented by ConfigurableFocusTrap to avoid circular dependency.\n */\nexport interface ManagedFocusTrap {\n _enable(): void;\n _disable(): void;\n focusInitialElementWhenReady(): Promise<boolean>;\n}\n\n/** Injectable that ensures only the most recently enabled FocusTrap is active. */\n@Injectable({providedIn: 'root'})\nexport class FocusTrapManager {\n // A stack of the FocusTraps on the page. Only the FocusTrap at the\n // top of the stack is active.\n private _focusTrapStack: ManagedFocusTrap[] = [];\n\n /**\n * Disables the FocusTrap at the top of the stack, and then pushes\n * the new FocusTrap onto the stack.\n */\n register(focusTrap: ManagedFocusTrap): void {\n // Dedupe focusTraps that register multiple times.\n this._focusTrapStack = this._focusTrapStack.filter((ft) => ft !== focusTrap);\n\n let stack = this._focusTrapStack;\n\n if (stack.length) {\n stack[stack.length - 1]._disable();\n }\n\n stack.push(focusTrap);\n focusTrap._enable();\n }\n\n /**\n * Removes the FocusTrap from the stack, and activates the\n * FocusTrap that is the new top of the stack.\n */\n deregister(focusTrap: ManagedFocusTrap): void {\n focusTrap._disable();\n\n const stack = this._focusTrapStack;\n\n const i = stack.indexOf(focusTrap);\n if (i !== -1) {\n stack.splice(i, 1);\n if (stack.length) {\n stack[stack.length - 1]._enable();\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.io/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n Inject,\n Injectable,\n Optional,\n NgZone,\n} from '@angular/core';\nimport {InteractivityChecker} from '../interactivity-checker/interactivity-checker';\nimport {ConfigurableFocusTrap} from './configurable-focus-trap';\nimport {ConfigurableFocusTrapConfig} from './configurable-focus-trap-config';\nimport {FOCUS_TRAP_INERT_STRATEGY, FocusTrapInertStrategy} from './focus-trap-inert-strategy';\nimport {EventListenerFocusTrapInertStrategy} from './event-listener-inert-strategy';\nimport {FocusTrapManager} from './focus-trap-manager';\n\n/** Factory that allows easy instantiation of configurable focus traps. */\n@Injectable({providedIn: 'root'})\nexport class ConfigurableFocusTrapFactory {\n private _document: Document;\n private _inertStrategy: FocusTrapInertStrategy;\n\n constructor(\n private _checker: InteractivityChecker,\n private _ngZone: NgZone,\n private _focusTrapManager: FocusTrapManager,\n @Inject(DOCUMENT) _document: any,\n @Optional() @Inject(FOCUS_TRAP_INERT_STRATEGY) _inertStrategy?: FocusTrapInertStrategy) {\n\n this._document = _document;\n // TODO split up the strategies into different modules, similar to DateAdapter.\n this._inertStrategy = _inertStrategy || new EventListenerFocusTrapInertStrategy();\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 config The focus trap configuration.\n * @returns The created focus trap instance.\n */\n create(element: HTMLElement, config?: ConfigurableFocusTrapConfig): ConfigurableFocusTrap;\n\n /**\n * @deprecated Pass a config object instead of the `deferCaptureElements` flag.\n * @breaking-change 11.0.0\n */\n create(element: HTMLElement, deferCaptureElements: boolean): ConfigurableFocusTrap;\n\n create(element: HTMLElement, config: ConfigurableFocusTrapConfig|boolean = {defer: false}):\n ConfigurableFocusTrap {\n let configObject: ConfigurableFocusTrapConfig;\n if (typeof config === 'boolean') {\n configObject = {defer: config};\n } else {\n configObject = config;\n }\n return new ConfigurableFocusTrap(\n element, this._checker, this._ngZone, this._document, this._focusTrapManager,\n this._inertStrategy, configObject);\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.io/license\n */\n\n/** Gets whether an event could be a faked `mousedown` event dispatched by a screen reader. */\nexport function isFakeMousedownFromScreenReader(event: MouseEvent): boolean {\n // Some screen readers will dispatch a fake `mousedown` event when pressing enter or space on\n // a clickable element. We can distinguish these events when both `offsetX` and `offsetY` are\n // zero. Note that there's an edge case where the user could click the 0x0 spot of the screen\n // themselves, but that is unlikely to contain interaction elements. Historially we used to check\n // `event.buttons === 0`, however that no longer works on recent versions of NVDA.\n return event.offsetX === 0 && event.offsetY === 0;\n}\n\n/** Gets whether an event could be a faked `touchstart` event dispatched by a screen reader. */\nexport function isFakeTouchstartFromScreenReader(event: TouchEvent): boolean {\n const touch: Touch | undefined = (event.touches && event.touches[0]) ||\n (event.changedTouches && event.changedTouches[0]);\n\n // A fake `touchstart` can be distinguished from a real one by looking at the `identifier`\n // which is typically >= 0 on a real device versus -1 from a screen reader. Just to be safe,\n // we can also look at `radiusX` and `radiusY`. This behavior was observed against a Windows 10\n // device with a touch screen running NVDA v2020.4 and Firefox 85 or Chrome 88.\n return !!touch && touch.identifier === -1 && (touch.radiusX == null || touch.radiusX === 1) &&\n (touch.radiusY == null || touch.radiusY === 1);\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.io/license\n */\n\nimport {ALT, CONTROL, MAC_META, META, SHIFT} from '@angular/cdk/keycodes';\nimport {Inject, Injectable, InjectionToken, OnDestroy, Optional, NgZone} from '@angular/core';\nimport {normalizePassiveListenerOptions, Platform, _getEventTarget} from '@angular/cdk/platform';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {distinctUntilChanged, skip} from 'rxjs/operators';\nimport {\n isFakeMousedownFromScreenReader,\n isFakeTouchstartFromScreenReader,\n} from '../fake-event-detection';\n\n/**\n * The input modalities detected by this service. Null is used if the input modality is unknown.\n */\nexport type InputModality = 'keyboard' | 'mouse' | 'touch' | null;\n\n/** Options to configure the behavior of the InputModalityDetector. */\nexport interface InputModalityDetectorOptions {\n /** Keys to ignore when detecting keyboard input modality. */\n ignoreKeys?: number[];\n}\n\n/**\n * Injectable options for the InputModalityDetector. These are shallowly merged with the default\n * options.\n */\nexport const INPUT_MODALITY_DETECTOR_OPTIONS =\n new InjectionToken<InputModalityDetectorOptions>('cdk-input-modality-detector-options');\n\n/**\n * Default options for the InputModalityDetector.\n *\n * Modifier keys are ignored by default (i.e. when pressed won't cause the service to detect\n * keyboard input modality) for two reasons:\n *\n * 1. Modifier keys are commonly used with mouse to perform actions such as 'right click' or 'open\n * in new tab', and are thus less representative of actual keyboard interaction.\n * 2. VoiceOver triggers some keyboard events when linearly navigating with Control + Option (but\n * confusingly not with Caps Lock). Thus, to have parity with other screen readers, we ignore\n * these keys so as to not update the input modality.\n *\n * Note that we do not by default ignore the right Meta key on Safari because it has the same key\n * code as the ContextMenu key on other browsers. When we switch to using event.key, we can\n * distinguish between the two.\n */\nexport const INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS: InputModalityDetectorOptions = {\n ignoreKeys: [ALT, CONTROL, MAC_META, META, SHIFT],\n};\n\n/**\n * The amount of time needed to pass after a touchstart event in order for a subsequent mousedown\n * event to be attributed as mouse and not touch.\n *\n * This is the value used by AngularJS Material. Through trial and error (on iPhone 6S) they found\n * that a value of around 650ms seems appropriate.\n */\nexport const TOUCH_BUFFER_MS = 650;\n\n/**\n * Event listener options that enable capturing and also mark the listener as passive if the browser\n * supports it.\n */\nconst modalityEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n capture: true,\n});\n\n/**\n * Service that detects the user's input modality.\n *\n * This service does not update the input modality when a user navigates with a screen reader\n * (e.g. linear navigation with VoiceOver, object navigation / browse mode with NVDA, virtual PC\n * cursor mode with JAWS). This is in part due to technical limitations (i.e. keyboard events do not\n * fire as expected in these modes) but is also arguably the correct behavior. Navigating with a\n * screen reader is akin to visually scanning a page, and should not be interpreted as actual user\n * input interaction.\n *\n * When a user is not navigating but *interacting* with a screen reader, this service attempts to\n * update the input modality to keyboard, but in general this service's behavior is largely\n * undefined.\n */\n@Injectable({providedIn: 'root'})\nexport class InputModalityDetector implements OnDestroy {\n /** Emits whenever an input modality is detected. */\n readonly modalityDetected: Observable<InputModality>;\n\n /** Emits when the input modality changes. */\n readonly modalityChanged: Observable<InputModality>;\n\n /** The most recently detected input modality. */\n get mostRecentModality(): InputModality {\n return this._modality.value;\n }\n\n /**\n * The most recently detected input modality event target. Is null if no input modality has been\n * detected or if the associated event target is null for some unknown reason.\n */\n _mostRecentTarget: HTMLElement | null = null;\n\n /** The underlying BehaviorSubject that emits whenever an input modality is detected. */\n private readonly _modality = new BehaviorSubject<InputModality>(null);\n\n /** Options for this InputModalityDetector. */\n private readonly _options: InputModalityDetectorOptions;\n\n /**\n * The timestamp of the last touch input modality. Used to determine whether mousedown events\n * should be attributed to mouse or touch.\n */\n private _lastTouchMs = 0;\n\n /**\n * Handles keydown events. Must be an arrow function in order to preserve the context when it gets\n * bound.\n */\n private _onKeydown = (event: KeyboardEvent) => {\n // If this is one of the keys we should ignore, then ignore it and don't update the input\n // modality to keyboard.\n if (this._options?.ignoreKeys?.some(keyCode => keyCode === event.keyCode)) { return; }\n\n this._modality.next('keyboard');\n this._mostRecentTarget = _getEventTarget(event);\n }\n\n /**\n * Handles mousedown events. Must be an arrow function in order to preserve the context when it\n * gets bound.\n */\n private _onMousedown = (event: MouseEvent) => {\n // Touches trigger both touch and mouse events, so we need to distinguish between mouse events\n // that were triggered via mouse vs touch. To do so, check if the mouse event occurs closely\n // after the previous touch event.\n if (Date.now() - this._lastTouchMs < TOUCH_BUFFER_MS) { return; }\n\n // Fake mousedown events are fired by some screen readers when controls are activated by the\n // screen reader. Attribute them to keyboard input modality.\n this._modality.next(isFakeMousedownFromScreenReader(event) ? 'keyboard' : 'mouse');\n this._mostRecentTarget = _getEventTarget(event);\n }\n\n /**\n * Handles touchstart events. Must be an arrow function in order to preserve the context when it\n * gets bound.\n */\n private _onTouchstart = (event: TouchEvent) => {\n // Same scenario as mentioned in _onMousedown, but on touch screen devices, fake touchstart\n // events are fired. Again, attribute to keyboard input modality.\n if (isFakeTouchstartFromScreenReader(event)) {\n this._modality.next('keyboard');\n return;\n }\n\n // Store the timestamp of this touch event, as it's used to distinguish between mouse events\n // triggered via mouse vs touch.\n this._lastTouchMs = Date.now();\n\n this._modality.next('touch');\n this._mostRecentTarget = _getEventTarget(event);\n }\n\n constructor(\n private readonly _platform: Platform,\n ngZone: NgZone,\n @Inject(DOCUMENT) document: Document,\n @Optional() @Inject(INPUT_MODALITY_DETECTOR_OPTIONS)\n options?: InputModalityDetectorOptions,\n ) {\n this._options = {\n ...INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS,\n ...options,\n };\n\n // Skip the first emission as it's null.\n this.modalityDetected = this._modality.pipe(skip(1));\n this.modalityChanged = this.modalityDetected.pipe(distinctUntilChanged());\n\n // If we're not in a browser, this service should do nothing, as there's no relevant input\n // modality to detect.\n if (_platform.isBrowser) {\n ngZone.runOutsideAngular(() => {\n document.addEventListener('keydown', this._onKeydown, modalityEventListenerOptions);\n document.addEventListener('mousedown', this._onMousedown, modalityEventListenerOptions);\n document.addEventListener('touchstart', this._onTouchstart, modalityEventListenerOptions);\n });\n }\n }\n\n ngOnDestroy() {\n this._modality.complete();\n\n if (this._platform.isBrowser) {\n document.removeEventListener('keydown', this._onKeydown, modalityEventListenerOptions);\n document.removeEventListener('mousedown', this._onMousedown, modalityEventListenerOptions);\n document.removeEventListener('touchstart', this._onTouchstart, modalityEventListenerOptions);\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.io/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 =\n new InjectionToken<HTMLElement | null>('liveAnnouncerElement', {\n providedIn: 'root',\n factory: LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY,\n });\n\n/** @docs-private */\nexport function LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY(): null {\n return null;\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 =\n new InjectionToken<LiveAnnouncerDefaultOptions>('LIVE_ANNOUNCER_DEFAULT_OPTIONS');\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.io/license\n */\n\nimport {ContentObserver} from '@angular/cdk/observers';\nimport {DOCUMENT} from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Injectable,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {\n AriaLivePoliteness,\n LiveAnnouncerDefaultOptions,\n LIVE_ANNOUNCER_ELEMENT_TOKEN,\n LIVE_ANNOUNCER_DEFAULT_OPTIONS,\n} from './live-announcer-tokens';\n\n\n@Injectable({providedIn: 'root'})\nexport class LiveAnnouncer implements OnDestroy {\n private _liveElement: HTMLElement;\n private _document: Document;\n private _previousTimeout: number;\n\n constructor(\n @Optional() @Inject(LIVE_ANNOUNCER_ELEMENT_TOKEN) elementToken: any,\n private _ngZone: NgZone,\n @Inject(DOCUMENT) _document: any,\n @Optional() @Inject(LIVE_ANNOUNCER_DEFAULT_OPTIONS)\n private _defaultOptions?: LiveAnnouncerDefaultOptions) {\n\n // We inject the live element and document as `any` because the constructor signature cannot\n // reference browser globals (HTMLElement, Document) on non-browser environments, since having\n // a class decorator causes TypeScript to preserve the constructor signature types.\n this._document = _document;\n this._liveElement = elementToken || this._createLiveElement();\n }\n\n /**\n * Announces a message to screenreaders.\n * @param message Message to be announced to the screenreader.\n * @returns Promise that will be resolved when the message is added to the DOM.\n */\n announce(message: string): Promise<void>;\n\n /**\n * Announces a message to screenreaders.\n * @param message Message to be announced to the screenreader.\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: string, politeness?: AriaLivePoliteness): Promise<void>;\n\n /**\n * Announces a message to screenreaders.\n * @param message Message to be announced to the screenreader.\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: string, duration?: number): Promise<void>;\n\n /**\n * Announces a message to screenreaders.\n * @param message Message to be announced to the screenreader.\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(message: string, politeness?: AriaLivePoliteness, duration?: number): Promise<void>;\n\n announce(message: string, ...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 // 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 return new Promise(resolve => {\n clearTimeout(this._previousTimeout);\n this._previousTimeout = setTimeout(() => {\n this._liveElement.textContent = message;\n resolve();\n\n if (typeof duration === 'number') {\n this._previousTimeout = setTimeout(() => this.clear(), duration);\n }\n }, 100);\n });\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\n if (this._liveElement && this._liveElement.parentNode) {\n this._liveElement.parentNode.removeChild(this._liveElement);\n this._liveElement = null!;\n }\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].parentNode!.removeChild(previousElements[i]);\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\n this._document.body.appendChild(liveEl);\n\n return liveEl;\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 /** The aria-live politeness level to use when announcing messages. */\n @Input('cdkAriaLive')\n get politeness(): AriaLivePoliteness { return this._politeness; }\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 = null;\n }\n } else if (!this._subscription) {\n this._subscription = this._ngZone.runOutsideAngular(() => {\n return this._contentObserver\n .observe(this._elementRef)\n .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);\n this._previousAnnouncedText = elementText;\n }\n });\n });\n }\n }\n private _politeness: AriaLivePoliteness = 'polite';\n\n private _previousAnnouncedText?: string;\n private _subscription: Subscription | null;\n\n constructor(private _elementRef: ElementRef, private _liveAnnouncer: LiveAnnouncer,\n private _contentObserver: ContentObserver, private _ngZone: NgZone) {}\n\n ngOnDestroy() {\n if (this._subscription) {\n this._subscription.unsubscribe();\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.io/license\n */\n\nimport {\n Platform,\n normalizePassiveListenerOptions,\n _getShadowRoot,\n _getEventTarget,\n} from '@angular/cdk/platform';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Injectable,\n InjectionToken,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n AfterViewInit,\n} from '@angular/core';\nimport {Observable, of as observableOf, Subject, Subscription} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {DOCUMENT} from '@angular/common';\nimport {\n InputModalityDetector,\n TOUCH_BUFFER_MS,\n} from '../input-modality/input-modality-detector';\n\n\nexport type FocusOrigin = 'touch' | 'mouse' | 'keyboard' | 'program' | null;\n\n/**\n * Corresponds to the options that can be passed to the native `focus` event.\n * via https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus\n */\nexport interface FocusOptions {\n /** Whether the browser should scroll to the element when it is focused. */\n preventScroll?: boolean;\n}\n\n/** Detection mode used for attributing the origin of a focus event. */\nexport const enum FocusMonitorDetectionMode {\n /**\n * Any mousedown, keydown, or touchstart event that happened in the previous\n * tick or the current tick will be used to assign a focus event's origin (to\n * either mouse, keyboard, or touch). This is the default option.\n */\n IMMEDIATE,\n /**\n * A focus event's origin is always attributed to the last corresponding\n * mousedown, keydown, or touchstart event, no matter how long ago it occurred.\n */\n EVENTUAL\n}\n\n/** Injectable service-level options for FocusMonitor. */\nexport interface FocusMonitorOptions {\n detectionMode?: FocusMonitorDetectionMode;\n}\n\n/** InjectionToken for FocusMonitorOptions. */\nexport const FOCUS_MONITOR_DEFAULT_OPTIONS =\n new InjectionToken<FocusMonitorOptions>('cdk-focus-monitor-default-options');\n\ntype MonitoredElementInfo = {\n checkChildren: boolean,\n readonly subject: Subject<FocusOrigin>,\n rootNode: HTMLElement|ShadowRoot|Document\n};\n\n/**\n * Event listener options that enable capturing and also\n * mark the listener as passive if the browser supports it.\n */\nconst captureEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n capture: true\n});\n\n\n/** Monitors mouse and keyboard events to determine the cause of focus events. */\n@Injectable({providedIn: 'root'})\nexport class FocusMonitor implements OnDestroy {\n /** The focus origin that the next focus event is a result of. */\n private _origin: FocusOrigin = null;\n\n /** The FocusOrigin of the last focus event tracked by the FocusMonitor. */\n private _lastFocusOrigin: FocusOrigin;\n\n /** Whether the window has just been focused. */\n private _windowFocused = false;\n\n /** The timeout id of the window focus timeout. */\n private _windowFocusTimeoutId: number;\n\n /** The timeout id of the origin clearing timeout. */\n private _originTimeoutId: number;\n\n /**\n * Whether the origin was determined via a touch interaction. Necessary as properly attributing\n * focus events to touch interactions requires special logic.\n */\n private _originFromTouchInteraction = false;\n\n /** Map of elements being monitored to their info. */\n private _elementInfo = new Map<HTMLElement, MonitoredElementInfo>();\n\n /** The number of elements currently being monitored. */\n private _monitoredElementCount = 0;\n\n /**\n * Keeps track of the root nodes to which we've currently bound a focus/blur handler,\n * as well as the number of monitored elements that they contain. We have to treat focus/blur\n * handlers differently from the rest of the events, because the browser won't emit events\n * to the document when focus moves inside of a shadow root.\n */\n private _rootNodeFocusListenerCount = new Map<HTMLElement|Document|ShadowRoot, number>();\n\n /**\n * The specified detection mode, used for attributing the origin of a focus\n * event.\n */\n private readonly _detectionMode: FocusMonitorDetectionMode;\n\n /**\n * Event listener for `focus` events on the window.\n * Needs to be an arrow function in order to preserve the context when it gets bound.\n */\n private _windowFocusListener = () => {\n // Make a note of when the window regains focus, so we can\n // restore the origin info for the focused element.\n this._windowFocused = true;\n this._windowFocusTimeoutId = setTimeout(() => this._windowFocused = false);\n }\n\n /** Used to reference correct document/window */\n protected _document?: Document;\n\n /** Subject for stopping our InputModalityDetector subscription. */\n private readonly _stopInputModalityDetector = new Subject<void>();\n\n constructor(\n private _ngZone: NgZone,\n private _platform: Platform,\n private readonly _inputModalityDetector: InputModalityDetector,\n /** @breaking-change 11.0.0 make document required */\n @Optional() @Inject(DOCUMENT) document: any|null,\n @Optional() @Inject(FOCUS_MONITOR_DEFAULT_OPTIONS) options:\n FocusMonitorOptions|null) {\n this._document = document;\n this._detectionMode = options?.detectionMode || FocusMonitorDetectionMode.IMMEDIATE;\n }\n /**\n * Event listener for `focus` and 'blur' events on the document.\n * Needs to be an arrow function in order to preserve the context when it gets bound.\n */\n private _rootNodeFocusAndBlurListener = (event: Event) => {\n const target = _getEventTarget<HTMLElement>(event);\n const handler = event.type === 'focus' ? this._onFocus : this._onBlur;\n\n // We need to walk up the ancestor chain in order to support `checkChildren`.\n for (let element = target; element; element = element.parentElement) {\n handler.call(this, event as FocusEvent, element);\n }\n }\n\n /**\n * Monitors focus on an element and applies appropriate CSS classes.\n * @param element The element to monitor\n * @param checkChildren Whether to count the element as focused when its children are focused.\n * @returns An observable that emits when the focus state of the element changes.\n * When the element is blurred, null will be emitted.\n */\n monitor(element: HTMLElement, checkChildren?: boolean): Observable<FocusOrigin>;\n\n /**\n * Monitors focus on an element and applies appropriate CSS classes.\n * @param element The element to monitor\n * @param checkChildren Whether to count the element as focused when its children are focused.\n * @returns An observable that emits when the focus state of the element changes.\n * When the element is blurred, null will be emitted.\n */\n monitor(element: ElementRef<HTMLElement>, checkChildren?: boolean): Observable<FocusOrigin>;\n\n monitor(element: HTMLElement | ElementRef<HTMLElement>,\n checkChildren: boolean = false): Observable<FocusOrigin> {\n const nativeElement = coerceElement(element);\n\n // Do nothing if we're not on the browser platform or the passed in node isn't an element.\n if (!this._platform.isBrowser || nativeElement.nodeType !== 1) {\n return observableOf(null);\n }\n\n // If the element is inside the shadow DOM, we need to bind our focus/blur listeners to\n // the shadow root, rather than the `document`, because the browser won't emit focus events\n // to the `document`, if focus is moving within the same shadow root.\n const rootNode = _getShadowRoot(nativeElement) || this._getDocument();\n const cachedInfo = this._elementInfo.get(nativeElement);\n\n // Check if we're already monitoring this element.\n if (cachedInfo) {\n if (checkChildren) {\n // TODO(COMP-318): this can be problematic, because it'll turn all non-checkChildren\n // observers into ones that behave as if `checkChildren` was turned on. We need a more\n // robust solution.\n cachedInfo.checkChildren = true;\n }\n\n return cachedInfo.subject;\n }\n\n // Create monitored element info.\n const info: MonitoredElementInfo = {\n checkChildren: checkChildren,\n subject: new Subject<FocusOrigin>(),\n rootNode\n };\n this._elementInfo.set(nativeElement, info);\n this._registerGlobalListeners(info);\n\n return info.subject;\n }\n\n /**\n * Stops monitoring an element and removes all focus classes.\n * @param element The element to stop monitoring.\n */\n stopMonitoring(element: HTMLElement): void;\n\n /**\n * Stops monitoring an element and removes all focus classes.\n * @param element The element to stop monitoring.\n */\n stopMonitoring(element: ElementRef<HTMLElement>): void;\n\n stopMonitoring(element: HTMLElement | ElementRef<HTMLElement>): void {\n const nativeElement = coerceElement(element);\n const elementInfo = this._elementInfo.get(nativeElement);\n\n if (elementInfo) {\n elementInfo.subject.complete();\n\n this._setClasses(nativeElement);\n this._elementInfo.delete(nativeElement);\n this._removeGlobalListeners(elementInfo);\n }\n }\n\n /**\n * Focuses the element via the specified focus origin.\n * @param element Element to focus.\n * @param origin Focus origin.\n * @param options Options that can be used to configure the focus behavior.\n */\n focusVia(element: HTMLElement, origin: FocusOrigin, options?: FocusOptions): void;\n\n /**\n * Focuses the element via the specified focus origin.\n * @param element Element to focus.\n * @param origin Focus origin.\n * @param options Options that can be used to configure the focus behavior.\n */\n focusVia(element: ElementRef<HTMLElement>, origin: FocusOrigin, options?: FocusOptions): void;\n\n focusVia(element: HTMLElement | ElementRef<HTMLElement>,\n origin: FocusOrigin,\n options?: FocusOptions): void {\n\n const nativeElement = coerceElement(element);\n const focusedElement = this._getDocument().activeElement;\n\n // If the element is focused already, calling `focus` again won't trigger the event listener\n // which means that the focus classes won't be updated. If that's the case, update the classes\n // directly without waiting for an event.\n if (nativeElement === focusedElement) {\n this._getClosestElementsInfo(nativeElement)\n .forEach(([currentElement, info]) => this._originChanged(currentElement, origin, info));\n } else {\n this._setOrigin(origin);\n\n // `focus` isn't available on the server\n if (typeof nativeElement.focus === 'function') {\n nativeElement.focus(options);\n }\n }\n }\n\n ngOnDestroy() {\n this._elementInfo.forEach((_info, element) => this.stopMonitoring(element));\n }\n\n /** Access injected document if available or fallback to global document reference */\n private _getDocument(): Document {\n return this._document || document;\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n const doc = this._getDocument();\n return doc.defaultView || window;\n }\n\n private _toggleClass(element: Element, className: string, shouldSet: boolean) {\n if (shouldSet) {\n element.classList.add(className);\n } else {\n element.classList.remove(className);\n }\n }\n\n private _getFocusOrigin(focusEventTarget: HTMLElement | null): FocusOrigin {\n if (this._origin) {\n // If the origin was realized via a touch interaction, we need to perform additional checks\n // to determine whether the focus origin should be attributed to touch or program.\n if (this._originFromTouchInteraction) {\n return this._shouldBeAttributedToTouch(focusEventTarget) ? 'touch' : 'program';\n } else {\n return this._origin;\n }\n }\n\n // If the window has just regained focus, we can restore the most recent origin from before the\n // window blurred. Otherwise, we've reached the point where we can't identify the source of the\n // focus. This typically means one of two things happened:\n //\n // 1) The element was programmatically focused, or\n // 2) The element was focused via screen reader navigation (which generally doesn't fire\n // events).\n //\n // Because we can't distinguish between these two cases, we default to setting `program`.\n return (this._windowFocused && this._lastFocusOrigin) ? this._lastFocusOrigin : 'program';\n }\n\n /**\n * Returns whether the focus event should be attributed to touch. Recall that in IMMEDIATE mode, a\n * touch origin isn't immediately reset at the next tick (see _setOrigin). This means that when we\n * handle a focus event following a touch interaction, we need to determine whether (1) the focus\n * event was directly caused by the touch interaction or (2) the focus event was caused by a\n * subsequent programmatic focus call triggered by the touch interaction.\n * @param focusEventTarget The target of the focus event under examination.\n */\n private _shouldBeAttributedToTouch(focusEventTarget: HTMLElement | null): boolean {\n // Please note that this check is not perfect. Consider the following edge case:\n //\n // <div #parent tabindex=\"0\">\n // <div #child tabindex=\"0\" (click)=\"#parent.focus()\"></div>\n // </div>\n //\n // Suppose there is a FocusMonitor in IMMEDIATE mode attached to #parent. When the user touches\n // #child, #parent is programmatically focused. This code will attribute the focus to touch\n // instead of program. This is a relatively minor edge-case that can be worked around by using\n // focusVia(parent, 'program') to focus #parent.\n return (this._detectionMode === FocusMonitorDetectionMode.EVENTUAL) ||\n !!focusEventTarget?.contains(this._inputModalityDetector._mostRecentTarget);\n }\n\n /**\n * Sets the focus classes on the element based on the given focus origin.\n * @param element The element to update the classes on.\n * @param origin The focus origin.\n */\n private _setClasses(element: HTMLElement, origin?: FocusOrigin): void {\n this._toggleClass(element, 'cdk-focused', !!origin);\n this._toggleClass(element, 'cdk-touch-focused', origin === 'touch');\n this._toggleClass(element, 'cdk-keyboard-focused', origin === 'keyboard');\n this._toggleClass(element, 'cdk-mouse-focused', origin === 'mouse');\n this._toggleClass(element, 'cdk-program-focused', origin === 'program');\n }\n\n /**\n * Updates the focus origin. If we're using immediate detection mode, we schedule an async\n * function to clear the origin at the end of a timeout. The duration of the timeout depends on\n * the origin being set.\n * @param origin The origin to set.\n * @param isFromInteraction Whether we are setting the origin from an interaction event.\n */\n private _setOrigin(origin: FocusOrigin, isFromInteraction = false): void {\n this._ngZone.runOutsideAngular(() => {\n this._origin = origin;\n this._originFromTouchInteraction = (origin === 'touch') && isFromInteraction;\n\n // If we're in IMMEDIATE mode, reset the origin at the next tick (or in `TOUCH_BUFFER_MS` ms\n // for a touch event). We reset the origin at the next tick because Firefox focuses one tick\n // after the interaction event. We wait `TOUCH_BUFFER_MS` ms before resetting the origin for\n // a touch event because when a touch event is fired, the associated focus event isn't yet in\n // the event queue. Before doing so, clear any pending timeouts.\n if (this._detectionMode === FocusMonitorDetectionMode.IMMEDIATE) {\n clearTimeout(this._originTimeoutId);\n const ms = this._originFromTouchInteraction ? TOUCH_BUFFER_MS : 1;\n this._originTimeoutId = setTimeout(() => this._origin = null, ms);\n }\n });\n }\n\n /**\n * Handles focus events on a registered element.\n * @param event The focus event.\n * @param element The monitored element.\n */\n private _onFocus(event: FocusEvent, element: HTMLElement) {\n // NOTE(mmalerba): We currently set the classes based on the focus origin of the most recent\n // focus event affecting the monitored element. If we want to use the origin of the first event\n // instead we should check for the cdk-focused class here and return if the element already has\n // it. (This only matters for elements that have includesChildren = true).\n\n // If we are not counting child-element-focus as focused, make sure that the event target is the\n // monitored element itself.\n const elementInfo = this._elementInfo.get(element);\n const focusEventTarget = _getEventTarget<HTMLElement>(event);\n if (!elementInfo || (!elementInfo.checkChildren && element !== focusEventTarget)) {\n return;\n }\n\n this._originChanged(element, this._getFocusOrigin(focusEventTarget), elementInfo);\n }\n\n /**\n * Handles blur events on a registered element.\n * @param event The blur event.\n * @param element The monitored element.\n */\n _onBlur(event: FocusEvent, element: HTMLElement) {\n // If we are counting child-element-focus as focused, make sure that we aren't just blurring in\n // order to focus another child of the monitored element.\n const elementInfo = this._elementInfo.get(element);\n\n if (!elementInfo || (elementInfo.checkChildren && event.relatedTarget instanceof Node &&\n element.contains(event.relatedTarget))) {\n return;\n }\n\n this._setClasses(element);\n this._emitOrigin(elementInfo.subject, null);\n }\n\n private _emitOrigin(subject: Subject<FocusOrigin>, origin: FocusOrigin) {\n this._ngZone.run(() => subject.next(origin));\n }\n\n private _registerGlobalListeners(elementInfo: MonitoredElementInfo) {\n if (!this._platform.isBrowser) {\n return;\n }\n\n const rootNode = elementInfo.rootNode;\n const rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode) || 0;\n\n if (!rootNodeFocusListeners) {\n this._ngZone.runOutsideAngular(() => {\n rootNode.addEventListener('focus', this._rootNodeFocusAndBlurListener,\n captureEventListenerOptions);\n rootNode.addEventListener('blur', this._rootNodeFocusAndBlurListener,\n captureEventListenerOptions);\n });\n }\n\n this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners + 1);\n\n // Register global listeners when first element is monitored.\n if (++this._monitoredElementCount === 1) {\n // Note: we listen to events in the capture phase so we\n // can detect them even if the user stops propagation.\n this._ngZone.runOutsideAngular(() => {\n const window = this._getWindow();\n window.addEventListener('focus', this._windowFocusListener);\n });\n\n // The InputModalityDetector is also just a collection of global listeners.\n this._inputModalityDetector.modalityDetected\n .pipe(takeUntil(this._stopInputModalityDetector))\n .subscribe(modality => { this._setOrigin(modality, true /* isFromInteraction */); });\n }\n }\n\n private _removeGlobalListeners(elementInfo: MonitoredElementInfo) {\n const rootNode = elementInfo.rootNode;\n\n if (this._rootNodeFocusListenerCount.has(rootNode)) {\n const rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode)!;\n\n if (rootNodeFocusListeners > 1) {\n this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners - 1);\n } else {\n rootNode.removeEventListener('focus', this._rootNodeFocusAndBlurListener,\n captureEventListenerOptions);\n rootNode.removeEventListener('blur', this._rootNodeFocusAndBlurListener,\n captureEventListenerOptions);\n this._rootNodeFocusListenerCount.delete(rootNode);\n }\n }\n\n // Unregister global listeners when last element is unmonitored.\n if (!--this._monitoredElementCount) {\n const window = this._getWindow();\n window.removeEventListener('focus', this._windowFocusListener);\n\n // Equivalently, stop our InputModalityDetector subscription.\n this._stopInputModalityDetector.next();\n\n // Clear timeouts for all potentially pending timeouts to prevent the leaks.\n clearTimeout(this._windowFocusTimeoutId);\n clearTimeout(this._originTimeoutId);\n }\n }\n\n /** Updates all the state on an element once its focus origin has changed. */\n private _originChanged(element: HTMLElement, origin: FocusOrigin,\n elementInfo: MonitoredElementInfo) {\n this._setClasses(element, origin);\n this._emitOrigin(elementInfo.subject, origin);\n this._lastFocusOrigin = origin;\n }\n\n /**\n * Collects the `MonitoredElementInfo` of a particular element and\n * all of its ancestors that have enabled `checkChildren`.\n * @param element Element from which to start the search.\n */\n private _getClosestElementsInfo(element: HTMLElement): [HTMLElement, MonitoredElementInfo][] {\n const results: [HTMLElement, MonitoredElementInfo][] = [];\n\n this._elementInfo.forEach((info, currentElement) => {\n if (currentElement === element || (info.checkChildren && currentElement.contains(element))) {\n results.push([currentElement, info]);\n }\n });\n\n return results;\n }\n}\n\n/**\n * Directive that determines how a particular element was focused (via keyboard, mouse, touch, or\n * programmatically) and adds corresponding classes to the element.\n *\n * There are two variants of this directive:\n * 1) cdkMonitorElementFocus: does not consider an element to be focused if one of its children is\n * focused.\n * 2) cdkMonitorSubtreeFocus: considers an element focused if it or any of its children are focused.\n */\n@Directive({\n selector: '[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]',\n})\nexport class CdkMonitorFocus implements AfterViewInit, OnDestroy {\n private _monitorSubscription: Subscription;\n @Output() readonly cdkFocusChange = new EventEmitter<FocusOrigin>();\n\n constructor(private _elementRef: ElementRef<HTMLElement>, private _focusMonitor: FocusMonitor) {}\n\n ngAfterViewInit() {\n const element = this._elementRef.nativeElement;\n this._monitorSubscription = this._focusMonitor.monitor(\n element,\n element.nodeType === 1 && element.hasAttribute('cdkMonitorSubtreeFocus'))\n .subscribe(origin => this.cdkFocusChange.emit(origin));\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n\n if (this._monitorSubscription) {\n this._monitorSubscription.unsubscribe();\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.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\n\n\n/** Set of possible high-contrast mode backgrounds. */\nexport const 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 {\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: boolean;\n private _document: Document;\n\n constructor(private _platform: Platform, @Inject(DOCUMENT) document: any) {\n this._document = document;\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 = (documentWindow && documentWindow.getComputedStyle) ?\n documentWindow.getComputedStyle(testElement) : null;\n const computedColor =\n (computedStyle && computedStyle.backgroundColor || '').replace(/ /g, '');\n this._document.body.removeChild(testElement);\n\n switch (computedColor) {\n case 'rgb(0,0,0)': return HighContrastMode.WHITE_ON_BLACK;\n case 'rgb(255,255,255)': return HighContrastMode.BLACK_ON_WHITE;\n }\n return HighContrastMode.NONE;\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 // IE11 doesn't support `classList` operations with multiple arguments\n bodyClasses.remove(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS);\n bodyClasses.remove(BLACK_ON_WHITE_CSS_CLASS);\n bodyClasses.remove(WHITE_ON_BLACK_CSS_CLASS);\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);\n bodyClasses.add(BLACK_ON_WHITE_CSS_CLASS);\n } else if (mode === HighContrastMode.WHITE_ON_BLACK) {\n bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS);\n bodyClasses.add(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.io/license\n */\n\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} 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\n@NgModule({\n imports: [PlatformModule, ObserversModule],\n declarations: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],\n exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],\n})\nexport class A11yModule {\n constructor(highContrastModeDetector: HighContrastModeDetector) {\n highContrastModeDetector._applyBodyHighContrastModeCssClasses();\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.io/license\n */\nexport * from './aria-describer/aria-describer';\nexport * from './key-manager/activedescendant-key-manager';\nexport * from './key-manager/focus-key-manager';\nexport * from './key-manager/list-key-manager';\nexport * from './focus-trap/configurable-focus-trap';\nexport * from './focus-trap/configurable-focus-trap-config';\nexport * from './focus-trap/configurable-focus-trap-factory';\nexport * from './focus-trap/event-listener-inert-strategy';\nexport * from './focus-trap/focus-trap';\nexport * from './focus-trap/focus-trap-inert-strategy';\nexport * from './interactivity-checker/interactivity-checker';\nexport {\n InputModality,\n InputModalityDetector,\n InputModalityDetectorOptions,\n INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS,\n INPUT_MODALITY_DETECTOR_OPTIONS,\n} from './input-modality/input-modality-detector';\nexport * from './live-announcer/live-announcer';\nexport * from './live-announcer/live-announcer-tokens';\nexport * from './focus-monitor/focus-monitor';\nexport * from './fake-event-detection';\nexport * from './a11y-module';\nexport {\n HighContrastModeDetector,\n HighContrastMode,\n} from './high-contrast-mode/high-contrast-mode-detector';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {FocusTrapManager as ɵangular_material_src_cdk_a11y_a11y_a} from './focus-trap/focus-trap-manager';"]}
Note: See TracBrowser for help on using the repository browser.