Ignore:
Timestamp:
11/25/21 22:08:24 (3 years ago)
Author:
Ema <ema_spirova@…>
Branches:
master
Children:
8d391a1
Parents:
59329aa
Message:

primeNG components

Location:
trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/a11y.js.map

    r59329aa re29cc2e  
    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: any;\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: any;\n\n  /** The timeout id of the origin clearing timeout. */\n  private _originTimeoutId: any;\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';"]}
     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';"]}
  • trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/overlay.js

    r59329aa re29cc2e  
    617617        this._platform = _platform;
    618618        this._cursorStyleIsSet = false;
     619        /** Store pointerdown event target to track origin of click. */
     620        this._pointerDownListener = (event) => {
     621            this._pointerDownEventTarget = _getEventTarget(event);
     622        };
    619623        /** Click event listener that will be attached to the body propagate phase. */
    620624        this._clickListener = (event) => {
    621625            const target = _getEventTarget(event);
     626            // In case of a click event, we want to check the origin of the click
     627            // (e.g. in case where a user starts a click inside the overlay and
     628            // releases the click outside of it).
     629            // This is done by using the event target of the preceding pointerdown event.
     630            // Every click event caused by a pointer device has a preceding pointerdown
     631            // event, unless the click was programmatically triggered (e.g. in a unit test).
     632            const origin = event.type === 'click' && this._pointerDownEventTarget
     633                ? this._pointerDownEventTarget : target;
     634            // Reset the stored pointerdown event target, to avoid having it interfere
     635            // in subsequent events.
     636            this._pointerDownEventTarget = null;
    622637            // We copy the array because the original may be modified asynchronously if the
    623638            // outsidePointerEvents listener decides to detach overlays resulting in index errors inside
     
    634649                }
    635650                // If it's a click inside the overlay, just break - we should do nothing
    636                 // If it's an outside click dispatch the mouse event, and proceed with the next overlay
    637                 if (overlayRef.overlayElement.contains(target)) {
     651                // If it's an outside click (both origin and target of the click) dispatch the mouse event,
     652                // and proceed with the next overlay
     653                if (overlayRef.overlayElement.contains(target) ||
     654                    overlayRef.overlayElement.contains(origin)) {
    638655                    break;
    639656                }
     
    653670        if (!this._isAttached) {
    654671            const body = this._document.body;
     672            body.addEventListener('pointerdown', this._pointerDownListener, true);
    655673            body.addEventListener('click', this._clickListener, true);
    656674            body.addEventListener('auxclick', this._clickListener, true);
     
    670688        if (this._isAttached) {
    671689            const body = this._document.body;
     690            body.removeEventListener('pointerdown', this._pointerDownListener, true);
    672691            body.removeEventListener('click', this._clickListener, true);
    673692            body.removeEventListener('auxclick', this._clickListener, true);
  • trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/overlay.js.map

    r59329aa re29cc2e  
    1 {"version":3,"file":"overlay.js","sources":["../../../../../../src/cdk/overlay/scroll/block-scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/close-scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/noop-scroll-strategy.ts","../../../../../../src/cdk/overlay/position/scroll-clip.ts","../../../../../../src/cdk/overlay/scroll/reposition-scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/scroll-strategy-options.ts","../../../../../../src/cdk/overlay/scroll/index.ts","../../../../../../src/cdk/overlay/overlay-config.ts","../../../../../../src/cdk/overlay/position/connected-position.ts","../../../../../../src/cdk/overlay/dispatchers/base-overlay-dispatcher.ts","../../../../../../src/cdk/overlay/dispatchers/overlay-keyboard-dispatcher.ts","../../../../../../src/cdk/overlay/dispatchers/overlay-outside-click-dispatcher.ts","../../../../../../src/cdk/overlay/overlay-container.ts","../../../../../../src/cdk/overlay/overlay-ref.ts","../../../../../../src/cdk/overlay/position/flexible-connected-position-strategy.ts","../../../../../../src/cdk/overlay/position/connected-position-strategy.ts","../../../../../../src/cdk/overlay/position/global-position-strategy.ts","../../../../../../src/cdk/overlay/position/overlay-position-builder.ts","../../../../../../src/cdk/overlay/overlay.ts","../../../../../../src/cdk/overlay/overlay-directives.ts","../../../../../../src/cdk/overlay/overlay-module.ts","../../../../../../src/cdk/overlay/dispatchers/index.ts","../../../../../../src/cdk/overlay/fullscreen-overlay-container.ts","../../../../../../src/cdk/overlay/public-api.ts","../../../../../../src/cdk/overlay/index.ts"],"names":[],"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\nimport {ScrollStrategy} from './scroll-strategy';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {coerceCssPixelValue} from '@angular/cdk/coercion';\nimport {supportsScrollBehavior} from '@angular/cdk/platform';\n\nconst scrollBehaviorSupported = supportsScrollBehavior();\n\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nexport class BlockScrollStrategy implements ScrollStrategy {\n  private _previousHTMLStyles = {top: '', left: ''};\n  private _previousScrollPosition: {top: number, left: number};\n  private _isEnabled = false;\n  private _document: Document;\n\n  constructor(private _viewportRuler: ViewportRuler, document: any) {\n    this._document = document;\n  }\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach() {}\n\n  /** Blocks page-level scroll while the attached overlay is open. */\n  enable() {\n    if (this._canBeEnabled()) {\n      const root = this._document.documentElement!;\n\n      this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\n\n      // Cache the previous inline styles in case the user had set them.\n      this._previousHTMLStyles.left = root.style.left || '';\n      this._previousHTMLStyles.top = root.style.top || '';\n\n      // Note: we're using the `html` node, instead of the `body`, because the `body` may\n      // have the user agent margin, whereas the `html` is guaranteed not to have one.\n      root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n      root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n      root.classList.add('cdk-global-scrollblock');\n      this._isEnabled = true;\n    }\n  }\n\n  /** Unblocks page-level scroll while the attached overlay is open. */\n  disable() {\n    if (this._isEnabled) {\n      const html = this._document.documentElement!;\n      const body = this._document.body!;\n      const htmlStyle = html.style;\n      const bodyStyle = body.style;\n      const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n      const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';\n\n      this._isEnabled = false;\n\n      htmlStyle.left = this._previousHTMLStyles.left;\n      htmlStyle.top = this._previousHTMLStyles.top;\n      html.classList.remove('cdk-global-scrollblock');\n\n      // Disable user-defined smooth scrolling temporarily while we restore the scroll position.\n      // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior\n      // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`,\n      // because it can throw off feature detections in `supportsScrollBehavior` which\n      // checks for `'scrollBehavior' in documentElement.style`.\n      if (scrollBehaviorSupported) {\n        htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n      }\n\n      window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n\n      if (scrollBehaviorSupported) {\n        htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n        bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n      }\n    }\n  }\n\n  private _canBeEnabled(): boolean {\n    // Since the scroll strategies can't be singletons, we have to use a global CSS class\n    // (`cdk-global-scrollblock`) to make sure that we don't try to disable global\n    // scrolling multiple times.\n    const html = this._document.documentElement!;\n\n    if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n      return false;\n    }\n\n    const body = this._document.body;\n    const viewport = this._viewportRuler.getViewportSize();\n    return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\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 {OverlayReference} from '../overlay-reference';\n\n/**\n * Describes a strategy that will be used by an overlay to handle scroll events while it is open.\n */\nexport interface ScrollStrategy {\n  /** Enable this scroll strategy (called when the attached overlay is attached to a portal). */\n  enable: () => void;\n\n  /** Disable this scroll strategy (called when the attached overlay is detached from a portal). */\n  disable: () => void;\n\n  /** Attaches this `ScrollStrategy` to an overlay. */\n  attach: (overlayRef: OverlayReference) => void;\n\n  /** Detaches the scroll strategy from the current overlay. */\n  detach?: () => void;\n}\n\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n */\nexport function getMatScrollStrategyAlreadyAttachedError(): Error {\n  return Error(`Scroll strategy has already been attached.`);\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 {NgZone} from '@angular/core';\nimport {ScrollStrategy, getMatScrollStrategyAlreadyAttachedError} from './scroll-strategy';\nimport {OverlayReference} from '../overlay-reference';\nimport {Subscription} from 'rxjs';\nimport {ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\n\n/**\n * Config options for the CloseScrollStrategy.\n */\nexport interface CloseScrollStrategyConfig {\n  /** Amount of pixels the user has to scroll before the overlay is closed. */\n  threshold?: number;\n}\n\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nexport class CloseScrollStrategy implements ScrollStrategy {\n  private _scrollSubscription: Subscription|null = null;\n  private _overlayRef: OverlayReference;\n  private _initialScrollPosition: number;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _ngZone: NgZone,\n    private _viewportRuler: ViewportRuler,\n    private _config?: CloseScrollStrategyConfig) {}\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach(overlayRef: OverlayReference) {\n    if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatScrollStrategyAlreadyAttachedError();\n    }\n\n    this._overlayRef = overlayRef;\n  }\n\n  /** Enables the closing of the attached overlay on scroll. */\n  enable() {\n    if (this._scrollSubscription) {\n      return;\n    }\n\n    const stream = this._scrollDispatcher.scrolled(0);\n\n    if (this._config && this._config.threshold && this._config.threshold > 1) {\n      this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n\n      this._scrollSubscription = stream.subscribe(() => {\n        const scrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n\n        if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config!.threshold!) {\n          this._detach();\n        } else {\n          this._overlayRef.updatePosition();\n        }\n      });\n    } else {\n      this._scrollSubscription = stream.subscribe(this._detach);\n    }\n  }\n\n  /** Disables the closing the attached overlay on scroll. */\n  disable() {\n    if (this._scrollSubscription) {\n      this._scrollSubscription.unsubscribe();\n      this._scrollSubscription = null;\n    }\n  }\n\n  detach() {\n    this.disable();\n    this._overlayRef = null!;\n  }\n\n  /** Detaches the overlay ref and disables the scroll strategy. */\n  private _detach = () => {\n    this.disable();\n\n    if (this._overlayRef.hasAttached()) {\n      this._ngZone.run(() => this._overlayRef.detach());\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 {ScrollStrategy} from './scroll-strategy';\n\n/** Scroll strategy that doesn't do anything. */\nexport class NoopScrollStrategy implements ScrollStrategy {\n  /** Does nothing, as this scroll strategy is a no-op. */\n  enable() { }\n  /** Does nothing, as this scroll strategy is a no-op. */\n  disable() { }\n  /** Does nothing, as this scroll strategy is a no-op. */\n  attach() { }\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// TODO(jelbourn): move this to live with the rest of the scrolling code\n// TODO(jelbourn): someday replace this with IntersectionObservers\n\n/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is scrolled out of view\n * @docs-private\n */\nexport function isElementScrolledOutsideView(element: ClientRect, scrollContainers: ClientRect[]) {\n  return scrollContainers.some(containerBounds => {\n    const outsideAbove = element.bottom < containerBounds.top;\n    const outsideBelow = element.top > containerBounds.bottom;\n    const outsideLeft = element.right < containerBounds.left;\n    const outsideRight = element.left > containerBounds.right;\n\n    return outsideAbove || outsideBelow || outsideLeft || outsideRight;\n  });\n}\n\n\n/**\n * Gets whether an element is clipped by any of its scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is clipped\n * @docs-private\n */\nexport function isElementClippedByScrolling(element: ClientRect, scrollContainers: ClientRect[]) {\n  return scrollContainers.some(scrollContainerRect => {\n    const clippedAbove = element.top < scrollContainerRect.top;\n    const clippedBelow = element.bottom > scrollContainerRect.bottom;\n    const clippedLeft = element.left < scrollContainerRect.left;\n    const clippedRight = element.right > scrollContainerRect.right;\n\n    return clippedAbove || clippedBelow || clippedLeft || clippedRight;\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 {NgZone} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ScrollStrategy, getMatScrollStrategyAlreadyAttachedError} from './scroll-strategy';\nimport {OverlayReference} from '../overlay-reference';\nimport {ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {isElementScrolledOutsideView} from '../position/scroll-clip';\n\n/**\n * Config options for the RepositionScrollStrategy.\n */\nexport interface RepositionScrollStrategyConfig {\n  /** Time in milliseconds to throttle the scroll events. */\n  scrollThrottle?: number;\n\n  /** Whether to close the overlay once the user has scrolled away completely. */\n  autoClose?: boolean;\n}\n\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nexport class RepositionScrollStrategy implements ScrollStrategy {\n  private _scrollSubscription: Subscription|null = null;\n  private _overlayRef: OverlayReference;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _viewportRuler: ViewportRuler,\n    private _ngZone: NgZone,\n    private _config?: RepositionScrollStrategyConfig) { }\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach(overlayRef: OverlayReference) {\n    if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatScrollStrategyAlreadyAttachedError();\n    }\n\n    this._overlayRef = overlayRef;\n  }\n\n  /** Enables repositioning of the attached overlay on scroll. */\n  enable() {\n    if (!this._scrollSubscription) {\n      const throttle = this._config ? this._config.scrollThrottle : 0;\n\n      this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => {\n        this._overlayRef.updatePosition();\n\n        // TODO(crisbeto): make `close` on by default once all components can handle it.\n        if (this._config && this._config.autoClose) {\n          const overlayRect = this._overlayRef.overlayElement.getBoundingClientRect();\n          const {width, height} = this._viewportRuler.getViewportSize();\n\n          // TODO(crisbeto): include all ancestor scroll containers here once\n          // we have a way of exposing the trigger element to the scroll strategy.\n          const parentRects = [{width, height, bottom: height, right: width, top: 0, left: 0}];\n\n          if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n            this.disable();\n            this._ngZone.run(() => this._overlayRef.detach());\n          }\n        }\n      });\n    }\n  }\n\n  /** Disables repositioning of the attached overlay on scroll. */\n  disable() {\n    if (this._scrollSubscription) {\n      this._scrollSubscription.unsubscribe();\n      this._scrollSubscription = null;\n    }\n  }\n\n  detach() {\n    this.disable();\n    this._overlayRef = null!;\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 {ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable, NgZone} from '@angular/core';\nimport {BlockScrollStrategy} from './block-scroll-strategy';\nimport {CloseScrollStrategy, CloseScrollStrategyConfig} from './close-scroll-strategy';\nimport {NoopScrollStrategy} from './noop-scroll-strategy';\nimport {\n  RepositionScrollStrategy,\n  RepositionScrollStrategyConfig,\n} from './reposition-scroll-strategy';\n\n\n/**\n * Options for how an overlay will handle scrolling.\n *\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollStrategyOptions {\n  private _document: Document;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _viewportRuler: ViewportRuler,\n    private _ngZone: NgZone,\n    @Inject(DOCUMENT) document: any) {\n      this._document = document;\n    }\n\n  /** Do nothing on scroll. */\n  noop = () => new NoopScrollStrategy();\n\n  /**\n   * Close the overlay as soon as the user scrolls.\n   * @param config Configuration to be used inside the scroll strategy.\n   */\n  close = (config?: CloseScrollStrategyConfig) => new CloseScrollStrategy(this._scrollDispatcher,\n      this._ngZone, this._viewportRuler, config)\n\n  /** Block scrolling. */\n  block = () => new BlockScrollStrategy(this._viewportRuler, this._document);\n\n  /**\n   * Update the overlay's position on scroll.\n   * @param config Configuration to be used inside the scroll strategy.\n   * Allows debouncing the reposition calls.\n   */\n  reposition = (config?: RepositionScrollStrategyConfig) => new RepositionScrollStrategy(\n      this._scrollDispatcher, this._viewportRuler, this._ngZone, config)\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\nexport {CdkScrollable, ScrollDispatcher} from '@angular/cdk/scrolling';\n\n// Export pre-defined scroll strategies and interface to build custom ones.\nexport {ScrollStrategy} from './scroll-strategy';\nexport {ScrollStrategyOptions} from './scroll-strategy-options';\nexport {\n  RepositionScrollStrategy,\n  RepositionScrollStrategyConfig\n} from './reposition-scroll-strategy';\nexport {CloseScrollStrategy} from './close-scroll-strategy';\nexport {NoopScrollStrategy} from './noop-scroll-strategy';\nexport {BlockScrollStrategy} from './block-scroll-strategy';\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 {PositionStrategy} from './position/position-strategy';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ScrollStrategy, NoopScrollStrategy} from './scroll/index';\n\n\n/** Initial configuration used when creating an overlay. */\nexport class OverlayConfig {\n  /** Strategy with which to position the overlay. */\n  positionStrategy?: PositionStrategy;\n\n  /** Strategy to be used when handling scroll events while the overlay is open. */\n  scrollStrategy?: ScrollStrategy = new NoopScrollStrategy();\n\n  /** Custom class to add to the overlay pane. */\n  panelClass?: string | string[] = '';\n\n  /** Whether the overlay has a backdrop. */\n  hasBackdrop?: boolean = false;\n\n  /** Custom class to add to the backdrop */\n  backdropClass?: string | string[] = 'cdk-overlay-dark-backdrop';\n\n  /** The width of the overlay panel. If a number is provided, pixel units are assumed. */\n  width?: number | string;\n\n  /** The height of the overlay panel. If a number is provided, pixel units are assumed. */\n  height?: number | string;\n\n  /** The min-width of the overlay panel. If a number is provided, pixel units are assumed. */\n  minWidth?: number | string;\n\n  /** The min-height of the overlay panel. If a number is provided, pixel units are assumed. */\n  minHeight?: number | string;\n\n  /** The max-width of the overlay panel. If a number is provided, pixel units are assumed. */\n  maxWidth?: number | string;\n\n  /** The max-height of the overlay panel. If a number is provided, pixel units are assumed. */\n  maxHeight?: number | string;\n\n  /**\n   * Direction of the text in the overlay panel. If a `Directionality` instance\n   * is passed in, the overlay will handle changes to its value automatically.\n   */\n  direction?: Direction | Directionality;\n\n  /**\n   * Whether the overlay should be disposed of when the user goes backwards/forwards in history.\n   * Note that this usually doesn't include clicking on links (unless the user is using\n   * the `HashLocationStrategy`).\n   */\n  disposeOnNavigation?: boolean = false;\n\n  constructor(config?: OverlayConfig) {\n    if (config) {\n      // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n      // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n      // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n      const configKeys =\n          Object.keys(config) as Iterable<keyof OverlayConfig> & (keyof OverlayConfig)[];\n      for (const key of configKeys) {\n        if (config[key] !== undefined) {\n          // TypeScript, as of version 3.5, sees the left-hand-side of this expression\n          // as \"I don't know *which* key this is, so the only valid value is the intersection\n          // of all the posible values.\" In this case, that happens to be `undefined`. TypeScript\n          // is not smart enough to see that the right-hand-side is actually an access of the same\n          // exact type with the same exact key, meaning that the value type must be identical.\n          // So we use `any` to work around this.\n          this[key] = config[key] as any;\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\n/** Horizontal dimension of a connection point on the perimeter of the origin or overlay element. */\nimport {Optional} from '@angular/core';\nexport type HorizontalConnectionPos = 'start' | 'center' | 'end';\n\n/** Vertical dimension of a connection point on the perimeter of the origin or overlay element. */\nexport type VerticalConnectionPos = 'top' | 'center' | 'bottom';\n\n\n/** A connection point on the origin element. */\nexport interface OriginConnectionPosition {\n  originX: HorizontalConnectionPos;\n  originY: VerticalConnectionPos;\n}\n\n/** A connection point on the overlay element. */\nexport interface OverlayConnectionPosition {\n  overlayX: HorizontalConnectionPos;\n  overlayY: VerticalConnectionPos;\n}\n\n/** The points of the origin element and the overlay element to connect. */\nexport class ConnectionPositionPair {\n  /** X-axis attachment point for connected overlay origin. Can be 'start', 'end', or 'center'. */\n  originX: HorizontalConnectionPos;\n  /** Y-axis attachment point for connected overlay origin. Can be 'top', 'bottom', or 'center'. */\n  originY: VerticalConnectionPos;\n  /** X-axis attachment point for connected overlay. Can be 'start', 'end', or 'center'. */\n  overlayX: HorizontalConnectionPos;\n  /** Y-axis attachment point for connected overlay. Can be 'top', 'bottom', or 'center'. */\n  overlayY: VerticalConnectionPos;\n\n  constructor(\n    origin: OriginConnectionPosition,\n    overlay: OverlayConnectionPosition,\n    /** Offset along the X axis. */\n    public offsetX?: number,\n    /** Offset along the Y axis. */\n    public offsetY?: number,\n    /** Class(es) to be applied to the panel while this position is active. */\n    public panelClass?: string | string[]) {\n\n    this.originX = origin.originX;\n    this.originY = origin.originY;\n    this.overlayX = overlay.overlayX;\n    this.overlayY = overlay.overlayY;\n  }\n}\n\n/**\n * Set of properties regarding the position of the origin and overlay relative to the viewport\n * with respect to the containing Scrollable elements.\n *\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\n *\n * The overlay and origin are outside view if there is no overlap between their bounding client\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\n *\n *       -----------                    -----------\n *       | outside |                    | clipped |\n *       |  view   |              --------------------------\n *       |         |              |     |         |        |\n *       ----------               |     -----------        |\n *  --------------------------    |                        |\n *  |                        |    |      Scrollable        |\n *  |                        |    |                        |\n *  |                        |     --------------------------\n *  |      Scrollable        |\n *  |                        |\n *  --------------------------\n *\n *  @docs-private\n */\nexport class ScrollingVisibility {\n  isOriginClipped: boolean;\n  isOriginOutsideView: boolean;\n  isOverlayClipped: boolean;\n  isOverlayOutsideView: boolean;\n}\n\n/** The change event emitted by the strategy when a fallback position is used. */\nexport class ConnectedOverlayPositionChange {\n  constructor(\n      /** The position used as a result of this change. */\n      public connectionPair: ConnectionPositionPair,\n      /** @docs-private */\n      @Optional() public scrollableViewProperties: ScrollingVisibility) {}\n}\n\n/**\n * Validates whether a vertical position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nexport function validateVerticalPosition(property: string, value: VerticalConnectionPos) {\n  if (value !== 'top' && value !== 'bottom' && value !== 'center') {\n    throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n                `Expected \"top\", \"bottom\" or \"center\".`);\n  }\n}\n\n/**\n * Validates whether a horizontal position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nexport function validateHorizontalPosition(property: string, value: HorizontalConnectionPos) {\n  if (value !== 'start' && value !== 'end' && value !== 'center') {\n    throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n                `Expected \"start\", \"end\" or \"center\".`);\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 {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {OverlayReference} from '../overlay-reference';\n\n\n/**\n * Service for dispatching events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Injectable({providedIn: 'root'})\nexport abstract class BaseOverlayDispatcher implements OnDestroy {\n\n  /** Currently attached overlays in the order they were attached. */\n  _attachedOverlays: OverlayReference[] = [];\n\n  protected _document: Document;\n  protected _isAttached: boolean;\n\n  constructor(@Inject(DOCUMENT) document: any) {\n    this._document = document;\n  }\n\n  ngOnDestroy(): void {\n    this.detach();\n  }\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  add(overlayRef: OverlayReference): void {\n    // Ensure that we don't get the same overlay multiple times.\n    this.remove(overlayRef);\n    this._attachedOverlays.push(overlayRef);\n  }\n\n  /** Remove an overlay from the list of attached overlay refs. */\n  remove(overlayRef: OverlayReference): void {\n    const index = this._attachedOverlays.indexOf(overlayRef);\n\n    if (index > -1) {\n      this._attachedOverlays.splice(index, 1);\n    }\n\n    // Remove the global listener once there are no more overlays.\n    if (this._attachedOverlays.length === 0) {\n      this.detach();\n    }\n  }\n\n  /** Detaches the global event listener. */\n  protected abstract detach(): 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\nimport {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\nimport {OverlayReference} from '../overlay-reference';\nimport {BaseOverlayDispatcher} from './base-overlay-dispatcher';\n\n\n/**\n * Service for dispatching keyboard events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Injectable({providedIn: 'root'})\nexport class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {\n\n  constructor(@Inject(DOCUMENT) document: any) {\n    super(document);\n  }\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  override add(overlayRef: OverlayReference): void {\n    super.add(overlayRef);\n\n    // Lazily start dispatcher once first overlay is added\n    if (!this._isAttached) {\n      this._document.body.addEventListener('keydown', this._keydownListener);\n      this._isAttached = true;\n    }\n  }\n\n  /** Detaches the global keyboard event listener. */\n  protected detach() {\n    if (this._isAttached) {\n      this._document.body.removeEventListener('keydown', this._keydownListener);\n      this._isAttached = false;\n    }\n  }\n\n  /** Keyboard event listener that will be attached to the body. */\n  private _keydownListener = (event: KeyboardEvent) => {\n    const overlays = this._attachedOverlays;\n\n    for (let i = overlays.length - 1; i > -1; i--) {\n      // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.\n      // We want to target the most recent overlay, rather than trying to match where the event came\n      // from, because some components might open an overlay, but keep focus on a trigger element\n      // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,\n      // because we don't want overlays that don't handle keyboard events to block the ones below\n      // them that do.\n      if (overlays[i]._keydownEvents.observers.length > 0) {\n        overlays[i]._keydownEvents.next(event);\n        break;\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 {Inject, Injectable} from '@angular/core';\nimport {OverlayReference} from '../overlay-reference';\nimport {Platform, _getEventTarget} from '@angular/cdk/platform';\nimport {BaseOverlayDispatcher} from './base-overlay-dispatcher';\n\n/**\n * Service for dispatching mouse click events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Injectable({providedIn: 'root'})\nexport class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {\n  private _cursorOriginalValue: string;\n  private _cursorStyleIsSet = false;\n\n  constructor(@Inject(DOCUMENT) document: any, private _platform: Platform) {\n    super(document);\n  }\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  override add(overlayRef: OverlayReference): void {\n    super.add(overlayRef);\n\n    // Safari on iOS does not generate click events for non-interactive\n    // elements. However, we want to receive a click for any element outside\n    // the overlay. We can force a \"clickable\" state by setting\n    // `cursor: pointer` on the document body. See:\n    // https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile\n    // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n    if (!this._isAttached) {\n      const body = this._document.body;\n      body.addEventListener('click', this._clickListener, true);\n      body.addEventListener('auxclick', this._clickListener, true);\n      body.addEventListener('contextmenu', this._clickListener, true);\n\n      // click event is not fired on iOS. To make element \"clickable\" we are\n      // setting the cursor to pointer\n      if (this._platform.IOS && !this._cursorStyleIsSet) {\n        this._cursorOriginalValue = body.style.cursor;\n        body.style.cursor = 'pointer';\n        this._cursorStyleIsSet = true;\n      }\n\n      this._isAttached = true;\n    }\n  }\n\n  /** Detaches the global keyboard event listener. */\n  protected detach() {\n    if (this._isAttached) {\n      const body = this._document.body;\n      body.removeEventListener('click', this._clickListener, true);\n      body.removeEventListener('auxclick', this._clickListener, true);\n      body.removeEventListener('contextmenu', this._clickListener, true);\n      if (this._platform.IOS && this._cursorStyleIsSet) {\n        body.style.cursor = this._cursorOriginalValue;\n        this._cursorStyleIsSet = false;\n      }\n      this._isAttached = false;\n    }\n  }\n\n  /** Click event listener that will be attached to the body propagate phase. */\n  private _clickListener = (event: MouseEvent) => {\n    const target = _getEventTarget(event);\n    // We copy the array because the original may be modified asynchronously if the\n    // outsidePointerEvents listener decides to detach overlays resulting in index errors inside\n    // the for loop.\n    const overlays = this._attachedOverlays.slice();\n\n    // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.\n    // We want to target all overlays for which the click could be considered as outside click.\n    // As soon as we reach an overlay for which the click is not outside click we break off\n    // the loop.\n    for (let i = overlays.length - 1; i > -1; i--) {\n      const overlayRef = overlays[i];\n      if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {\n        continue;\n      }\n\n      // If it's a click inside the overlay, just break - we should do nothing\n      // If it's an outside click dispatch the mouse event, and proceed with the next overlay\n      if (overlayRef.overlayElement.contains(target as Node)) {\n        break;\n      }\n\n      overlayRef._outsidePointerEvents.next(event);\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 {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {Platform, _isTestEnvironment} from '@angular/cdk/platform';\n\n/** Container inside which all overlays will render. */\n@Injectable({providedIn: 'root'})\nexport class OverlayContainer implements OnDestroy {\n  protected _containerElement: HTMLElement;\n  protected _document: Document;\n\n  constructor(@Inject(DOCUMENT) document: any, protected _platform: Platform) {\n    this._document = document;\n  }\n\n  ngOnDestroy() {\n    const container = this._containerElement;\n\n    if (container && container.parentNode) {\n      container.parentNode.removeChild(container);\n    }\n  }\n\n  /**\n   * This method returns the overlay container element. It will lazily\n   * create the element the first time it is called to facilitate using\n   * the container in non-browser environments.\n   * @returns the container element\n   */\n  getContainerElement(): HTMLElement {\n    if (!this._containerElement) {\n      this._createContainer();\n    }\n\n    return this._containerElement;\n  }\n\n  /**\n   * Create the overlay container element, which is simply a div\n   * with the 'cdk-overlay-container' class on the document body.\n   */\n  protected _createContainer(): void {\n    const containerClass = 'cdk-overlay-container';\n\n    // TODO(crisbeto): remove the testing check once we have an overlay testing\n    // module or Angular starts tearing down the testing `NgModule`. See:\n    // https://github.com/angular/angular/issues/18831\n    if (this._platform.isBrowser || _isTestEnvironment()) {\n      const oppositePlatformContainers =\n          this._document.querySelectorAll(`.${containerClass}[platform=\"server\"], ` +\n                                          `.${containerClass}[platform=\"test\"]`);\n\n      // Remove any old containers from the opposite platform.\n      // This can happen when transitioning from the server to the client.\n      for (let i = 0; i < oppositePlatformContainers.length; i++) {\n        oppositePlatformContainers[i].parentNode!.removeChild(oppositePlatformContainers[i]);\n      }\n    }\n\n    const container = this._document.createElement('div');\n    container.classList.add(containerClass);\n\n    // A long time ago we kept adding new overlay containers whenever a new app was instantiated,\n    // but at some point we added logic which clears the duplicate ones in order to avoid leaks.\n    // The new logic was a little too aggressive since it was breaking some legitimate use cases.\n    // To mitigate the problem we made it so that only containers from a different platform are\n    // cleared, but the side-effect was that people started depending on the overly-aggressive\n    // logic to clean up their tests for them. Until we can introduce an overlay-specific testing\n    // module which does the cleanup, we try to detect that we're in a test environment and we\n    // always clear the container. See #17006.\n    // TODO(crisbeto): remove the test environment check once we have an overlay testing module.\n    if (_isTestEnvironment()) {\n      container.setAttribute('platform', 'test');\n    } else if (!this._platform.isBrowser) {\n      container.setAttribute('platform', 'server');\n    }\n\n    this._document.body.appendChild(container);\n    this._containerElement = container;\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 {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ComponentPortal, Portal, PortalOutlet, TemplatePortal} from '@angular/cdk/portal';\nimport {ComponentRef, EmbeddedViewRef, NgZone} from '@angular/core';\nimport {Location} from '@angular/common';\nimport {Observable, Subject, merge, SubscriptionLike, Subscription} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\nimport {OverlayKeyboardDispatcher} from './dispatchers/overlay-keyboard-dispatcher';\nimport {OverlayOutsideClickDispatcher} from './dispatchers/overlay-outside-click-dispatcher';\nimport {OverlayConfig} from './overlay-config';\nimport {coerceCssPixelValue, coerceArray} from '@angular/cdk/coercion';\nimport {OverlayReference} from './overlay-reference';\nimport {PositionStrategy} from './position/position-strategy';\nimport {ScrollStrategy} from './scroll';\n\n\n/** An object where all of its properties cannot be written. */\nexport type ImmutableObject<T> = {\n  readonly [P in keyof T]: T[P];\n};\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nexport class OverlayRef implements PortalOutlet, OverlayReference {\n  private _backdropElement: HTMLElement | null = null;\n  private readonly _backdropClick = new Subject<MouseEvent>();\n  private readonly _attachments = new Subject<void>();\n  private readonly _detachments = new Subject<void>();\n  private _positionStrategy: PositionStrategy | undefined;\n  private _scrollStrategy: ScrollStrategy | undefined;\n  private _locationChanges: SubscriptionLike = Subscription.EMPTY;\n  private _backdropClickHandler = (event: MouseEvent) => this._backdropClick.next(event);\n\n  /**\n   * Reference to the parent of the `_host` at the time it was detached. Used to restore\n   * the `_host` to its original position in the DOM when it gets re-attached.\n   */\n  private _previousHostParent: HTMLElement;\n\n  /** Stream of keydown events dispatched to this overlay. */\n  readonly _keydownEvents = new Subject<KeyboardEvent>();\n\n  /** Stream of mouse outside events dispatched to this overlay. */\n  readonly _outsidePointerEvents = new Subject<MouseEvent>();\n\n  constructor(\n      private _portalOutlet: PortalOutlet,\n      private _host: HTMLElement,\n      private _pane: HTMLElement,\n      private _config: ImmutableObject<OverlayConfig>,\n      private _ngZone: NgZone,\n      private _keyboardDispatcher: OverlayKeyboardDispatcher,\n      private _document: Document,\n      private _location: Location,\n      private _outsideClickDispatcher: OverlayOutsideClickDispatcher) {\n\n    if (_config.scrollStrategy) {\n      this._scrollStrategy = _config.scrollStrategy;\n      this._scrollStrategy.attach(this);\n    }\n\n    this._positionStrategy = _config.positionStrategy;\n  }\n\n  /** The overlay's HTML element */\n  get overlayElement(): HTMLElement {\n    return this._pane;\n  }\n\n  /** The overlay's backdrop HTML element. */\n  get backdropElement(): HTMLElement | null {\n    return this._backdropElement;\n  }\n\n  /**\n   * Wrapper around the panel element. Can be used for advanced\n   * positioning where a wrapper with specific styling is\n   * required around the overlay pane.\n   */\n  get hostElement(): HTMLElement {\n    return this._host;\n  }\n\n  attach<T>(portal: ComponentPortal<T>): ComponentRef<T>;\n  attach<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T>;\n  attach(portal: any): any;\n\n  /**\n   * Attaches content, given via a Portal, to the overlay.\n   * If the overlay is configured to have a backdrop, it will be created.\n   *\n   * @param portal Portal instance to which to attach the overlay.\n   * @returns The portal attachment result.\n   */\n  attach(portal: Portal<any>): any {\n    let attachResult = this._portalOutlet.attach(portal);\n\n    // Update the pane element with the given configuration.\n    if (!this._host.parentElement && this._previousHostParent) {\n      this._previousHostParent.appendChild(this._host);\n    }\n\n    if (this._positionStrategy) {\n      this._positionStrategy.attach(this);\n    }\n\n    this._updateStackingOrder();\n    this._updateElementSize();\n    this._updateElementDirection();\n\n    if (this._scrollStrategy) {\n      this._scrollStrategy.enable();\n    }\n\n    // Update the position once the zone is stable so that the overlay will be fully rendered\n    // before attempting to position it, as the position may depend on the size of the rendered\n    // content.\n    this._ngZone.onStable\n      .pipe(take(1))\n      .subscribe(() => {\n        // The overlay could've been detached before the zone has stabilized.\n        if (this.hasAttached()) {\n          this.updatePosition();\n        }\n      });\n\n    // Enable pointer events for the overlay pane element.\n    this._togglePointerEvents(true);\n\n    if (this._config.hasBackdrop) {\n      this._attachBackdrop();\n    }\n\n    if (this._config.panelClass) {\n      this._toggleClasses(this._pane, this._config.panelClass, true);\n    }\n\n    // Only emit the `attachments` event once all other setup is done.\n    this._attachments.next();\n\n    // Track this overlay by the keyboard dispatcher\n    this._keyboardDispatcher.add(this);\n\n    if (this._config.disposeOnNavigation) {\n      this._locationChanges = this._location.subscribe(() => this.dispose());\n    }\n\n    this._outsideClickDispatcher.add(this);\n    return attachResult;\n  }\n\n  /**\n   * Detaches an overlay from a portal.\n   * @returns The portal detachment result.\n   */\n  detach(): any {\n    if (!this.hasAttached()) {\n      return;\n    }\n\n    this.detachBackdrop();\n\n    // When the overlay is detached, the pane element should disable pointer events.\n    // This is necessary because otherwise the pane element will cover the page and disable\n    // pointer events therefore. Depends on the position strategy and the applied pane boundaries.\n    this._togglePointerEvents(false);\n\n    if (this._positionStrategy && this._positionStrategy.detach) {\n      this._positionStrategy.detach();\n    }\n\n    if (this._scrollStrategy) {\n      this._scrollStrategy.disable();\n    }\n\n    const detachmentResult = this._portalOutlet.detach();\n\n    // Only emit after everything is detached.\n    this._detachments.next();\n\n    // Remove this overlay from keyboard dispatcher tracking.\n    this._keyboardDispatcher.remove(this);\n\n    // Keeping the host element in the DOM can cause scroll jank, because it still gets\n    // rendered, even though it's transparent and unclickable which is why we remove it.\n    this._detachContentWhenStable();\n    this._locationChanges.unsubscribe();\n    this._outsideClickDispatcher.remove(this);\n    return detachmentResult;\n  }\n\n  /** Cleans up the overlay from the DOM. */\n  dispose(): void {\n    const isAttached = this.hasAttached();\n\n    if (this._positionStrategy) {\n      this._positionStrategy.dispose();\n    }\n\n    this._disposeScrollStrategy();\n    this._disposeBackdrop(this._backdropElement);\n    this._locationChanges.unsubscribe();\n    this._keyboardDispatcher.remove(this);\n    this._portalOutlet.dispose();\n    this._attachments.complete();\n    this._backdropClick.complete();\n    this._keydownEvents.complete();\n    this._outsidePointerEvents.complete();\n    this._outsideClickDispatcher.remove(this);\n\n    if (this._host && this._host.parentNode) {\n      this._host.parentNode.removeChild(this._host);\n      this._host = null!;\n    }\n\n    this._previousHostParent = this._pane = null!;\n\n    if (isAttached) {\n      this._detachments.next();\n    }\n\n    this._detachments.complete();\n  }\n\n  /** Whether the overlay has attached content. */\n  hasAttached(): boolean {\n    return this._portalOutlet.hasAttached();\n  }\n\n  /** Gets an observable that emits when the backdrop has been clicked. */\n  backdropClick(): Observable<MouseEvent> {\n    return this._backdropClick;\n  }\n\n  /** Gets an observable that emits when the overlay has been attached. */\n  attachments(): Observable<void> {\n    return this._attachments;\n  }\n\n  /** Gets an observable that emits when the overlay has been detached. */\n  detachments(): Observable<void> {\n    return this._detachments;\n  }\n\n  /** Gets an observable of keydown events targeted to this overlay. */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this._keydownEvents;\n  }\n\n  /** Gets an observable of pointer events targeted outside this overlay. */\n  outsidePointerEvents(): Observable<MouseEvent> {\n    return this._outsidePointerEvents;\n  }\n\n  /** Gets the current overlay configuration, which is immutable. */\n  getConfig(): OverlayConfig {\n    return this._config;\n  }\n\n  /** Updates the position of the overlay based on the position strategy. */\n  updatePosition(): void {\n    if (this._positionStrategy) {\n      this._positionStrategy.apply();\n    }\n  }\n\n  /** Switches to a new position strategy and updates the overlay position. */\n  updatePositionStrategy(strategy: PositionStrategy): void {\n    if (strategy === this._positionStrategy) {\n      return;\n    }\n\n    if (this._positionStrategy) {\n      this._positionStrategy.dispose();\n    }\n\n    this._positionStrategy = strategy;\n\n    if (this.hasAttached()) {\n      strategy.attach(this);\n      this.updatePosition();\n    }\n  }\n\n  /** Update the size properties of the overlay. */\n  updateSize(sizeConfig: OverlaySizeConfig): void {\n    this._config = {...this._config, ...sizeConfig};\n    this._updateElementSize();\n  }\n\n  /** Sets the LTR/RTL direction for the overlay. */\n  setDirection(dir: Direction | Directionality): void {\n    this._config = {...this._config, direction: dir};\n    this._updateElementDirection();\n  }\n\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes: string | string[]): void {\n    if (this._pane) {\n      this._toggleClasses(this._pane, classes, true);\n    }\n  }\n\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes: string | string[]): void {\n    if (this._pane) {\n      this._toggleClasses(this._pane, classes, false);\n    }\n  }\n\n  /**\n   * Returns the layout direction of the overlay panel.\n   */\n  getDirection(): Direction {\n    const direction = this._config.direction;\n\n    if (!direction) {\n      return 'ltr';\n    }\n\n    return typeof direction === 'string' ? direction : direction.value;\n  }\n\n  /** Switches to a new scroll strategy. */\n  updateScrollStrategy(strategy: ScrollStrategy): void {\n    if (strategy === this._scrollStrategy) {\n      return;\n    }\n\n    this._disposeScrollStrategy();\n    this._scrollStrategy = strategy;\n\n    if (this.hasAttached()) {\n      strategy.attach(this);\n      strategy.enable();\n    }\n  }\n\n  /** Updates the text direction of the overlay panel. */\n  private _updateElementDirection() {\n    this._host.setAttribute('dir', this.getDirection());\n  }\n\n  /** Updates the size of the overlay element based on the overlay config. */\n  private _updateElementSize() {\n    if (!this._pane) {\n      return;\n    }\n\n    const style = this._pane.style;\n\n    style.width = coerceCssPixelValue(this._config.width);\n    style.height = coerceCssPixelValue(this._config.height);\n    style.minWidth = coerceCssPixelValue(this._config.minWidth);\n    style.minHeight = coerceCssPixelValue(this._config.minHeight);\n    style.maxWidth = coerceCssPixelValue(this._config.maxWidth);\n    style.maxHeight = coerceCssPixelValue(this._config.maxHeight);\n  }\n\n  /** Toggles the pointer events for the overlay pane element. */\n  private _togglePointerEvents(enablePointer: boolean) {\n    this._pane.style.pointerEvents = enablePointer ? '' : 'none';\n  }\n\n  /** Attaches a backdrop for this overlay. */\n  private _attachBackdrop() {\n    const showingClass = 'cdk-overlay-backdrop-showing';\n\n    this._backdropElement = this._document.createElement('div');\n    this._backdropElement.classList.add('cdk-overlay-backdrop');\n\n    if (this._config.backdropClass) {\n      this._toggleClasses(this._backdropElement, this._config.backdropClass, true);\n    }\n\n    // Insert the backdrop before the pane in the DOM order,\n    // in order to handle stacked overlays properly.\n    this._host.parentElement!.insertBefore(this._backdropElement, this._host);\n\n    // Forward backdrop clicks such that the consumer of the overlay can perform whatever\n    // action desired when such a click occurs (usually closing the overlay).\n    this._backdropElement.addEventListener('click', this._backdropClickHandler);\n\n    // Add class to fade-in the backdrop after one frame.\n    if (typeof requestAnimationFrame !== 'undefined') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          if (this._backdropElement) {\n            this._backdropElement.classList.add(showingClass);\n          }\n        });\n      });\n    } else {\n      this._backdropElement.classList.add(showingClass);\n    }\n  }\n\n  /**\n   * Updates the stacking order of the element, moving it to the top if necessary.\n   * This is required in cases where one overlay was detached, while another one,\n   * that should be behind it, was destroyed. The next time both of them are opened,\n   * the stacking will be wrong, because the detached element's pane will still be\n   * in its original DOM position.\n   */\n  private _updateStackingOrder() {\n    if (this._host.nextSibling) {\n      this._host.parentNode!.appendChild(this._host);\n    }\n  }\n\n  /** Detaches the backdrop (if any) associated with the overlay. */\n  detachBackdrop(): void {\n    const backdropToDetach = this._backdropElement;\n\n    if (!backdropToDetach) {\n      return;\n    }\n\n    let timeoutId: any;\n    const finishDetach = () => {\n      // It may not be attached to anything in certain cases (e.g. unit tests).\n      if (backdropToDetach) {\n        backdropToDetach.removeEventListener('click', this._backdropClickHandler);\n        backdropToDetach.removeEventListener('transitionend', finishDetach);\n        this._disposeBackdrop(backdropToDetach);\n      }\n\n      if (this._config.backdropClass) {\n        this._toggleClasses(backdropToDetach!, this._config.backdropClass, false);\n      }\n\n      clearTimeout(timeoutId);\n    };\n\n    backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\n\n    this._ngZone.runOutsideAngular(() => {\n      backdropToDetach!.addEventListener('transitionend', finishDetach);\n    });\n\n    // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\n    // In this case we make it unclickable and we try to remove it after a delay.\n    backdropToDetach.style.pointerEvents = 'none';\n\n    // Run this outside the Angular zone because there's nothing that Angular cares about.\n    // If it were to run inside the Angular zone, every test that used Overlay would have to be\n    // either async or fakeAsync.\n    timeoutId = this._ngZone.runOutsideAngular(() => setTimeout(finishDetach, 500));\n  }\n\n  /** Toggles a single CSS class or an array of classes on an element. */\n  private _toggleClasses(element: HTMLElement, cssClasses: string | string[], isAdd: boolean) {\n    const classList = element.classList;\n\n    coerceArray(cssClasses).forEach(cssClass => {\n      // We can't do a spread here, because IE doesn't support setting multiple classes.\n      // Also trying to add an empty string to a DOMTokenList will throw.\n      if (cssClass) {\n        isAdd ? classList.add(cssClass) : classList.remove(cssClass);\n      }\n    });\n  }\n\n  /** Detaches the overlay content next time the zone stabilizes. */\n  private _detachContentWhenStable() {\n    // Normally we wouldn't have to explicitly run this outside the `NgZone`, however\n    // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will\n    // be patched to run inside the zone, which will throw us into an infinite loop.\n    this._ngZone.runOutsideAngular(() => {\n      // We can't remove the host here immediately, because the overlay pane's content\n      // might still be animating. This stream helps us avoid interrupting the animation\n      // by waiting for the pane to become empty.\n      const subscription = this._ngZone.onStable\n        .pipe(takeUntil(merge(this._attachments, this._detachments)))\n        .subscribe(() => {\n          // Needs a couple of checks for the pane and host, because\n          // they may have been removed by the time the zone stabilizes.\n          if (!this._pane || !this._host || this._pane.children.length === 0) {\n            if (this._pane && this._config.panelClass) {\n              this._toggleClasses(this._pane, this._config.panelClass, false);\n            }\n\n            if (this._host && this._host.parentElement) {\n              this._previousHostParent = this._host.parentElement;\n              this._previousHostParent.removeChild(this._host);\n            }\n\n            subscription.unsubscribe();\n          }\n        });\n    });\n  }\n\n  /** Disposes of a scroll strategy. */\n  private _disposeScrollStrategy() {\n    const scrollStrategy = this._scrollStrategy;\n\n    if (scrollStrategy) {\n      scrollStrategy.disable();\n\n      if (scrollStrategy.detach) {\n        scrollStrategy.detach();\n      }\n    }\n  }\n\n  /** Removes a backdrop element from the DOM. */\n  private _disposeBackdrop(backdrop: HTMLElement | null) {\n    if (backdrop) {\n      if (backdrop.parentNode) {\n        backdrop.parentNode.removeChild(backdrop);\n      }\n\n      // It is possible that a new portal has been attached to this overlay since we started\n      // removing the backdrop. If that is the case, only clear the backdrop reference if it\n      // is still the same instance that we started to remove.\n      if (this._backdropElement === backdrop) {\n        this._backdropElement = null;\n      }\n    }\n  }\n}\n\n\n/** Size properties for an overlay. */\nexport interface OverlaySizeConfig {\n  width?: number | string;\n  height?: number | string;\n  minWidth?: number | string;\n  minHeight?: number | string;\n  maxWidth?: number | string;\n  maxHeight?: number | string;\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 {PositionStrategy} from './position-strategy';\nimport {ElementRef} from '@angular/core';\nimport {ViewportRuler, CdkScrollable, ViewportScrollPosition} from '@angular/cdk/scrolling';\nimport {\n  ConnectedOverlayPositionChange,\n  ConnectionPositionPair,\n  ScrollingVisibility,\n  validateHorizontalPosition,\n  validateVerticalPosition,\n} from './connected-position';\nimport {Observable, Subscription, Subject} from 'rxjs';\nimport {OverlayReference} from '../overlay-reference';\nimport {isElementScrolledOutsideView, isElementClippedByScrolling} from './scroll-clip';\nimport {coerceCssPixelValue, coerceArray} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {OverlayContainer} from '../overlay-container';\n\n// TODO: refactor clipping detection into a separate thing (part of scrolling module)\n// TODO: doesn't handle both flexible width and height when it has to scroll along both axis.\n\n/** Class to be added to the overlay bounding box. */\nconst boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\n\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n\n/** Possible values that can be set as the origin of a FlexibleConnectedPositionStrategy. */\nexport type FlexibleConnectedPositionStrategyOrigin = ElementRef | Element | Point & {\n  width?: number;\n  height?: number;\n};\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n */\nexport class FlexibleConnectedPositionStrategy implements PositionStrategy {\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef: OverlayReference;\n\n  /** Whether we're performing the very first positioning of the overlay. */\n  private _isInitialRender: boolean;\n\n  /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\n  private _lastBoundingBoxSize = {width: 0, height: 0};\n\n  /** Whether the overlay was pushed in a previous positioning. */\n  private _isPushed = false;\n\n  /** Whether the overlay can be pushed on-screen on the initial open. */\n  private _canPush = true;\n\n  /** Whether the overlay can grow via flexible width/height after the initial open. */\n  private _growAfterOpen = false;\n\n  /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n  private _hasFlexibleDimensions = true;\n\n  /** Whether the overlay position is locked. */\n  private _positionLocked = false;\n\n  /** Cached origin dimensions */\n  private _originRect: ClientRect;\n\n  /** Cached overlay dimensions */\n  private _overlayRect: ClientRect;\n\n  /** Cached viewport dimensions */\n  private _viewportRect: ClientRect;\n\n  /** Amount of space that must be maintained between the overlay and the edge of the viewport. */\n  private _viewportMargin = 0;\n\n  /** The Scrollable containers used to check scrollable view properties on position change. */\n  private _scrollables: CdkScrollable[] = [];\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  _preferredPositions: ConnectionPositionPair[] = [];\n\n  /** The origin element against which the overlay will be positioned. */\n  private _origin: FlexibleConnectedPositionStrategyOrigin;\n\n  /** The overlay pane element. */\n  private _pane: HTMLElement;\n\n  /** Whether the strategy has been disposed of already. */\n  private _isDisposed: boolean;\n\n  /**\n   * Parent element for the overlay panel used to constrain the overlay panel's size to fit\n   * within the viewport.\n   */\n  private _boundingBox: HTMLElement | null;\n\n  /** The last position to have been calculated as the best fit position. */\n  private _lastPosition: ConnectedPosition | null;\n\n  /** Subject that emits whenever the position changes. */\n  private readonly _positionChanges = new Subject<ConnectedOverlayPositionChange>();\n\n  /** Subscription to viewport size changes. */\n  private _resizeSubscription = Subscription.EMPTY;\n\n  /** Default offset for the overlay along the x axis. */\n  private _offsetX = 0;\n\n  /** Default offset for the overlay along the y axis. */\n  private _offsetY = 0;\n\n  /** Selector to be used when finding the elements on which to set the transform origin. */\n  private _transformOriginSelector: string;\n\n  /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\n  private _appliedPanelClasses: string[] = [];\n\n  /** Amount by which the overlay was pushed in each axis during the last time it was positioned. */\n  private _previousPushAmount: {x: number, y: number} | null;\n\n  /** Observable sequence of position changes. */\n  positionChanges: Observable<ConnectedOverlayPositionChange> = this._positionChanges;\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  get positions(): ConnectionPositionPair[] {\n    return this._preferredPositions;\n  }\n\n  constructor(\n      connectedTo: FlexibleConnectedPositionStrategyOrigin, private _viewportRuler: ViewportRuler,\n      private _document: Document, private _platform: Platform,\n      private _overlayContainer: OverlayContainer) {\n    this.setOrigin(connectedTo);\n  }\n\n  /** Attaches this position strategy to an overlay. */\n  attach(overlayRef: OverlayReference): void {\n    if (this._overlayRef && overlayRef !== this._overlayRef &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('This position strategy is already attached to an overlay');\n    }\n\n    this._validatePositions();\n\n    overlayRef.hostElement.classList.add(boundingBoxClass);\n\n    this._overlayRef = overlayRef;\n    this._boundingBox = overlayRef.hostElement;\n    this._pane = overlayRef.overlayElement;\n    this._isDisposed = false;\n    this._isInitialRender = true;\n    this._lastPosition = null;\n    this._resizeSubscription.unsubscribe();\n    this._resizeSubscription = this._viewportRuler.change().subscribe(() => {\n      // When the window is resized, we want to trigger the next reposition as if it\n      // was an initial render, in order for the strategy to pick a new optimal position,\n      // otherwise position locking will cause it to stay at the old one.\n      this._isInitialRender = true;\n      this.apply();\n    });\n  }\n\n  /**\n   * Updates the position of the overlay element, using whichever preferred position relative\n   * to the origin best fits on-screen.\n   *\n   * The selection of a position goes as follows:\n   *  - If any positions fit completely within the viewport as-is,\n   *      choose the first position that does so.\n   *  - If flexible dimensions are enabled and at least one satifies the given minimum width/height,\n   *      choose the position with the greatest available size modified by the positions' weight.\n   *  - If pushing is enabled, take the position that went off-screen the least and push it\n   *      on-screen.\n   *  - If none of the previous criteria were met, use the position that goes off-screen the least.\n   * @docs-private\n   */\n  apply(): void {\n    // We shouldn't do anything if the strategy was disposed or we're on the server.\n    if (this._isDisposed || !this._platform.isBrowser) {\n      return;\n    }\n\n    // If the position has been applied already (e.g. when the overlay was opened) and the\n    // consumer opted into locking in the position, re-use the old position, in order to\n    // prevent the overlay from jumping around.\n    if (!this._isInitialRender && this._positionLocked && this._lastPosition) {\n      this.reapplyLastPosition();\n      return;\n    }\n\n    this._clearPanelClasses();\n    this._resetOverlayElementStyles();\n    this._resetBoundingBoxStyles();\n\n    // We need the bounding rects for the origin and the overlay to determine how to position\n    // the overlay relative to the origin.\n    // We use the viewport rect to determine whether a position would go off-screen.\n    this._viewportRect = this._getNarrowedViewportRect();\n    this._originRect = this._getOriginRect();\n    this._overlayRect = this._pane.getBoundingClientRect();\n\n    const originRect = this._originRect;\n    const overlayRect = this._overlayRect;\n    const viewportRect = this._viewportRect;\n\n    // Positions where the overlay will fit with flexible dimensions.\n    const flexibleFits: FlexibleFit[] = [];\n\n    // Fallback if none of the preferred positions fit within the viewport.\n    let fallback: FallbackPosition | undefined;\n\n    // Go through each of the preferred positions looking for a good fit.\n    // If a good fit is found, it will be applied immediately.\n    for (let pos of this._preferredPositions) {\n      // Get the exact (x, y) coordinate for the point-of-origin on the origin element.\n      let originPoint = this._getOriginPoint(originRect, pos);\n\n      // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the\n      // overlay in this position. We use the top-left corner for calculations and later translate\n      // this into an appropriate (top, left, bottom, right) style.\n      let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos);\n\n      // Calculate how well the overlay would fit into the viewport with this point.\n      let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos);\n\n      // If the overlay, without any further work, fits into the viewport, use this position.\n      if (overlayFit.isCompletelyWithinViewport) {\n        this._isPushed = false;\n        this._applyPosition(pos, originPoint);\n        return;\n      }\n\n      // If the overlay has flexible dimensions, we can use this position\n      // so long as there's enough space for the minimum dimensions.\n      if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) {\n        // Save positions where the overlay will fit with flexible dimensions. We will use these\n        // if none of the positions fit *without* flexible dimensions.\n        flexibleFits.push({\n          position: pos,\n          origin: originPoint,\n          overlayRect,\n          boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos)\n        });\n\n        continue;\n      }\n\n      // If the current preferred position does not fit on the screen, remember the position\n      // if it has more visible area on-screen than we've seen and move onto the next preferred\n      // position.\n      if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) {\n        fallback = {overlayFit, overlayPoint, originPoint, position: pos, overlayRect};\n      }\n    }\n\n    // If there are any positions where the overlay would fit with flexible dimensions, choose the\n    // one that has the greatest area available modified by the position's weight\n    if (flexibleFits.length) {\n      let bestFit: FlexibleFit | null = null;\n      let bestScore = -1;\n      for (const fit of flexibleFits) {\n        const score =\n            fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);\n        if (score > bestScore) {\n          bestScore = score;\n          bestFit = fit;\n        }\n      }\n\n      this._isPushed = false;\n      this._applyPosition(bestFit!.position, bestFit!.origin);\n      return;\n    }\n\n    // When none of the preferred positions fit within the viewport, take the position\n    // that went off-screen the least and attempt to push it on-screen.\n    if (this._canPush) {\n      // TODO(jelbourn): after pushing, the opening \"direction\" of the overlay might not make sense.\n      this._isPushed = true;\n      this._applyPosition(fallback!.position, fallback!.originPoint);\n      return;\n    }\n\n    // All options for getting the overlay within the viewport have been exhausted, so go with the\n    // position that went off-screen the least.\n    this._applyPosition(fallback!.position, fallback!.originPoint);\n  }\n\n  detach(): void {\n    this._clearPanelClasses();\n    this._lastPosition = null;\n    this._previousPushAmount = null;\n    this._resizeSubscription.unsubscribe();\n  }\n\n  /** Cleanup after the element gets destroyed. */\n  dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n\n    // We can't use `_resetBoundingBoxStyles` here, because it resets\n    // some properties to zero, rather than removing them.\n    if (this._boundingBox) {\n      extendStyles(this._boundingBox.style, {\n        top: '',\n        left: '',\n        right: '',\n        bottom: '',\n        height: '',\n        width: '',\n        alignItems: '',\n        justifyContent: '',\n      } as CSSStyleDeclaration);\n    }\n\n    if (this._pane) {\n      this._resetOverlayElementStyles();\n    }\n\n    if (this._overlayRef) {\n      this._overlayRef.hostElement.classList.remove(boundingBoxClass);\n    }\n\n    this.detach();\n    this._positionChanges.complete();\n    this._overlayRef = this._boundingBox = null!;\n    this._isDisposed = true;\n  }\n\n  /**\n   * This re-aligns the overlay element with the trigger in its last calculated position,\n   * even if a position higher in the \"preferred positions\" list would now fit. This\n   * allows one to re-align the panel without changing the orientation of the panel.\n   */\n  reapplyLastPosition(): void {\n    if (!this._isDisposed && (!this._platform || this._platform.isBrowser)) {\n      this._originRect = this._getOriginRect();\n      this._overlayRect = this._pane.getBoundingClientRect();\n      this._viewportRect = this._getNarrowedViewportRect();\n\n      const lastPosition = this._lastPosition || this._preferredPositions[0];\n      const originPoint = this._getOriginPoint(this._originRect, lastPosition);\n\n      this._applyPosition(lastPosition, originPoint);\n    }\n  }\n\n  /**\n   * Sets the list of Scrollable containers that host the origin element so that\n   * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n   * Scrollable must be an ancestor element of the strategy's origin element.\n   */\n  withScrollableContainers(scrollables: CdkScrollable[]): this {\n    this._scrollables = scrollables;\n    return this;\n  }\n\n  /**\n   * Adds new preferred positions.\n   * @param positions List of positions options for this overlay.\n   */\n  withPositions(positions: ConnectedPosition[]): this {\n    this._preferredPositions = positions;\n\n    // If the last calculated position object isn't part of the positions anymore, clear\n    // it in order to avoid it being picked up if the consumer tries to re-apply.\n    if (positions.indexOf(this._lastPosition!) === -1) {\n      this._lastPosition = null;\n    }\n\n    this._validatePositions();\n\n    return this;\n  }\n\n  /**\n   * Sets a minimum distance the overlay may be positioned to the edge of the viewport.\n   * @param margin Required margin between the overlay and the viewport edge in pixels.\n   */\n  withViewportMargin(margin: number): this {\n    this._viewportMargin = margin;\n    return this;\n  }\n\n  /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\n  withFlexibleDimensions(flexibleDimensions = true): this {\n    this._hasFlexibleDimensions = flexibleDimensions;\n    return this;\n  }\n\n  /** Sets whether the overlay can grow after the initial open via flexible width/height. */\n  withGrowAfterOpen(growAfterOpen = true): this {\n    this._growAfterOpen = growAfterOpen;\n    return this;\n  }\n\n  /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\n  withPush(canPush = true): this {\n    this._canPush = canPush;\n    return this;\n  }\n\n  /**\n   * Sets whether the overlay's position should be locked in after it is positioned\n   * initially. When an overlay is locked in, it won't attempt to reposition itself\n   * when the position is re-applied (e.g. when the user scrolls away).\n   * @param isLocked Whether the overlay should locked in.\n   */\n  withLockedPosition(isLocked = true): this {\n    this._positionLocked = isLocked;\n    return this;\n  }\n\n  /**\n   * Sets the origin, relative to which to position the overlay.\n   * Using an element origin is useful for building components that need to be positioned\n   * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be\n   * used for cases like contextual menus which open relative to the user's pointer.\n   * @param origin Reference to the new origin.\n   */\n  setOrigin(origin: FlexibleConnectedPositionStrategyOrigin): this {\n    this._origin = origin;\n    return this;\n  }\n\n  /**\n   * Sets the default offset for the overlay's connection point on the x-axis.\n   * @param offset New offset in the X axis.\n   */\n  withDefaultOffsetX(offset: number): this {\n    this._offsetX = offset;\n    return this;\n  }\n\n  /**\n   * Sets the default offset for the overlay's connection point on the y-axis.\n   * @param offset New offset in the Y axis.\n   */\n  withDefaultOffsetY(offset: number): this {\n    this._offsetY = offset;\n    return this;\n  }\n\n  /**\n   * Configures that the position strategy should set a `transform-origin` on some elements\n   * inside the overlay, depending on the current position that is being applied. This is\n   * useful for the cases where the origin of an animation can change depending on the\n   * alignment of the overlay.\n   * @param selector CSS selector that will be used to find the target\n   *    elements onto which to set the transform origin.\n   */\n  withTransformOriginOn(selector: string): this {\n    this._transformOriginSelector = selector;\n    return this;\n  }\n\n  /**\n   * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n   */\n  private _getOriginPoint(originRect: ClientRect, pos: ConnectedPosition): Point {\n    let x: number;\n    if (pos.originX == 'center') {\n      // Note: when centering we should always use the `left`\n      // offset, otherwise the position will be wrong in RTL.\n      x = originRect.left + (originRect.width / 2);\n    } else {\n      const startX = this._isRtl() ? originRect.right : originRect.left;\n      const endX = this._isRtl() ? originRect.left : originRect.right;\n      x = pos.originX == 'start' ? startX : endX;\n    }\n\n    let y: number;\n    if (pos.originY == 'center') {\n      y = originRect.top + (originRect.height / 2);\n    } else {\n      y = pos.originY == 'top' ? originRect.top : originRect.bottom;\n    }\n\n    return {x, y};\n  }\n\n\n  /**\n   * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\n   * origin point to which the overlay should be connected.\n   */\n  private _getOverlayPoint(\n      originPoint: Point,\n      overlayRect: ClientRect,\n      pos: ConnectedPosition): Point {\n\n    // Calculate the (overlayStartX, overlayStartY), the start of the\n    // potential overlay position relative to the origin point.\n    let overlayStartX: number;\n    if (pos.overlayX == 'center') {\n      overlayStartX = -overlayRect.width / 2;\n    } else if (pos.overlayX === 'start') {\n      overlayStartX = this._isRtl() ? -overlayRect.width : 0;\n    } else {\n      overlayStartX = this._isRtl() ? 0 : -overlayRect.width;\n    }\n\n    let overlayStartY: number;\n    if (pos.overlayY == 'center') {\n      overlayStartY = -overlayRect.height / 2;\n    } else {\n      overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\n    }\n\n    // The (x, y) coordinates of the overlay.\n    return {\n      x: originPoint.x + overlayStartX,\n      y: originPoint.y + overlayStartY,\n    };\n  }\n\n  /** Gets how well an overlay at the given point will fit within the viewport. */\n  private _getOverlayFit(point: Point, rawOverlayRect: ClientRect, viewport: ClientRect,\n    position: ConnectedPosition): OverlayFit {\n\n    // Round the overlay rect when comparing against the\n    // viewport, because the viewport is always rounded.\n    const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n    let {x, y} = point;\n    let offsetX = this._getOffset(position, 'x');\n    let offsetY = this._getOffset(position, 'y');\n\n    // Account for the offsets since they could push the overlay out of the viewport.\n    if (offsetX) {\n      x += offsetX;\n    }\n\n    if (offsetY) {\n      y += offsetY;\n    }\n\n    // How much the overlay would overflow at this position, on each side.\n    let leftOverflow = 0 - x;\n    let rightOverflow = (x + overlay.width) - viewport.width;\n    let topOverflow = 0 - y;\n    let bottomOverflow = (y + overlay.height) - viewport.height;\n\n    // Visible parts of the element on each axis.\n    let visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);\n    let visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);\n    let visibleArea = visibleWidth * visibleHeight;\n\n    return {\n      visibleArea,\n      isCompletelyWithinViewport: (overlay.width * overlay.height) === visibleArea,\n      fitsInViewportVertically: visibleHeight === overlay.height,\n      fitsInViewportHorizontally: visibleWidth == overlay.width,\n    };\n  }\n\n  /**\n   * Whether the overlay can fit within the viewport when it may resize either its width or height.\n   * @param fit How well the overlay fits in the viewport at some position.\n   * @param point The (x, y) coordinates of the overlat at some position.\n   * @param viewport The geometry of the viewport.\n   */\n  private _canFitWithFlexibleDimensions(fit: OverlayFit, point: Point, viewport: ClientRect) {\n    if (this._hasFlexibleDimensions) {\n      const availableHeight = viewport.bottom - point.y;\n      const availableWidth = viewport.right - point.x;\n      const minHeight = getPixelValue(this._overlayRef.getConfig().minHeight);\n      const minWidth = getPixelValue(this._overlayRef.getConfig().minWidth);\n\n      const verticalFit = fit.fitsInViewportVertically ||\n          (minHeight != null && minHeight <= availableHeight);\n      const horizontalFit = fit.fitsInViewportHorizontally ||\n          (minWidth != null && minWidth <= availableWidth);\n\n      return verticalFit && horizontalFit;\n    }\n    return false;\n  }\n\n  /**\n   * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n   * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the\n   * right and bottom).\n   *\n   * @param start Starting point from which the overlay is pushed.\n   * @param overlay Dimensions of the overlay.\n   * @param scrollPosition Current viewport scroll position.\n   * @returns The point at which to position the overlay after pushing. This is effectively a new\n   *     originPoint.\n   */\n  private _pushOverlayOnScreen(start: Point,\n                               rawOverlayRect: ClientRect,\n                               scrollPosition: ViewportScrollPosition): Point {\n    // If the position is locked and we've pushed the overlay already, reuse the previous push\n    // amount, rather than pushing it again. If we were to continue pushing, the element would\n    // remain in the viewport, which goes against the expectations when position locking is enabled.\n    if (this._previousPushAmount && this._positionLocked) {\n      return {\n        x: start.x + this._previousPushAmount.x,\n        y: start.y + this._previousPushAmount.y\n      };\n    }\n\n    // Round the overlay rect when comparing against the\n    // viewport, because the viewport is always rounded.\n    const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n    const viewport = this._viewportRect;\n\n    // Determine how much the overlay goes outside the viewport on each\n    // side, which we'll use to decide which direction to push it.\n    const overflowRight = Math.max(start.x + overlay.width - viewport.width, 0);\n    const overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0);\n    const overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);\n    const overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0);\n\n    // Amount by which to push the overlay in each axis such that it remains on-screen.\n    let pushX = 0;\n    let pushY = 0;\n\n    // If the overlay fits completely within the bounds of the viewport, push it from whichever\n    // direction is goes off-screen. Otherwise, push the top-left corner such that its in the\n    // viewport and allow for the trailing end of the overlay to go out of bounds.\n    if (overlay.width <= viewport.width) {\n      pushX = overflowLeft || -overflowRight;\n    } else {\n      pushX = start.x < this._viewportMargin ? (viewport.left - scrollPosition.left) - start.x : 0;\n    }\n\n    if (overlay.height <= viewport.height) {\n      pushY = overflowTop || -overflowBottom;\n    } else {\n      pushY = start.y < this._viewportMargin ? (viewport.top - scrollPosition.top) - start.y : 0;\n    }\n\n    this._previousPushAmount = {x: pushX, y: pushY};\n\n    return {\n      x: start.x + pushX,\n      y: start.y + pushY,\n    };\n  }\n\n  /**\n   * Applies a computed position to the overlay and emits a position change.\n   * @param position The position preference\n   * @param originPoint The point on the origin element where the overlay is connected.\n   */\n  private _applyPosition(position: ConnectedPosition, originPoint: Point) {\n    this._setTransformOrigin(position);\n    this._setOverlayElementStyles(originPoint, position);\n    this._setBoundingBoxStyles(originPoint, position);\n\n    if (position.panelClass) {\n      this._addPanelClasses(position.panelClass);\n    }\n\n    // Save the last connected position in case the position needs to be re-calculated.\n    this._lastPosition = position;\n\n    // Notify that the position has been changed along with its change properties.\n    // We only emit if we've got any subscriptions, because the scroll visibility\n    // calculcations can be somewhat expensive.\n    if (this._positionChanges.observers.length) {\n      const scrollableViewProperties = this._getScrollVisibility();\n      const changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties);\n      this._positionChanges.next(changeEvent);\n    }\n\n    this._isInitialRender = false;\n  }\n\n  /** Sets the transform origin based on the configured selector and the passed-in position.  */\n  private _setTransformOrigin(position: ConnectedPosition) {\n    if (!this._transformOriginSelector) {\n      return;\n    }\n\n    const elements: NodeListOf<HTMLElement> =\n        this._boundingBox!.querySelectorAll(this._transformOriginSelector);\n    let xOrigin: 'left' | 'right' | 'center';\n    let yOrigin: 'top' | 'bottom' | 'center' = position.overlayY;\n\n    if (position.overlayX === 'center') {\n      xOrigin = 'center';\n    } else if (this._isRtl()) {\n      xOrigin = position.overlayX === 'start' ? 'right' : 'left';\n    } else {\n      xOrigin = position.overlayX === 'start' ? 'left' : 'right';\n    }\n\n    for (let i = 0; i < elements.length; i++) {\n      elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`;\n    }\n  }\n\n  /**\n   * Gets the position and size of the overlay's sizing container.\n   *\n   * This method does no measuring and applies no styles so that we can cheaply compute the\n   * bounds for all positions and choose the best fit based on these results.\n   */\n  private _calculateBoundingBoxRect(origin: Point, position: ConnectedPosition): BoundingBoxRect {\n    const viewport = this._viewportRect;\n    const isRtl = this._isRtl();\n    let height: number, top: number, bottom: number;\n\n    if (position.overlayY === 'top') {\n      // Overlay is opening \"downward\" and thus is bound by the bottom viewport edge.\n      top = origin.y;\n      height = viewport.height - top + this._viewportMargin;\n    } else if (position.overlayY === 'bottom') {\n      // Overlay is opening \"upward\" and thus is bound by the top viewport edge. We need to add\n      // the viewport margin back in, because the viewport rect is narrowed down to remove the\n      // margin, whereas the `origin` position is calculated based on its `ClientRect`.\n      bottom = viewport.height - origin.y + this._viewportMargin * 2;\n      height = viewport.height - bottom + this._viewportMargin;\n    } else {\n      // If neither top nor bottom, it means that the overlay is vertically centered on the\n      // origin point. Note that we want the position relative to the viewport, rather than\n      // the page, which is why we don't use something like `viewport.bottom - origin.y` and\n      // `origin.y - viewport.top`.\n      const smallestDistanceToViewportEdge =\n          Math.min(viewport.bottom - origin.y + viewport.top, origin.y);\n\n      const previousHeight = this._lastBoundingBoxSize.height;\n\n      height = smallestDistanceToViewportEdge * 2;\n      top = origin.y - smallestDistanceToViewportEdge;\n\n      if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {\n        top = origin.y - (previousHeight / 2);\n      }\n    }\n\n    // The overlay is opening 'right-ward' (the content flows to the right).\n    const isBoundedByRightViewportEdge =\n        (position.overlayX === 'start' && !isRtl) ||\n        (position.overlayX === 'end' && isRtl);\n\n    // The overlay is opening 'left-ward' (the content flows to the left).\n    const isBoundedByLeftViewportEdge =\n        (position.overlayX === 'end' && !isRtl) ||\n        (position.overlayX === 'start' && isRtl);\n\n    let width: number, left: number, right: number;\n\n    if (isBoundedByLeftViewportEdge) {\n      right = viewport.width - origin.x + this._viewportMargin;\n      width = origin.x - this._viewportMargin;\n    } else if (isBoundedByRightViewportEdge) {\n      left = origin.x;\n      width = viewport.right - origin.x;\n    } else {\n      // If neither start nor end, it means that the overlay is horizontally centered on the\n      // origin point. Note that we want the position relative to the viewport, rather than\n      // the page, which is why we don't use something like `viewport.right - origin.x` and\n      // `origin.x - viewport.left`.\n      const smallestDistanceToViewportEdge =\n          Math.min(viewport.right - origin.x + viewport.left, origin.x);\n      const previousWidth = this._lastBoundingBoxSize.width;\n\n      width = smallestDistanceToViewportEdge * 2;\n      left = origin.x - smallestDistanceToViewportEdge;\n\n      if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {\n        left = origin.x - (previousWidth / 2);\n      }\n    }\n\n    return {top: top!, left: left!, bottom: bottom!, right: right!, width, height};\n  }\n\n  /**\n   * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\n   * origin's connection point and stetches to the bounds of the viewport.\n   *\n   * @param origin The point on the origin element where the overlay is connected.\n   * @param position The position preference\n   */\n  private _setBoundingBoxStyles(origin: Point, position: ConnectedPosition): void {\n    const boundingBoxRect = this._calculateBoundingBoxRect(origin, position);\n\n    // It's weird if the overlay *grows* while scrolling, so we take the last size into account\n    // when applying a new size.\n    if (!this._isInitialRender && !this._growAfterOpen) {\n      boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height);\n      boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width);\n    }\n\n    const styles = {} as CSSStyleDeclaration;\n\n    if (this._hasExactPosition()) {\n      styles.top = styles.left = '0';\n      styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = '';\n      styles.width = styles.height = '100%';\n    } else {\n      const maxHeight = this._overlayRef.getConfig().maxHeight;\n      const maxWidth = this._overlayRef.getConfig().maxWidth;\n\n      styles.height = coerceCssPixelValue(boundingBoxRect.height);\n      styles.top = coerceCssPixelValue(boundingBoxRect.top);\n      styles.bottom = coerceCssPixelValue(boundingBoxRect.bottom);\n      styles.width = coerceCssPixelValue(boundingBoxRect.width);\n      styles.left = coerceCssPixelValue(boundingBoxRect.left);\n      styles.right = coerceCssPixelValue(boundingBoxRect.right);\n\n      // Push the pane content towards the proper direction.\n      if (position.overlayX === 'center') {\n        styles.alignItems = 'center';\n      } else {\n        styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';\n      }\n\n      if (position.overlayY === 'center') {\n        styles.justifyContent = 'center';\n      } else {\n        styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';\n      }\n\n      if (maxHeight) {\n        styles.maxHeight = coerceCssPixelValue(maxHeight);\n      }\n\n      if (maxWidth) {\n        styles.maxWidth = coerceCssPixelValue(maxWidth);\n      }\n    }\n\n    this._lastBoundingBoxSize = boundingBoxRect;\n\n    extendStyles(this._boundingBox!.style, styles);\n  }\n\n  /** Resets the styles for the bounding box so that a new positioning can be computed. */\n  private _resetBoundingBoxStyles() {\n    extendStyles(this._boundingBox!.style, {\n      top: '0',\n      left: '0',\n      right: '0',\n      bottom: '0',\n      height: '',\n      width: '',\n      alignItems: '',\n      justifyContent: '',\n    } as CSSStyleDeclaration);\n  }\n\n  /** Resets the styles for the overlay pane so that a new positioning can be computed. */\n  private _resetOverlayElementStyles() {\n    extendStyles(this._pane.style, {\n      top: '',\n      left: '',\n      bottom: '',\n      right: '',\n      position: '',\n      transform: '',\n    } as CSSStyleDeclaration);\n  }\n\n  /** Sets positioning styles to the overlay element. */\n  private _setOverlayElementStyles(originPoint: Point, position: ConnectedPosition): void {\n    const styles = {} as CSSStyleDeclaration;\n    const hasExactPosition = this._hasExactPosition();\n    const hasFlexibleDimensions = this._hasFlexibleDimensions;\n    const config = this._overlayRef.getConfig();\n\n    if (hasExactPosition) {\n      const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n      extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition));\n      extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition));\n    } else {\n      styles.position = 'static';\n    }\n\n    // Use a transform to apply the offsets. We do this because the `center` positions rely on\n    // being in the normal flex flow and setting a `top` / `left` at all will completely throw\n    // off the position. We also can't use margins, because they won't have an effect in some\n    // cases where the element doesn't have anything to \"push off of\". Finally, this works\n    // better both with flexible and non-flexible positioning.\n    let transformString = '';\n    let offsetX = this._getOffset(position, 'x');\n    let offsetY = this._getOffset(position, 'y');\n\n    if (offsetX) {\n      transformString += `translateX(${offsetX}px) `;\n    }\n\n    if (offsetY) {\n      transformString += `translateY(${offsetY}px)`;\n    }\n\n    styles.transform = transformString.trim();\n\n    // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because\n    // we need these values to both be set to \"100%\" for the automatic flexible sizing to work.\n    // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint.\n    // Note that this doesn't apply when we have an exact position, in which case we do want to\n    // apply them because they'll be cleared from the bounding box.\n    if (config.maxHeight) {\n      if (hasExactPosition) {\n        styles.maxHeight = coerceCssPixelValue(config.maxHeight);\n      } else if (hasFlexibleDimensions) {\n        styles.maxHeight = '';\n      }\n    }\n\n    if (config.maxWidth) {\n      if (hasExactPosition) {\n        styles.maxWidth = coerceCssPixelValue(config.maxWidth);\n      } else if (hasFlexibleDimensions) {\n        styles.maxWidth = '';\n      }\n    }\n\n    extendStyles(this._pane.style, styles);\n  }\n\n  /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\n  private _getExactOverlayY(position: ConnectedPosition,\n                            originPoint: Point,\n                            scrollPosition: ViewportScrollPosition) {\n    // Reset any existing styles. This is necessary in case the\n    // preferred position has changed since the last `apply`.\n    let styles = {top: '', bottom: ''} as CSSStyleDeclaration;\n    let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n\n    if (this._isPushed) {\n      overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n    }\n\n    let virtualKeyboardOffset =\n        this._overlayContainer.getContainerElement().getBoundingClientRect().top;\n\n    // Normally this would be zero, however when the overlay is attached to an input (e.g. in an\n    // autocomplete), mobile browsers will shift everything in order to put the input in the middle\n    // of the screen and to make space for the virtual keyboard. We need to account for this offset,\n    // otherwise our positioning will be thrown off.\n    overlayPoint.y -= virtualKeyboardOffset;\n\n    // We want to set either `top` or `bottom` based on whether the overlay wants to appear\n    // above or below the origin and the direction in which the element will expand.\n    if (position.overlayY === 'bottom') {\n      // When using `bottom`, we adjust the y position such that it is the distance\n      // from the bottom of the viewport rather than the top.\n      const documentHeight = this._document.documentElement!.clientHeight;\n      styles.bottom = `${documentHeight - (overlayPoint.y + this._overlayRect.height)}px`;\n    } else {\n      styles.top = coerceCssPixelValue(overlayPoint.y);\n    }\n\n    return styles;\n  }\n\n  /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\n  private _getExactOverlayX(position: ConnectedPosition,\n                            originPoint: Point,\n                            scrollPosition: ViewportScrollPosition) {\n    // Reset any existing styles. This is necessary in case the preferred position has\n    // changed since the last `apply`.\n    let styles = {left: '', right: ''} as CSSStyleDeclaration;\n    let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n\n    if (this._isPushed) {\n      overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n    }\n\n    // We want to set either `left` or `right` based on whether the overlay wants to appear \"before\"\n    // or \"after\" the origin, which determines the direction in which the element will expand.\n    // For the horizontal axis, the meaning of \"before\" and \"after\" change based on whether the\n    // page is in RTL or LTR.\n    let horizontalStyleProperty: 'left' | 'right';\n\n    if (this._isRtl()) {\n      horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';\n    } else {\n      horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';\n    }\n\n    // When we're setting `right`, we adjust the x position such that it is the distance\n    // from the right edge of the viewport rather than the left edge.\n    if (horizontalStyleProperty === 'right') {\n      const documentWidth = this._document.documentElement!.clientWidth;\n      styles.right = `${documentWidth - (overlayPoint.x + this._overlayRect.width)}px`;\n    } else {\n      styles.left = coerceCssPixelValue(overlayPoint.x);\n    }\n\n    return styles;\n  }\n\n  /**\n   * Gets the view properties of the trigger and overlay, including whether they are clipped\n   * or completely outside the view of any of the strategy's scrollables.\n   */\n  private _getScrollVisibility(): ScrollingVisibility {\n    // Note: needs fresh rects since the position could've changed.\n    const originBounds = this._getOriginRect();\n    const overlayBounds =  this._pane.getBoundingClientRect();\n\n    // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers\n    // every time, we should be able to use the scrollTop of the containers if the size of those\n    // containers hasn't changed.\n    const scrollContainerBounds = this._scrollables.map(scrollable => {\n      return scrollable.getElementRef().nativeElement.getBoundingClientRect();\n    });\n\n    return {\n      isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),\n      isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),\n      isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),\n      isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds),\n    };\n  }\n\n  /** Subtracts the amount that an element is overflowing on an axis from its length. */\n  private _subtractOverflows(length: number, ...overflows: number[]): number {\n    return overflows.reduce((currentValue: number, currentOverflow: number) => {\n      return currentValue - Math.max(currentOverflow, 0);\n    }, length);\n  }\n\n  /** Narrows the given viewport rect by the current _viewportMargin. */\n  private _getNarrowedViewportRect(): ClientRect {\n    // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler,\n    // because we want to use the `clientWidth` and `clientHeight` as the base. The difference\n    // being that the client properties don't include the scrollbar, as opposed to `innerWidth`\n    // and `innerHeight` that do. This is necessary, because the overlay container uses\n    // 100% `width` and `height` which don't include the scrollbar either.\n    const width = this._document.documentElement!.clientWidth;\n    const height = this._document.documentElement!.clientHeight;\n    const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n\n    return {\n      top:    scrollPosition.top + this._viewportMargin,\n      left:   scrollPosition.left + this._viewportMargin,\n      right:  scrollPosition.left + width - this._viewportMargin,\n      bottom: scrollPosition.top + height - this._viewportMargin,\n      width:  width  - (2 * this._viewportMargin),\n      height: height - (2 * this._viewportMargin),\n    };\n  }\n\n  /** Whether the we're dealing with an RTL context */\n  private _isRtl() {\n    return this._overlayRef.getDirection() === 'rtl';\n  }\n\n  /** Determines whether the overlay uses exact or flexible positioning. */\n  private _hasExactPosition() {\n    return !this._hasFlexibleDimensions || this._isPushed;\n  }\n\n  /** Retrieves the offset of a position along the x or y axis. */\n  private _getOffset(position: ConnectedPosition, axis: 'x' | 'y') {\n    if (axis === 'x') {\n      // We don't do something like `position['offset' + axis]` in\n      // order to avoid breking minifiers that rename properties.\n      return position.offsetX == null ? this._offsetX : position.offsetX;\n    }\n\n    return position.offsetY == null ? this._offsetY : position.offsetY;\n  }\n\n  /** Validates that the current position match the expected values. */\n  private _validatePositions(): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._preferredPositions.length) {\n        throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');\n      }\n\n      // TODO(crisbeto): remove these once Angular's template type\n      // checking is advanced enough to catch these cases.\n      this._preferredPositions.forEach(pair => {\n        validateHorizontalPosition('originX', pair.originX);\n        validateVerticalPosition('originY', pair.originY);\n        validateHorizontalPosition('overlayX', pair.overlayX);\n        validateVerticalPosition('overlayY', pair.overlayY);\n      });\n    }\n  }\n\n  /** Adds a single CSS class or an array of classes on the overlay panel. */\n  private _addPanelClasses(cssClasses: string | string[]) {\n    if (this._pane) {\n      coerceArray(cssClasses).forEach(cssClass => {\n        if (cssClass !== '' && this._appliedPanelClasses.indexOf(cssClass) === -1) {\n          this._appliedPanelClasses.push(cssClass);\n          this._pane.classList.add(cssClass);\n        }\n      });\n    }\n  }\n\n  /** Clears the classes that the position strategy has applied from the overlay panel. */\n  private _clearPanelClasses() {\n    if (this._pane) {\n      this._appliedPanelClasses.forEach(cssClass => {\n        this._pane.classList.remove(cssClass);\n      });\n      this._appliedPanelClasses = [];\n    }\n  }\n\n  /** Returns the ClientRect of the current origin. */\n  private _getOriginRect(): ClientRect {\n    const origin = this._origin;\n\n    if (origin instanceof ElementRef) {\n      return origin.nativeElement.getBoundingClientRect();\n    }\n\n    // Check for Element so SVG elements are also supported.\n    if (origin instanceof Element) {\n      return origin.getBoundingClientRect();\n    }\n\n    const width = origin.width || 0;\n    const height = origin.height || 0;\n\n    // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\n    return {\n      top: origin.y,\n      bottom: origin.y + height,\n      left: origin.x,\n      right: origin.x + width,\n      height,\n      width\n    };\n  }\n}\n\n/** A simple (x, y) coordinate. */\ninterface Point {\n  x: number;\n  y: number;\n}\n\n/** Record of measurements for how an overlay (at a given position) fits into the viewport. */\ninterface OverlayFit {\n  /** Whether the overlay fits completely in the viewport. */\n  isCompletelyWithinViewport: boolean;\n\n  /** Whether the overlay fits in the viewport on the y-axis. */\n  fitsInViewportVertically: boolean;\n\n  /** Whether the overlay fits in the viewport on the x-axis. */\n  fitsInViewportHorizontally: boolean;\n\n  /** The total visible area (in px^2) of the overlay inside the viewport. */\n  visibleArea: number;\n}\n\n/** Record of the measurments determining whether an overlay will fit in a specific position. */\ninterface FallbackPosition {\n  position: ConnectedPosition;\n  originPoint: Point;\n  overlayPoint: Point;\n  overlayFit: OverlayFit;\n  overlayRect: ClientRect;\n}\n\n/** Position and size of the overlay sizing wrapper for a specific position. */\ninterface BoundingBoxRect {\n  top: number;\n  left: number;\n  bottom: number;\n  right: number;\n  height: number;\n  width: number;\n}\n\n/** Record of measures determining how well a given position will fit with flexible dimensions. */\ninterface FlexibleFit {\n  position: ConnectedPosition;\n  origin: Point;\n  overlayRect: ClientRect;\n  boundingBoxRect: BoundingBoxRect;\n}\n\n/** A connected position as specified by the user. */\nexport interface ConnectedPosition {\n  originX: 'start' | 'center' | 'end';\n  originY: 'top' | 'center' | 'bottom';\n\n  overlayX: 'start' | 'center' | 'end';\n  overlayY: 'top' | 'center' | 'bottom';\n\n  weight?: number;\n  offsetX?: number;\n  offsetY?: number;\n  panelClass?: string | string[];\n}\n\n/** Shallow-extends a stylesheet object with another stylesheet object. */\nfunction extendStyles(destination: CSSStyleDeclaration,\n                      source: CSSStyleDeclaration): CSSStyleDeclaration {\n  for (let key in source) {\n    if (source.hasOwnProperty(key)) {\n      destination[key] = source[key];\n    }\n  }\n\n  return destination;\n}\n\n\n/**\n * Extracts the pixel value as a number from a value, if it's a number\n * or a CSS pixel string (e.g. `1337px`). Otherwise returns null.\n */\nfunction getPixelValue(input: number|string|null|undefined): number|null {\n  if (typeof input !== 'number' && input != null) {\n    const [value, units] = input.split(cssUnitPattern);\n    return (!units || units === 'px') ? parseFloat(value) : null;\n  }\n\n  return input || null;\n}\n\n/**\n * Gets a version of an element's bounding `ClientRect` where all the values are rounded down to\n * the nearest pixel. This allows us to account for the cases where there may be sub-pixel\n * deviations in the `ClientRect` returned by the browser (e.g. when zoomed in with a percentage\n * size, see #21350).\n */\nfunction getRoundedBoundingClientRect(clientRect: ClientRect): ClientRect {\n  return {\n    top: Math.floor(clientRect.top),\n    right: Math.floor(clientRect.right),\n    bottom: Math.floor(clientRect.bottom),\n    left: Math.floor(clientRect.left),\n    width: Math.floor(clientRect.width),\n    height: Math.floor(clientRect.height)\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 {Direction} from '@angular/cdk/bidi';\nimport {Platform} from '@angular/cdk/platform';\nimport {CdkScrollable, ViewportRuler} from '@angular/cdk/scrolling';\nimport {ElementRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {OverlayContainer} from '../overlay-container';\nimport {OverlayReference} from '../overlay-reference';\n\nimport {\n  ConnectedOverlayPositionChange,\n  ConnectionPositionPair,\n  OriginConnectionPosition,\n  OverlayConnectionPosition,\n} from './connected-position';\nimport {FlexibleConnectedPositionStrategy} from './flexible-connected-position-strategy';\nimport {PositionStrategy} from './position-strategy';\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative to some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n * @deprecated Use `FlexibleConnectedPositionStrategy` instead.\n * @breaking-change 8.0.0\n */\nexport class ConnectedPositionStrategy implements PositionStrategy {\n  /**\n   * Reference to the underlying position strategy to which all the API calls are proxied.\n   * @docs-private\n   */\n  _positionStrategy: FlexibleConnectedPositionStrategy;\n\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef: OverlayReference;\n\n  private _direction: Direction | null;\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  _preferredPositions: ConnectionPositionPair[] = [];\n\n  /** Emits an event when the connection point changes. */\n  readonly onPositionChange: Observable<ConnectedOverlayPositionChange>;\n\n  constructor(\n      originPos: OriginConnectionPosition, overlayPos: OverlayConnectionPosition,\n      connectedTo: ElementRef<HTMLElement>, viewportRuler: ViewportRuler, document: Document,\n      platform: Platform, overlayContainer: OverlayContainer) {\n    // Since the `ConnectedPositionStrategy` is deprecated and we don't want to maintain\n    // the extra logic, we create an instance of the positioning strategy that has some\n    // defaults that make it behave as the old position strategy and to which we'll\n    // proxy all of the API calls.\n    this._positionStrategy = new FlexibleConnectedPositionStrategy(\n                                 connectedTo, viewportRuler, document, platform, overlayContainer)\n                                 .withFlexibleDimensions(false)\n                                 .withPush(false)\n                                 .withViewportMargin(0);\n\n    this.withFallbackPosition(originPos, overlayPos);\n    this.onPositionChange = this._positionStrategy.positionChanges;\n  }\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  get positions(): ConnectionPositionPair[] {\n    return this._preferredPositions;\n  }\n\n  /** Attach this position strategy to an overlay. */\n  attach(overlayRef: OverlayReference): void {\n    this._overlayRef = overlayRef;\n    this._positionStrategy.attach(overlayRef);\n\n    if (this._direction) {\n      overlayRef.setDirection(this._direction);\n      this._direction = null;\n    }\n  }\n\n  /** Disposes all resources used by the position strategy. */\n  dispose() {\n    this._positionStrategy.dispose();\n  }\n\n  /** @docs-private */\n  detach() {\n    this._positionStrategy.detach();\n  }\n\n  /**\n   * Updates the position of the overlay element, using whichever preferred position relative\n   * to the origin fits on-screen.\n   * @docs-private\n   */\n  apply(): void {\n    this._positionStrategy.apply();\n  }\n\n  /**\n   * Re-positions the overlay element with the trigger in its last calculated position,\n   * even if a position higher in the \"preferred positions\" list would now fit. This\n   * allows one to re-align the panel without changing the orientation of the panel.\n   */\n  recalculateLastPosition(): void {\n    this._positionStrategy.reapplyLastPosition();\n  }\n\n  /**\n   * Sets the list of Scrollable containers that host the origin element so that\n   * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n   * Scrollable must be an ancestor element of the strategy's origin element.\n   */\n  withScrollableContainers(scrollables: CdkScrollable[]) {\n    this._positionStrategy.withScrollableContainers(scrollables);\n  }\n\n  /**\n   * Adds a new preferred fallback position.\n   * @param originPos\n   * @param overlayPos\n   */\n  withFallbackPosition(\n      originPos: OriginConnectionPosition,\n      overlayPos: OverlayConnectionPosition,\n      offsetX?: number,\n      offsetY?: number): this {\n\n    const position = new ConnectionPositionPair(originPos, overlayPos, offsetX, offsetY);\n    this._preferredPositions.push(position);\n    this._positionStrategy.withPositions(this._preferredPositions);\n    return this;\n  }\n\n  /**\n   * Sets the layout direction so the overlay's position can be adjusted to match.\n   * @param dir New layout direction.\n   */\n  withDirection(dir: 'ltr' | 'rtl'): this {\n    // Since the direction might be declared before the strategy is attached,\n    // we save the value in a temporary property and we'll transfer it to the\n    // overlay ref on attachment.\n    if (this._overlayRef) {\n      this._overlayRef.setDirection(dir);\n    } else {\n      this._direction = dir;\n    }\n\n    return this;\n  }\n\n  /**\n   * Sets an offset for the overlay's connection point on the x-axis\n   * @param offset New offset in the X axis.\n   */\n  withOffsetX(offset: number): this {\n    this._positionStrategy.withDefaultOffsetX(offset);\n    return this;\n  }\n\n  /**\n   * Sets an offset for the overlay's connection point on the y-axis\n   * @param  offset New offset in the Y axis.\n   */\n  withOffsetY(offset: number): this {\n    this._positionStrategy.withDefaultOffsetY(offset);\n    return this;\n  }\n\n  /**\n   * Sets whether the overlay's position should be locked in after it is positioned\n   * initially. When an overlay is locked in, it won't attempt to reposition itself\n   * when the position is re-applied (e.g. when the user scrolls away).\n   * @param isLocked Whether the overlay should locked in.\n   */\n  withLockedPosition(isLocked: boolean): this {\n    this._positionStrategy.withLockedPosition(isLocked);\n    return this;\n  }\n\n  /**\n   * Overwrites the current set of positions with an array of new ones.\n   * @param positions Position pairs to be set on the strategy.\n   */\n  withPositions(positions: ConnectionPositionPair[]): this {\n    this._preferredPositions = positions.slice();\n    this._positionStrategy.withPositions(this._preferredPositions);\n    return this;\n  }\n\n  /**\n   * Sets the origin element, relative to which to position the overlay.\n   * @param origin Reference to the new origin element.\n   */\n  setOrigin(origin: ElementRef): this {\n    this._positionStrategy.setOrigin(origin);\n    return this;\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 {PositionStrategy} from './position-strategy';\nimport {OverlayReference} from '../overlay-reference';\n\n/** Class to be added to the overlay pane wrapper. */\nconst wrapperClass = 'cdk-global-overlay-wrapper';\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * explicit position relative to the browser's viewport. We use flexbox, instead of\n * transforms, in order to avoid issues with subpixel rendering which can cause the\n * element to become blurry.\n */\nexport class GlobalPositionStrategy implements PositionStrategy {\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef: OverlayReference;\n  private _cssPosition: string = 'static';\n  private _topOffset: string = '';\n  private _bottomOffset: string = '';\n  private _leftOffset: string = '';\n  private _rightOffset: string = '';\n  private _alignItems: string = '';\n  private _justifyContent: string = '';\n  private _width: string = '';\n  private _height: string = '';\n  private _isDisposed: boolean;\n\n  attach(overlayRef: OverlayReference): void {\n    const config = overlayRef.getConfig();\n\n    this._overlayRef = overlayRef;\n\n    if (this._width && !config.width) {\n      overlayRef.updateSize({width: this._width});\n    }\n\n    if (this._height && !config.height) {\n      overlayRef.updateSize({height: this._height});\n    }\n\n    overlayRef.hostElement.classList.add(wrapperClass);\n    this._isDisposed = false;\n  }\n\n  /**\n   * Sets the top position of the overlay. Clears any previously set vertical position.\n   * @param value New top offset.\n   */\n  top(value: string = ''): this {\n    this._bottomOffset = '';\n    this._topOffset = value;\n    this._alignItems = 'flex-start';\n    return this;\n  }\n\n  /**\n   * Sets the left position of the overlay. Clears any previously set horizontal position.\n   * @param value New left offset.\n   */\n  left(value: string = ''): this {\n    this._rightOffset = '';\n    this._leftOffset = value;\n    this._justifyContent = 'flex-start';\n    return this;\n  }\n\n  /**\n   * Sets the bottom position of the overlay. Clears any previously set vertical position.\n   * @param value New bottom offset.\n   */\n  bottom(value: string = ''): this {\n    this._topOffset = '';\n    this._bottomOffset = value;\n    this._alignItems = 'flex-end';\n    return this;\n  }\n\n  /**\n   * Sets the right position of the overlay. Clears any previously set horizontal position.\n   * @param value New right offset.\n   */\n  right(value: string = ''): this {\n    this._leftOffset = '';\n    this._rightOffset = value;\n    this._justifyContent = 'flex-end';\n    return this;\n  }\n\n  /**\n   * Sets the overlay width and clears any previously set width.\n   * @param value New width for the overlay\n   * @deprecated Pass the `width` through the `OverlayConfig`.\n   * @breaking-change 8.0.0\n   */\n  width(value: string = ''): this {\n    if (this._overlayRef) {\n      this._overlayRef.updateSize({width: value});\n    } else {\n      this._width = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Sets the overlay height and clears any previously set height.\n   * @param value New height for the overlay\n   * @deprecated Pass the `height` through the `OverlayConfig`.\n   * @breaking-change 8.0.0\n   */\n  height(value: string = ''): this {\n    if (this._overlayRef) {\n      this._overlayRef.updateSize({height: value});\n    } else {\n      this._height = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Centers the overlay horizontally with an optional offset.\n   * Clears any previously set horizontal position.\n   *\n   * @param offset Overlay offset from the horizontal center.\n   */\n  centerHorizontally(offset: string = ''): this {\n    this.left(offset);\n    this._justifyContent = 'center';\n    return this;\n  }\n\n  /**\n   * Centers the overlay vertically with an optional offset.\n   * Clears any previously set vertical position.\n   *\n   * @param offset Overlay offset from the vertical center.\n   */\n  centerVertically(offset: string = ''): this {\n    this.top(offset);\n    this._alignItems = 'center';\n    return this;\n  }\n\n  /**\n   * Apply the position to the element.\n   * @docs-private\n   */\n  apply(): void {\n    // Since the overlay ref applies the strategy asynchronously, it could\n    // have been disposed before it ends up being applied. If that is the\n    // case, we shouldn't do anything.\n    if (!this._overlayRef || !this._overlayRef.hasAttached()) {\n      return;\n    }\n\n    const styles = this._overlayRef.overlayElement.style;\n    const parentStyles = this._overlayRef.hostElement.style;\n    const config = this._overlayRef.getConfig();\n    const {width, height, maxWidth, maxHeight} = config;\n    const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') &&\n                                      (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');\n    const shouldBeFlushVertically = (height === '100%' || height === '100vh') &&\n                                    (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');\n\n    styles.position = this._cssPosition;\n    styles.marginLeft = shouldBeFlushHorizontally ? '0' : this._leftOffset;\n    styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;\n    styles.marginBottom = this._bottomOffset;\n    styles.marginRight = this._rightOffset;\n\n    if (shouldBeFlushHorizontally) {\n      parentStyles.justifyContent = 'flex-start';\n    } else if (this._justifyContent === 'center') {\n      parentStyles.justifyContent = 'center';\n    } else if (this._overlayRef.getConfig().direction === 'rtl') {\n      // In RTL the browser will invert `flex-start` and `flex-end` automatically, but we\n      // don't want that because our positioning is explicitly `left` and `right`, hence\n      // why we do another inversion to ensure that the overlay stays in the same position.\n      // TODO: reconsider this if we add `start` and `end` methods.\n      if (this._justifyContent === 'flex-start') {\n        parentStyles.justifyContent = 'flex-end';\n      } else if (this._justifyContent === 'flex-end') {\n        parentStyles.justifyContent = 'flex-start';\n      }\n    } else {\n      parentStyles.justifyContent = this._justifyContent;\n    }\n\n    parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;\n  }\n\n  /**\n   * Cleans up the DOM changes from the position strategy.\n   * @docs-private\n   */\n  dispose(): void {\n    if (this._isDisposed || !this._overlayRef) {\n      return;\n    }\n\n    const styles = this._overlayRef.overlayElement.style;\n    const parent = this._overlayRef.hostElement;\n    const parentStyles = parent.style;\n\n    parent.classList.remove(wrapperClass);\n    parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop =\n      styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = '';\n\n    this._overlayRef = null!;\n    this._isDisposed = true;\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 {ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {ElementRef, Inject, Injectable} from '@angular/core';\n\nimport {OverlayContainer} from '../overlay-container';\n\nimport {OriginConnectionPosition, OverlayConnectionPosition} from './connected-position';\nimport {ConnectedPositionStrategy} from './connected-position-strategy';\nimport {\n  FlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategyOrigin,\n} from './flexible-connected-position-strategy';\nimport {GlobalPositionStrategy} from './global-position-strategy';\n\n\n/** Builder for overlay position strategy. */\n@Injectable({providedIn: 'root'})\nexport class OverlayPositionBuilder {\n  constructor(\n      private _viewportRuler: ViewportRuler, @Inject(DOCUMENT) private _document: any,\n      private _platform: Platform, private _overlayContainer: OverlayContainer) {}\n\n  /**\n   * Creates a global position strategy.\n   */\n  global(): GlobalPositionStrategy {\n    return new GlobalPositionStrategy();\n  }\n\n  /**\n   * Creates a relative position strategy.\n   * @param elementRef\n   * @param originPos\n   * @param overlayPos\n   * @deprecated Use `flexibleConnectedTo` instead.\n   * @breaking-change 8.0.0\n   */\n  connectedTo(\n      elementRef: ElementRef,\n      originPos: OriginConnectionPosition,\n      overlayPos: OverlayConnectionPosition): ConnectedPositionStrategy {\n    return new ConnectedPositionStrategy(\n        originPos, overlayPos, elementRef, this._viewportRuler, this._document, this._platform,\n        this._overlayContainer);\n  }\n\n  /**\n   * Creates a flexible position strategy.\n   * @param origin Origin relative to which to position the overlay.\n   */\n  flexibleConnectedTo(origin: FlexibleConnectedPositionStrategyOrigin):\n    FlexibleConnectedPositionStrategy {\n    return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document,\n        this._platform, this._overlayContainer);\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 {Directionality} from '@angular/cdk/bidi';\nimport {DomPortalOutlet} from '@angular/cdk/portal';\nimport {DOCUMENT, Location} from '@angular/common';\nimport {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  Inject,\n  Injectable,\n  Injector,\n  NgZone,\n} from '@angular/core';\nimport {OverlayKeyboardDispatcher} from './dispatchers/overlay-keyboard-dispatcher';\nimport {OverlayOutsideClickDispatcher} from './dispatchers/overlay-outside-click-dispatcher';\nimport {OverlayConfig} from './overlay-config';\nimport {OverlayContainer} from './overlay-container';\nimport {OverlayRef} from './overlay-ref';\nimport {OverlayPositionBuilder} from './position/overlay-position-builder';\nimport {ScrollStrategyOptions} from './scroll/index';\n\n\n/** Next overlay unique ID. */\nlet nextUniqueId = 0;\n\n// Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver\n// which needs to be different depending on where OverlayModule is imported.\n\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.\n */\n@Injectable()\nexport class Overlay {\n  private _appRef: ApplicationRef;\n\n  constructor(\n              /** Scrolling strategies that can be used when creating an overlay. */\n              public scrollStrategies: ScrollStrategyOptions,\n              private _overlayContainer: OverlayContainer,\n              private _componentFactoryResolver: ComponentFactoryResolver,\n              private _positionBuilder: OverlayPositionBuilder,\n              private _keyboardDispatcher: OverlayKeyboardDispatcher,\n              private _injector: Injector,\n              private _ngZone: NgZone,\n              @Inject(DOCUMENT) private _document: any,\n              private _directionality: Directionality,\n              private _location: Location,\n              private _outsideClickDispatcher: OverlayOutsideClickDispatcher) { }\n\n  /**\n   * Creates an overlay.\n   * @param config Configuration applied to the overlay.\n   * @returns Reference to the created overlay.\n   */\n  create(config?: OverlayConfig): OverlayRef {\n    const host = this._createHostElement();\n    const pane = this._createPaneElement(host);\n    const portalOutlet = this._createPortalOutlet(pane);\n    const overlayConfig = new OverlayConfig(config);\n\n    overlayConfig.direction = overlayConfig.direction || this._directionality.value;\n\n    return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone,\n      this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher);\n  }\n\n  /**\n   * Gets a position builder that can be used, via fluent API,\n   * to construct and configure a position strategy.\n   * @returns An overlay position builder.\n   */\n  position(): OverlayPositionBuilder {\n    return this._positionBuilder;\n  }\n\n  /**\n   * Creates the DOM element for an overlay and appends it to the overlay container.\n   * @returns Newly-created pane element\n   */\n  private _createPaneElement(host: HTMLElement): HTMLElement {\n    const pane = this._document.createElement('div');\n\n    pane.id = `cdk-overlay-${nextUniqueId++}`;\n    pane.classList.add('cdk-overlay-pane');\n    host.appendChild(pane);\n\n    return pane;\n  }\n\n  /**\n   * Creates the host element that wraps around an overlay\n   * and can be used for advanced positioning.\n   * @returns Newly-create host element.\n   */\n  private _createHostElement(): HTMLElement {\n    const host = this._document.createElement('div');\n    this._overlayContainer.getContainerElement().appendChild(host);\n    return host;\n  }\n\n  /**\n   * Create a DomPortalOutlet into which the overlay content can be loaded.\n   * @param pane The DOM element to turn into a portal outlet.\n   * @returns A portal outlet for the given DOM element.\n   */\n  private _createPortalOutlet(pane: HTMLElement): DomPortalOutlet {\n    // We have to resolve the ApplicationRef later in order to allow people\n    // to use overlay-based providers during app initialization.\n    if (!this._appRef) {\n      this._appRef = this._injector.get<ApplicationRef>(ApplicationRef);\n    }\n\n    return new DomPortalOutlet(pane, this._componentFactoryResolver, this._appRef, this._injector,\n                               this._document);\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 {Direction, Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {takeWhile} from 'rxjs/operators';\nimport {Overlay} from './overlay';\nimport {OverlayConfig} from './overlay-config';\nimport {OverlayRef} from './overlay-ref';\nimport {ConnectedOverlayPositionChange} from './position/connected-position';\nimport {\n  ConnectedPosition,\n  FlexibleConnectedPositionStrategy,\n} from './position/flexible-connected-position-strategy';\nimport {\n  RepositionScrollStrategy,\n  ScrollStrategy,\n} from './scroll/index';\n\n\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\nconst defaultPositionList: ConnectedPosition[] = [\n  {\n    originX: 'start',\n    originY: 'bottom',\n    overlayX: 'start',\n    overlayY: 'top'\n  },\n  {\n    originX: 'start',\n    originY: 'top',\n    overlayX: 'start',\n    overlayY: 'bottom'\n  },\n  {\n    originX: 'end',\n    originY: 'top',\n    overlayX: 'end',\n    overlayY: 'bottom'\n  },\n  {\n    originX: 'end',\n    originY: 'bottom',\n    overlayX: 'end',\n    overlayY: 'top'\n  }\n];\n\n/** Injection token that determines the scroll handling while the connected overlay is open. */\nexport const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('cdk-connected-overlay-scroll-strategy');\n\n/**\n * Directive applied to an element to make it usable as an origin for an Overlay using a\n * ConnectedPositionStrategy.\n */\n@Directive({\n  selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\n  exportAs: 'cdkOverlayOrigin',\n})\nexport class CdkOverlayOrigin {\n  constructor(\n      /** Reference to the element on which the directive is applied. */\n      public elementRef: ElementRef) { }\n}\n\n\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\n@Directive({\n  selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\n  exportAs: 'cdkConnectedOverlay'\n})\nexport class CdkConnectedOverlay implements OnDestroy, OnChanges {\n  private _overlayRef: OverlayRef;\n  private _templatePortal: TemplatePortal;\n  private _hasBackdrop = false;\n  private _lockPosition = false;\n  private _growAfterOpen = false;\n  private _flexibleDimensions = false;\n  private _push = false;\n  private _backdropSubscription = Subscription.EMPTY;\n  private _attachSubscription = Subscription.EMPTY;\n  private _detachSubscription = Subscription.EMPTY;\n  private _positionSubscription = Subscription.EMPTY;\n  private _offsetX: number;\n  private _offsetY: number;\n  private _position: FlexibleConnectedPositionStrategy;\n  private _scrollStrategyFactory: () => ScrollStrategy;\n\n  /** Origin for the connected overlay. */\n  @Input('cdkConnectedOverlayOrigin') origin: CdkOverlayOrigin;\n\n  /** Registered connected position pairs. */\n  @Input('cdkConnectedOverlayPositions') positions: ConnectedPosition[];\n\n  /**\n   * This input overrides the positions input if specified. It lets users pass\n   * in arbitrary positioning strategies.\n   */\n  @Input('cdkConnectedOverlayPositionStrategy') positionStrategy: FlexibleConnectedPositionStrategy;\n\n  /** The offset in pixels for the overlay connection point on the x-axis */\n  @Input('cdkConnectedOverlayOffsetX')\n  get offsetX(): number { return this._offsetX; }\n  set offsetX(offsetX: number) {\n    this._offsetX = offsetX;\n\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n    }\n  }\n\n  /** The offset in pixels for the overlay connection point on the y-axis */\n  @Input('cdkConnectedOverlayOffsetY')\n  get offsetY() { return this._offsetY; }\n  set offsetY(offsetY: number) {\n    this._offsetY = offsetY;\n\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n    }\n  }\n\n  /** The width of the overlay panel. */\n  @Input('cdkConnectedOverlayWidth') width: number | string;\n\n  /** The height of the overlay panel. */\n  @Input('cdkConnectedOverlayHeight') height: number | string;\n\n  /** The min width of the overlay panel. */\n  @Input('cdkConnectedOverlayMinWidth') minWidth: number | string;\n\n  /** The min height of the overlay panel. */\n  @Input('cdkConnectedOverlayMinHeight') minHeight: number | string;\n\n  /** The custom class to be set on the backdrop element. */\n  @Input('cdkConnectedOverlayBackdropClass') backdropClass: string;\n\n  /** The custom class to add to the overlay pane element. */\n  @Input('cdkConnectedOverlayPanelClass') panelClass: string | string[];\n\n  /** Margin between the overlay and the viewport edges. */\n  @Input('cdkConnectedOverlayViewportMargin') viewportMargin: number = 0;\n\n  /** Strategy to be used when handling scroll events while the overlay is open. */\n  @Input('cdkConnectedOverlayScrollStrategy') scrollStrategy: ScrollStrategy;\n\n  /** Whether the overlay is open. */\n  @Input('cdkConnectedOverlayOpen') open: boolean = false;\n\n  /** Whether the overlay can be closed by user interaction. */\n  @Input('cdkConnectedOverlayDisableClose') disableClose: boolean = false;\n\n  /** CSS selector which to set the transform origin. */\n  @Input('cdkConnectedOverlayTransformOriginOn') transformOriginSelector: string;\n\n  /** Whether or not the overlay should attach a backdrop. */\n  @Input('cdkConnectedOverlayHasBackdrop')\n  get hasBackdrop() { return this._hasBackdrop; }\n  set hasBackdrop(value: any) { this._hasBackdrop = coerceBooleanProperty(value); }\n\n  /** Whether or not the overlay should be locked when scrolling. */\n  @Input('cdkConnectedOverlayLockPosition')\n  get lockPosition() { return this._lockPosition; }\n  set lockPosition(value: any) { this._lockPosition = coerceBooleanProperty(value); }\n\n  /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n  @Input('cdkConnectedOverlayFlexibleDimensions')\n  get flexibleDimensions() { return this._flexibleDimensions; }\n  set flexibleDimensions(value: boolean) {\n    this._flexibleDimensions = coerceBooleanProperty(value);\n  }\n\n  /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n  @Input('cdkConnectedOverlayGrowAfterOpen')\n  get growAfterOpen() { return this._growAfterOpen; }\n  set growAfterOpen(value: boolean) { this._growAfterOpen = coerceBooleanProperty(value); }\n\n  /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n  @Input('cdkConnectedOverlayPush')\n  get push() { return this._push; }\n  set push(value: boolean) { this._push = coerceBooleanProperty(value); }\n\n  /** Event emitted when the backdrop is clicked. */\n  @Output() readonly backdropClick = new EventEmitter<MouseEvent>();\n\n  /** Event emitted when the position has changed. */\n  @Output() readonly positionChange = new EventEmitter<ConnectedOverlayPositionChange>();\n\n  /** Event emitted when the overlay has been attached. */\n  @Output() readonly attach = new EventEmitter<void>();\n\n  /** Event emitted when the overlay has been detached. */\n  @Output() readonly detach = new EventEmitter<void>();\n\n  /** Emits when there are keyboard events that are targeted at the overlay. */\n  @Output() readonly overlayKeydown = new EventEmitter<KeyboardEvent>();\n\n  /** Emits when there are mouse outside click events that are targeted at the overlay. */\n  @Output() readonly overlayOutsideClick = new EventEmitter<MouseEvent>();\n\n  // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n\n  constructor(\n      private _overlay: Overlay,\n      templateRef: TemplateRef<any>,\n      viewContainerRef: ViewContainerRef,\n      @Inject(CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY) scrollStrategyFactory: any,\n      @Optional() private _dir: Directionality) {\n    this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n    this._scrollStrategyFactory = scrollStrategyFactory;\n    this.scrollStrategy = this._scrollStrategyFactory();\n  }\n\n  /** The associated overlay reference. */\n  get overlayRef(): OverlayRef {\n    return this._overlayRef;\n  }\n\n  /** The element's layout direction. */\n  get dir(): Direction {\n    return this._dir ? this._dir.value : 'ltr';\n  }\n\n  ngOnDestroy() {\n    this._attachSubscription.unsubscribe();\n    this._detachSubscription.unsubscribe();\n    this._backdropSubscription.unsubscribe();\n    this._positionSubscription.unsubscribe();\n\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n      this._overlayRef.updateSize({\n        width: this.width,\n        minWidth: this.minWidth,\n        height: this.height,\n        minHeight: this.minHeight,\n      });\n\n      if (changes['origin'] && this.open) {\n        this._position.apply();\n      }\n    }\n\n    if (changes['open']) {\n      this.open ? this._attachOverlay() : this._detachOverlay();\n    }\n  }\n\n  /** Creates an overlay */\n  private _createOverlay() {\n    if (!this.positions || !this.positions.length) {\n      this.positions = defaultPositionList;\n    }\n\n    const overlayRef = this._overlayRef = this._overlay.create(this._buildConfig());\n    this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit());\n    this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit());\n    overlayRef.keydownEvents().subscribe((event: KeyboardEvent) => {\n      this.overlayKeydown.next(event);\n\n      if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n        event.preventDefault();\n        this._detachOverlay();\n      }\n    });\n\n    this._overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n      this.overlayOutsideClick.next(event);\n    });\n  }\n\n  /** Builds the overlay config based on the directive's inputs */\n  private _buildConfig(): OverlayConfig {\n    const positionStrategy = this._position =\n      this.positionStrategy || this._createPositionStrategy();\n    const overlayConfig = new OverlayConfig({\n      direction: this._dir,\n      positionStrategy,\n      scrollStrategy: this.scrollStrategy,\n      hasBackdrop: this.hasBackdrop\n    });\n\n    if (this.width || this.width === 0) {\n      overlayConfig.width = this.width;\n    }\n\n    if (this.height || this.height === 0) {\n      overlayConfig.height = this.height;\n    }\n\n    if (this.minWidth || this.minWidth === 0) {\n      overlayConfig.minWidth = this.minWidth;\n    }\n\n    if (this.minHeight || this.minHeight === 0) {\n      overlayConfig.minHeight = this.minHeight;\n    }\n\n    if (this.backdropClass) {\n      overlayConfig.backdropClass = this.backdropClass;\n    }\n\n    if (this.panelClass) {\n      overlayConfig.panelClass = this.panelClass;\n    }\n\n    return overlayConfig;\n  }\n\n  /** Updates the state of a position strategy, based on the values of the directive inputs. */\n  private _updatePositionStrategy(positionStrategy: FlexibleConnectedPositionStrategy) {\n    const positions: ConnectedPosition[] = this.positions.map(currentPosition => ({\n      originX: currentPosition.originX,\n      originY: currentPosition.originY,\n      overlayX: currentPosition.overlayX,\n      overlayY: currentPosition.overlayY,\n      offsetX: currentPosition.offsetX || this.offsetX,\n      offsetY: currentPosition.offsetY || this.offsetY,\n      panelClass: currentPosition.panelClass || undefined,\n    }));\n\n    return positionStrategy\n      .setOrigin(this.origin.elementRef)\n      .withPositions(positions)\n      .withFlexibleDimensions(this.flexibleDimensions)\n      .withPush(this.push)\n      .withGrowAfterOpen(this.growAfterOpen)\n      .withViewportMargin(this.viewportMargin)\n      .withLockedPosition(this.lockPosition)\n      .withTransformOriginOn(this.transformOriginSelector);\n  }\n\n  /** Returns the position strategy of the overlay to be set on the overlay config */\n  private _createPositionStrategy(): FlexibleConnectedPositionStrategy {\n    const strategy = this._overlay.position().flexibleConnectedTo(this.origin.elementRef);\n    this._updatePositionStrategy(strategy);\n    return strategy;\n  }\n\n  /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\n  private _attachOverlay() {\n    if (!this._overlayRef) {\n      this._createOverlay();\n    } else {\n      // Update the overlay size, in case the directive's inputs have changed\n      this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop;\n    }\n\n    if (!this._overlayRef.hasAttached()) {\n      this._overlayRef.attach(this._templatePortal);\n    }\n\n    if (this.hasBackdrop) {\n      this._backdropSubscription = this._overlayRef.backdropClick().subscribe(event => {\n        this.backdropClick.emit(event);\n      });\n    } else {\n      this._backdropSubscription.unsubscribe();\n    }\n\n    this._positionSubscription.unsubscribe();\n\n    // Only subscribe to `positionChanges` if requested, because putting\n    // together all the information for it can be expensive.\n    if (this.positionChange.observers.length > 0) {\n      this._positionSubscription = this._position.positionChanges\n        .pipe(takeWhile(() => this.positionChange.observers.length > 0))\n        .subscribe(position => {\n          this.positionChange.emit(position);\n\n          if (this.positionChange.observers.length === 0) {\n            this._positionSubscription.unsubscribe();\n          }\n        });\n    }\n  }\n\n  /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\n  private _detachOverlay() {\n    if (this._overlayRef) {\n      this._overlayRef.detach();\n    }\n\n    this._backdropSubscription.unsubscribe();\n    this._positionSubscription.unsubscribe();\n  }\n\n  static ngAcceptInputType_hasBackdrop: BooleanInput;\n  static ngAcceptInputType_lockPosition: BooleanInput;\n  static ngAcceptInputType_flexibleDimensions: BooleanInput;\n  static ngAcceptInputType_growAfterOpen: BooleanInput;\n  static ngAcceptInputType_push: BooleanInput;\n}\n\n\n/** @docs-private */\nexport function CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n    () => RepositionScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = {\n  provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY,\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 {BidiModule} from '@angular/cdk/bidi';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {NgModule} from '@angular/core';\nimport {Overlay} from './overlay';\nimport {\n  CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n  CdkConnectedOverlay,\n  CdkOverlayOrigin,\n} from './overlay-directives';\n\n\n@NgModule({\n  imports: [BidiModule, PortalModule, ScrollingModule],\n  exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule],\n  declarations: [CdkConnectedOverlay, CdkOverlayOrigin],\n  providers: [\n    Overlay,\n    CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n  ],\n})\nexport class OverlayModule {}\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\nexport {OverlayOutsideClickDispatcher} from './overlay-outside-click-dispatcher';\nexport {OverlayKeyboardDispatcher} from './overlay-keyboard-dispatcher';\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, Inject, OnDestroy} from '@angular/core';\nimport {OverlayContainer} from './overlay-container';\nimport {DOCUMENT} from '@angular/common';\nimport {Platform} from '@angular/cdk/platform';\n\n\n/**\n * Alternative to OverlayContainer that supports correct displaying of overlay elements in\n * Fullscreen mode\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n *\n * Should be provided in the root component.\n */\n@Injectable({providedIn: 'root'})\nexport class FullscreenOverlayContainer extends OverlayContainer implements OnDestroy {\n  private _fullScreenEventName: string | undefined;\n  private _fullScreenListener: () => void;\n\n  constructor(@Inject(DOCUMENT) _document: any, platform: Platform) {\n    super(_document, platform);\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    if (this._fullScreenEventName && this._fullScreenListener) {\n      this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);\n    }\n  }\n\n  protected override _createContainer(): void {\n    super._createContainer();\n    this._adjustParentForFullscreenChange();\n    this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange());\n  }\n\n  private _adjustParentForFullscreenChange(): void {\n    if (!this._containerElement) {\n      return;\n    }\n\n    const fullscreenElement = this.getFullscreenElement();\n    const parent = fullscreenElement || this._document.body;\n    parent.appendChild(this._containerElement);\n  }\n\n  private _addFullscreenChangeListener(fn: () => void) {\n    const eventName = this._getEventName();\n\n    if (eventName) {\n      if (this._fullScreenListener) {\n        this._document.removeEventListener(eventName, this._fullScreenListener);\n      }\n\n      this._document.addEventListener(eventName, fn);\n      this._fullScreenListener = fn;\n    }\n  }\n\n  private _getEventName(): string | undefined {\n    if (!this._fullScreenEventName) {\n      const _document = this._document as any;\n\n      if (_document.fullscreenEnabled) {\n        this._fullScreenEventName = 'fullscreenchange';\n      } else if (_document.webkitFullscreenEnabled) {\n        this._fullScreenEventName = 'webkitfullscreenchange';\n      } else if (_document.mozFullScreenEnabled) {\n        this._fullScreenEventName = 'mozfullscreenchange';\n      } else if (_document.msFullscreenEnabled) {\n        this._fullScreenEventName = 'MSFullscreenChange';\n      }\n    }\n\n    return this._fullScreenEventName;\n  }\n\n  /**\n   * When the page is put into fullscreen mode, a specific element is specified.\n   * Only that element and its children are visible when in fullscreen mode.\n   */\n  getFullscreenElement(): Element {\n    const _document = this._document as any;\n\n    return _document.fullscreenElement ||\n           _document.webkitFullscreenElement ||\n           _document.mozFullScreenElement ||\n           _document.msFullscreenElement ||\n           null;\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\nexport * from './overlay-config';\nexport * from './position/connected-position';\nexport * from './scroll/index';\nexport * from './overlay-module';\nexport * from './dispatchers/index';\nexport {Overlay} from './overlay';\nexport {OverlayContainer} from './overlay-container';\nexport {CdkOverlayOrigin, CdkConnectedOverlay} from './overlay-directives';\nexport {FullscreenOverlayContainer} from './fullscreen-overlay-container';\nexport {OverlayRef, OverlaySizeConfig} from './overlay-ref';\nexport {ViewportRuler} from '@angular/cdk/scrolling';\nexport {ComponentType} from '@angular/cdk/portal';\nexport {OverlayPositionBuilder} from './position/overlay-position-builder';\n\n// Export pre-defined position strategies and interface to build custom ones.\nexport {PositionStrategy} from './position/position-strategy';\nexport {GlobalPositionStrategy} from './position/global-position-strategy';\nexport {ConnectedPositionStrategy} from './position/connected-position-strategy';\nexport {\n  ConnectedPosition,\n  FlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategyOrigin,\n} from './position/flexible-connected-position-strategy';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {BaseOverlayDispatcher as ɵangular_material_src_cdk_overlay_overlay_d} from './dispatchers/base-overlay-dispatcher';\nexport {CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY as ɵangular_material_src_cdk_overlay_overlay_a,CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER as ɵangular_material_src_cdk_overlay_overlay_c,CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_cdk_overlay_overlay_b} from './overlay-directives';"]}
     1{"version":3,"file":"overlay.js","sources":["../../../../../../src/cdk/overlay/scroll/block-scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/close-scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/noop-scroll-strategy.ts","../../../../../../src/cdk/overlay/position/scroll-clip.ts","../../../../../../src/cdk/overlay/scroll/reposition-scroll-strategy.ts","../../../../../../src/cdk/overlay/scroll/scroll-strategy-options.ts","../../../../../../src/cdk/overlay/scroll/index.ts","../../../../../../src/cdk/overlay/overlay-config.ts","../../../../../../src/cdk/overlay/position/connected-position.ts","../../../../../../src/cdk/overlay/dispatchers/base-overlay-dispatcher.ts","../../../../../../src/cdk/overlay/dispatchers/overlay-keyboard-dispatcher.ts","../../../../../../src/cdk/overlay/dispatchers/overlay-outside-click-dispatcher.ts","../../../../../../src/cdk/overlay/overlay-container.ts","../../../../../../src/cdk/overlay/overlay-ref.ts","../../../../../../src/cdk/overlay/position/flexible-connected-position-strategy.ts","../../../../../../src/cdk/overlay/position/connected-position-strategy.ts","../../../../../../src/cdk/overlay/position/global-position-strategy.ts","../../../../../../src/cdk/overlay/position/overlay-position-builder.ts","../../../../../../src/cdk/overlay/overlay.ts","../../../../../../src/cdk/overlay/overlay-directives.ts","../../../../../../src/cdk/overlay/overlay-module.ts","../../../../../../src/cdk/overlay/dispatchers/index.ts","../../../../../../src/cdk/overlay/fullscreen-overlay-container.ts","../../../../../../src/cdk/overlay/public-api.ts","../../../../../../src/cdk/overlay/index.ts"],"names":[],"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\nimport {ScrollStrategy} from './scroll-strategy';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {coerceCssPixelValue} from '@angular/cdk/coercion';\nimport {supportsScrollBehavior} from '@angular/cdk/platform';\n\nconst scrollBehaviorSupported = supportsScrollBehavior();\n\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nexport class BlockScrollStrategy implements ScrollStrategy {\n  private _previousHTMLStyles = {top: '', left: ''};\n  private _previousScrollPosition: {top: number, left: number};\n  private _isEnabled = false;\n  private _document: Document;\n\n  constructor(private _viewportRuler: ViewportRuler, document: any) {\n    this._document = document;\n  }\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach() {}\n\n  /** Blocks page-level scroll while the attached overlay is open. */\n  enable() {\n    if (this._canBeEnabled()) {\n      const root = this._document.documentElement!;\n\n      this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\n\n      // Cache the previous inline styles in case the user had set them.\n      this._previousHTMLStyles.left = root.style.left || '';\n      this._previousHTMLStyles.top = root.style.top || '';\n\n      // Note: we're using the `html` node, instead of the `body`, because the `body` may\n      // have the user agent margin, whereas the `html` is guaranteed not to have one.\n      root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n      root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n      root.classList.add('cdk-global-scrollblock');\n      this._isEnabled = true;\n    }\n  }\n\n  /** Unblocks page-level scroll while the attached overlay is open. */\n  disable() {\n    if (this._isEnabled) {\n      const html = this._document.documentElement!;\n      const body = this._document.body!;\n      const htmlStyle = html.style;\n      const bodyStyle = body.style;\n      const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n      const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';\n\n      this._isEnabled = false;\n\n      htmlStyle.left = this._previousHTMLStyles.left;\n      htmlStyle.top = this._previousHTMLStyles.top;\n      html.classList.remove('cdk-global-scrollblock');\n\n      // Disable user-defined smooth scrolling temporarily while we restore the scroll position.\n      // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior\n      // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`,\n      // because it can throw off feature detections in `supportsScrollBehavior` which\n      // checks for `'scrollBehavior' in documentElement.style`.\n      if (scrollBehaviorSupported) {\n        htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n      }\n\n      window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n\n      if (scrollBehaviorSupported) {\n        htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n        bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n      }\n    }\n  }\n\n  private _canBeEnabled(): boolean {\n    // Since the scroll strategies can't be singletons, we have to use a global CSS class\n    // (`cdk-global-scrollblock`) to make sure that we don't try to disable global\n    // scrolling multiple times.\n    const html = this._document.documentElement!;\n\n    if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n      return false;\n    }\n\n    const body = this._document.body;\n    const viewport = this._viewportRuler.getViewportSize();\n    return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\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 {OverlayReference} from '../overlay-reference';\n\n/**\n * Describes a strategy that will be used by an overlay to handle scroll events while it is open.\n */\nexport interface ScrollStrategy {\n  /** Enable this scroll strategy (called when the attached overlay is attached to a portal). */\n  enable: () => void;\n\n  /** Disable this scroll strategy (called when the attached overlay is detached from a portal). */\n  disable: () => void;\n\n  /** Attaches this `ScrollStrategy` to an overlay. */\n  attach: (overlayRef: OverlayReference) => void;\n\n  /** Detaches the scroll strategy from the current overlay. */\n  detach?: () => void;\n}\n\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n */\nexport function getMatScrollStrategyAlreadyAttachedError(): Error {\n  return Error(`Scroll strategy has already been attached.`);\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 {NgZone} from '@angular/core';\nimport {ScrollStrategy, getMatScrollStrategyAlreadyAttachedError} from './scroll-strategy';\nimport {OverlayReference} from '../overlay-reference';\nimport {Subscription} from 'rxjs';\nimport {ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\n\n/**\n * Config options for the CloseScrollStrategy.\n */\nexport interface CloseScrollStrategyConfig {\n  /** Amount of pixels the user has to scroll before the overlay is closed. */\n  threshold?: number;\n}\n\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nexport class CloseScrollStrategy implements ScrollStrategy {\n  private _scrollSubscription: Subscription|null = null;\n  private _overlayRef: OverlayReference;\n  private _initialScrollPosition: number;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _ngZone: NgZone,\n    private _viewportRuler: ViewportRuler,\n    private _config?: CloseScrollStrategyConfig) {}\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach(overlayRef: OverlayReference) {\n    if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatScrollStrategyAlreadyAttachedError();\n    }\n\n    this._overlayRef = overlayRef;\n  }\n\n  /** Enables the closing of the attached overlay on scroll. */\n  enable() {\n    if (this._scrollSubscription) {\n      return;\n    }\n\n    const stream = this._scrollDispatcher.scrolled(0);\n\n    if (this._config && this._config.threshold && this._config.threshold > 1) {\n      this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n\n      this._scrollSubscription = stream.subscribe(() => {\n        const scrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n\n        if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config!.threshold!) {\n          this._detach();\n        } else {\n          this._overlayRef.updatePosition();\n        }\n      });\n    } else {\n      this._scrollSubscription = stream.subscribe(this._detach);\n    }\n  }\n\n  /** Disables the closing the attached overlay on scroll. */\n  disable() {\n    if (this._scrollSubscription) {\n      this._scrollSubscription.unsubscribe();\n      this._scrollSubscription = null;\n    }\n  }\n\n  detach() {\n    this.disable();\n    this._overlayRef = null!;\n  }\n\n  /** Detaches the overlay ref and disables the scroll strategy. */\n  private _detach = () => {\n    this.disable();\n\n    if (this._overlayRef.hasAttached()) {\n      this._ngZone.run(() => this._overlayRef.detach());\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 {ScrollStrategy} from './scroll-strategy';\n\n/** Scroll strategy that doesn't do anything. */\nexport class NoopScrollStrategy implements ScrollStrategy {\n  /** Does nothing, as this scroll strategy is a no-op. */\n  enable() { }\n  /** Does nothing, as this scroll strategy is a no-op. */\n  disable() { }\n  /** Does nothing, as this scroll strategy is a no-op. */\n  attach() { }\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// TODO(jelbourn): move this to live with the rest of the scrolling code\n// TODO(jelbourn): someday replace this with IntersectionObservers\n\n/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is scrolled out of view\n * @docs-private\n */\nexport function isElementScrolledOutsideView(element: ClientRect, scrollContainers: ClientRect[]) {\n  return scrollContainers.some(containerBounds => {\n    const outsideAbove = element.bottom < containerBounds.top;\n    const outsideBelow = element.top > containerBounds.bottom;\n    const outsideLeft = element.right < containerBounds.left;\n    const outsideRight = element.left > containerBounds.right;\n\n    return outsideAbove || outsideBelow || outsideLeft || outsideRight;\n  });\n}\n\n\n/**\n * Gets whether an element is clipped by any of its scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is clipped\n * @docs-private\n */\nexport function isElementClippedByScrolling(element: ClientRect, scrollContainers: ClientRect[]) {\n  return scrollContainers.some(scrollContainerRect => {\n    const clippedAbove = element.top < scrollContainerRect.top;\n    const clippedBelow = element.bottom > scrollContainerRect.bottom;\n    const clippedLeft = element.left < scrollContainerRect.left;\n    const clippedRight = element.right > scrollContainerRect.right;\n\n    return clippedAbove || clippedBelow || clippedLeft || clippedRight;\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 {NgZone} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ScrollStrategy, getMatScrollStrategyAlreadyAttachedError} from './scroll-strategy';\nimport {OverlayReference} from '../overlay-reference';\nimport {ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {isElementScrolledOutsideView} from '../position/scroll-clip';\n\n/**\n * Config options for the RepositionScrollStrategy.\n */\nexport interface RepositionScrollStrategyConfig {\n  /** Time in milliseconds to throttle the scroll events. */\n  scrollThrottle?: number;\n\n  /** Whether to close the overlay once the user has scrolled away completely. */\n  autoClose?: boolean;\n}\n\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nexport class RepositionScrollStrategy implements ScrollStrategy {\n  private _scrollSubscription: Subscription|null = null;\n  private _overlayRef: OverlayReference;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _viewportRuler: ViewportRuler,\n    private _ngZone: NgZone,\n    private _config?: RepositionScrollStrategyConfig) { }\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach(overlayRef: OverlayReference) {\n    if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatScrollStrategyAlreadyAttachedError();\n    }\n\n    this._overlayRef = overlayRef;\n  }\n\n  /** Enables repositioning of the attached overlay on scroll. */\n  enable() {\n    if (!this._scrollSubscription) {\n      const throttle = this._config ? this._config.scrollThrottle : 0;\n\n      this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => {\n        this._overlayRef.updatePosition();\n\n        // TODO(crisbeto): make `close` on by default once all components can handle it.\n        if (this._config && this._config.autoClose) {\n          const overlayRect = this._overlayRef.overlayElement.getBoundingClientRect();\n          const {width, height} = this._viewportRuler.getViewportSize();\n\n          // TODO(crisbeto): include all ancestor scroll containers here once\n          // we have a way of exposing the trigger element to the scroll strategy.\n          const parentRects = [{width, height, bottom: height, right: width, top: 0, left: 0}];\n\n          if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n            this.disable();\n            this._ngZone.run(() => this._overlayRef.detach());\n          }\n        }\n      });\n    }\n  }\n\n  /** Disables repositioning of the attached overlay on scroll. */\n  disable() {\n    if (this._scrollSubscription) {\n      this._scrollSubscription.unsubscribe();\n      this._scrollSubscription = null;\n    }\n  }\n\n  detach() {\n    this.disable();\n    this._overlayRef = null!;\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 {ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable, NgZone} from '@angular/core';\nimport {BlockScrollStrategy} from './block-scroll-strategy';\nimport {CloseScrollStrategy, CloseScrollStrategyConfig} from './close-scroll-strategy';\nimport {NoopScrollStrategy} from './noop-scroll-strategy';\nimport {\n  RepositionScrollStrategy,\n  RepositionScrollStrategyConfig,\n} from './reposition-scroll-strategy';\n\n\n/**\n * Options for how an overlay will handle scrolling.\n *\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollStrategyOptions {\n  private _document: Document;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _viewportRuler: ViewportRuler,\n    private _ngZone: NgZone,\n    @Inject(DOCUMENT) document: any) {\n      this._document = document;\n    }\n\n  /** Do nothing on scroll. */\n  noop = () => new NoopScrollStrategy();\n\n  /**\n   * Close the overlay as soon as the user scrolls.\n   * @param config Configuration to be used inside the scroll strategy.\n   */\n  close = (config?: CloseScrollStrategyConfig) => new CloseScrollStrategy(this._scrollDispatcher,\n      this._ngZone, this._viewportRuler, config)\n\n  /** Block scrolling. */\n  block = () => new BlockScrollStrategy(this._viewportRuler, this._document);\n\n  /**\n   * Update the overlay's position on scroll.\n   * @param config Configuration to be used inside the scroll strategy.\n   * Allows debouncing the reposition calls.\n   */\n  reposition = (config?: RepositionScrollStrategyConfig) => new RepositionScrollStrategy(\n      this._scrollDispatcher, this._viewportRuler, this._ngZone, config)\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\nexport {CdkScrollable, ScrollDispatcher} from '@angular/cdk/scrolling';\n\n// Export pre-defined scroll strategies and interface to build custom ones.\nexport {ScrollStrategy} from './scroll-strategy';\nexport {ScrollStrategyOptions} from './scroll-strategy-options';\nexport {\n  RepositionScrollStrategy,\n  RepositionScrollStrategyConfig\n} from './reposition-scroll-strategy';\nexport {CloseScrollStrategy} from './close-scroll-strategy';\nexport {NoopScrollStrategy} from './noop-scroll-strategy';\nexport {BlockScrollStrategy} from './block-scroll-strategy';\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 {PositionStrategy} from './position/position-strategy';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ScrollStrategy, NoopScrollStrategy} from './scroll/index';\n\n\n/** Initial configuration used when creating an overlay. */\nexport class OverlayConfig {\n  /** Strategy with which to position the overlay. */\n  positionStrategy?: PositionStrategy;\n\n  /** Strategy to be used when handling scroll events while the overlay is open. */\n  scrollStrategy?: ScrollStrategy = new NoopScrollStrategy();\n\n  /** Custom class to add to the overlay pane. */\n  panelClass?: string | string[] = '';\n\n  /** Whether the overlay has a backdrop. */\n  hasBackdrop?: boolean = false;\n\n  /** Custom class to add to the backdrop */\n  backdropClass?: string | string[] = 'cdk-overlay-dark-backdrop';\n\n  /** The width of the overlay panel. If a number is provided, pixel units are assumed. */\n  width?: number | string;\n\n  /** The height of the overlay panel. If a number is provided, pixel units are assumed. */\n  height?: number | string;\n\n  /** The min-width of the overlay panel. If a number is provided, pixel units are assumed. */\n  minWidth?: number | string;\n\n  /** The min-height of the overlay panel. If a number is provided, pixel units are assumed. */\n  minHeight?: number | string;\n\n  /** The max-width of the overlay panel. If a number is provided, pixel units are assumed. */\n  maxWidth?: number | string;\n\n  /** The max-height of the overlay panel. If a number is provided, pixel units are assumed. */\n  maxHeight?: number | string;\n\n  /**\n   * Direction of the text in the overlay panel. If a `Directionality` instance\n   * is passed in, the overlay will handle changes to its value automatically.\n   */\n  direction?: Direction | Directionality;\n\n  /**\n   * Whether the overlay should be disposed of when the user goes backwards/forwards in history.\n   * Note that this usually doesn't include clicking on links (unless the user is using\n   * the `HashLocationStrategy`).\n   */\n  disposeOnNavigation?: boolean = false;\n\n  constructor(config?: OverlayConfig) {\n    if (config) {\n      // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n      // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n      // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n      const configKeys =\n          Object.keys(config) as Iterable<keyof OverlayConfig> & (keyof OverlayConfig)[];\n      for (const key of configKeys) {\n        if (config[key] !== undefined) {\n          // TypeScript, as of version 3.5, sees the left-hand-side of this expression\n          // as \"I don't know *which* key this is, so the only valid value is the intersection\n          // of all the posible values.\" In this case, that happens to be `undefined`. TypeScript\n          // is not smart enough to see that the right-hand-side is actually an access of the same\n          // exact type with the same exact key, meaning that the value type must be identical.\n          // So we use `any` to work around this.\n          this[key] = config[key] as any;\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\n/** Horizontal dimension of a connection point on the perimeter of the origin or overlay element. */\nimport {Optional} from '@angular/core';\nexport type HorizontalConnectionPos = 'start' | 'center' | 'end';\n\n/** Vertical dimension of a connection point on the perimeter of the origin or overlay element. */\nexport type VerticalConnectionPos = 'top' | 'center' | 'bottom';\n\n\n/** A connection point on the origin element. */\nexport interface OriginConnectionPosition {\n  originX: HorizontalConnectionPos;\n  originY: VerticalConnectionPos;\n}\n\n/** A connection point on the overlay element. */\nexport interface OverlayConnectionPosition {\n  overlayX: HorizontalConnectionPos;\n  overlayY: VerticalConnectionPos;\n}\n\n/** The points of the origin element and the overlay element to connect. */\nexport class ConnectionPositionPair {\n  /** X-axis attachment point for connected overlay origin. Can be 'start', 'end', or 'center'. */\n  originX: HorizontalConnectionPos;\n  /** Y-axis attachment point for connected overlay origin. Can be 'top', 'bottom', or 'center'. */\n  originY: VerticalConnectionPos;\n  /** X-axis attachment point for connected overlay. Can be 'start', 'end', or 'center'. */\n  overlayX: HorizontalConnectionPos;\n  /** Y-axis attachment point for connected overlay. Can be 'top', 'bottom', or 'center'. */\n  overlayY: VerticalConnectionPos;\n\n  constructor(\n    origin: OriginConnectionPosition,\n    overlay: OverlayConnectionPosition,\n    /** Offset along the X axis. */\n    public offsetX?: number,\n    /** Offset along the Y axis. */\n    public offsetY?: number,\n    /** Class(es) to be applied to the panel while this position is active. */\n    public panelClass?: string | string[]) {\n\n    this.originX = origin.originX;\n    this.originY = origin.originY;\n    this.overlayX = overlay.overlayX;\n    this.overlayY = overlay.overlayY;\n  }\n}\n\n/**\n * Set of properties regarding the position of the origin and overlay relative to the viewport\n * with respect to the containing Scrollable elements.\n *\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\n *\n * The overlay and origin are outside view if there is no overlap between their bounding client\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\n *\n *       -----------                    -----------\n *       | outside |                    | clipped |\n *       |  view   |              --------------------------\n *       |         |              |     |         |        |\n *       ----------               |     -----------        |\n *  --------------------------    |                        |\n *  |                        |    |      Scrollable        |\n *  |                        |    |                        |\n *  |                        |     --------------------------\n *  |      Scrollable        |\n *  |                        |\n *  --------------------------\n *\n *  @docs-private\n */\nexport class ScrollingVisibility {\n  isOriginClipped: boolean;\n  isOriginOutsideView: boolean;\n  isOverlayClipped: boolean;\n  isOverlayOutsideView: boolean;\n}\n\n/** The change event emitted by the strategy when a fallback position is used. */\nexport class ConnectedOverlayPositionChange {\n  constructor(\n      /** The position used as a result of this change. */\n      public connectionPair: ConnectionPositionPair,\n      /** @docs-private */\n      @Optional() public scrollableViewProperties: ScrollingVisibility) {}\n}\n\n/**\n * Validates whether a vertical position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nexport function validateVerticalPosition(property: string, value: VerticalConnectionPos) {\n  if (value !== 'top' && value !== 'bottom' && value !== 'center') {\n    throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n                `Expected \"top\", \"bottom\" or \"center\".`);\n  }\n}\n\n/**\n * Validates whether a horizontal position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nexport function validateHorizontalPosition(property: string, value: HorizontalConnectionPos) {\n  if (value !== 'start' && value !== 'end' && value !== 'center') {\n    throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n                `Expected \"start\", \"end\" or \"center\".`);\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 {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {OverlayReference} from '../overlay-reference';\n\n\n/**\n * Service for dispatching events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Injectable({providedIn: 'root'})\nexport abstract class BaseOverlayDispatcher implements OnDestroy {\n\n  /** Currently attached overlays in the order they were attached. */\n  _attachedOverlays: OverlayReference[] = [];\n\n  protected _document: Document;\n  protected _isAttached: boolean;\n\n  constructor(@Inject(DOCUMENT) document: any) {\n    this._document = document;\n  }\n\n  ngOnDestroy(): void {\n    this.detach();\n  }\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  add(overlayRef: OverlayReference): void {\n    // Ensure that we don't get the same overlay multiple times.\n    this.remove(overlayRef);\n    this._attachedOverlays.push(overlayRef);\n  }\n\n  /** Remove an overlay from the list of attached overlay refs. */\n  remove(overlayRef: OverlayReference): void {\n    const index = this._attachedOverlays.indexOf(overlayRef);\n\n    if (index > -1) {\n      this._attachedOverlays.splice(index, 1);\n    }\n\n    // Remove the global listener once there are no more overlays.\n    if (this._attachedOverlays.length === 0) {\n      this.detach();\n    }\n  }\n\n  /** Detaches the global event listener. */\n  protected abstract detach(): 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\nimport {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\nimport {OverlayReference} from '../overlay-reference';\nimport {BaseOverlayDispatcher} from './base-overlay-dispatcher';\n\n\n/**\n * Service for dispatching keyboard events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Injectable({providedIn: 'root'})\nexport class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {\n\n  constructor(@Inject(DOCUMENT) document: any) {\n    super(document);\n  }\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  override add(overlayRef: OverlayReference): void {\n    super.add(overlayRef);\n\n    // Lazily start dispatcher once first overlay is added\n    if (!this._isAttached) {\n      this._document.body.addEventListener('keydown', this._keydownListener);\n      this._isAttached = true;\n    }\n  }\n\n  /** Detaches the global keyboard event listener. */\n  protected detach() {\n    if (this._isAttached) {\n      this._document.body.removeEventListener('keydown', this._keydownListener);\n      this._isAttached = false;\n    }\n  }\n\n  /** Keyboard event listener that will be attached to the body. */\n  private _keydownListener = (event: KeyboardEvent) => {\n    const overlays = this._attachedOverlays;\n\n    for (let i = overlays.length - 1; i > -1; i--) {\n      // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.\n      // We want to target the most recent overlay, rather than trying to match where the event came\n      // from, because some components might open an overlay, but keep focus on a trigger element\n      // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,\n      // because we don't want overlays that don't handle keyboard events to block the ones below\n      // them that do.\n      if (overlays[i]._keydownEvents.observers.length > 0) {\n        overlays[i]._keydownEvents.next(event);\n        break;\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 {Inject, Injectable} from '@angular/core';\nimport {OverlayReference} from '../overlay-reference';\nimport {Platform, _getEventTarget} from '@angular/cdk/platform';\nimport {BaseOverlayDispatcher} from './base-overlay-dispatcher';\n\n/**\n * Service for dispatching mouse click events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Injectable({providedIn: 'root'})\nexport class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {\n  private _cursorOriginalValue: string;\n  private _cursorStyleIsSet = false;\n  private _pointerDownEventTarget: EventTarget | null;\n\n  constructor(@Inject(DOCUMENT) document: any, private _platform: Platform) {\n    super(document);\n  }\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  override add(overlayRef: OverlayReference): void {\n    super.add(overlayRef);\n\n    // Safari on iOS does not generate click events for non-interactive\n    // elements. However, we want to receive a click for any element outside\n    // the overlay. We can force a \"clickable\" state by setting\n    // `cursor: pointer` on the document body. See:\n    // https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile\n    // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n    if (!this._isAttached) {\n      const body = this._document.body;\n      body.addEventListener('pointerdown', this._pointerDownListener, true);\n      body.addEventListener('click', this._clickListener, true);\n      body.addEventListener('auxclick', this._clickListener, true);\n      body.addEventListener('contextmenu', this._clickListener, true);\n\n      // click event is not fired on iOS. To make element \"clickable\" we are\n      // setting the cursor to pointer\n      if (this._platform.IOS && !this._cursorStyleIsSet) {\n        this._cursorOriginalValue = body.style.cursor;\n        body.style.cursor = 'pointer';\n        this._cursorStyleIsSet = true;\n      }\n\n      this._isAttached = true;\n    }\n  }\n\n  /** Detaches the global keyboard event listener. */\n  protected detach() {\n    if (this._isAttached) {\n      const body = this._document.body;\n      body.removeEventListener('pointerdown', this._pointerDownListener, true);\n      body.removeEventListener('click', this._clickListener, true);\n      body.removeEventListener('auxclick', this._clickListener, true);\n      body.removeEventListener('contextmenu', this._clickListener, true);\n      if (this._platform.IOS && this._cursorStyleIsSet) {\n        body.style.cursor = this._cursorOriginalValue;\n        this._cursorStyleIsSet = false;\n      }\n      this._isAttached = false;\n    }\n  }\n\n  /** Store pointerdown event target to track origin of click. */\n  private _pointerDownListener = (event: PointerEvent) => {\n    this._pointerDownEventTarget = _getEventTarget(event);\n  }\n\n  /** Click event listener that will be attached to the body propagate phase. */\n  private _clickListener = (event: MouseEvent) => {\n    const target = _getEventTarget(event);\n    // In case of a click event, we want to check the origin of the click\n    // (e.g. in case where a user starts a click inside the overlay and\n    // releases the click outside of it).\n    // This is done by using the event target of the preceding pointerdown event.\n    // Every click event caused by a pointer device has a preceding pointerdown\n    // event, unless the click was programmatically triggered (e.g. in a unit test).\n    const origin = event.type === 'click' && this._pointerDownEventTarget\n      ? this._pointerDownEventTarget : target;\n    // Reset the stored pointerdown event target, to avoid having it interfere\n    // in subsequent events.\n    this._pointerDownEventTarget = null;\n\n    // We copy the array because the original may be modified asynchronously if the\n    // outsidePointerEvents listener decides to detach overlays resulting in index errors inside\n    // the for loop.\n    const overlays = this._attachedOverlays.slice();\n\n    // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.\n    // We want to target all overlays for which the click could be considered as outside click.\n    // As soon as we reach an overlay for which the click is not outside click we break off\n    // the loop.\n    for (let i = overlays.length - 1; i > -1; i--) {\n      const overlayRef = overlays[i];\n      if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {\n        continue;\n      }\n\n      // If it's a click inside the overlay, just break - we should do nothing\n      // If it's an outside click (both origin and target of the click) dispatch the mouse event,\n      // and proceed with the next overlay\n      if (overlayRef.overlayElement.contains(target as Node) ||\n          overlayRef.overlayElement.contains(origin as Node)) {\n        break;\n      }\n\n      overlayRef._outsidePointerEvents.next(event);\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 {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {Platform, _isTestEnvironment} from '@angular/cdk/platform';\n\n/** Container inside which all overlays will render. */\n@Injectable({providedIn: 'root'})\nexport class OverlayContainer implements OnDestroy {\n  protected _containerElement: HTMLElement;\n  protected _document: Document;\n\n  constructor(@Inject(DOCUMENT) document: any, protected _platform: Platform) {\n    this._document = document;\n  }\n\n  ngOnDestroy() {\n    const container = this._containerElement;\n\n    if (container && container.parentNode) {\n      container.parentNode.removeChild(container);\n    }\n  }\n\n  /**\n   * This method returns the overlay container element. It will lazily\n   * create the element the first time it is called to facilitate using\n   * the container in non-browser environments.\n   * @returns the container element\n   */\n  getContainerElement(): HTMLElement {\n    if (!this._containerElement) {\n      this._createContainer();\n    }\n\n    return this._containerElement;\n  }\n\n  /**\n   * Create the overlay container element, which is simply a div\n   * with the 'cdk-overlay-container' class on the document body.\n   */\n  protected _createContainer(): void {\n    const containerClass = 'cdk-overlay-container';\n\n    // TODO(crisbeto): remove the testing check once we have an overlay testing\n    // module or Angular starts tearing down the testing `NgModule`. See:\n    // https://github.com/angular/angular/issues/18831\n    if (this._platform.isBrowser || _isTestEnvironment()) {\n      const oppositePlatformContainers =\n          this._document.querySelectorAll(`.${containerClass}[platform=\"server\"], ` +\n                                          `.${containerClass}[platform=\"test\"]`);\n\n      // Remove any old containers from the opposite platform.\n      // This can happen when transitioning from the server to the client.\n      for (let i = 0; i < oppositePlatformContainers.length; i++) {\n        oppositePlatformContainers[i].parentNode!.removeChild(oppositePlatformContainers[i]);\n      }\n    }\n\n    const container = this._document.createElement('div');\n    container.classList.add(containerClass);\n\n    // A long time ago we kept adding new overlay containers whenever a new app was instantiated,\n    // but at some point we added logic which clears the duplicate ones in order to avoid leaks.\n    // The new logic was a little too aggressive since it was breaking some legitimate use cases.\n    // To mitigate the problem we made it so that only containers from a different platform are\n    // cleared, but the side-effect was that people started depending on the overly-aggressive\n    // logic to clean up their tests for them. Until we can introduce an overlay-specific testing\n    // module which does the cleanup, we try to detect that we're in a test environment and we\n    // always clear the container. See #17006.\n    // TODO(crisbeto): remove the test environment check once we have an overlay testing module.\n    if (_isTestEnvironment()) {\n      container.setAttribute('platform', 'test');\n    } else if (!this._platform.isBrowser) {\n      container.setAttribute('platform', 'server');\n    }\n\n    this._document.body.appendChild(container);\n    this._containerElement = container;\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 {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ComponentPortal, Portal, PortalOutlet, TemplatePortal} from '@angular/cdk/portal';\nimport {ComponentRef, EmbeddedViewRef, NgZone} from '@angular/core';\nimport {Location} from '@angular/common';\nimport {Observable, Subject, merge, SubscriptionLike, Subscription} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\nimport {OverlayKeyboardDispatcher} from './dispatchers/overlay-keyboard-dispatcher';\nimport {OverlayOutsideClickDispatcher} from './dispatchers/overlay-outside-click-dispatcher';\nimport {OverlayConfig} from './overlay-config';\nimport {coerceCssPixelValue, coerceArray} from '@angular/cdk/coercion';\nimport {OverlayReference} from './overlay-reference';\nimport {PositionStrategy} from './position/position-strategy';\nimport {ScrollStrategy} from './scroll';\n\n\n/** An object where all of its properties cannot be written. */\nexport type ImmutableObject<T> = {\n  readonly [P in keyof T]: T[P];\n};\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nexport class OverlayRef implements PortalOutlet, OverlayReference {\n  private _backdropElement: HTMLElement | null = null;\n  private readonly _backdropClick = new Subject<MouseEvent>();\n  private readonly _attachments = new Subject<void>();\n  private readonly _detachments = new Subject<void>();\n  private _positionStrategy: PositionStrategy | undefined;\n  private _scrollStrategy: ScrollStrategy | undefined;\n  private _locationChanges: SubscriptionLike = Subscription.EMPTY;\n  private _backdropClickHandler = (event: MouseEvent) => this._backdropClick.next(event);\n\n  /**\n   * Reference to the parent of the `_host` at the time it was detached. Used to restore\n   * the `_host` to its original position in the DOM when it gets re-attached.\n   */\n  private _previousHostParent: HTMLElement;\n\n  /** Stream of keydown events dispatched to this overlay. */\n  readonly _keydownEvents = new Subject<KeyboardEvent>();\n\n  /** Stream of mouse outside events dispatched to this overlay. */\n  readonly _outsidePointerEvents = new Subject<MouseEvent>();\n\n  constructor(\n      private _portalOutlet: PortalOutlet,\n      private _host: HTMLElement,\n      private _pane: HTMLElement,\n      private _config: ImmutableObject<OverlayConfig>,\n      private _ngZone: NgZone,\n      private _keyboardDispatcher: OverlayKeyboardDispatcher,\n      private _document: Document,\n      private _location: Location,\n      private _outsideClickDispatcher: OverlayOutsideClickDispatcher) {\n\n    if (_config.scrollStrategy) {\n      this._scrollStrategy = _config.scrollStrategy;\n      this._scrollStrategy.attach(this);\n    }\n\n    this._positionStrategy = _config.positionStrategy;\n  }\n\n  /** The overlay's HTML element */\n  get overlayElement(): HTMLElement {\n    return this._pane;\n  }\n\n  /** The overlay's backdrop HTML element. */\n  get backdropElement(): HTMLElement | null {\n    return this._backdropElement;\n  }\n\n  /**\n   * Wrapper around the panel element. Can be used for advanced\n   * positioning where a wrapper with specific styling is\n   * required around the overlay pane.\n   */\n  get hostElement(): HTMLElement {\n    return this._host;\n  }\n\n  attach<T>(portal: ComponentPortal<T>): ComponentRef<T>;\n  attach<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T>;\n  attach(portal: any): any;\n\n  /**\n   * Attaches content, given via a Portal, to the overlay.\n   * If the overlay is configured to have a backdrop, it will be created.\n   *\n   * @param portal Portal instance to which to attach the overlay.\n   * @returns The portal attachment result.\n   */\n  attach(portal: Portal<any>): any {\n    let attachResult = this._portalOutlet.attach(portal);\n\n    // Update the pane element with the given configuration.\n    if (!this._host.parentElement && this._previousHostParent) {\n      this._previousHostParent.appendChild(this._host);\n    }\n\n    if (this._positionStrategy) {\n      this._positionStrategy.attach(this);\n    }\n\n    this._updateStackingOrder();\n    this._updateElementSize();\n    this._updateElementDirection();\n\n    if (this._scrollStrategy) {\n      this._scrollStrategy.enable();\n    }\n\n    // Update the position once the zone is stable so that the overlay will be fully rendered\n    // before attempting to position it, as the position may depend on the size of the rendered\n    // content.\n    this._ngZone.onStable\n      .pipe(take(1))\n      .subscribe(() => {\n        // The overlay could've been detached before the zone has stabilized.\n        if (this.hasAttached()) {\n          this.updatePosition();\n        }\n      });\n\n    // Enable pointer events for the overlay pane element.\n    this._togglePointerEvents(true);\n\n    if (this._config.hasBackdrop) {\n      this._attachBackdrop();\n    }\n\n    if (this._config.panelClass) {\n      this._toggleClasses(this._pane, this._config.panelClass, true);\n    }\n\n    // Only emit the `attachments` event once all other setup is done.\n    this._attachments.next();\n\n    // Track this overlay by the keyboard dispatcher\n    this._keyboardDispatcher.add(this);\n\n    if (this._config.disposeOnNavigation) {\n      this._locationChanges = this._location.subscribe(() => this.dispose());\n    }\n\n    this._outsideClickDispatcher.add(this);\n    return attachResult;\n  }\n\n  /**\n   * Detaches an overlay from a portal.\n   * @returns The portal detachment result.\n   */\n  detach(): any {\n    if (!this.hasAttached()) {\n      return;\n    }\n\n    this.detachBackdrop();\n\n    // When the overlay is detached, the pane element should disable pointer events.\n    // This is necessary because otherwise the pane element will cover the page and disable\n    // pointer events therefore. Depends on the position strategy and the applied pane boundaries.\n    this._togglePointerEvents(false);\n\n    if (this._positionStrategy && this._positionStrategy.detach) {\n      this._positionStrategy.detach();\n    }\n\n    if (this._scrollStrategy) {\n      this._scrollStrategy.disable();\n    }\n\n    const detachmentResult = this._portalOutlet.detach();\n\n    // Only emit after everything is detached.\n    this._detachments.next();\n\n    // Remove this overlay from keyboard dispatcher tracking.\n    this._keyboardDispatcher.remove(this);\n\n    // Keeping the host element in the DOM can cause scroll jank, because it still gets\n    // rendered, even though it's transparent and unclickable which is why we remove it.\n    this._detachContentWhenStable();\n    this._locationChanges.unsubscribe();\n    this._outsideClickDispatcher.remove(this);\n    return detachmentResult;\n  }\n\n  /** Cleans up the overlay from the DOM. */\n  dispose(): void {\n    const isAttached = this.hasAttached();\n\n    if (this._positionStrategy) {\n      this._positionStrategy.dispose();\n    }\n\n    this._disposeScrollStrategy();\n    this._disposeBackdrop(this._backdropElement);\n    this._locationChanges.unsubscribe();\n    this._keyboardDispatcher.remove(this);\n    this._portalOutlet.dispose();\n    this._attachments.complete();\n    this._backdropClick.complete();\n    this._keydownEvents.complete();\n    this._outsidePointerEvents.complete();\n    this._outsideClickDispatcher.remove(this);\n\n    if (this._host && this._host.parentNode) {\n      this._host.parentNode.removeChild(this._host);\n      this._host = null!;\n    }\n\n    this._previousHostParent = this._pane = null!;\n\n    if (isAttached) {\n      this._detachments.next();\n    }\n\n    this._detachments.complete();\n  }\n\n  /** Whether the overlay has attached content. */\n  hasAttached(): boolean {\n    return this._portalOutlet.hasAttached();\n  }\n\n  /** Gets an observable that emits when the backdrop has been clicked. */\n  backdropClick(): Observable<MouseEvent> {\n    return this._backdropClick;\n  }\n\n  /** Gets an observable that emits when the overlay has been attached. */\n  attachments(): Observable<void> {\n    return this._attachments;\n  }\n\n  /** Gets an observable that emits when the overlay has been detached. */\n  detachments(): Observable<void> {\n    return this._detachments;\n  }\n\n  /** Gets an observable of keydown events targeted to this overlay. */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this._keydownEvents;\n  }\n\n  /** Gets an observable of pointer events targeted outside this overlay. */\n  outsidePointerEvents(): Observable<MouseEvent> {\n    return this._outsidePointerEvents;\n  }\n\n  /** Gets the current overlay configuration, which is immutable. */\n  getConfig(): OverlayConfig {\n    return this._config;\n  }\n\n  /** Updates the position of the overlay based on the position strategy. */\n  updatePosition(): void {\n    if (this._positionStrategy) {\n      this._positionStrategy.apply();\n    }\n  }\n\n  /** Switches to a new position strategy and updates the overlay position. */\n  updatePositionStrategy(strategy: PositionStrategy): void {\n    if (strategy === this._positionStrategy) {\n      return;\n    }\n\n    if (this._positionStrategy) {\n      this._positionStrategy.dispose();\n    }\n\n    this._positionStrategy = strategy;\n\n    if (this.hasAttached()) {\n      strategy.attach(this);\n      this.updatePosition();\n    }\n  }\n\n  /** Update the size properties of the overlay. */\n  updateSize(sizeConfig: OverlaySizeConfig): void {\n    this._config = {...this._config, ...sizeConfig};\n    this._updateElementSize();\n  }\n\n  /** Sets the LTR/RTL direction for the overlay. */\n  setDirection(dir: Direction | Directionality): void {\n    this._config = {...this._config, direction: dir};\n    this._updateElementDirection();\n  }\n\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes: string | string[]): void {\n    if (this._pane) {\n      this._toggleClasses(this._pane, classes, true);\n    }\n  }\n\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes: string | string[]): void {\n    if (this._pane) {\n      this._toggleClasses(this._pane, classes, false);\n    }\n  }\n\n  /**\n   * Returns the layout direction of the overlay panel.\n   */\n  getDirection(): Direction {\n    const direction = this._config.direction;\n\n    if (!direction) {\n      return 'ltr';\n    }\n\n    return typeof direction === 'string' ? direction : direction.value;\n  }\n\n  /** Switches to a new scroll strategy. */\n  updateScrollStrategy(strategy: ScrollStrategy): void {\n    if (strategy === this._scrollStrategy) {\n      return;\n    }\n\n    this._disposeScrollStrategy();\n    this._scrollStrategy = strategy;\n\n    if (this.hasAttached()) {\n      strategy.attach(this);\n      strategy.enable();\n    }\n  }\n\n  /** Updates the text direction of the overlay panel. */\n  private _updateElementDirection() {\n    this._host.setAttribute('dir', this.getDirection());\n  }\n\n  /** Updates the size of the overlay element based on the overlay config. */\n  private _updateElementSize() {\n    if (!this._pane) {\n      return;\n    }\n\n    const style = this._pane.style;\n\n    style.width = coerceCssPixelValue(this._config.width);\n    style.height = coerceCssPixelValue(this._config.height);\n    style.minWidth = coerceCssPixelValue(this._config.minWidth);\n    style.minHeight = coerceCssPixelValue(this._config.minHeight);\n    style.maxWidth = coerceCssPixelValue(this._config.maxWidth);\n    style.maxHeight = coerceCssPixelValue(this._config.maxHeight);\n  }\n\n  /** Toggles the pointer events for the overlay pane element. */\n  private _togglePointerEvents(enablePointer: boolean) {\n    this._pane.style.pointerEvents = enablePointer ? '' : 'none';\n  }\n\n  /** Attaches a backdrop for this overlay. */\n  private _attachBackdrop() {\n    const showingClass = 'cdk-overlay-backdrop-showing';\n\n    this._backdropElement = this._document.createElement('div');\n    this._backdropElement.classList.add('cdk-overlay-backdrop');\n\n    if (this._config.backdropClass) {\n      this._toggleClasses(this._backdropElement, this._config.backdropClass, true);\n    }\n\n    // Insert the backdrop before the pane in the DOM order,\n    // in order to handle stacked overlays properly.\n    this._host.parentElement!.insertBefore(this._backdropElement, this._host);\n\n    // Forward backdrop clicks such that the consumer of the overlay can perform whatever\n    // action desired when such a click occurs (usually closing the overlay).\n    this._backdropElement.addEventListener('click', this._backdropClickHandler);\n\n    // Add class to fade-in the backdrop after one frame.\n    if (typeof requestAnimationFrame !== 'undefined') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          if (this._backdropElement) {\n            this._backdropElement.classList.add(showingClass);\n          }\n        });\n      });\n    } else {\n      this._backdropElement.classList.add(showingClass);\n    }\n  }\n\n  /**\n   * Updates the stacking order of the element, moving it to the top if necessary.\n   * This is required in cases where one overlay was detached, while another one,\n   * that should be behind it, was destroyed. The next time both of them are opened,\n   * the stacking will be wrong, because the detached element's pane will still be\n   * in its original DOM position.\n   */\n  private _updateStackingOrder() {\n    if (this._host.nextSibling) {\n      this._host.parentNode!.appendChild(this._host);\n    }\n  }\n\n  /** Detaches the backdrop (if any) associated with the overlay. */\n  detachBackdrop(): void {\n    const backdropToDetach = this._backdropElement;\n\n    if (!backdropToDetach) {\n      return;\n    }\n\n    let timeoutId: number;\n    const finishDetach = () => {\n      // It may not be attached to anything in certain cases (e.g. unit tests).\n      if (backdropToDetach) {\n        backdropToDetach.removeEventListener('click', this._backdropClickHandler);\n        backdropToDetach.removeEventListener('transitionend', finishDetach);\n        this._disposeBackdrop(backdropToDetach);\n      }\n\n      if (this._config.backdropClass) {\n        this._toggleClasses(backdropToDetach!, this._config.backdropClass, false);\n      }\n\n      clearTimeout(timeoutId);\n    };\n\n    backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\n\n    this._ngZone.runOutsideAngular(() => {\n      backdropToDetach!.addEventListener('transitionend', finishDetach);\n    });\n\n    // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\n    // In this case we make it unclickable and we try to remove it after a delay.\n    backdropToDetach.style.pointerEvents = 'none';\n\n    // Run this outside the Angular zone because there's nothing that Angular cares about.\n    // If it were to run inside the Angular zone, every test that used Overlay would have to be\n    // either async or fakeAsync.\n    timeoutId = this._ngZone.runOutsideAngular(() => setTimeout(finishDetach, 500));\n  }\n\n  /** Toggles a single CSS class or an array of classes on an element. */\n  private _toggleClasses(element: HTMLElement, cssClasses: string | string[], isAdd: boolean) {\n    const classList = element.classList;\n\n    coerceArray(cssClasses).forEach(cssClass => {\n      // We can't do a spread here, because IE doesn't support setting multiple classes.\n      // Also trying to add an empty string to a DOMTokenList will throw.\n      if (cssClass) {\n        isAdd ? classList.add(cssClass) : classList.remove(cssClass);\n      }\n    });\n  }\n\n  /** Detaches the overlay content next time the zone stabilizes. */\n  private _detachContentWhenStable() {\n    // Normally we wouldn't have to explicitly run this outside the `NgZone`, however\n    // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will\n    // be patched to run inside the zone, which will throw us into an infinite loop.\n    this._ngZone.runOutsideAngular(() => {\n      // We can't remove the host here immediately, because the overlay pane's content\n      // might still be animating. This stream helps us avoid interrupting the animation\n      // by waiting for the pane to become empty.\n      const subscription = this._ngZone.onStable\n        .pipe(takeUntil(merge(this._attachments, this._detachments)))\n        .subscribe(() => {\n          // Needs a couple of checks for the pane and host, because\n          // they may have been removed by the time the zone stabilizes.\n          if (!this._pane || !this._host || this._pane.children.length === 0) {\n            if (this._pane && this._config.panelClass) {\n              this._toggleClasses(this._pane, this._config.panelClass, false);\n            }\n\n            if (this._host && this._host.parentElement) {\n              this._previousHostParent = this._host.parentElement;\n              this._previousHostParent.removeChild(this._host);\n            }\n\n            subscription.unsubscribe();\n          }\n        });\n    });\n  }\n\n  /** Disposes of a scroll strategy. */\n  private _disposeScrollStrategy() {\n    const scrollStrategy = this._scrollStrategy;\n\n    if (scrollStrategy) {\n      scrollStrategy.disable();\n\n      if (scrollStrategy.detach) {\n        scrollStrategy.detach();\n      }\n    }\n  }\n\n  /** Removes a backdrop element from the DOM. */\n  private _disposeBackdrop(backdrop: HTMLElement | null) {\n    if (backdrop) {\n      if (backdrop.parentNode) {\n        backdrop.parentNode.removeChild(backdrop);\n      }\n\n      // It is possible that a new portal has been attached to this overlay since we started\n      // removing the backdrop. If that is the case, only clear the backdrop reference if it\n      // is still the same instance that we started to remove.\n      if (this._backdropElement === backdrop) {\n        this._backdropElement = null;\n      }\n    }\n  }\n}\n\n\n/** Size properties for an overlay. */\nexport interface OverlaySizeConfig {\n  width?: number | string;\n  height?: number | string;\n  minWidth?: number | string;\n  minHeight?: number | string;\n  maxWidth?: number | string;\n  maxHeight?: number | string;\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 {PositionStrategy} from './position-strategy';\nimport {ElementRef} from '@angular/core';\nimport {ViewportRuler, CdkScrollable, ViewportScrollPosition} from '@angular/cdk/scrolling';\nimport {\n  ConnectedOverlayPositionChange,\n  ConnectionPositionPair,\n  ScrollingVisibility,\n  validateHorizontalPosition,\n  validateVerticalPosition,\n} from './connected-position';\nimport {Observable, Subscription, Subject} from 'rxjs';\nimport {OverlayReference} from '../overlay-reference';\nimport {isElementScrolledOutsideView, isElementClippedByScrolling} from './scroll-clip';\nimport {coerceCssPixelValue, coerceArray} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {OverlayContainer} from '../overlay-container';\n\n// TODO: refactor clipping detection into a separate thing (part of scrolling module)\n// TODO: doesn't handle both flexible width and height when it has to scroll along both axis.\n\n/** Class to be added to the overlay bounding box. */\nconst boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\n\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n\n/** Possible values that can be set as the origin of a FlexibleConnectedPositionStrategy. */\nexport type FlexibleConnectedPositionStrategyOrigin = ElementRef | Element | Point & {\n  width?: number;\n  height?: number;\n};\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n */\nexport class FlexibleConnectedPositionStrategy implements PositionStrategy {\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef: OverlayReference;\n\n  /** Whether we're performing the very first positioning of the overlay. */\n  private _isInitialRender: boolean;\n\n  /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\n  private _lastBoundingBoxSize = {width: 0, height: 0};\n\n  /** Whether the overlay was pushed in a previous positioning. */\n  private _isPushed = false;\n\n  /** Whether the overlay can be pushed on-screen on the initial open. */\n  private _canPush = true;\n\n  /** Whether the overlay can grow via flexible width/height after the initial open. */\n  private _growAfterOpen = false;\n\n  /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n  private _hasFlexibleDimensions = true;\n\n  /** Whether the overlay position is locked. */\n  private _positionLocked = false;\n\n  /** Cached origin dimensions */\n  private _originRect: ClientRect;\n\n  /** Cached overlay dimensions */\n  private _overlayRect: ClientRect;\n\n  /** Cached viewport dimensions */\n  private _viewportRect: ClientRect;\n\n  /** Amount of space that must be maintained between the overlay and the edge of the viewport. */\n  private _viewportMargin = 0;\n\n  /** The Scrollable containers used to check scrollable view properties on position change. */\n  private _scrollables: CdkScrollable[] = [];\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  _preferredPositions: ConnectionPositionPair[] = [];\n\n  /** The origin element against which the overlay will be positioned. */\n  private _origin: FlexibleConnectedPositionStrategyOrigin;\n\n  /** The overlay pane element. */\n  private _pane: HTMLElement;\n\n  /** Whether the strategy has been disposed of already. */\n  private _isDisposed: boolean;\n\n  /**\n   * Parent element for the overlay panel used to constrain the overlay panel's size to fit\n   * within the viewport.\n   */\n  private _boundingBox: HTMLElement | null;\n\n  /** The last position to have been calculated as the best fit position. */\n  private _lastPosition: ConnectedPosition | null;\n\n  /** Subject that emits whenever the position changes. */\n  private readonly _positionChanges = new Subject<ConnectedOverlayPositionChange>();\n\n  /** Subscription to viewport size changes. */\n  private _resizeSubscription = Subscription.EMPTY;\n\n  /** Default offset for the overlay along the x axis. */\n  private _offsetX = 0;\n\n  /** Default offset for the overlay along the y axis. */\n  private _offsetY = 0;\n\n  /** Selector to be used when finding the elements on which to set the transform origin. */\n  private _transformOriginSelector: string;\n\n  /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\n  private _appliedPanelClasses: string[] = [];\n\n  /** Amount by which the overlay was pushed in each axis during the last time it was positioned. */\n  private _previousPushAmount: {x: number, y: number} | null;\n\n  /** Observable sequence of position changes. */\n  positionChanges: Observable<ConnectedOverlayPositionChange> = this._positionChanges;\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  get positions(): ConnectionPositionPair[] {\n    return this._preferredPositions;\n  }\n\n  constructor(\n      connectedTo: FlexibleConnectedPositionStrategyOrigin, private _viewportRuler: ViewportRuler,\n      private _document: Document, private _platform: Platform,\n      private _overlayContainer: OverlayContainer) {\n    this.setOrigin(connectedTo);\n  }\n\n  /** Attaches this position strategy to an overlay. */\n  attach(overlayRef: OverlayReference): void {\n    if (this._overlayRef && overlayRef !== this._overlayRef &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('This position strategy is already attached to an overlay');\n    }\n\n    this._validatePositions();\n\n    overlayRef.hostElement.classList.add(boundingBoxClass);\n\n    this._overlayRef = overlayRef;\n    this._boundingBox = overlayRef.hostElement;\n    this._pane = overlayRef.overlayElement;\n    this._isDisposed = false;\n    this._isInitialRender = true;\n    this._lastPosition = null;\n    this._resizeSubscription.unsubscribe();\n    this._resizeSubscription = this._viewportRuler.change().subscribe(() => {\n      // When the window is resized, we want to trigger the next reposition as if it\n      // was an initial render, in order for the strategy to pick a new optimal position,\n      // otherwise position locking will cause it to stay at the old one.\n      this._isInitialRender = true;\n      this.apply();\n    });\n  }\n\n  /**\n   * Updates the position of the overlay element, using whichever preferred position relative\n   * to the origin best fits on-screen.\n   *\n   * The selection of a position goes as follows:\n   *  - If any positions fit completely within the viewport as-is,\n   *      choose the first position that does so.\n   *  - If flexible dimensions are enabled and at least one satifies the given minimum width/height,\n   *      choose the position with the greatest available size modified by the positions' weight.\n   *  - If pushing is enabled, take the position that went off-screen the least and push it\n   *      on-screen.\n   *  - If none of the previous criteria were met, use the position that goes off-screen the least.\n   * @docs-private\n   */\n  apply(): void {\n    // We shouldn't do anything if the strategy was disposed or we're on the server.\n    if (this._isDisposed || !this._platform.isBrowser) {\n      return;\n    }\n\n    // If the position has been applied already (e.g. when the overlay was opened) and the\n    // consumer opted into locking in the position, re-use the old position, in order to\n    // prevent the overlay from jumping around.\n    if (!this._isInitialRender && this._positionLocked && this._lastPosition) {\n      this.reapplyLastPosition();\n      return;\n    }\n\n    this._clearPanelClasses();\n    this._resetOverlayElementStyles();\n    this._resetBoundingBoxStyles();\n\n    // We need the bounding rects for the origin and the overlay to determine how to position\n    // the overlay relative to the origin.\n    // We use the viewport rect to determine whether a position would go off-screen.\n    this._viewportRect = this._getNarrowedViewportRect();\n    this._originRect = this._getOriginRect();\n    this._overlayRect = this._pane.getBoundingClientRect();\n\n    const originRect = this._originRect;\n    const overlayRect = this._overlayRect;\n    const viewportRect = this._viewportRect;\n\n    // Positions where the overlay will fit with flexible dimensions.\n    const flexibleFits: FlexibleFit[] = [];\n\n    // Fallback if none of the preferred positions fit within the viewport.\n    let fallback: FallbackPosition | undefined;\n\n    // Go through each of the preferred positions looking for a good fit.\n    // If a good fit is found, it will be applied immediately.\n    for (let pos of this._preferredPositions) {\n      // Get the exact (x, y) coordinate for the point-of-origin on the origin element.\n      let originPoint = this._getOriginPoint(originRect, pos);\n\n      // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the\n      // overlay in this position. We use the top-left corner for calculations and later translate\n      // this into an appropriate (top, left, bottom, right) style.\n      let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos);\n\n      // Calculate how well the overlay would fit into the viewport with this point.\n      let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos);\n\n      // If the overlay, without any further work, fits into the viewport, use this position.\n      if (overlayFit.isCompletelyWithinViewport) {\n        this._isPushed = false;\n        this._applyPosition(pos, originPoint);\n        return;\n      }\n\n      // If the overlay has flexible dimensions, we can use this position\n      // so long as there's enough space for the minimum dimensions.\n      if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) {\n        // Save positions where the overlay will fit with flexible dimensions. We will use these\n        // if none of the positions fit *without* flexible dimensions.\n        flexibleFits.push({\n          position: pos,\n          origin: originPoint,\n          overlayRect,\n          boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos)\n        });\n\n        continue;\n      }\n\n      // If the current preferred position does not fit on the screen, remember the position\n      // if it has more visible area on-screen than we've seen and move onto the next preferred\n      // position.\n      if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) {\n        fallback = {overlayFit, overlayPoint, originPoint, position: pos, overlayRect};\n      }\n    }\n\n    // If there are any positions where the overlay would fit with flexible dimensions, choose the\n    // one that has the greatest area available modified by the position's weight\n    if (flexibleFits.length) {\n      let bestFit: FlexibleFit | null = null;\n      let bestScore = -1;\n      for (const fit of flexibleFits) {\n        const score =\n            fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);\n        if (score > bestScore) {\n          bestScore = score;\n          bestFit = fit;\n        }\n      }\n\n      this._isPushed = false;\n      this._applyPosition(bestFit!.position, bestFit!.origin);\n      return;\n    }\n\n    // When none of the preferred positions fit within the viewport, take the position\n    // that went off-screen the least and attempt to push it on-screen.\n    if (this._canPush) {\n      // TODO(jelbourn): after pushing, the opening \"direction\" of the overlay might not make sense.\n      this._isPushed = true;\n      this._applyPosition(fallback!.position, fallback!.originPoint);\n      return;\n    }\n\n    // All options for getting the overlay within the viewport have been exhausted, so go with the\n    // position that went off-screen the least.\n    this._applyPosition(fallback!.position, fallback!.originPoint);\n  }\n\n  detach(): void {\n    this._clearPanelClasses();\n    this._lastPosition = null;\n    this._previousPushAmount = null;\n    this._resizeSubscription.unsubscribe();\n  }\n\n  /** Cleanup after the element gets destroyed. */\n  dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n\n    // We can't use `_resetBoundingBoxStyles` here, because it resets\n    // some properties to zero, rather than removing them.\n    if (this._boundingBox) {\n      extendStyles(this._boundingBox.style, {\n        top: '',\n        left: '',\n        right: '',\n        bottom: '',\n        height: '',\n        width: '',\n        alignItems: '',\n        justifyContent: '',\n      } as CSSStyleDeclaration);\n    }\n\n    if (this._pane) {\n      this._resetOverlayElementStyles();\n    }\n\n    if (this._overlayRef) {\n      this._overlayRef.hostElement.classList.remove(boundingBoxClass);\n    }\n\n    this.detach();\n    this._positionChanges.complete();\n    this._overlayRef = this._boundingBox = null!;\n    this._isDisposed = true;\n  }\n\n  /**\n   * This re-aligns the overlay element with the trigger in its last calculated position,\n   * even if a position higher in the \"preferred positions\" list would now fit. This\n   * allows one to re-align the panel without changing the orientation of the panel.\n   */\n  reapplyLastPosition(): void {\n    if (!this._isDisposed && (!this._platform || this._platform.isBrowser)) {\n      this._originRect = this._getOriginRect();\n      this._overlayRect = this._pane.getBoundingClientRect();\n      this._viewportRect = this._getNarrowedViewportRect();\n\n      const lastPosition = this._lastPosition || this._preferredPositions[0];\n      const originPoint = this._getOriginPoint(this._originRect, lastPosition);\n\n      this._applyPosition(lastPosition, originPoint);\n    }\n  }\n\n  /**\n   * Sets the list of Scrollable containers that host the origin element so that\n   * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n   * Scrollable must be an ancestor element of the strategy's origin element.\n   */\n  withScrollableContainers(scrollables: CdkScrollable[]): this {\n    this._scrollables = scrollables;\n    return this;\n  }\n\n  /**\n   * Adds new preferred positions.\n   * @param positions List of positions options for this overlay.\n   */\n  withPositions(positions: ConnectedPosition[]): this {\n    this._preferredPositions = positions;\n\n    // If the last calculated position object isn't part of the positions anymore, clear\n    // it in order to avoid it being picked up if the consumer tries to re-apply.\n    if (positions.indexOf(this._lastPosition!) === -1) {\n      this._lastPosition = null;\n    }\n\n    this._validatePositions();\n\n    return this;\n  }\n\n  /**\n   * Sets a minimum distance the overlay may be positioned to the edge of the viewport.\n   * @param margin Required margin between the overlay and the viewport edge in pixels.\n   */\n  withViewportMargin(margin: number): this {\n    this._viewportMargin = margin;\n    return this;\n  }\n\n  /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\n  withFlexibleDimensions(flexibleDimensions = true): this {\n    this._hasFlexibleDimensions = flexibleDimensions;\n    return this;\n  }\n\n  /** Sets whether the overlay can grow after the initial open via flexible width/height. */\n  withGrowAfterOpen(growAfterOpen = true): this {\n    this._growAfterOpen = growAfterOpen;\n    return this;\n  }\n\n  /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\n  withPush(canPush = true): this {\n    this._canPush = canPush;\n    return this;\n  }\n\n  /**\n   * Sets whether the overlay's position should be locked in after it is positioned\n   * initially. When an overlay is locked in, it won't attempt to reposition itself\n   * when the position is re-applied (e.g. when the user scrolls away).\n   * @param isLocked Whether the overlay should locked in.\n   */\n  withLockedPosition(isLocked = true): this {\n    this._positionLocked = isLocked;\n    return this;\n  }\n\n  /**\n   * Sets the origin, relative to which to position the overlay.\n   * Using an element origin is useful for building components that need to be positioned\n   * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be\n   * used for cases like contextual menus which open relative to the user's pointer.\n   * @param origin Reference to the new origin.\n   */\n  setOrigin(origin: FlexibleConnectedPositionStrategyOrigin): this {\n    this._origin = origin;\n    return this;\n  }\n\n  /**\n   * Sets the default offset for the overlay's connection point on the x-axis.\n   * @param offset New offset in the X axis.\n   */\n  withDefaultOffsetX(offset: number): this {\n    this._offsetX = offset;\n    return this;\n  }\n\n  /**\n   * Sets the default offset for the overlay's connection point on the y-axis.\n   * @param offset New offset in the Y axis.\n   */\n  withDefaultOffsetY(offset: number): this {\n    this._offsetY = offset;\n    return this;\n  }\n\n  /**\n   * Configures that the position strategy should set a `transform-origin` on some elements\n   * inside the overlay, depending on the current position that is being applied. This is\n   * useful for the cases where the origin of an animation can change depending on the\n   * alignment of the overlay.\n   * @param selector CSS selector that will be used to find the target\n   *    elements onto which to set the transform origin.\n   */\n  withTransformOriginOn(selector: string): this {\n    this._transformOriginSelector = selector;\n    return this;\n  }\n\n  /**\n   * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n   */\n  private _getOriginPoint(originRect: ClientRect, pos: ConnectedPosition): Point {\n    let x: number;\n    if (pos.originX == 'center') {\n      // Note: when centering we should always use the `left`\n      // offset, otherwise the position will be wrong in RTL.\n      x = originRect.left + (originRect.width / 2);\n    } else {\n      const startX = this._isRtl() ? originRect.right : originRect.left;\n      const endX = this._isRtl() ? originRect.left : originRect.right;\n      x = pos.originX == 'start' ? startX : endX;\n    }\n\n    let y: number;\n    if (pos.originY == 'center') {\n      y = originRect.top + (originRect.height / 2);\n    } else {\n      y = pos.originY == 'top' ? originRect.top : originRect.bottom;\n    }\n\n    return {x, y};\n  }\n\n\n  /**\n   * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\n   * origin point to which the overlay should be connected.\n   */\n  private _getOverlayPoint(\n      originPoint: Point,\n      overlayRect: ClientRect,\n      pos: ConnectedPosition): Point {\n\n    // Calculate the (overlayStartX, overlayStartY), the start of the\n    // potential overlay position relative to the origin point.\n    let overlayStartX: number;\n    if (pos.overlayX == 'center') {\n      overlayStartX = -overlayRect.width / 2;\n    } else if (pos.overlayX === 'start') {\n      overlayStartX = this._isRtl() ? -overlayRect.width : 0;\n    } else {\n      overlayStartX = this._isRtl() ? 0 : -overlayRect.width;\n    }\n\n    let overlayStartY: number;\n    if (pos.overlayY == 'center') {\n      overlayStartY = -overlayRect.height / 2;\n    } else {\n      overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\n    }\n\n    // The (x, y) coordinates of the overlay.\n    return {\n      x: originPoint.x + overlayStartX,\n      y: originPoint.y + overlayStartY,\n    };\n  }\n\n  /** Gets how well an overlay at the given point will fit within the viewport. */\n  private _getOverlayFit(point: Point, rawOverlayRect: ClientRect, viewport: ClientRect,\n    position: ConnectedPosition): OverlayFit {\n\n    // Round the overlay rect when comparing against the\n    // viewport, because the viewport is always rounded.\n    const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n    let {x, y} = point;\n    let offsetX = this._getOffset(position, 'x');\n    let offsetY = this._getOffset(position, 'y');\n\n    // Account for the offsets since they could push the overlay out of the viewport.\n    if (offsetX) {\n      x += offsetX;\n    }\n\n    if (offsetY) {\n      y += offsetY;\n    }\n\n    // How much the overlay would overflow at this position, on each side.\n    let leftOverflow = 0 - x;\n    let rightOverflow = (x + overlay.width) - viewport.width;\n    let topOverflow = 0 - y;\n    let bottomOverflow = (y + overlay.height) - viewport.height;\n\n    // Visible parts of the element on each axis.\n    let visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);\n    let visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);\n    let visibleArea = visibleWidth * visibleHeight;\n\n    return {\n      visibleArea,\n      isCompletelyWithinViewport: (overlay.width * overlay.height) === visibleArea,\n      fitsInViewportVertically: visibleHeight === overlay.height,\n      fitsInViewportHorizontally: visibleWidth == overlay.width,\n    };\n  }\n\n  /**\n   * Whether the overlay can fit within the viewport when it may resize either its width or height.\n   * @param fit How well the overlay fits in the viewport at some position.\n   * @param point The (x, y) coordinates of the overlat at some position.\n   * @param viewport The geometry of the viewport.\n   */\n  private _canFitWithFlexibleDimensions(fit: OverlayFit, point: Point, viewport: ClientRect) {\n    if (this._hasFlexibleDimensions) {\n      const availableHeight = viewport.bottom - point.y;\n      const availableWidth = viewport.right - point.x;\n      const minHeight = getPixelValue(this._overlayRef.getConfig().minHeight);\n      const minWidth = getPixelValue(this._overlayRef.getConfig().minWidth);\n\n      const verticalFit = fit.fitsInViewportVertically ||\n          (minHeight != null && minHeight <= availableHeight);\n      const horizontalFit = fit.fitsInViewportHorizontally ||\n          (minWidth != null && minWidth <= availableWidth);\n\n      return verticalFit && horizontalFit;\n    }\n    return false;\n  }\n\n  /**\n   * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n   * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the\n   * right and bottom).\n   *\n   * @param start Starting point from which the overlay is pushed.\n   * @param overlay Dimensions of the overlay.\n   * @param scrollPosition Current viewport scroll position.\n   * @returns The point at which to position the overlay after pushing. This is effectively a new\n   *     originPoint.\n   */\n  private _pushOverlayOnScreen(start: Point,\n                               rawOverlayRect: ClientRect,\n                               scrollPosition: ViewportScrollPosition): Point {\n    // If the position is locked and we've pushed the overlay already, reuse the previous push\n    // amount, rather than pushing it again. If we were to continue pushing, the element would\n    // remain in the viewport, which goes against the expectations when position locking is enabled.\n    if (this._previousPushAmount && this._positionLocked) {\n      return {\n        x: start.x + this._previousPushAmount.x,\n        y: start.y + this._previousPushAmount.y\n      };\n    }\n\n    // Round the overlay rect when comparing against the\n    // viewport, because the viewport is always rounded.\n    const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n    const viewport = this._viewportRect;\n\n    // Determine how much the overlay goes outside the viewport on each\n    // side, which we'll use to decide which direction to push it.\n    const overflowRight = Math.max(start.x + overlay.width - viewport.width, 0);\n    const overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0);\n    const overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);\n    const overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0);\n\n    // Amount by which to push the overlay in each axis such that it remains on-screen.\n    let pushX = 0;\n    let pushY = 0;\n\n    // If the overlay fits completely within the bounds of the viewport, push it from whichever\n    // direction is goes off-screen. Otherwise, push the top-left corner such that its in the\n    // viewport and allow for the trailing end of the overlay to go out of bounds.\n    if (overlay.width <= viewport.width) {\n      pushX = overflowLeft || -overflowRight;\n    } else {\n      pushX = start.x < this._viewportMargin ? (viewport.left - scrollPosition.left) - start.x : 0;\n    }\n\n    if (overlay.height <= viewport.height) {\n      pushY = overflowTop || -overflowBottom;\n    } else {\n      pushY = start.y < this._viewportMargin ? (viewport.top - scrollPosition.top) - start.y : 0;\n    }\n\n    this._previousPushAmount = {x: pushX, y: pushY};\n\n    return {\n      x: start.x + pushX,\n      y: start.y + pushY,\n    };\n  }\n\n  /**\n   * Applies a computed position to the overlay and emits a position change.\n   * @param position The position preference\n   * @param originPoint The point on the origin element where the overlay is connected.\n   */\n  private _applyPosition(position: ConnectedPosition, originPoint: Point) {\n    this._setTransformOrigin(position);\n    this._setOverlayElementStyles(originPoint, position);\n    this._setBoundingBoxStyles(originPoint, position);\n\n    if (position.panelClass) {\n      this._addPanelClasses(position.panelClass);\n    }\n\n    // Save the last connected position in case the position needs to be re-calculated.\n    this._lastPosition = position;\n\n    // Notify that the position has been changed along with its change properties.\n    // We only emit if we've got any subscriptions, because the scroll visibility\n    // calculcations can be somewhat expensive.\n    if (this._positionChanges.observers.length) {\n      const scrollableViewProperties = this._getScrollVisibility();\n      const changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties);\n      this._positionChanges.next(changeEvent);\n    }\n\n    this._isInitialRender = false;\n  }\n\n  /** Sets the transform origin based on the configured selector and the passed-in position.  */\n  private _setTransformOrigin(position: ConnectedPosition) {\n    if (!this._transformOriginSelector) {\n      return;\n    }\n\n    const elements: NodeListOf<HTMLElement> =\n        this._boundingBox!.querySelectorAll(this._transformOriginSelector);\n    let xOrigin: 'left' | 'right' | 'center';\n    let yOrigin: 'top' | 'bottom' | 'center' = position.overlayY;\n\n    if (position.overlayX === 'center') {\n      xOrigin = 'center';\n    } else if (this._isRtl()) {\n      xOrigin = position.overlayX === 'start' ? 'right' : 'left';\n    } else {\n      xOrigin = position.overlayX === 'start' ? 'left' : 'right';\n    }\n\n    for (let i = 0; i < elements.length; i++) {\n      elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`;\n    }\n  }\n\n  /**\n   * Gets the position and size of the overlay's sizing container.\n   *\n   * This method does no measuring and applies no styles so that we can cheaply compute the\n   * bounds for all positions and choose the best fit based on these results.\n   */\n  private _calculateBoundingBoxRect(origin: Point, position: ConnectedPosition): BoundingBoxRect {\n    const viewport = this._viewportRect;\n    const isRtl = this._isRtl();\n    let height: number, top: number, bottom: number;\n\n    if (position.overlayY === 'top') {\n      // Overlay is opening \"downward\" and thus is bound by the bottom viewport edge.\n      top = origin.y;\n      height = viewport.height - top + this._viewportMargin;\n    } else if (position.overlayY === 'bottom') {\n      // Overlay is opening \"upward\" and thus is bound by the top viewport edge. We need to add\n      // the viewport margin back in, because the viewport rect is narrowed down to remove the\n      // margin, whereas the `origin` position is calculated based on its `ClientRect`.\n      bottom = viewport.height - origin.y + this._viewportMargin * 2;\n      height = viewport.height - bottom + this._viewportMargin;\n    } else {\n      // If neither top nor bottom, it means that the overlay is vertically centered on the\n      // origin point. Note that we want the position relative to the viewport, rather than\n      // the page, which is why we don't use something like `viewport.bottom - origin.y` and\n      // `origin.y - viewport.top`.\n      const smallestDistanceToViewportEdge =\n          Math.min(viewport.bottom - origin.y + viewport.top, origin.y);\n\n      const previousHeight = this._lastBoundingBoxSize.height;\n\n      height = smallestDistanceToViewportEdge * 2;\n      top = origin.y - smallestDistanceToViewportEdge;\n\n      if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {\n        top = origin.y - (previousHeight / 2);\n      }\n    }\n\n    // The overlay is opening 'right-ward' (the content flows to the right).\n    const isBoundedByRightViewportEdge =\n        (position.overlayX === 'start' && !isRtl) ||\n        (position.overlayX === 'end' && isRtl);\n\n    // The overlay is opening 'left-ward' (the content flows to the left).\n    const isBoundedByLeftViewportEdge =\n        (position.overlayX === 'end' && !isRtl) ||\n        (position.overlayX === 'start' && isRtl);\n\n    let width: number, left: number, right: number;\n\n    if (isBoundedByLeftViewportEdge) {\n      right = viewport.width - origin.x + this._viewportMargin;\n      width = origin.x - this._viewportMargin;\n    } else if (isBoundedByRightViewportEdge) {\n      left = origin.x;\n      width = viewport.right - origin.x;\n    } else {\n      // If neither start nor end, it means that the overlay is horizontally centered on the\n      // origin point. Note that we want the position relative to the viewport, rather than\n      // the page, which is why we don't use something like `viewport.right - origin.x` and\n      // `origin.x - viewport.left`.\n      const smallestDistanceToViewportEdge =\n          Math.min(viewport.right - origin.x + viewport.left, origin.x);\n      const previousWidth = this._lastBoundingBoxSize.width;\n\n      width = smallestDistanceToViewportEdge * 2;\n      left = origin.x - smallestDistanceToViewportEdge;\n\n      if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {\n        left = origin.x - (previousWidth / 2);\n      }\n    }\n\n    return {top: top!, left: left!, bottom: bottom!, right: right!, width, height};\n  }\n\n  /**\n   * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\n   * origin's connection point and stetches to the bounds of the viewport.\n   *\n   * @param origin The point on the origin element where the overlay is connected.\n   * @param position The position preference\n   */\n  private _setBoundingBoxStyles(origin: Point, position: ConnectedPosition): void {\n    const boundingBoxRect = this._calculateBoundingBoxRect(origin, position);\n\n    // It's weird if the overlay *grows* while scrolling, so we take the last size into account\n    // when applying a new size.\n    if (!this._isInitialRender && !this._growAfterOpen) {\n      boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height);\n      boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width);\n    }\n\n    const styles = {} as CSSStyleDeclaration;\n\n    if (this._hasExactPosition()) {\n      styles.top = styles.left = '0';\n      styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = '';\n      styles.width = styles.height = '100%';\n    } else {\n      const maxHeight = this._overlayRef.getConfig().maxHeight;\n      const maxWidth = this._overlayRef.getConfig().maxWidth;\n\n      styles.height = coerceCssPixelValue(boundingBoxRect.height);\n      styles.top = coerceCssPixelValue(boundingBoxRect.top);\n      styles.bottom = coerceCssPixelValue(boundingBoxRect.bottom);\n      styles.width = coerceCssPixelValue(boundingBoxRect.width);\n      styles.left = coerceCssPixelValue(boundingBoxRect.left);\n      styles.right = coerceCssPixelValue(boundingBoxRect.right);\n\n      // Push the pane content towards the proper direction.\n      if (position.overlayX === 'center') {\n        styles.alignItems = 'center';\n      } else {\n        styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';\n      }\n\n      if (position.overlayY === 'center') {\n        styles.justifyContent = 'center';\n      } else {\n        styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';\n      }\n\n      if (maxHeight) {\n        styles.maxHeight = coerceCssPixelValue(maxHeight);\n      }\n\n      if (maxWidth) {\n        styles.maxWidth = coerceCssPixelValue(maxWidth);\n      }\n    }\n\n    this._lastBoundingBoxSize = boundingBoxRect;\n\n    extendStyles(this._boundingBox!.style, styles);\n  }\n\n  /** Resets the styles for the bounding box so that a new positioning can be computed. */\n  private _resetBoundingBoxStyles() {\n    extendStyles(this._boundingBox!.style, {\n      top: '0',\n      left: '0',\n      right: '0',\n      bottom: '0',\n      height: '',\n      width: '',\n      alignItems: '',\n      justifyContent: '',\n    } as CSSStyleDeclaration);\n  }\n\n  /** Resets the styles for the overlay pane so that a new positioning can be computed. */\n  private _resetOverlayElementStyles() {\n    extendStyles(this._pane.style, {\n      top: '',\n      left: '',\n      bottom: '',\n      right: '',\n      position: '',\n      transform: '',\n    } as CSSStyleDeclaration);\n  }\n\n  /** Sets positioning styles to the overlay element. */\n  private _setOverlayElementStyles(originPoint: Point, position: ConnectedPosition): void {\n    const styles = {} as CSSStyleDeclaration;\n    const hasExactPosition = this._hasExactPosition();\n    const hasFlexibleDimensions = this._hasFlexibleDimensions;\n    const config = this._overlayRef.getConfig();\n\n    if (hasExactPosition) {\n      const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n      extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition));\n      extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition));\n    } else {\n      styles.position = 'static';\n    }\n\n    // Use a transform to apply the offsets. We do this because the `center` positions rely on\n    // being in the normal flex flow and setting a `top` / `left` at all will completely throw\n    // off the position. We also can't use margins, because they won't have an effect in some\n    // cases where the element doesn't have anything to \"push off of\". Finally, this works\n    // better both with flexible and non-flexible positioning.\n    let transformString = '';\n    let offsetX = this._getOffset(position, 'x');\n    let offsetY = this._getOffset(position, 'y');\n\n    if (offsetX) {\n      transformString += `translateX(${offsetX}px) `;\n    }\n\n    if (offsetY) {\n      transformString += `translateY(${offsetY}px)`;\n    }\n\n    styles.transform = transformString.trim();\n\n    // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because\n    // we need these values to both be set to \"100%\" for the automatic flexible sizing to work.\n    // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint.\n    // Note that this doesn't apply when we have an exact position, in which case we do want to\n    // apply them because they'll be cleared from the bounding box.\n    if (config.maxHeight) {\n      if (hasExactPosition) {\n        styles.maxHeight = coerceCssPixelValue(config.maxHeight);\n      } else if (hasFlexibleDimensions) {\n        styles.maxHeight = '';\n      }\n    }\n\n    if (config.maxWidth) {\n      if (hasExactPosition) {\n        styles.maxWidth = coerceCssPixelValue(config.maxWidth);\n      } else if (hasFlexibleDimensions) {\n        styles.maxWidth = '';\n      }\n    }\n\n    extendStyles(this._pane.style, styles);\n  }\n\n  /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\n  private _getExactOverlayY(position: ConnectedPosition,\n                            originPoint: Point,\n                            scrollPosition: ViewportScrollPosition) {\n    // Reset any existing styles. This is necessary in case the\n    // preferred position has changed since the last `apply`.\n    let styles = {top: '', bottom: ''} as CSSStyleDeclaration;\n    let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n\n    if (this._isPushed) {\n      overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n    }\n\n    let virtualKeyboardOffset =\n        this._overlayContainer.getContainerElement().getBoundingClientRect().top;\n\n    // Normally this would be zero, however when the overlay is attached to an input (e.g. in an\n    // autocomplete), mobile browsers will shift everything in order to put the input in the middle\n    // of the screen and to make space for the virtual keyboard. We need to account for this offset,\n    // otherwise our positioning will be thrown off.\n    overlayPoint.y -= virtualKeyboardOffset;\n\n    // We want to set either `top` or `bottom` based on whether the overlay wants to appear\n    // above or below the origin and the direction in which the element will expand.\n    if (position.overlayY === 'bottom') {\n      // When using `bottom`, we adjust the y position such that it is the distance\n      // from the bottom of the viewport rather than the top.\n      const documentHeight = this._document.documentElement!.clientHeight;\n      styles.bottom = `${documentHeight - (overlayPoint.y + this._overlayRect.height)}px`;\n    } else {\n      styles.top = coerceCssPixelValue(overlayPoint.y);\n    }\n\n    return styles;\n  }\n\n  /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\n  private _getExactOverlayX(position: ConnectedPosition,\n                            originPoint: Point,\n                            scrollPosition: ViewportScrollPosition) {\n    // Reset any existing styles. This is necessary in case the preferred position has\n    // changed since the last `apply`.\n    let styles = {left: '', right: ''} as CSSStyleDeclaration;\n    let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n\n    if (this._isPushed) {\n      overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n    }\n\n    // We want to set either `left` or `right` based on whether the overlay wants to appear \"before\"\n    // or \"after\" the origin, which determines the direction in which the element will expand.\n    // For the horizontal axis, the meaning of \"before\" and \"after\" change based on whether the\n    // page is in RTL or LTR.\n    let horizontalStyleProperty: 'left' | 'right';\n\n    if (this._isRtl()) {\n      horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';\n    } else {\n      horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';\n    }\n\n    // When we're setting `right`, we adjust the x position such that it is the distance\n    // from the right edge of the viewport rather than the left edge.\n    if (horizontalStyleProperty === 'right') {\n      const documentWidth = this._document.documentElement!.clientWidth;\n      styles.right = `${documentWidth - (overlayPoint.x + this._overlayRect.width)}px`;\n    } else {\n      styles.left = coerceCssPixelValue(overlayPoint.x);\n    }\n\n    return styles;\n  }\n\n  /**\n   * Gets the view properties of the trigger and overlay, including whether they are clipped\n   * or completely outside the view of any of the strategy's scrollables.\n   */\n  private _getScrollVisibility(): ScrollingVisibility {\n    // Note: needs fresh rects since the position could've changed.\n    const originBounds = this._getOriginRect();\n    const overlayBounds =  this._pane.getBoundingClientRect();\n\n    // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers\n    // every time, we should be able to use the scrollTop of the containers if the size of those\n    // containers hasn't changed.\n    const scrollContainerBounds = this._scrollables.map(scrollable => {\n      return scrollable.getElementRef().nativeElement.getBoundingClientRect();\n    });\n\n    return {\n      isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),\n      isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),\n      isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),\n      isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds),\n    };\n  }\n\n  /** Subtracts the amount that an element is overflowing on an axis from its length. */\n  private _subtractOverflows(length: number, ...overflows: number[]): number {\n    return overflows.reduce((currentValue: number, currentOverflow: number) => {\n      return currentValue - Math.max(currentOverflow, 0);\n    }, length);\n  }\n\n  /** Narrows the given viewport rect by the current _viewportMargin. */\n  private _getNarrowedViewportRect(): ClientRect {\n    // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler,\n    // because we want to use the `clientWidth` and `clientHeight` as the base. The difference\n    // being that the client properties don't include the scrollbar, as opposed to `innerWidth`\n    // and `innerHeight` that do. This is necessary, because the overlay container uses\n    // 100% `width` and `height` which don't include the scrollbar either.\n    const width = this._document.documentElement!.clientWidth;\n    const height = this._document.documentElement!.clientHeight;\n    const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n\n    return {\n      top:    scrollPosition.top + this._viewportMargin,\n      left:   scrollPosition.left + this._viewportMargin,\n      right:  scrollPosition.left + width - this._viewportMargin,\n      bottom: scrollPosition.top + height - this._viewportMargin,\n      width:  width  - (2 * this._viewportMargin),\n      height: height - (2 * this._viewportMargin),\n    };\n  }\n\n  /** Whether the we're dealing with an RTL context */\n  private _isRtl() {\n    return this._overlayRef.getDirection() === 'rtl';\n  }\n\n  /** Determines whether the overlay uses exact or flexible positioning. */\n  private _hasExactPosition() {\n    return !this._hasFlexibleDimensions || this._isPushed;\n  }\n\n  /** Retrieves the offset of a position along the x or y axis. */\n  private _getOffset(position: ConnectedPosition, axis: 'x' | 'y') {\n    if (axis === 'x') {\n      // We don't do something like `position['offset' + axis]` in\n      // order to avoid breking minifiers that rename properties.\n      return position.offsetX == null ? this._offsetX : position.offsetX;\n    }\n\n    return position.offsetY == null ? this._offsetY : position.offsetY;\n  }\n\n  /** Validates that the current position match the expected values. */\n  private _validatePositions(): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._preferredPositions.length) {\n        throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');\n      }\n\n      // TODO(crisbeto): remove these once Angular's template type\n      // checking is advanced enough to catch these cases.\n      this._preferredPositions.forEach(pair => {\n        validateHorizontalPosition('originX', pair.originX);\n        validateVerticalPosition('originY', pair.originY);\n        validateHorizontalPosition('overlayX', pair.overlayX);\n        validateVerticalPosition('overlayY', pair.overlayY);\n      });\n    }\n  }\n\n  /** Adds a single CSS class or an array of classes on the overlay panel. */\n  private _addPanelClasses(cssClasses: string | string[]) {\n    if (this._pane) {\n      coerceArray(cssClasses).forEach(cssClass => {\n        if (cssClass !== '' && this._appliedPanelClasses.indexOf(cssClass) === -1) {\n          this._appliedPanelClasses.push(cssClass);\n          this._pane.classList.add(cssClass);\n        }\n      });\n    }\n  }\n\n  /** Clears the classes that the position strategy has applied from the overlay panel. */\n  private _clearPanelClasses() {\n    if (this._pane) {\n      this._appliedPanelClasses.forEach(cssClass => {\n        this._pane.classList.remove(cssClass);\n      });\n      this._appliedPanelClasses = [];\n    }\n  }\n\n  /** Returns the ClientRect of the current origin. */\n  private _getOriginRect(): ClientRect {\n    const origin = this._origin;\n\n    if (origin instanceof ElementRef) {\n      return origin.nativeElement.getBoundingClientRect();\n    }\n\n    // Check for Element so SVG elements are also supported.\n    if (origin instanceof Element) {\n      return origin.getBoundingClientRect();\n    }\n\n    const width = origin.width || 0;\n    const height = origin.height || 0;\n\n    // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\n    return {\n      top: origin.y,\n      bottom: origin.y + height,\n      left: origin.x,\n      right: origin.x + width,\n      height,\n      width\n    };\n  }\n}\n\n/** A simple (x, y) coordinate. */\ninterface Point {\n  x: number;\n  y: number;\n}\n\n/** Record of measurements for how an overlay (at a given position) fits into the viewport. */\ninterface OverlayFit {\n  /** Whether the overlay fits completely in the viewport. */\n  isCompletelyWithinViewport: boolean;\n\n  /** Whether the overlay fits in the viewport on the y-axis. */\n  fitsInViewportVertically: boolean;\n\n  /** Whether the overlay fits in the viewport on the x-axis. */\n  fitsInViewportHorizontally: boolean;\n\n  /** The total visible area (in px^2) of the overlay inside the viewport. */\n  visibleArea: number;\n}\n\n/** Record of the measurments determining whether an overlay will fit in a specific position. */\ninterface FallbackPosition {\n  position: ConnectedPosition;\n  originPoint: Point;\n  overlayPoint: Point;\n  overlayFit: OverlayFit;\n  overlayRect: ClientRect;\n}\n\n/** Position and size of the overlay sizing wrapper for a specific position. */\ninterface BoundingBoxRect {\n  top: number;\n  left: number;\n  bottom: number;\n  right: number;\n  height: number;\n  width: number;\n}\n\n/** Record of measures determining how well a given position will fit with flexible dimensions. */\ninterface FlexibleFit {\n  position: ConnectedPosition;\n  origin: Point;\n  overlayRect: ClientRect;\n  boundingBoxRect: BoundingBoxRect;\n}\n\n/** A connected position as specified by the user. */\nexport interface ConnectedPosition {\n  originX: 'start' | 'center' | 'end';\n  originY: 'top' | 'center' | 'bottom';\n\n  overlayX: 'start' | 'center' | 'end';\n  overlayY: 'top' | 'center' | 'bottom';\n\n  weight?: number;\n  offsetX?: number;\n  offsetY?: number;\n  panelClass?: string | string[];\n}\n\n/** Shallow-extends a stylesheet object with another stylesheet object. */\nfunction extendStyles(destination: CSSStyleDeclaration,\n                      source: CSSStyleDeclaration): CSSStyleDeclaration {\n  for (let key in source) {\n    if (source.hasOwnProperty(key)) {\n      destination[key] = source[key];\n    }\n  }\n\n  return destination;\n}\n\n\n/**\n * Extracts the pixel value as a number from a value, if it's a number\n * or a CSS pixel string (e.g. `1337px`). Otherwise returns null.\n */\nfunction getPixelValue(input: number|string|null|undefined): number|null {\n  if (typeof input !== 'number' && input != null) {\n    const [value, units] = input.split(cssUnitPattern);\n    return (!units || units === 'px') ? parseFloat(value) : null;\n  }\n\n  return input || null;\n}\n\n/**\n * Gets a version of an element's bounding `ClientRect` where all the values are rounded down to\n * the nearest pixel. This allows us to account for the cases where there may be sub-pixel\n * deviations in the `ClientRect` returned by the browser (e.g. when zoomed in with a percentage\n * size, see #21350).\n */\nfunction getRoundedBoundingClientRect(clientRect: ClientRect): ClientRect {\n  return {\n    top: Math.floor(clientRect.top),\n    right: Math.floor(clientRect.right),\n    bottom: Math.floor(clientRect.bottom),\n    left: Math.floor(clientRect.left),\n    width: Math.floor(clientRect.width),\n    height: Math.floor(clientRect.height)\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 {Direction} from '@angular/cdk/bidi';\nimport {Platform} from '@angular/cdk/platform';\nimport {CdkScrollable, ViewportRuler} from '@angular/cdk/scrolling';\nimport {ElementRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {OverlayContainer} from '../overlay-container';\nimport {OverlayReference} from '../overlay-reference';\n\nimport {\n  ConnectedOverlayPositionChange,\n  ConnectionPositionPair,\n  OriginConnectionPosition,\n  OverlayConnectionPosition,\n} from './connected-position';\nimport {FlexibleConnectedPositionStrategy} from './flexible-connected-position-strategy';\nimport {PositionStrategy} from './position-strategy';\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative to some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n * @deprecated Use `FlexibleConnectedPositionStrategy` instead.\n * @breaking-change 8.0.0\n */\nexport class ConnectedPositionStrategy implements PositionStrategy {\n  /**\n   * Reference to the underlying position strategy to which all the API calls are proxied.\n   * @docs-private\n   */\n  _positionStrategy: FlexibleConnectedPositionStrategy;\n\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef: OverlayReference;\n\n  private _direction: Direction | null;\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  _preferredPositions: ConnectionPositionPair[] = [];\n\n  /** Emits an event when the connection point changes. */\n  readonly onPositionChange: Observable<ConnectedOverlayPositionChange>;\n\n  constructor(\n      originPos: OriginConnectionPosition, overlayPos: OverlayConnectionPosition,\n      connectedTo: ElementRef<HTMLElement>, viewportRuler: ViewportRuler, document: Document,\n      platform: Platform, overlayContainer: OverlayContainer) {\n    // Since the `ConnectedPositionStrategy` is deprecated and we don't want to maintain\n    // the extra logic, we create an instance of the positioning strategy that has some\n    // defaults that make it behave as the old position strategy and to which we'll\n    // proxy all of the API calls.\n    this._positionStrategy = new FlexibleConnectedPositionStrategy(\n                                 connectedTo, viewportRuler, document, platform, overlayContainer)\n                                 .withFlexibleDimensions(false)\n                                 .withPush(false)\n                                 .withViewportMargin(0);\n\n    this.withFallbackPosition(originPos, overlayPos);\n    this.onPositionChange = this._positionStrategy.positionChanges;\n  }\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  get positions(): ConnectionPositionPair[] {\n    return this._preferredPositions;\n  }\n\n  /** Attach this position strategy to an overlay. */\n  attach(overlayRef: OverlayReference): void {\n    this._overlayRef = overlayRef;\n    this._positionStrategy.attach(overlayRef);\n\n    if (this._direction) {\n      overlayRef.setDirection(this._direction);\n      this._direction = null;\n    }\n  }\n\n  /** Disposes all resources used by the position strategy. */\n  dispose() {\n    this._positionStrategy.dispose();\n  }\n\n  /** @docs-private */\n  detach() {\n    this._positionStrategy.detach();\n  }\n\n  /**\n   * Updates the position of the overlay element, using whichever preferred position relative\n   * to the origin fits on-screen.\n   * @docs-private\n   */\n  apply(): void {\n    this._positionStrategy.apply();\n  }\n\n  /**\n   * Re-positions the overlay element with the trigger in its last calculated position,\n   * even if a position higher in the \"preferred positions\" list would now fit. This\n   * allows one to re-align the panel without changing the orientation of the panel.\n   */\n  recalculateLastPosition(): void {\n    this._positionStrategy.reapplyLastPosition();\n  }\n\n  /**\n   * Sets the list of Scrollable containers that host the origin element so that\n   * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n   * Scrollable must be an ancestor element of the strategy's origin element.\n   */\n  withScrollableContainers(scrollables: CdkScrollable[]) {\n    this._positionStrategy.withScrollableContainers(scrollables);\n  }\n\n  /**\n   * Adds a new preferred fallback position.\n   * @param originPos\n   * @param overlayPos\n   */\n  withFallbackPosition(\n      originPos: OriginConnectionPosition,\n      overlayPos: OverlayConnectionPosition,\n      offsetX?: number,\n      offsetY?: number): this {\n\n    const position = new ConnectionPositionPair(originPos, overlayPos, offsetX, offsetY);\n    this._preferredPositions.push(position);\n    this._positionStrategy.withPositions(this._preferredPositions);\n    return this;\n  }\n\n  /**\n   * Sets the layout direction so the overlay's position can be adjusted to match.\n   * @param dir New layout direction.\n   */\n  withDirection(dir: 'ltr' | 'rtl'): this {\n    // Since the direction might be declared before the strategy is attached,\n    // we save the value in a temporary property and we'll transfer it to the\n    // overlay ref on attachment.\n    if (this._overlayRef) {\n      this._overlayRef.setDirection(dir);\n    } else {\n      this._direction = dir;\n    }\n\n    return this;\n  }\n\n  /**\n   * Sets an offset for the overlay's connection point on the x-axis\n   * @param offset New offset in the X axis.\n   */\n  withOffsetX(offset: number): this {\n    this._positionStrategy.withDefaultOffsetX(offset);\n    return this;\n  }\n\n  /**\n   * Sets an offset for the overlay's connection point on the y-axis\n   * @param  offset New offset in the Y axis.\n   */\n  withOffsetY(offset: number): this {\n    this._positionStrategy.withDefaultOffsetY(offset);\n    return this;\n  }\n\n  /**\n   * Sets whether the overlay's position should be locked in after it is positioned\n   * initially. When an overlay is locked in, it won't attempt to reposition itself\n   * when the position is re-applied (e.g. when the user scrolls away).\n   * @param isLocked Whether the overlay should locked in.\n   */\n  withLockedPosition(isLocked: boolean): this {\n    this._positionStrategy.withLockedPosition(isLocked);\n    return this;\n  }\n\n  /**\n   * Overwrites the current set of positions with an array of new ones.\n   * @param positions Position pairs to be set on the strategy.\n   */\n  withPositions(positions: ConnectionPositionPair[]): this {\n    this._preferredPositions = positions.slice();\n    this._positionStrategy.withPositions(this._preferredPositions);\n    return this;\n  }\n\n  /**\n   * Sets the origin element, relative to which to position the overlay.\n   * @param origin Reference to the new origin element.\n   */\n  setOrigin(origin: ElementRef): this {\n    this._positionStrategy.setOrigin(origin);\n    return this;\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 {PositionStrategy} from './position-strategy';\nimport {OverlayReference} from '../overlay-reference';\n\n/** Class to be added to the overlay pane wrapper. */\nconst wrapperClass = 'cdk-global-overlay-wrapper';\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * explicit position relative to the browser's viewport. We use flexbox, instead of\n * transforms, in order to avoid issues with subpixel rendering which can cause the\n * element to become blurry.\n */\nexport class GlobalPositionStrategy implements PositionStrategy {\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef: OverlayReference;\n  private _cssPosition: string = 'static';\n  private _topOffset: string = '';\n  private _bottomOffset: string = '';\n  private _leftOffset: string = '';\n  private _rightOffset: string = '';\n  private _alignItems: string = '';\n  private _justifyContent: string = '';\n  private _width: string = '';\n  private _height: string = '';\n  private _isDisposed: boolean;\n\n  attach(overlayRef: OverlayReference): void {\n    const config = overlayRef.getConfig();\n\n    this._overlayRef = overlayRef;\n\n    if (this._width && !config.width) {\n      overlayRef.updateSize({width: this._width});\n    }\n\n    if (this._height && !config.height) {\n      overlayRef.updateSize({height: this._height});\n    }\n\n    overlayRef.hostElement.classList.add(wrapperClass);\n    this._isDisposed = false;\n  }\n\n  /**\n   * Sets the top position of the overlay. Clears any previously set vertical position.\n   * @param value New top offset.\n   */\n  top(value: string = ''): this {\n    this._bottomOffset = '';\n    this._topOffset = value;\n    this._alignItems = 'flex-start';\n    return this;\n  }\n\n  /**\n   * Sets the left position of the overlay. Clears any previously set horizontal position.\n   * @param value New left offset.\n   */\n  left(value: string = ''): this {\n    this._rightOffset = '';\n    this._leftOffset = value;\n    this._justifyContent = 'flex-start';\n    return this;\n  }\n\n  /**\n   * Sets the bottom position of the overlay. Clears any previously set vertical position.\n   * @param value New bottom offset.\n   */\n  bottom(value: string = ''): this {\n    this._topOffset = '';\n    this._bottomOffset = value;\n    this._alignItems = 'flex-end';\n    return this;\n  }\n\n  /**\n   * Sets the right position of the overlay. Clears any previously set horizontal position.\n   * @param value New right offset.\n   */\n  right(value: string = ''): this {\n    this._leftOffset = '';\n    this._rightOffset = value;\n    this._justifyContent = 'flex-end';\n    return this;\n  }\n\n  /**\n   * Sets the overlay width and clears any previously set width.\n   * @param value New width for the overlay\n   * @deprecated Pass the `width` through the `OverlayConfig`.\n   * @breaking-change 8.0.0\n   */\n  width(value: string = ''): this {\n    if (this._overlayRef) {\n      this._overlayRef.updateSize({width: value});\n    } else {\n      this._width = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Sets the overlay height and clears any previously set height.\n   * @param value New height for the overlay\n   * @deprecated Pass the `height` through the `OverlayConfig`.\n   * @breaking-change 8.0.0\n   */\n  height(value: string = ''): this {\n    if (this._overlayRef) {\n      this._overlayRef.updateSize({height: value});\n    } else {\n      this._height = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Centers the overlay horizontally with an optional offset.\n   * Clears any previously set horizontal position.\n   *\n   * @param offset Overlay offset from the horizontal center.\n   */\n  centerHorizontally(offset: string = ''): this {\n    this.left(offset);\n    this._justifyContent = 'center';\n    return this;\n  }\n\n  /**\n   * Centers the overlay vertically with an optional offset.\n   * Clears any previously set vertical position.\n   *\n   * @param offset Overlay offset from the vertical center.\n   */\n  centerVertically(offset: string = ''): this {\n    this.top(offset);\n    this._alignItems = 'center';\n    return this;\n  }\n\n  /**\n   * Apply the position to the element.\n   * @docs-private\n   */\n  apply(): void {\n    // Since the overlay ref applies the strategy asynchronously, it could\n    // have been disposed before it ends up being applied. If that is the\n    // case, we shouldn't do anything.\n    if (!this._overlayRef || !this._overlayRef.hasAttached()) {\n      return;\n    }\n\n    const styles = this._overlayRef.overlayElement.style;\n    const parentStyles = this._overlayRef.hostElement.style;\n    const config = this._overlayRef.getConfig();\n    const {width, height, maxWidth, maxHeight} = config;\n    const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') &&\n                                      (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');\n    const shouldBeFlushVertically = (height === '100%' || height === '100vh') &&\n                                    (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');\n\n    styles.position = this._cssPosition;\n    styles.marginLeft = shouldBeFlushHorizontally ? '0' : this._leftOffset;\n    styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;\n    styles.marginBottom = this._bottomOffset;\n    styles.marginRight = this._rightOffset;\n\n    if (shouldBeFlushHorizontally) {\n      parentStyles.justifyContent = 'flex-start';\n    } else if (this._justifyContent === 'center') {\n      parentStyles.justifyContent = 'center';\n    } else if (this._overlayRef.getConfig().direction === 'rtl') {\n      // In RTL the browser will invert `flex-start` and `flex-end` automatically, but we\n      // don't want that because our positioning is explicitly `left` and `right`, hence\n      // why we do another inversion to ensure that the overlay stays in the same position.\n      // TODO: reconsider this if we add `start` and `end` methods.\n      if (this._justifyContent === 'flex-start') {\n        parentStyles.justifyContent = 'flex-end';\n      } else if (this._justifyContent === 'flex-end') {\n        parentStyles.justifyContent = 'flex-start';\n      }\n    } else {\n      parentStyles.justifyContent = this._justifyContent;\n    }\n\n    parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;\n  }\n\n  /**\n   * Cleans up the DOM changes from the position strategy.\n   * @docs-private\n   */\n  dispose(): void {\n    if (this._isDisposed || !this._overlayRef) {\n      return;\n    }\n\n    const styles = this._overlayRef.overlayElement.style;\n    const parent = this._overlayRef.hostElement;\n    const parentStyles = parent.style;\n\n    parent.classList.remove(wrapperClass);\n    parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop =\n      styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = '';\n\n    this._overlayRef = null!;\n    this._isDisposed = true;\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 {ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {ElementRef, Inject, Injectable} from '@angular/core';\n\nimport {OverlayContainer} from '../overlay-container';\n\nimport {OriginConnectionPosition, OverlayConnectionPosition} from './connected-position';\nimport {ConnectedPositionStrategy} from './connected-position-strategy';\nimport {\n  FlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategyOrigin,\n} from './flexible-connected-position-strategy';\nimport {GlobalPositionStrategy} from './global-position-strategy';\n\n\n/** Builder for overlay position strategy. */\n@Injectable({providedIn: 'root'})\nexport class OverlayPositionBuilder {\n  constructor(\n      private _viewportRuler: ViewportRuler, @Inject(DOCUMENT) private _document: any,\n      private _platform: Platform, private _overlayContainer: OverlayContainer) {}\n\n  /**\n   * Creates a global position strategy.\n   */\n  global(): GlobalPositionStrategy {\n    return new GlobalPositionStrategy();\n  }\n\n  /**\n   * Creates a relative position strategy.\n   * @param elementRef\n   * @param originPos\n   * @param overlayPos\n   * @deprecated Use `flexibleConnectedTo` instead.\n   * @breaking-change 8.0.0\n   */\n  connectedTo(\n      elementRef: ElementRef,\n      originPos: OriginConnectionPosition,\n      overlayPos: OverlayConnectionPosition): ConnectedPositionStrategy {\n    return new ConnectedPositionStrategy(\n        originPos, overlayPos, elementRef, this._viewportRuler, this._document, this._platform,\n        this._overlayContainer);\n  }\n\n  /**\n   * Creates a flexible position strategy.\n   * @param origin Origin relative to which to position the overlay.\n   */\n  flexibleConnectedTo(origin: FlexibleConnectedPositionStrategyOrigin):\n    FlexibleConnectedPositionStrategy {\n    return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document,\n        this._platform, this._overlayContainer);\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 {Directionality} from '@angular/cdk/bidi';\nimport {DomPortalOutlet} from '@angular/cdk/portal';\nimport {DOCUMENT, Location} from '@angular/common';\nimport {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  Inject,\n  Injectable,\n  Injector,\n  NgZone,\n} from '@angular/core';\nimport {OverlayKeyboardDispatcher} from './dispatchers/overlay-keyboard-dispatcher';\nimport {OverlayOutsideClickDispatcher} from './dispatchers/overlay-outside-click-dispatcher';\nimport {OverlayConfig} from './overlay-config';\nimport {OverlayContainer} from './overlay-container';\nimport {OverlayRef} from './overlay-ref';\nimport {OverlayPositionBuilder} from './position/overlay-position-builder';\nimport {ScrollStrategyOptions} from './scroll/index';\n\n\n/** Next overlay unique ID. */\nlet nextUniqueId = 0;\n\n// Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver\n// which needs to be different depending on where OverlayModule is imported.\n\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.\n */\n@Injectable()\nexport class Overlay {\n  private _appRef: ApplicationRef;\n\n  constructor(\n              /** Scrolling strategies that can be used when creating an overlay. */\n              public scrollStrategies: ScrollStrategyOptions,\n              private _overlayContainer: OverlayContainer,\n              private _componentFactoryResolver: ComponentFactoryResolver,\n              private _positionBuilder: OverlayPositionBuilder,\n              private _keyboardDispatcher: OverlayKeyboardDispatcher,\n              private _injector: Injector,\n              private _ngZone: NgZone,\n              @Inject(DOCUMENT) private _document: any,\n              private _directionality: Directionality,\n              private _location: Location,\n              private _outsideClickDispatcher: OverlayOutsideClickDispatcher) { }\n\n  /**\n   * Creates an overlay.\n   * @param config Configuration applied to the overlay.\n   * @returns Reference to the created overlay.\n   */\n  create(config?: OverlayConfig): OverlayRef {\n    const host = this._createHostElement();\n    const pane = this._createPaneElement(host);\n    const portalOutlet = this._createPortalOutlet(pane);\n    const overlayConfig = new OverlayConfig(config);\n\n    overlayConfig.direction = overlayConfig.direction || this._directionality.value;\n\n    return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone,\n      this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher);\n  }\n\n  /**\n   * Gets a position builder that can be used, via fluent API,\n   * to construct and configure a position strategy.\n   * @returns An overlay position builder.\n   */\n  position(): OverlayPositionBuilder {\n    return this._positionBuilder;\n  }\n\n  /**\n   * Creates the DOM element for an overlay and appends it to the overlay container.\n   * @returns Newly-created pane element\n   */\n  private _createPaneElement(host: HTMLElement): HTMLElement {\n    const pane = this._document.createElement('div');\n\n    pane.id = `cdk-overlay-${nextUniqueId++}`;\n    pane.classList.add('cdk-overlay-pane');\n    host.appendChild(pane);\n\n    return pane;\n  }\n\n  /**\n   * Creates the host element that wraps around an overlay\n   * and can be used for advanced positioning.\n   * @returns Newly-create host element.\n   */\n  private _createHostElement(): HTMLElement {\n    const host = this._document.createElement('div');\n    this._overlayContainer.getContainerElement().appendChild(host);\n    return host;\n  }\n\n  /**\n   * Create a DomPortalOutlet into which the overlay content can be loaded.\n   * @param pane The DOM element to turn into a portal outlet.\n   * @returns A portal outlet for the given DOM element.\n   */\n  private _createPortalOutlet(pane: HTMLElement): DomPortalOutlet {\n    // We have to resolve the ApplicationRef later in order to allow people\n    // to use overlay-based providers during app initialization.\n    if (!this._appRef) {\n      this._appRef = this._injector.get<ApplicationRef>(ApplicationRef);\n    }\n\n    return new DomPortalOutlet(pane, this._componentFactoryResolver, this._appRef, this._injector,\n                               this._document);\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 {Direction, Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {takeWhile} from 'rxjs/operators';\nimport {Overlay} from './overlay';\nimport {OverlayConfig} from './overlay-config';\nimport {OverlayRef} from './overlay-ref';\nimport {ConnectedOverlayPositionChange} from './position/connected-position';\nimport {\n  ConnectedPosition,\n  FlexibleConnectedPositionStrategy,\n} from './position/flexible-connected-position-strategy';\nimport {\n  RepositionScrollStrategy,\n  ScrollStrategy,\n} from './scroll/index';\n\n\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\nconst defaultPositionList: ConnectedPosition[] = [\n  {\n    originX: 'start',\n    originY: 'bottom',\n    overlayX: 'start',\n    overlayY: 'top'\n  },\n  {\n    originX: 'start',\n    originY: 'top',\n    overlayX: 'start',\n    overlayY: 'bottom'\n  },\n  {\n    originX: 'end',\n    originY: 'top',\n    overlayX: 'end',\n    overlayY: 'bottom'\n  },\n  {\n    originX: 'end',\n    originY: 'bottom',\n    overlayX: 'end',\n    overlayY: 'top'\n  }\n];\n\n/** Injection token that determines the scroll handling while the connected overlay is open. */\nexport const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('cdk-connected-overlay-scroll-strategy');\n\n/**\n * Directive applied to an element to make it usable as an origin for an Overlay using a\n * ConnectedPositionStrategy.\n */\n@Directive({\n  selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\n  exportAs: 'cdkOverlayOrigin',\n})\nexport class CdkOverlayOrigin {\n  constructor(\n      /** Reference to the element on which the directive is applied. */\n      public elementRef: ElementRef) { }\n}\n\n\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\n@Directive({\n  selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\n  exportAs: 'cdkConnectedOverlay'\n})\nexport class CdkConnectedOverlay implements OnDestroy, OnChanges {\n  private _overlayRef: OverlayRef;\n  private _templatePortal: TemplatePortal;\n  private _hasBackdrop = false;\n  private _lockPosition = false;\n  private _growAfterOpen = false;\n  private _flexibleDimensions = false;\n  private _push = false;\n  private _backdropSubscription = Subscription.EMPTY;\n  private _attachSubscription = Subscription.EMPTY;\n  private _detachSubscription = Subscription.EMPTY;\n  private _positionSubscription = Subscription.EMPTY;\n  private _offsetX: number;\n  private _offsetY: number;\n  private _position: FlexibleConnectedPositionStrategy;\n  private _scrollStrategyFactory: () => ScrollStrategy;\n\n  /** Origin for the connected overlay. */\n  @Input('cdkConnectedOverlayOrigin') origin: CdkOverlayOrigin;\n\n  /** Registered connected position pairs. */\n  @Input('cdkConnectedOverlayPositions') positions: ConnectedPosition[];\n\n  /**\n   * This input overrides the positions input if specified. It lets users pass\n   * in arbitrary positioning strategies.\n   */\n  @Input('cdkConnectedOverlayPositionStrategy') positionStrategy: FlexibleConnectedPositionStrategy;\n\n  /** The offset in pixels for the overlay connection point on the x-axis */\n  @Input('cdkConnectedOverlayOffsetX')\n  get offsetX(): number { return this._offsetX; }\n  set offsetX(offsetX: number) {\n    this._offsetX = offsetX;\n\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n    }\n  }\n\n  /** The offset in pixels for the overlay connection point on the y-axis */\n  @Input('cdkConnectedOverlayOffsetY')\n  get offsetY() { return this._offsetY; }\n  set offsetY(offsetY: number) {\n    this._offsetY = offsetY;\n\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n    }\n  }\n\n  /** The width of the overlay panel. */\n  @Input('cdkConnectedOverlayWidth') width: number | string;\n\n  /** The height of the overlay panel. */\n  @Input('cdkConnectedOverlayHeight') height: number | string;\n\n  /** The min width of the overlay panel. */\n  @Input('cdkConnectedOverlayMinWidth') minWidth: number | string;\n\n  /** The min height of the overlay panel. */\n  @Input('cdkConnectedOverlayMinHeight') minHeight: number | string;\n\n  /** The custom class to be set on the backdrop element. */\n  @Input('cdkConnectedOverlayBackdropClass') backdropClass: string;\n\n  /** The custom class to add to the overlay pane element. */\n  @Input('cdkConnectedOverlayPanelClass') panelClass: string | string[];\n\n  /** Margin between the overlay and the viewport edges. */\n  @Input('cdkConnectedOverlayViewportMargin') viewportMargin: number = 0;\n\n  /** Strategy to be used when handling scroll events while the overlay is open. */\n  @Input('cdkConnectedOverlayScrollStrategy') scrollStrategy: ScrollStrategy;\n\n  /** Whether the overlay is open. */\n  @Input('cdkConnectedOverlayOpen') open: boolean = false;\n\n  /** Whether the overlay can be closed by user interaction. */\n  @Input('cdkConnectedOverlayDisableClose') disableClose: boolean = false;\n\n  /** CSS selector which to set the transform origin. */\n  @Input('cdkConnectedOverlayTransformOriginOn') transformOriginSelector: string;\n\n  /** Whether or not the overlay should attach a backdrop. */\n  @Input('cdkConnectedOverlayHasBackdrop')\n  get hasBackdrop() { return this._hasBackdrop; }\n  set hasBackdrop(value: any) { this._hasBackdrop = coerceBooleanProperty(value); }\n\n  /** Whether or not the overlay should be locked when scrolling. */\n  @Input('cdkConnectedOverlayLockPosition')\n  get lockPosition() { return this._lockPosition; }\n  set lockPosition(value: any) { this._lockPosition = coerceBooleanProperty(value); }\n\n  /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n  @Input('cdkConnectedOverlayFlexibleDimensions')\n  get flexibleDimensions() { return this._flexibleDimensions; }\n  set flexibleDimensions(value: boolean) {\n    this._flexibleDimensions = coerceBooleanProperty(value);\n  }\n\n  /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n  @Input('cdkConnectedOverlayGrowAfterOpen')\n  get growAfterOpen() { return this._growAfterOpen; }\n  set growAfterOpen(value: boolean) { this._growAfterOpen = coerceBooleanProperty(value); }\n\n  /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n  @Input('cdkConnectedOverlayPush')\n  get push() { return this._push; }\n  set push(value: boolean) { this._push = coerceBooleanProperty(value); }\n\n  /** Event emitted when the backdrop is clicked. */\n  @Output() readonly backdropClick = new EventEmitter<MouseEvent>();\n\n  /** Event emitted when the position has changed. */\n  @Output() readonly positionChange = new EventEmitter<ConnectedOverlayPositionChange>();\n\n  /** Event emitted when the overlay has been attached. */\n  @Output() readonly attach = new EventEmitter<void>();\n\n  /** Event emitted when the overlay has been detached. */\n  @Output() readonly detach = new EventEmitter<void>();\n\n  /** Emits when there are keyboard events that are targeted at the overlay. */\n  @Output() readonly overlayKeydown = new EventEmitter<KeyboardEvent>();\n\n  /** Emits when there are mouse outside click events that are targeted at the overlay. */\n  @Output() readonly overlayOutsideClick = new EventEmitter<MouseEvent>();\n\n  // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n\n  constructor(\n      private _overlay: Overlay,\n      templateRef: TemplateRef<any>,\n      viewContainerRef: ViewContainerRef,\n      @Inject(CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY) scrollStrategyFactory: any,\n      @Optional() private _dir: Directionality) {\n    this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n    this._scrollStrategyFactory = scrollStrategyFactory;\n    this.scrollStrategy = this._scrollStrategyFactory();\n  }\n\n  /** The associated overlay reference. */\n  get overlayRef(): OverlayRef {\n    return this._overlayRef;\n  }\n\n  /** The element's layout direction. */\n  get dir(): Direction {\n    return this._dir ? this._dir.value : 'ltr';\n  }\n\n  ngOnDestroy() {\n    this._attachSubscription.unsubscribe();\n    this._detachSubscription.unsubscribe();\n    this._backdropSubscription.unsubscribe();\n    this._positionSubscription.unsubscribe();\n\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n      this._overlayRef.updateSize({\n        width: this.width,\n        minWidth: this.minWidth,\n        height: this.height,\n        minHeight: this.minHeight,\n      });\n\n      if (changes['origin'] && this.open) {\n        this._position.apply();\n      }\n    }\n\n    if (changes['open']) {\n      this.open ? this._attachOverlay() : this._detachOverlay();\n    }\n  }\n\n  /** Creates an overlay */\n  private _createOverlay() {\n    if (!this.positions || !this.positions.length) {\n      this.positions = defaultPositionList;\n    }\n\n    const overlayRef = this._overlayRef = this._overlay.create(this._buildConfig());\n    this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit());\n    this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit());\n    overlayRef.keydownEvents().subscribe((event: KeyboardEvent) => {\n      this.overlayKeydown.next(event);\n\n      if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n        event.preventDefault();\n        this._detachOverlay();\n      }\n    });\n\n    this._overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n      this.overlayOutsideClick.next(event);\n    });\n  }\n\n  /** Builds the overlay config based on the directive's inputs */\n  private _buildConfig(): OverlayConfig {\n    const positionStrategy = this._position =\n      this.positionStrategy || this._createPositionStrategy();\n    const overlayConfig = new OverlayConfig({\n      direction: this._dir,\n      positionStrategy,\n      scrollStrategy: this.scrollStrategy,\n      hasBackdrop: this.hasBackdrop\n    });\n\n    if (this.width || this.width === 0) {\n      overlayConfig.width = this.width;\n    }\n\n    if (this.height || this.height === 0) {\n      overlayConfig.height = this.height;\n    }\n\n    if (this.minWidth || this.minWidth === 0) {\n      overlayConfig.minWidth = this.minWidth;\n    }\n\n    if (this.minHeight || this.minHeight === 0) {\n      overlayConfig.minHeight = this.minHeight;\n    }\n\n    if (this.backdropClass) {\n      overlayConfig.backdropClass = this.backdropClass;\n    }\n\n    if (this.panelClass) {\n      overlayConfig.panelClass = this.panelClass;\n    }\n\n    return overlayConfig;\n  }\n\n  /** Updates the state of a position strategy, based on the values of the directive inputs. */\n  private _updatePositionStrategy(positionStrategy: FlexibleConnectedPositionStrategy) {\n    const positions: ConnectedPosition[] = this.positions.map(currentPosition => ({\n      originX: currentPosition.originX,\n      originY: currentPosition.originY,\n      overlayX: currentPosition.overlayX,\n      overlayY: currentPosition.overlayY,\n      offsetX: currentPosition.offsetX || this.offsetX,\n      offsetY: currentPosition.offsetY || this.offsetY,\n      panelClass: currentPosition.panelClass || undefined,\n    }));\n\n    return positionStrategy\n      .setOrigin(this.origin.elementRef)\n      .withPositions(positions)\n      .withFlexibleDimensions(this.flexibleDimensions)\n      .withPush(this.push)\n      .withGrowAfterOpen(this.growAfterOpen)\n      .withViewportMargin(this.viewportMargin)\n      .withLockedPosition(this.lockPosition)\n      .withTransformOriginOn(this.transformOriginSelector);\n  }\n\n  /** Returns the position strategy of the overlay to be set on the overlay config */\n  private _createPositionStrategy(): FlexibleConnectedPositionStrategy {\n    const strategy = this._overlay.position().flexibleConnectedTo(this.origin.elementRef);\n    this._updatePositionStrategy(strategy);\n    return strategy;\n  }\n\n  /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\n  private _attachOverlay() {\n    if (!this._overlayRef) {\n      this._createOverlay();\n    } else {\n      // Update the overlay size, in case the directive's inputs have changed\n      this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop;\n    }\n\n    if (!this._overlayRef.hasAttached()) {\n      this._overlayRef.attach(this._templatePortal);\n    }\n\n    if (this.hasBackdrop) {\n      this._backdropSubscription = this._overlayRef.backdropClick().subscribe(event => {\n        this.backdropClick.emit(event);\n      });\n    } else {\n      this._backdropSubscription.unsubscribe();\n    }\n\n    this._positionSubscription.unsubscribe();\n\n    // Only subscribe to `positionChanges` if requested, because putting\n    // together all the information for it can be expensive.\n    if (this.positionChange.observers.length > 0) {\n      this._positionSubscription = this._position.positionChanges\n        .pipe(takeWhile(() => this.positionChange.observers.length > 0))\n        .subscribe(position => {\n          this.positionChange.emit(position);\n\n          if (this.positionChange.observers.length === 0) {\n            this._positionSubscription.unsubscribe();\n          }\n        });\n    }\n  }\n\n  /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\n  private _detachOverlay() {\n    if (this._overlayRef) {\n      this._overlayRef.detach();\n    }\n\n    this._backdropSubscription.unsubscribe();\n    this._positionSubscription.unsubscribe();\n  }\n\n  static ngAcceptInputType_hasBackdrop: BooleanInput;\n  static ngAcceptInputType_lockPosition: BooleanInput;\n  static ngAcceptInputType_flexibleDimensions: BooleanInput;\n  static ngAcceptInputType_growAfterOpen: BooleanInput;\n  static ngAcceptInputType_push: BooleanInput;\n}\n\n\n/** @docs-private */\nexport function CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n    () => RepositionScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = {\n  provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY,\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 {BidiModule} from '@angular/cdk/bidi';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {NgModule} from '@angular/core';\nimport {Overlay} from './overlay';\nimport {\n  CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n  CdkConnectedOverlay,\n  CdkOverlayOrigin,\n} from './overlay-directives';\n\n\n@NgModule({\n  imports: [BidiModule, PortalModule, ScrollingModule],\n  exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule],\n  declarations: [CdkConnectedOverlay, CdkOverlayOrigin],\n  providers: [\n    Overlay,\n    CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n  ],\n})\nexport class OverlayModule {}\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\nexport {OverlayOutsideClickDispatcher} from './overlay-outside-click-dispatcher';\nexport {OverlayKeyboardDispatcher} from './overlay-keyboard-dispatcher';\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, Inject, OnDestroy} from '@angular/core';\nimport {OverlayContainer} from './overlay-container';\nimport {DOCUMENT} from '@angular/common';\nimport {Platform} from '@angular/cdk/platform';\n\n\n/**\n * Alternative to OverlayContainer that supports correct displaying of overlay elements in\n * Fullscreen mode\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n *\n * Should be provided in the root component.\n */\n@Injectable({providedIn: 'root'})\nexport class FullscreenOverlayContainer extends OverlayContainer implements OnDestroy {\n  private _fullScreenEventName: string | undefined;\n  private _fullScreenListener: () => void;\n\n  constructor(@Inject(DOCUMENT) _document: any, platform: Platform) {\n    super(_document, platform);\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    if (this._fullScreenEventName && this._fullScreenListener) {\n      this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);\n    }\n  }\n\n  protected override _createContainer(): void {\n    super._createContainer();\n    this._adjustParentForFullscreenChange();\n    this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange());\n  }\n\n  private _adjustParentForFullscreenChange(): void {\n    if (!this._containerElement) {\n      return;\n    }\n\n    const fullscreenElement = this.getFullscreenElement();\n    const parent = fullscreenElement || this._document.body;\n    parent.appendChild(this._containerElement);\n  }\n\n  private _addFullscreenChangeListener(fn: () => void) {\n    const eventName = this._getEventName();\n\n    if (eventName) {\n      if (this._fullScreenListener) {\n        this._document.removeEventListener(eventName, this._fullScreenListener);\n      }\n\n      this._document.addEventListener(eventName, fn);\n      this._fullScreenListener = fn;\n    }\n  }\n\n  private _getEventName(): string | undefined {\n    if (!this._fullScreenEventName) {\n      const _document = this._document as any;\n\n      if (_document.fullscreenEnabled) {\n        this._fullScreenEventName = 'fullscreenchange';\n      } else if (_document.webkitFullscreenEnabled) {\n        this._fullScreenEventName = 'webkitfullscreenchange';\n      } else if (_document.mozFullScreenEnabled) {\n        this._fullScreenEventName = 'mozfullscreenchange';\n      } else if (_document.msFullscreenEnabled) {\n        this._fullScreenEventName = 'MSFullscreenChange';\n      }\n    }\n\n    return this._fullScreenEventName;\n  }\n\n  /**\n   * When the page is put into fullscreen mode, a specific element is specified.\n   * Only that element and its children are visible when in fullscreen mode.\n   */\n  getFullscreenElement(): Element {\n    const _document = this._document as any;\n\n    return _document.fullscreenElement ||\n           _document.webkitFullscreenElement ||\n           _document.mozFullScreenElement ||\n           _document.msFullscreenElement ||\n           null;\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\nexport * from './overlay-config';\nexport * from './position/connected-position';\nexport * from './scroll/index';\nexport * from './overlay-module';\nexport * from './dispatchers/index';\nexport {Overlay} from './overlay';\nexport {OverlayContainer} from './overlay-container';\nexport {CdkOverlayOrigin, CdkConnectedOverlay} from './overlay-directives';\nexport {FullscreenOverlayContainer} from './fullscreen-overlay-container';\nexport {OverlayRef, OverlaySizeConfig} from './overlay-ref';\nexport {ViewportRuler} from '@angular/cdk/scrolling';\nexport {ComponentType} from '@angular/cdk/portal';\nexport {OverlayPositionBuilder} from './position/overlay-position-builder';\n\n// Export pre-defined position strategies and interface to build custom ones.\nexport {PositionStrategy} from './position/position-strategy';\nexport {GlobalPositionStrategy} from './position/global-position-strategy';\nexport {ConnectedPositionStrategy} from './position/connected-position-strategy';\nexport {\n  ConnectedPosition,\n  FlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategyOrigin,\n} from './position/flexible-connected-position-strategy';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {BaseOverlayDispatcher as ɵangular_material_src_cdk_overlay_overlay_d} from './dispatchers/base-overlay-dispatcher';\nexport {CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY as ɵangular_material_src_cdk_overlay_overlay_a,CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER as ɵangular_material_src_cdk_overlay_overlay_c,CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_cdk_overlay_overlay_b} from './overlay-directives';"]}
  • trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/platform.js

    r59329aa re29cc2e  
    340340 * found in the LICENSE file at https://angular.io/license
    341341 */
    342 let testGlobals;
    343 // We check the Node-specific `global` first, because tools tend to add a fake
    344 // `window` in Node environments which won't actually receive global variables.
    345 if (typeof global !== 'undefined') {
    346     testGlobals = global;
    347 }
    348 else if (typeof window !== 'undefined') {
    349     testGlobals = window;
    350 }
    351 else {
    352     testGlobals = {};
    353 }
    354342/** Gets whether the code is currently running in a test environment. */
    355343function _isTestEnvironment() {
    356     return (typeof testGlobals.__karma__ !== 'undefined' && !!testGlobals.__karma__) ||
    357         (typeof testGlobals.jasmine !== 'undefined' && !!testGlobals.jasmine) ||
    358         (typeof testGlobals.jest !== 'undefined' && !!testGlobals.jest) ||
    359         (typeof testGlobals.Mocha !== 'undefined' && !!testGlobals.Mocha);
     344    // We can't use `declare const` because it causes conflicts inside Google with the real typings
     345    // for these symbols and we can't read them off the global object, because they don't appear to
     346    // be attached there for some runners like Jest.
     347    // (see: https://github.com/angular/components/issues/23365#issuecomment-938146643)
     348    return (
     349    // @ts-ignore
     350    (typeof __karma__ !== 'undefined' && !!__karma__) ||
     351        // @ts-ignore
     352        (typeof jasmine !== 'undefined' && !!jasmine) ||
     353        // @ts-ignore
     354        (typeof jest !== 'undefined' && !!jest) ||
     355        // @ts-ignore
     356        (typeof Mocha !== 'undefined' && !!Mocha));
    360357}
    361358
  • trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/platform.js.map

    r59329aa re29cc2e  
    1 {"version":3,"file":"platform.js","sources":["../../../../../../src/cdk/platform/platform.ts","../../../../../../src/cdk/platform/platform-module.ts","../../../../../../src/cdk/platform/features/input-types.ts","../../../../../../src/cdk/platform/features/passive-listeners.ts","../../../../../../src/cdk/platform/features/scrolling.ts","../../../../../../src/cdk/platform/features/shadow-dom.ts","../../../../../../src/cdk/platform/features/test-environment.ts","../../../../../../src/cdk/platform/public-api.ts","../../../../../../src/cdk/platform/index.ts"],"names":[],"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\nimport {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\n// Whether the current platform supports the V8 Break Iterator. The V8 check\n// is necessary to detect all Blink based browsers.\nlet hasV8BreakIterator: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  hasV8BreakIterator = (typeof Intl !== 'undefined' && (Intl as any).v8BreakIterator);\n} catch {\n  hasV8BreakIterator = false;\n}\n\n/**\n * Service to detect the current platform by comparing the userAgent strings and\n * checking browser-specific global properties.\n */\n@Injectable({providedIn: 'root'})\nexport class Platform {\n  // We want to use the Angular platform check because if the Document is shimmed\n  // without the navigator, the following checks will fail. This is preferred because\n  // sometimes the Document may be shimmed without the user's knowledge or intention\n  /** Whether the Angular application is being rendered in the browser. */\n  isBrowser: boolean = this._platformId ?\n      isPlatformBrowser(this._platformId) : typeof document === 'object' && !!document;\n\n  /** Whether the current browser is Microsoft Edge. */\n  EDGE: boolean = this.isBrowser && /(edge)/i.test(navigator.userAgent);\n\n  /** Whether the current rendering engine is Microsoft Trident. */\n  TRIDENT: boolean = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\n\n  // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\n  /** Whether the current rendering engine is Blink. */\n  BLINK: boolean = this.isBrowser && (!!((window as any).chrome || hasV8BreakIterator) &&\n      typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT);\n\n  // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\n  // ensure that Webkit runs standalone and is not used as another engine's base.\n  /** Whether the current rendering engine is WebKit. */\n  WEBKIT: boolean = this.isBrowser &&\n      /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;\n\n  /** Whether the current platform is Apple iOS. */\n  IOS: boolean = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n      !('MSStream' in window);\n\n  // It's difficult to detect the plain Gecko engine, because most of the browsers identify\n  // them self as Gecko-like browsers and modify the userAgent's according to that.\n  // Since we only cover one explicit Firefox case, we can simply check for Firefox\n  // instead of having an unstable check for Gecko.\n  /** Whether the current browser is Firefox. */\n  FIREFOX: boolean = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\n\n  /** Whether the current platform is Android. */\n  // Trident on mobile adds the android platform to the userAgent to trick detections.\n  ANDROID: boolean = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\n\n  // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\n  // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\n  // Safari browser should also use Webkit as its layout engine.\n  /** Whether the current browser is Safari. */\n  SAFARI: boolean = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\n\n  constructor(@Inject(PLATFORM_ID) private _platformId: Object) {}\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 {NgModule} from '@angular/core';\n\n\n@NgModule({})\nexport class PlatformModule {}\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/** Cached result Set of input types support by the current browser. */\nlet supportedInputTypes: Set<string>;\n\n/** Types of `<input>` that *might* be supported. */\nconst candidateInputTypes = [\n  // `color` must come first. Chrome 56 shows a warning if we change the type to `color` after\n  // first changing it to something else:\n  // The specified value \"\" does not conform to the required format.\n  // The format is \"#rrggbb\" where rr, gg, bb are two-digit hexadecimal numbers.\n  'color',\n  'button',\n  'checkbox',\n  'date',\n  'datetime-local',\n  'email',\n  'file',\n  'hidden',\n  'image',\n  'month',\n  'number',\n  'password',\n  'radio',\n  'range',\n  'reset',\n  'search',\n  'submit',\n  'tel',\n  'text',\n  'time',\n  'url',\n  'week',\n];\n\n/** @returns The input types supported by this browser. */\nexport function getSupportedInputTypes(): Set<string> {\n  // Result is cached.\n  if (supportedInputTypes) {\n    return supportedInputTypes;\n  }\n\n  // We can't check if an input type is not supported until we're on the browser, so say that\n  // everything is supported when not on the browser. We don't use `Platform` here since it's\n  // just a helper function and can't inject it.\n  if (typeof document !== 'object' || !document) {\n    supportedInputTypes = new Set(candidateInputTypes);\n    return supportedInputTypes;\n  }\n\n  let featureTestInput = document.createElement('input');\n  supportedInputTypes = new Set(candidateInputTypes.filter(value => {\n    featureTestInput.setAttribute('type', value);\n    return featureTestInput.type === value;\n  }));\n\n  return supportedInputTypes;\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/** Cached result of whether the user's browser supports passive event listeners. */\nlet supportsPassiveEvents: boolean;\n\n/**\n * Checks whether the user's browser supports passive event listeners.\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function supportsPassiveEventListeners(): boolean {\n  if (supportsPassiveEvents == null && typeof window !== 'undefined') {\n    try {\n      window.addEventListener('test', null!, Object.defineProperty({}, 'passive', {\n        get: () => supportsPassiveEvents = true\n      }));\n    } finally {\n      supportsPassiveEvents = supportsPassiveEvents || false;\n    }\n  }\n\n  return supportsPassiveEvents;\n}\n\n/**\n * Normalizes an `AddEventListener` object to something that can be passed\n * to `addEventListener` on any browser, no matter whether it supports the\n * `options` parameter.\n * @param options Object to be normalized.\n */\nexport function normalizePassiveListenerOptions(options: AddEventListenerOptions):\n  AddEventListenerOptions | boolean {\n  return supportsPassiveEventListeners() ? options : !!options.capture;\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/** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */\nexport const enum RtlScrollAxisType {\n  /**\n   * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled\n   * all the way right.\n   */\n  NORMAL,\n  /**\n   * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n   * all the way right.\n   */\n  NEGATED,\n  /**\n   * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n   * all the way right.\n   */\n  INVERTED\n}\n\n/** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */\nlet rtlScrollAxisType: RtlScrollAxisType|undefined;\n\n/** Cached result of the check that indicates whether the browser supports scroll behaviors. */\nlet scrollBehaviorSupported: boolean|undefined;\n\n/** Check whether the browser supports scroll behaviors. */\nexport function supportsScrollBehavior(): boolean {\n  if (scrollBehaviorSupported == null) {\n    // If we're not in the browser, it can't be supported. Also check for `Element`, because\n    // some projects stub out the global `document` during SSR which can throw us off.\n    if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {\n      scrollBehaviorSupported = false;\n      return scrollBehaviorSupported;\n    }\n\n    // If the element can have a `scrollBehavior` style, we can be sure that it's supported.\n    if ('scrollBehavior' in document.documentElement!.style) {\n      scrollBehaviorSupported = true;\n    } else {\n      // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's\n      // supported but it doesn't handle scroll behavior, or it has been polyfilled.\n      const scrollToFunction: Function|undefined = Element.prototype.scrollTo;\n\n      if (scrollToFunction) {\n        // We can detect if the function has been polyfilled by calling `toString` on it. Native\n        // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get\n        // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider\n        // polyfilled functions as supporting scroll behavior.\n        scrollBehaviorSupported = !/\\{\\s*\\[native code\\]\\s*\\}/.test(scrollToFunction.toString());\n      } else {\n        scrollBehaviorSupported = false;\n      }\n    }\n  }\n\n  return scrollBehaviorSupported;\n}\n\n/**\n * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,\n * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.\n */\nexport function getRtlScrollAxisType(): RtlScrollAxisType {\n  // We can't check unless we're on the browser. Just assume 'normal' if we're not.\n  if (typeof document !== 'object' || !document) {\n    return RtlScrollAxisType.NORMAL;\n  }\n\n  if (rtlScrollAxisType == null) {\n    // Create a 1px wide scrolling container and a 2px wide content element.\n    const scrollContainer = document.createElement('div');\n    const containerStyle = scrollContainer.style;\n    scrollContainer.dir = 'rtl';\n    containerStyle.width = '1px';\n    containerStyle.overflow = 'auto';\n    containerStyle.visibility = 'hidden';\n    containerStyle.pointerEvents = 'none';\n    containerStyle.position = 'absolute';\n\n    const content = document.createElement('div');\n    const contentStyle = content.style;\n    contentStyle.width = '2px';\n    contentStyle.height = '1px';\n\n    scrollContainer.appendChild(content);\n    document.body.appendChild(scrollContainer);\n\n    rtlScrollAxisType = RtlScrollAxisType.NORMAL;\n\n    // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL\n    // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're\n    // dealing with one of the other two types of browsers.\n    if (scrollContainer.scrollLeft === 0) {\n      // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an\n      // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by\n      // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will\n      // return 0 when we read it again.\n      scrollContainer.scrollLeft = 1;\n      rtlScrollAxisType =\n          scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;\n    }\n\n    scrollContainer.parentNode!.removeChild(scrollContainer);\n  }\n  return rtlScrollAxisType;\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\nlet shadowDomIsSupported: boolean;\n\n/** Checks whether the user's browser support Shadow DOM. */\nexport function _supportsShadowDom(): boolean {\n  if (shadowDomIsSupported == null) {\n    const head = typeof document !== 'undefined' ? document.head : null;\n    shadowDomIsSupported = !!(head && ((head as any).createShadowRoot || head.attachShadow));\n  }\n\n  return shadowDomIsSupported;\n}\n\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\nexport function _getShadowRoot(element: HTMLElement): ShadowRoot | null {\n  if (_supportsShadowDom()) {\n    const rootNode = element.getRootNode ? element.getRootNode() : null;\n\n    // Note that this should be caught by `_supportsShadowDom`, but some\n    // teams have been able to hit this code path on unsupported browsers.\n    if (typeof ShadowRoot !== 'undefined' && ShadowRoot && rootNode instanceof ShadowRoot) {\n      return rootNode;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Gets the currently-focused element on the page while\n * also piercing through Shadow DOM boundaries.\n */\nexport function _getFocusedElementPierceShadowDom(): HTMLElement | null {\n  let activeElement = typeof document !== 'undefined' && document ?\n    document.activeElement as HTMLElement | null : null;\n\n  while (activeElement && activeElement.shadowRoot) {\n    const newActiveElement = activeElement.shadowRoot.activeElement as HTMLElement | null;\n    if (newActiveElement === activeElement) {\n      break;\n    } else {\n      activeElement = newActiveElement;\n    }\n  }\n\n  return activeElement;\n}\n\n\n/** Gets the target of an event while accounting for Shadow DOM. */\nexport function _getEventTarget<T extends EventTarget>(event: Event): T|null {\n  // If an event is bound outside the Shadow DOM, the `event.target` will\n  // point to the shadow root so we have to use `composedPath` instead.\n  return (event.composedPath ? event.composedPath()[0] : event.target) as T | null;\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// Avoid using `declare const` because it caused conflicts inside Google\n// with the real typings for these symbols. We use `declare interface` instead\n// of just `interface` for interop with Closure Compiler (prevents property renaming):\n// https://github.com/angular/tsickle/blob/master/README.md#differences-from-typescript\ndeclare interface TestGlobals {\n  jasmine: unknown;\n  __karma__: unknown;\n  jest: unknown;\n  Mocha: unknown;\n}\n\nlet testGlobals: TestGlobals;\n\n// We check the Node-specific `global` first, because tools tend to add a fake\n// `window` in Node environments which won't actually receive global variables.\nif (typeof global !== 'undefined') {\n  testGlobals = global as {} as TestGlobals;\n} else if (typeof window !== 'undefined') {\n  testGlobals = window as {} as TestGlobals;\n} else {\n  testGlobals = {} as TestGlobals;\n}\n\n/** Gets whether the code is currently running in a test environment. */\nexport function _isTestEnvironment(): boolean {\n  return (typeof testGlobals.__karma__ !== 'undefined' && !!testGlobals.__karma__) ||\n         (typeof testGlobals.jasmine !== 'undefined' && !!testGlobals.jasmine) ||\n         (typeof testGlobals.jest !== 'undefined' && !!testGlobals.jest) ||\n         (typeof testGlobals.Mocha !== 'undefined' && !!testGlobals.Mocha);\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\nexport * from './platform';\nexport * from './platform-module';\nexport * from './features/input-types';\nexport * from './features/passive-listeners';\nexport * from './features/scrolling';\nexport * from './features/shadow-dom';\nexport * from './features/test-environment';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"]}
     1{"version":3,"file":"platform.js","sources":["../../../../../../src/cdk/platform/platform.ts","../../../../../../src/cdk/platform/platform-module.ts","../../../../../../src/cdk/platform/features/input-types.ts","../../../../../../src/cdk/platform/features/passive-listeners.ts","../../../../../../src/cdk/platform/features/scrolling.ts","../../../../../../src/cdk/platform/features/shadow-dom.ts","../../../../../../src/cdk/platform/features/test-environment.ts","../../../../../../src/cdk/platform/public-api.ts","../../../../../../src/cdk/platform/index.ts"],"names":[],"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\nimport {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\n// Whether the current platform supports the V8 Break Iterator. The V8 check\n// is necessary to detect all Blink based browsers.\nlet hasV8BreakIterator: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  hasV8BreakIterator = (typeof Intl !== 'undefined' && (Intl as any).v8BreakIterator);\n} catch {\n  hasV8BreakIterator = false;\n}\n\n/**\n * Service to detect the current platform by comparing the userAgent strings and\n * checking browser-specific global properties.\n */\n@Injectable({providedIn: 'root'})\nexport class Platform {\n  // We want to use the Angular platform check because if the Document is shimmed\n  // without the navigator, the following checks will fail. This is preferred because\n  // sometimes the Document may be shimmed without the user's knowledge or intention\n  /** Whether the Angular application is being rendered in the browser. */\n  isBrowser: boolean = this._platformId ?\n      isPlatformBrowser(this._platformId) : typeof document === 'object' && !!document;\n\n  /** Whether the current browser is Microsoft Edge. */\n  EDGE: boolean = this.isBrowser && /(edge)/i.test(navigator.userAgent);\n\n  /** Whether the current rendering engine is Microsoft Trident. */\n  TRIDENT: boolean = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\n\n  // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\n  /** Whether the current rendering engine is Blink. */\n  BLINK: boolean = this.isBrowser && (!!((window as any).chrome || hasV8BreakIterator) &&\n      typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT);\n\n  // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\n  // ensure that Webkit runs standalone and is not used as another engine's base.\n  /** Whether the current rendering engine is WebKit. */\n  WEBKIT: boolean = this.isBrowser &&\n      /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;\n\n  /** Whether the current platform is Apple iOS. */\n  IOS: boolean = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n      !('MSStream' in window);\n\n  // It's difficult to detect the plain Gecko engine, because most of the browsers identify\n  // them self as Gecko-like browsers and modify the userAgent's according to that.\n  // Since we only cover one explicit Firefox case, we can simply check for Firefox\n  // instead of having an unstable check for Gecko.\n  /** Whether the current browser is Firefox. */\n  FIREFOX: boolean = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\n\n  /** Whether the current platform is Android. */\n  // Trident on mobile adds the android platform to the userAgent to trick detections.\n  ANDROID: boolean = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\n\n  // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\n  // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\n  // Safari browser should also use Webkit as its layout engine.\n  /** Whether the current browser is Safari. */\n  SAFARI: boolean = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\n\n  constructor(@Inject(PLATFORM_ID) private _platformId: Object) {}\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 {NgModule} from '@angular/core';\n\n\n@NgModule({})\nexport class PlatformModule {}\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/** Cached result Set of input types support by the current browser. */\nlet supportedInputTypes: Set<string>;\n\n/** Types of `<input>` that *might* be supported. */\nconst candidateInputTypes = [\n  // `color` must come first. Chrome 56 shows a warning if we change the type to `color` after\n  // first changing it to something else:\n  // The specified value \"\" does not conform to the required format.\n  // The format is \"#rrggbb\" where rr, gg, bb are two-digit hexadecimal numbers.\n  'color',\n  'button',\n  'checkbox',\n  'date',\n  'datetime-local',\n  'email',\n  'file',\n  'hidden',\n  'image',\n  'month',\n  'number',\n  'password',\n  'radio',\n  'range',\n  'reset',\n  'search',\n  'submit',\n  'tel',\n  'text',\n  'time',\n  'url',\n  'week',\n];\n\n/** @returns The input types supported by this browser. */\nexport function getSupportedInputTypes(): Set<string> {\n  // Result is cached.\n  if (supportedInputTypes) {\n    return supportedInputTypes;\n  }\n\n  // We can't check if an input type is not supported until we're on the browser, so say that\n  // everything is supported when not on the browser. We don't use `Platform` here since it's\n  // just a helper function and can't inject it.\n  if (typeof document !== 'object' || !document) {\n    supportedInputTypes = new Set(candidateInputTypes);\n    return supportedInputTypes;\n  }\n\n  let featureTestInput = document.createElement('input');\n  supportedInputTypes = new Set(candidateInputTypes.filter(value => {\n    featureTestInput.setAttribute('type', value);\n    return featureTestInput.type === value;\n  }));\n\n  return supportedInputTypes;\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/** Cached result of whether the user's browser supports passive event listeners. */\nlet supportsPassiveEvents: boolean;\n\n/**\n * Checks whether the user's browser supports passive event listeners.\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function supportsPassiveEventListeners(): boolean {\n  if (supportsPassiveEvents == null && typeof window !== 'undefined') {\n    try {\n      window.addEventListener('test', null!, Object.defineProperty({}, 'passive', {\n        get: () => supportsPassiveEvents = true\n      }));\n    } finally {\n      supportsPassiveEvents = supportsPassiveEvents || false;\n    }\n  }\n\n  return supportsPassiveEvents;\n}\n\n/**\n * Normalizes an `AddEventListener` object to something that can be passed\n * to `addEventListener` on any browser, no matter whether it supports the\n * `options` parameter.\n * @param options Object to be normalized.\n */\nexport function normalizePassiveListenerOptions(options: AddEventListenerOptions):\n  AddEventListenerOptions | boolean {\n  return supportsPassiveEventListeners() ? options : !!options.capture;\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/** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */\nexport const enum RtlScrollAxisType {\n  /**\n   * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled\n   * all the way right.\n   */\n  NORMAL,\n  /**\n   * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n   * all the way right.\n   */\n  NEGATED,\n  /**\n   * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n   * all the way right.\n   */\n  INVERTED\n}\n\n/** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */\nlet rtlScrollAxisType: RtlScrollAxisType|undefined;\n\n/** Cached result of the check that indicates whether the browser supports scroll behaviors. */\nlet scrollBehaviorSupported: boolean|undefined;\n\n/** Check whether the browser supports scroll behaviors. */\nexport function supportsScrollBehavior(): boolean {\n  if (scrollBehaviorSupported == null) {\n    // If we're not in the browser, it can't be supported. Also check for `Element`, because\n    // some projects stub out the global `document` during SSR which can throw us off.\n    if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {\n      scrollBehaviorSupported = false;\n      return scrollBehaviorSupported;\n    }\n\n    // If the element can have a `scrollBehavior` style, we can be sure that it's supported.\n    if ('scrollBehavior' in document.documentElement!.style) {\n      scrollBehaviorSupported = true;\n    } else {\n      // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's\n      // supported but it doesn't handle scroll behavior, or it has been polyfilled.\n      const scrollToFunction: Function|undefined = Element.prototype.scrollTo;\n\n      if (scrollToFunction) {\n        // We can detect if the function has been polyfilled by calling `toString` on it. Native\n        // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get\n        // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider\n        // polyfilled functions as supporting scroll behavior.\n        scrollBehaviorSupported = !/\\{\\s*\\[native code\\]\\s*\\}/.test(scrollToFunction.toString());\n      } else {\n        scrollBehaviorSupported = false;\n      }\n    }\n  }\n\n  return scrollBehaviorSupported;\n}\n\n/**\n * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,\n * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.\n */\nexport function getRtlScrollAxisType(): RtlScrollAxisType {\n  // We can't check unless we're on the browser. Just assume 'normal' if we're not.\n  if (typeof document !== 'object' || !document) {\n    return RtlScrollAxisType.NORMAL;\n  }\n\n  if (rtlScrollAxisType == null) {\n    // Create a 1px wide scrolling container and a 2px wide content element.\n    const scrollContainer = document.createElement('div');\n    const containerStyle = scrollContainer.style;\n    scrollContainer.dir = 'rtl';\n    containerStyle.width = '1px';\n    containerStyle.overflow = 'auto';\n    containerStyle.visibility = 'hidden';\n    containerStyle.pointerEvents = 'none';\n    containerStyle.position = 'absolute';\n\n    const content = document.createElement('div');\n    const contentStyle = content.style;\n    contentStyle.width = '2px';\n    contentStyle.height = '1px';\n\n    scrollContainer.appendChild(content);\n    document.body.appendChild(scrollContainer);\n\n    rtlScrollAxisType = RtlScrollAxisType.NORMAL;\n\n    // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL\n    // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're\n    // dealing with one of the other two types of browsers.\n    if (scrollContainer.scrollLeft === 0) {\n      // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an\n      // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by\n      // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will\n      // return 0 when we read it again.\n      scrollContainer.scrollLeft = 1;\n      rtlScrollAxisType =\n          scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;\n    }\n\n    scrollContainer.parentNode!.removeChild(scrollContainer);\n  }\n  return rtlScrollAxisType;\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\nlet shadowDomIsSupported: boolean;\n\n/** Checks whether the user's browser support Shadow DOM. */\nexport function _supportsShadowDom(): boolean {\n  if (shadowDomIsSupported == null) {\n    const head = typeof document !== 'undefined' ? document.head : null;\n    shadowDomIsSupported = !!(head && ((head as any).createShadowRoot || head.attachShadow));\n  }\n\n  return shadowDomIsSupported;\n}\n\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\nexport function _getShadowRoot(element: HTMLElement): ShadowRoot | null {\n  if (_supportsShadowDom()) {\n    const rootNode = element.getRootNode ? element.getRootNode() : null;\n\n    // Note that this should be caught by `_supportsShadowDom`, but some\n    // teams have been able to hit this code path on unsupported browsers.\n    if (typeof ShadowRoot !== 'undefined' && ShadowRoot && rootNode instanceof ShadowRoot) {\n      return rootNode;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Gets the currently-focused element on the page while\n * also piercing through Shadow DOM boundaries.\n */\nexport function _getFocusedElementPierceShadowDom(): HTMLElement | null {\n  let activeElement = typeof document !== 'undefined' && document ?\n    document.activeElement as HTMLElement | null : null;\n\n  while (activeElement && activeElement.shadowRoot) {\n    const newActiveElement = activeElement.shadowRoot.activeElement as HTMLElement | null;\n    if (newActiveElement === activeElement) {\n      break;\n    } else {\n      activeElement = newActiveElement;\n    }\n  }\n\n  return activeElement;\n}\n\n\n/** Gets the target of an event while accounting for Shadow DOM. */\nexport function _getEventTarget<T extends EventTarget>(event: Event): T|null {\n  // If an event is bound outside the Shadow DOM, the `event.target` will\n  // point to the shadow root so we have to use `composedPath` instead.\n  return (event.composedPath ? event.composedPath()[0] : event.target) as T | null;\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 the code is currently running in a test environment. */\nexport function _isTestEnvironment(): boolean {\n  // We can't use `declare const` because it causes conflicts inside Google with the real typings\n  // for these symbols and we can't read them off the global object, because they don't appear to\n  // be attached there for some runners like Jest.\n  // (see: https://github.com/angular/components/issues/23365#issuecomment-938146643)\n  return (\n    // @ts-ignore\n    (typeof __karma__ !== 'undefined' && !!__karma__) ||\n    // @ts-ignore\n    (typeof jasmine !== 'undefined' && !!jasmine) ||\n    // @ts-ignore\n    (typeof jest !== 'undefined' && !!jest) ||\n    // @ts-ignore\n    (typeof Mocha !== 'undefined' && !!Mocha)\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\nexport * from './platform';\nexport * from './platform-module';\nexport * from './features/input-types';\nexport * from './features/passive-listeners';\nexport * from './features/scrolling';\nexport * from './features/shadow-dom';\nexport * from './features/test-environment';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"]}
Note: See TracChangeset for help on using the changeset viewer.