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