@angular/cdk 21.1.0-next.0 → 21.1.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/fesm2022/_a11y-module-chunk.mjs +8 -2
  2. package/fesm2022/_a11y-module-chunk.mjs.map +1 -1
  3. package/fesm2022/_activedescendant-key-manager-chunk.mjs.map +1 -1
  4. package/fesm2022/_array-chunk.mjs.map +1 -1
  5. package/fesm2022/_breakpoints-observer-chunk.mjs.map +1 -1
  6. package/fesm2022/_css-pixel-value-chunk.mjs.map +1 -1
  7. package/fesm2022/_data-source-chunk.mjs.map +1 -1
  8. package/fesm2022/_directionality-chunk.mjs.map +1 -1
  9. package/fesm2022/_dispose-view-repeater-strategy-chunk.mjs.map +1 -1
  10. package/fesm2022/_element-chunk.mjs.map +1 -1
  11. package/fesm2022/_fake-event-detection-chunk.mjs.map +1 -1
  12. package/fesm2022/_focus-key-manager-chunk.mjs.map +1 -1
  13. package/fesm2022/_focus-monitor-chunk.mjs.map +1 -1
  14. package/fesm2022/_id-generator-chunk.mjs.map +1 -1
  15. package/fesm2022/_keycodes-chunk.mjs.map +1 -1
  16. package/fesm2022/_list-key-manager-chunk.mjs.map +1 -1
  17. package/fesm2022/_overlay-module-chunk.mjs.map +1 -1
  18. package/fesm2022/_passive-listeners-chunk.mjs.map +1 -1
  19. package/fesm2022/_platform-chunk.mjs.map +1 -1
  20. package/fesm2022/_recycle-view-repeater-strategy-chunk.mjs.map +1 -1
  21. package/fesm2022/_scrolling-chunk.mjs.map +1 -1
  22. package/fesm2022/_selection-model-chunk.mjs.map +1 -1
  23. package/fesm2022/_shadow-dom-chunk.mjs.map +1 -1
  24. package/fesm2022/_style-loader-chunk.mjs.map +1 -1
  25. package/fesm2022/_test-environment-chunk.mjs.map +1 -1
  26. package/fesm2022/_tree-key-manager-chunk.mjs.map +1 -1
  27. package/fesm2022/_typeahead-chunk.mjs.map +1 -1
  28. package/fesm2022/_unique-selection-dispatcher-chunk.mjs.map +1 -1
  29. package/fesm2022/a11y.mjs +2 -1
  30. package/fesm2022/a11y.mjs.map +1 -1
  31. package/fesm2022/accordion.mjs.map +1 -1
  32. package/fesm2022/bidi.mjs.map +1 -1
  33. package/fesm2022/cdk.mjs +1 -1
  34. package/fesm2022/cdk.mjs.map +1 -1
  35. package/fesm2022/clipboard.mjs.map +1 -1
  36. package/fesm2022/coercion-private.mjs.map +1 -1
  37. package/fesm2022/coercion.mjs.map +1 -1
  38. package/fesm2022/dialog.mjs +2 -1
  39. package/fesm2022/dialog.mjs.map +1 -1
  40. package/fesm2022/drag-drop.mjs.map +1 -1
  41. package/fesm2022/keycodes.mjs.map +1 -1
  42. package/fesm2022/layout.mjs.map +1 -1
  43. package/fesm2022/listbox.mjs.map +1 -1
  44. package/fesm2022/menu.mjs.map +1 -1
  45. package/fesm2022/observers-private.mjs.map +1 -1
  46. package/fesm2022/observers.mjs.map +1 -1
  47. package/fesm2022/overlay.mjs.map +1 -1
  48. package/fesm2022/platform.mjs.map +1 -1
  49. package/fesm2022/portal.mjs.map +1 -1
  50. package/fesm2022/private.mjs +52 -3
  51. package/fesm2022/private.mjs.map +1 -1
  52. package/fesm2022/scrolling.mjs.map +1 -1
  53. package/fesm2022/stepper.mjs.map +1 -1
  54. package/fesm2022/table.mjs.map +1 -1
  55. package/fesm2022/testing-selenium-webdriver.mjs.map +1 -1
  56. package/fesm2022/testing-testbed.mjs.map +1 -1
  57. package/fesm2022/testing.mjs.map +1 -1
  58. package/fesm2022/text-field.mjs.map +1 -1
  59. package/fesm2022/tree.mjs.map +1 -1
  60. package/package.json +1 -1
  61. package/schematics/ng-add/index.js +1 -1
  62. package/types/_a11y-module-chunk.d.ts +9 -5
  63. package/types/a11y.d.ts +2 -1
  64. package/types/dialog.d.ts +1 -0
  65. package/types/private.d.ts +5 -1
  66. package/fesm2022/_visually-hidden-chunk.mjs +0 -46
  67. package/fesm2022/_visually-hidden-chunk.mjs.map +0 -1
@@ -4,8 +4,9 @@ import { CdkMonitorFocus } from './_focus-monitor-chunk.mjs';
4
4
  import { Platform } from './_platform-chunk.mjs';
5
5
  import { _getFocusedElementPierceShadowDom } from './_shadow-dom-chunk.mjs';
6
6
  import { _CdkPrivateStyleLoader } from './_style-loader-chunk.mjs';
7
- import { _VisuallyHiddenLoader } from './_visually-hidden-chunk.mjs';
7
+ import { _VisuallyHiddenLoader, _setInnerHtml } from './private.mjs';
8
8
  import { BreakpointObserver } from './_breakpoints-observer-chunk.mjs';
9
+ import { DomSanitizer } from '@angular/platform-browser';
9
10
  import { ContentObserver, ObserversModule } from './observers.mjs';
10
11
 
11
12
  class IsFocusableConfig {
@@ -491,6 +492,7 @@ class LiveAnnouncer {
491
492
  });
492
493
  _liveElement;
493
494
  _document = inject(DOCUMENT);
495
+ _sanitizer = inject(DomSanitizer);
494
496
  _previousTimeout;
495
497
  _currentPromise;
496
498
  _currentResolve;
@@ -527,7 +529,11 @@ class LiveAnnouncer {
527
529
  }
528
530
  clearTimeout(this._previousTimeout);
529
531
  this._previousTimeout = setTimeout(() => {
530
- this._liveElement.textContent = message;
532
+ if (!message || typeof message === 'string') {
533
+ this._liveElement.textContent = message;
534
+ } else {
535
+ _setInnerHtml(this._liveElement, message, this._sanitizer);
536
+ }
531
537
  if (typeof duration === 'number') {
532
538
  this._previousTimeout = setTimeout(() => this.clear(), duration);
533
539
  }
@@ -1 +1 @@
1
- {"version":3,"file":"_a11y-module-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/interactivity-checker/interactivity-checker.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/focus-trap/focus-trap.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/live-announcer/live-announcer-tokens.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/live-announcer/live-announcer.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/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;\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 {\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;\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}) autoCapture: boolean;\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 {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} from '../../private';\n\nlet uniqueIds = 0;\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 _previousTimeout: ReturnType<typeof setTimeout>;\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: string): 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: string, 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: string, 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(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 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 this._liveElement.textContent = message;\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 = null;\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 | null;\n\n constructor(...args: unknown[]);\n\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);\n }\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.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: boolean;\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","_previousTimeout","_currentPromise","_currentResolve","elementToken","_createLiveElement","announce","message","defaultOptions","politeness","duration","clear","clearTimeout","id","_exposeAnnouncerToModals","textContent","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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"}
1
+ {"version":3,"file":"_a11y-module-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/interactivity-checker/interactivity-checker.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/focus-trap/focus-trap.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/live-announcer/live-announcer-tokens.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/live-announcer/live-announcer.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/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;\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 {\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;\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}) autoCapture: boolean;\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>;\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 = null;\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 | null;\n\n constructor(...args: unknown[]);\n\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);\n }\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.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: boolean;\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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"_activedescendant-key-manager-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/key-manager/activedescendant-key-manager.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 {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 * 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 * 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 | number): 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"],"names":["ActiveDescendantKeyManager","ListKeyManager","setActiveItem","index","activeItem","setInactiveStyles","setActiveStyles"],"mappings":";;AAuBM,MAAOA,0BAA8B,SAAQC,cAAiC,CAAA;EAwBzEC,aAAaA,CAACC,KAAU,EAAA;IAC/B,IAAI,IAAI,CAACC,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACC,iBAAiB,EAAE;AACrC;AACA,IAAA,KAAK,CAACH,aAAa,CAACC,KAAK,CAAC;IAC1B,IAAI,IAAI,CAACC,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACE,eAAe,EAAE;AACnC;AACF;AACD;;;;"}
1
+ {"version":3,"file":"_activedescendant-key-manager-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/a11y/key-manager/activedescendant-key-manager.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 {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 * 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 * 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 | number): 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"],"names":["ActiveDescendantKeyManager","ListKeyManager","setActiveItem","index","activeItem","setInactiveStyles","setActiveStyles"],"mappings":";;AAuBM,MAAOA,0BAA8B,SAAQC,cAAiC,CAAA;EAwBzEC,aAAaA,CAACC,KAAU,EAAA;IAC/B,IAAI,IAAI,CAACC,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACC,iBAAiB,EAAE;AACrC;AACA,IAAA,KAAK,CAACH,aAAa,CAACC,KAAK,CAAC;IAC1B,IAAI,IAAI,CAACC,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACE,eAAe,EAAE;AACnC;AACF;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"_array-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/coercion/array.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\n/** Wraps the provided value in an array, unless the provided value is an array. */\nexport function coerceArray<T>(value: T | T[]): T[];\nexport function coerceArray<T>(value: T | readonly T[]): readonly T[];\nexport function coerceArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n"],"names":["coerceArray","value","Array","isArray"],"mappings":"AAWM,SAAUA,WAAWA,CAAIC,KAAc,EAAA;EAC3C,OAAOC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,GAAGA,KAAK,GAAG,CAACA,KAAK,CAAC;AAC/C;;;;"}
1
+ {"version":3,"file":"_array-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/coercion/array.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\n/** Wraps the provided value in an array, unless the provided value is an array. */\nexport function coerceArray<T>(value: T | T[]): T[];\nexport function coerceArray<T>(value: T | readonly T[]): readonly T[];\nexport function coerceArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n"],"names":["coerceArray","value","Array","isArray"],"mappings":"AAWM,SAAUA,WAAWA,CAAIC,KAAc,EAAA;EAC3C,OAAOC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,GAAGA,KAAK,GAAG,CAACA,KAAK,CAAC;AAC/C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"_breakpoints-observer-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/layout/media-matcher.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/layout/breakpoints-observer.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 */\nimport {Injectable, CSP_NONCE, inject} from '@angular/core';\nimport {Platform} from '../platform';\n\n/** Global registry for all dynamically-created, injected media queries. */\nconst mediaQueriesForWebkitCompatibility: Set<string> = new Set<string>();\n\n/** Style tag that holds all of the dynamically-created media queries. */\nlet mediaQueryStyleNode: HTMLStyleElement | undefined;\n\n/** A utility for calling matchMedia queries. */\n@Injectable({providedIn: 'root'})\nexport class MediaMatcher {\n private _platform = inject(Platform);\n private _nonce = inject(CSP_NONCE, {optional: true});\n\n /** The internal matchMedia method to return back a MediaQueryList like object. */\n private _matchMedia: (query: string) => MediaQueryList;\n\n constructor(...args: unknown[]);\n\n constructor() {\n this._matchMedia =\n this._platform.isBrowser && window.matchMedia\n ? // matchMedia is bound to the window scope intentionally as it is an illegal invocation to\n // call it from a different scope.\n window.matchMedia.bind(window)\n : noopMatchMedia;\n }\n\n /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n */\n matchMedia(query: string): MediaQueryList {\n if (this._platform.WEBKIT || this._platform.BLINK) {\n createEmptyStyleRule(query, this._nonce);\n }\n return this._matchMedia(query);\n }\n}\n\n/**\n * Creates an empty stylesheet that is used to work around browser inconsistencies related to\n * `matchMedia`. At the time of writing, it handles the following cases:\n * 1. On WebKit browsers, a media query has to have at least one rule in order for `matchMedia`\n * to fire. We work around it by declaring a dummy stylesheet with a `@media` declaration.\n * 2. In some cases Blink browsers will stop firing the `matchMedia` listener if none of the rules\n * inside the `@media` match existing elements on the page. We work around it by having one rule\n * targeting the `body`. See https://github.com/angular/components/issues/23546.\n */\nfunction createEmptyStyleRule(query: string, nonce: string | undefined | null) {\n if (mediaQueriesForWebkitCompatibility.has(query)) {\n return;\n }\n\n try {\n if (!mediaQueryStyleNode) {\n mediaQueryStyleNode = document.createElement('style');\n\n if (nonce) {\n mediaQueryStyleNode.setAttribute('nonce', nonce);\n }\n\n mediaQueryStyleNode.setAttribute('type', 'text/css');\n document.head!.appendChild(mediaQueryStyleNode);\n }\n\n if (mediaQueryStyleNode.sheet) {\n mediaQueryStyleNode.sheet.insertRule(`@media ${query} {body{ }}`, 0);\n mediaQueriesForWebkitCompatibility.add(query);\n }\n } catch (e) {\n console.error(e);\n }\n}\n\n/** No-op matchMedia replacement for non-browser platforms. */\nfunction noopMatchMedia(query: string): MediaQueryList {\n // Use `as any` here to avoid adding additional necessary properties for\n // the noop matcher.\n return {\n matches: query === 'all' || query === '',\n media: query,\n addListener: () => {},\n removeListener: () => {},\n } as any;\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 {coerceArray} from '../coercion';\nimport {Injectable, NgZone, OnDestroy, inject} from '@angular/core';\nimport {combineLatest, concat, Observable, Observer, Subject} from 'rxjs';\nimport {debounceTime, map, skip, startWith, take, takeUntil} from 'rxjs/operators';\nimport {MediaMatcher} from './media-matcher';\n\n/** The current state of a layout breakpoint. */\nexport interface BreakpointState {\n /** Whether the breakpoint is currently matching. */\n matches: boolean;\n /**\n * A key boolean pair for each query provided to the observe method,\n * with its current matched state.\n */\n breakpoints: {\n [key: string]: boolean;\n };\n}\n\n/** The current state of a layout breakpoint. */\ninterface InternalBreakpointState {\n /** Whether the breakpoint is currently matching. */\n matches: boolean;\n /** The media query being to be matched */\n query: string;\n}\n\ninterface Query {\n observable: Observable<InternalBreakpointState>;\n mql: MediaQueryList;\n}\n\n/** Utility for checking the matching state of `@media` queries. */\n@Injectable({providedIn: 'root'})\nexport class BreakpointObserver implements OnDestroy {\n private _mediaMatcher = inject(MediaMatcher);\n private _zone = inject(NgZone);\n\n /** A map of all media queries currently being listened for. */\n private _queries = new Map<string, Query>();\n /** A subject for all other observables to takeUntil based on. */\n private readonly _destroySubject = new Subject<void>();\n\n constructor(...args: unknown[]);\n constructor() {}\n\n /** Completes the active subject, signalling to all other observables to complete. */\n ngOnDestroy() {\n this._destroySubject.next();\n this._destroySubject.complete();\n }\n\n /**\n * Whether one or more media queries match the current viewport size.\n * @param value One or more media queries to check.\n * @returns Whether any of the media queries match.\n */\n isMatched(value: string | readonly string[]): boolean {\n const queries = splitQueries(coerceArray(value));\n return queries.some(mediaQuery => this._registerQuery(mediaQuery).mql.matches);\n }\n\n /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param value One or more media queries to check.\n * @returns A stream of matches for the given queries.\n */\n observe(value: string | readonly string[]): Observable<BreakpointState> {\n const queries = splitQueries(coerceArray(value));\n const observables = queries.map(query => this._registerQuery(query).observable);\n\n let stateObservable = combineLatest(observables);\n // Emit the first state immediately, and then debounce the subsequent emissions.\n stateObservable = concat(\n stateObservable.pipe(take(1)),\n stateObservable.pipe(skip(1), debounceTime(0)),\n );\n return stateObservable.pipe(\n map(breakpointStates => {\n const response: BreakpointState = {\n matches: false,\n breakpoints: {},\n };\n breakpointStates.forEach(({matches, query}) => {\n response.matches = response.matches || matches;\n response.breakpoints[query] = matches;\n });\n return response;\n }),\n );\n }\n\n /** Registers a specific query to be listened for. */\n private _registerQuery(query: string): Query {\n // Only set up a new MediaQueryList if it is not already being listened for.\n if (this._queries.has(query)) {\n return this._queries.get(query)!;\n }\n\n const mql = this._mediaMatcher.matchMedia(query);\n\n // Create callback for match changes and add it is as a listener.\n const queryObservable = new Observable((observer: Observer<MediaQueryListEvent>) => {\n // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed\n // back into the zone because matchMedia is only included in Zone.js by loading the\n // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not\n // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js\n // patches it.\n const handler = (e: MediaQueryListEvent): void => this._zone.run(() => observer.next(e));\n mql.addListener(handler);\n\n return () => {\n mql.removeListener(handler);\n };\n }).pipe(\n startWith(mql),\n map(({matches}) => ({query, matches})),\n takeUntil(this._destroySubject),\n );\n\n // Add the MediaQueryList to the set of queries.\n const output = {observable: queryObservable, mql};\n this._queries.set(query, output);\n return output;\n }\n}\n\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries: readonly string[]): readonly string[] {\n return queries\n .map(query => query.split(','))\n .reduce((a1, a2) => a1.concat(a2))\n .map(query => query.trim());\n}\n"],"names":["mediaQueriesForWebkitCompatibility","Set","mediaQueryStyleNode","MediaMatcher","_platform","inject","Platform","_nonce","CSP_NONCE","optional","_matchMedia","constructor","isBrowser","window","matchMedia","bind","noopMatchMedia","query","WEBKIT","BLINK","createEmptyStyleRule","deps","target","i0","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","type","decorators","providedIn","nonce","has","document","createElement","setAttribute","head","appendChild","sheet","insertRule","add","e","console","error","matches","media","addListener","removeListener","BreakpointObserver","_mediaMatcher","_zone","NgZone","_queries","Map","_destroySubject","Subject","ngOnDestroy","next","complete","isMatched","value","queries","splitQueries","coerceArray","some","mediaQuery","_registerQuery","mql","observe","observables","map","observable","stateObservable","combineLatest","concat","pipe","take","skip","debounceTime","breakpointStates","response","breakpoints","forEach","get","queryObservable","Observable","observer","handler","run","startWith","takeUntil","output","set","split","reduce","a1","a2","trim"],"mappings":"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"}
1
+ {"version":3,"file":"_breakpoints-observer-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/layout/media-matcher.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/layout/breakpoints-observer.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 */\nimport {Injectable, CSP_NONCE, inject} from '@angular/core';\nimport {Platform} from '../platform';\n\n/** Global registry for all dynamically-created, injected media queries. */\nconst mediaQueriesForWebkitCompatibility: Set<string> = new Set<string>();\n\n/** Style tag that holds all of the dynamically-created media queries. */\nlet mediaQueryStyleNode: HTMLStyleElement | undefined;\n\n/** A utility for calling matchMedia queries. */\n@Injectable({providedIn: 'root'})\nexport class MediaMatcher {\n private _platform = inject(Platform);\n private _nonce = inject(CSP_NONCE, {optional: true});\n\n /** The internal matchMedia method to return back a MediaQueryList like object. */\n private _matchMedia: (query: string) => MediaQueryList;\n\n constructor(...args: unknown[]);\n\n constructor() {\n this._matchMedia =\n this._platform.isBrowser && window.matchMedia\n ? // matchMedia is bound to the window scope intentionally as it is an illegal invocation to\n // call it from a different scope.\n window.matchMedia.bind(window)\n : noopMatchMedia;\n }\n\n /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n */\n matchMedia(query: string): MediaQueryList {\n if (this._platform.WEBKIT || this._platform.BLINK) {\n createEmptyStyleRule(query, this._nonce);\n }\n return this._matchMedia(query);\n }\n}\n\n/**\n * Creates an empty stylesheet that is used to work around browser inconsistencies related to\n * `matchMedia`. At the time of writing, it handles the following cases:\n * 1. On WebKit browsers, a media query has to have at least one rule in order for `matchMedia`\n * to fire. We work around it by declaring a dummy stylesheet with a `@media` declaration.\n * 2. In some cases Blink browsers will stop firing the `matchMedia` listener if none of the rules\n * inside the `@media` match existing elements on the page. We work around it by having one rule\n * targeting the `body`. See https://github.com/angular/components/issues/23546.\n */\nfunction createEmptyStyleRule(query: string, nonce: string | undefined | null) {\n if (mediaQueriesForWebkitCompatibility.has(query)) {\n return;\n }\n\n try {\n if (!mediaQueryStyleNode) {\n mediaQueryStyleNode = document.createElement('style');\n\n if (nonce) {\n mediaQueryStyleNode.setAttribute('nonce', nonce);\n }\n\n mediaQueryStyleNode.setAttribute('type', 'text/css');\n document.head!.appendChild(mediaQueryStyleNode);\n }\n\n if (mediaQueryStyleNode.sheet) {\n mediaQueryStyleNode.sheet.insertRule(`@media ${query} {body{ }}`, 0);\n mediaQueriesForWebkitCompatibility.add(query);\n }\n } catch (e) {\n console.error(e);\n }\n}\n\n/** No-op matchMedia replacement for non-browser platforms. */\nfunction noopMatchMedia(query: string): MediaQueryList {\n // Use `as any` here to avoid adding additional necessary properties for\n // the noop matcher.\n return {\n matches: query === 'all' || query === '',\n media: query,\n addListener: () => {},\n removeListener: () => {},\n } as any;\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 {coerceArray} from '../coercion';\nimport {Injectable, NgZone, OnDestroy, inject} from '@angular/core';\nimport {combineLatest, concat, Observable, Observer, Subject} from 'rxjs';\nimport {debounceTime, map, skip, startWith, take, takeUntil} from 'rxjs/operators';\nimport {MediaMatcher} from './media-matcher';\n\n/** The current state of a layout breakpoint. */\nexport interface BreakpointState {\n /** Whether the breakpoint is currently matching. */\n matches: boolean;\n /**\n * A key boolean pair for each query provided to the observe method,\n * with its current matched state.\n */\n breakpoints: {\n [key: string]: boolean;\n };\n}\n\n/** The current state of a layout breakpoint. */\ninterface InternalBreakpointState {\n /** Whether the breakpoint is currently matching. */\n matches: boolean;\n /** The media query being to be matched */\n query: string;\n}\n\ninterface Query {\n observable: Observable<InternalBreakpointState>;\n mql: MediaQueryList;\n}\n\n/** Utility for checking the matching state of `@media` queries. */\n@Injectable({providedIn: 'root'})\nexport class BreakpointObserver implements OnDestroy {\n private _mediaMatcher = inject(MediaMatcher);\n private _zone = inject(NgZone);\n\n /** A map of all media queries currently being listened for. */\n private _queries = new Map<string, Query>();\n /** A subject for all other observables to takeUntil based on. */\n private readonly _destroySubject = new Subject<void>();\n\n constructor(...args: unknown[]);\n constructor() {}\n\n /** Completes the active subject, signalling to all other observables to complete. */\n ngOnDestroy() {\n this._destroySubject.next();\n this._destroySubject.complete();\n }\n\n /**\n * Whether one or more media queries match the current viewport size.\n * @param value One or more media queries to check.\n * @returns Whether any of the media queries match.\n */\n isMatched(value: string | readonly string[]): boolean {\n const queries = splitQueries(coerceArray(value));\n return queries.some(mediaQuery => this._registerQuery(mediaQuery).mql.matches);\n }\n\n /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param value One or more media queries to check.\n * @returns A stream of matches for the given queries.\n */\n observe(value: string | readonly string[]): Observable<BreakpointState> {\n const queries = splitQueries(coerceArray(value));\n const observables = queries.map(query => this._registerQuery(query).observable);\n\n let stateObservable = combineLatest(observables);\n // Emit the first state immediately, and then debounce the subsequent emissions.\n stateObservable = concat(\n stateObservable.pipe(take(1)),\n stateObservable.pipe(skip(1), debounceTime(0)),\n );\n return stateObservable.pipe(\n map(breakpointStates => {\n const response: BreakpointState = {\n matches: false,\n breakpoints: {},\n };\n breakpointStates.forEach(({matches, query}) => {\n response.matches = response.matches || matches;\n response.breakpoints[query] = matches;\n });\n return response;\n }),\n );\n }\n\n /** Registers a specific query to be listened for. */\n private _registerQuery(query: string): Query {\n // Only set up a new MediaQueryList if it is not already being listened for.\n if (this._queries.has(query)) {\n return this._queries.get(query)!;\n }\n\n const mql = this._mediaMatcher.matchMedia(query);\n\n // Create callback for match changes and add it is as a listener.\n const queryObservable = new Observable((observer: Observer<MediaQueryListEvent>) => {\n // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed\n // back into the zone because matchMedia is only included in Zone.js by loading the\n // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not\n // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js\n // patches it.\n const handler = (e: MediaQueryListEvent): void => this._zone.run(() => observer.next(e));\n mql.addListener(handler);\n\n return () => {\n mql.removeListener(handler);\n };\n }).pipe(\n startWith(mql),\n map(({matches}) => ({query, matches})),\n takeUntil(this._destroySubject),\n );\n\n // Add the MediaQueryList to the set of queries.\n const output = {observable: queryObservable, mql};\n this._queries.set(query, output);\n return output;\n }\n}\n\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries: readonly string[]): readonly string[] {\n return queries\n .map(query => query.split(','))\n .reduce((a1, a2) => a1.concat(a2))\n .map(query => query.trim());\n}\n"],"names":["mediaQueriesForWebkitCompatibility","Set","mediaQueryStyleNode","MediaMatcher","_platform","inject","Platform","_nonce","CSP_NONCE","optional","_matchMedia","constructor","isBrowser","window","matchMedia","bind","noopMatchMedia","query","WEBKIT","BLINK","createEmptyStyleRule","deps","target","i0","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","type","decorators","providedIn","nonce","has","document","createElement","setAttribute","head","appendChild","sheet","insertRule","add","e","console","error","matches","media","addListener","removeListener","BreakpointObserver","_mediaMatcher","_zone","NgZone","_queries","Map","_destroySubject","Subject","ngOnDestroy","next","complete","isMatched","value","queries","splitQueries","coerceArray","some","mediaQuery","_registerQuery","mql","observe","observables","map","observable","stateObservable","combineLatest","concat","pipe","take","skip","debounceTime","breakpointStates","response","breakpoints","forEach","get","queryObservable","Observable","observer","handler","run","startWith","takeUntil","output","set","split","reduce","a1","a2","trim"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"_css-pixel-value-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/coercion/css-pixel-value.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\n/** Coerces a value to a CSS pixel value. */\nexport function coerceCssPixelValue(value: any): string {\n if (value == null) {\n return '';\n }\n\n return typeof value === 'string' ? value : `${value}px`;\n}\n"],"names":["coerceCssPixelValue","value"],"mappings":"AASM,SAAUA,mBAAmBA,CAACC,KAAU,EAAA;EAC5C,IAAIA,KAAK,IAAI,IAAI,EAAE;AACjB,IAAA,OAAO,EAAE;AACX;EAEA,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,CAAGA,EAAAA,KAAK,CAAI,EAAA,CAAA;AACzD;;;;"}
1
+ {"version":3,"file":"_css-pixel-value-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/coercion/css-pixel-value.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\n/** Coerces a value to a CSS pixel value. */\nexport function coerceCssPixelValue(value: any): string {\n if (value == null) {\n return '';\n }\n\n return typeof value === 'string' ? value : `${value}px`;\n}\n"],"names":["coerceCssPixelValue","value"],"mappings":"AASM,SAAUA,mBAAmBA,CAACC,KAAU,EAAA;EAC5C,IAAIA,KAAK,IAAI,IAAI,EAAE;AACjB,IAAA,OAAO,EAAE;AACX;EAEA,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,CAAGA,EAAAA,KAAK,CAAI,EAAA,CAAA;AACzD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"_data-source-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/collections/data-source.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 {ConnectableObservable, Observable} from 'rxjs';\nimport {CollectionViewer} from './collection-viewer';\n\nexport abstract class DataSource<T> {\n /**\n * Connects a collection viewer (such as a data-table) to this data source. Note that\n * the stream provided will be accessed during change detection and should not directly change\n * values that are bound in template views.\n * @param collectionViewer The component that exposes a view over the data provided by this\n * data source.\n * @returns Observable that emits a new value when the data changes.\n */\n abstract connect(collectionViewer: CollectionViewer): Observable<readonly T[]>;\n\n /**\n * Disconnects a collection viewer (such as a data-table) from this data source. Can be used\n * to perform any clean-up or tear-down operations when a view is being destroyed.\n *\n * @param collectionViewer The component that exposes a view over the data provided by this\n * data source.\n */\n abstract disconnect(collectionViewer: CollectionViewer): void;\n}\n\n/** Checks whether an object is a data source. */\nexport function isDataSource(value: any): value is DataSource<any> {\n // Check if the value is a DataSource by observing if it has a connect function. Cannot\n // be checked as an `instanceof DataSource` since people could create their own sources\n // that match the interface, but don't extend DataSource. We also can't use `isObservable`\n // here, because of some internal apps.\n return value && typeof value.connect === 'function' && !(value instanceof ConnectableObservable);\n}\n"],"names":["DataSource","isDataSource","value","connect","ConnectableObservable"],"mappings":";;MAWsBA,UAAU,CAAA;AAsB1B,SAAUC,YAAYA,CAACC,KAAU,EAAA;AAKrC,EAAA,OAAOA,KAAK,IAAI,OAAOA,KAAK,CAACC,OAAO,KAAK,UAAU,IAAI,EAAED,KAAK,YAAYE,qBAAqB,CAAC;AAClG;;;;"}
1
+ {"version":3,"file":"_data-source-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/collections/data-source.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 {ConnectableObservable, Observable} from 'rxjs';\nimport {CollectionViewer} from './collection-viewer';\n\nexport abstract class DataSource<T> {\n /**\n * Connects a collection viewer (such as a data-table) to this data source. Note that\n * the stream provided will be accessed during change detection and should not directly change\n * values that are bound in template views.\n * @param collectionViewer The component that exposes a view over the data provided by this\n * data source.\n * @returns Observable that emits a new value when the data changes.\n */\n abstract connect(collectionViewer: CollectionViewer): Observable<readonly T[]>;\n\n /**\n * Disconnects a collection viewer (such as a data-table) from this data source. Can be used\n * to perform any clean-up or tear-down operations when a view is being destroyed.\n *\n * @param collectionViewer The component that exposes a view over the data provided by this\n * data source.\n */\n abstract disconnect(collectionViewer: CollectionViewer): void;\n}\n\n/** Checks whether an object is a data source. */\nexport function isDataSource(value: any): value is DataSource<any> {\n // Check if the value is a DataSource by observing if it has a connect function. Cannot\n // be checked as an `instanceof DataSource` since people could create their own sources\n // that match the interface, but don't extend DataSource. We also can't use `isObservable`\n // here, because of some internal apps.\n return value && typeof value.connect === 'function' && !(value instanceof ConnectableObservable);\n}\n"],"names":["DataSource","isDataSource","value","connect","ConnectableObservable"],"mappings":";;MAWsBA,UAAU,CAAA;AAsB1B,SAAUC,YAAYA,CAACC,KAAU,EAAA;AAKrC,EAAA,OAAOA,KAAK,IAAI,OAAOA,KAAK,CAACC,OAAO,KAAK,UAAU,IAAI,EAAED,KAAK,YAAYE,qBAAqB,CAAC;AAClG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"_directionality-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/bidi/dir-document-token.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/bidi/directionality.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 {inject, InjectionToken, DOCUMENT} from '@angular/core';\n\n/**\n * Injection token used to inject the document into Directionality.\n * This is used so that the value can be faked in tests.\n *\n * We can't use the real document in tests because changing the real `dir` causes geometry-based\n * tests in Safari to fail.\n *\n * We also can't re-provide the DOCUMENT token from platform-browser because the unit tests\n * themselves use things like `querySelector` in test code.\n *\n * This token is defined in a separate file from Directionality as a workaround for\n * https://github.com/angular/angular/issues/22559\n *\n * @docs-private\n */\nexport const DIR_DOCUMENT = new InjectionToken<Document>('cdk-dir-doc', {\n providedIn: 'root',\n factory: () => inject(DOCUMENT),\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 {EventEmitter, Injectable, OnDestroy, inject, signal} from '@angular/core';\nimport {DIR_DOCUMENT} from './dir-document-token';\n\nexport type Direction = 'ltr' | 'rtl';\n\n/** Regex that matches locales with an RTL script. Taken from `goog.i18n.bidi.isRtlLanguage`. */\nconst RTL_LOCALE_PATTERN =\n /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;\n\n/** Resolves a string value to a specific direction. */\nexport function _resolveDirectionality(rawValue: string): Direction {\n const value = rawValue?.toLowerCase() || '';\n\n if (value === 'auto' && typeof navigator !== 'undefined' && navigator?.language) {\n return RTL_LOCALE_PATTERN.test(navigator.language) ? 'rtl' : 'ltr';\n }\n\n return value === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/**\n * The directionality (LTR / RTL) context for the application (or a subtree of it).\n * Exposes the current direction and a stream of direction changes.\n */\n@Injectable({providedIn: 'root'})\nexport class Directionality implements OnDestroy {\n /** The current 'ltr' or 'rtl' value. */\n get value() {\n return this.valueSignal();\n }\n\n /**\n * The current 'ltr' or 'rtl' value.\n */\n readonly valueSignal = signal<Direction>('ltr');\n\n /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */\n readonly change = new EventEmitter<Direction>();\n\n constructor(...args: unknown[]);\n\n constructor() {\n const _document = inject(DIR_DOCUMENT, {optional: true});\n\n if (_document) {\n const bodyDir = _document.body ? _document.body.dir : null;\n const htmlDir = _document.documentElement ? _document.documentElement.dir : null;\n this.valueSignal.set(_resolveDirectionality(bodyDir || htmlDir || 'ltr'));\n }\n }\n\n ngOnDestroy() {\n this.change.complete();\n }\n}\n"],"names":["DIR_DOCUMENT","InjectionToken","providedIn","factory","inject","DOCUMENT","RTL_LOCALE_PATTERN","_resolveDirectionality","rawValue","value","toLowerCase","navigator","language","test","Directionality","valueSignal","signal","change","EventEmitter","constructor","_document","optional","bodyDir","body","dir","htmlDir","documentElement","set","ngOnDestroy","complete","deps","target","i0","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","type","decorators"],"mappings":";;;MAyBaA,YAAY,GAAG,IAAIC,cAAc,CAAW,aAAa,EAAE;AACtEC,EAAAA,UAAU,EAAE,MAAM;AAClBC,EAAAA,OAAO,EAAEA,MAAMC,MAAM,CAACC,QAAQ;AAC/B,CAAA;;ACdD,MAAMC,kBAAkB,GACtB,oHAAoH;AAGhH,SAAUC,sBAAsBA,CAACC,QAAgB,EAAA;EACrD,MAAMC,KAAK,GAAGD,QAAQ,EAAEE,WAAW,EAAE,IAAI,EAAE;AAE3C,EAAA,IAAID,KAAK,KAAK,MAAM,IAAI,OAAOE,SAAS,KAAK,WAAW,IAAIA,SAAS,EAAEC,QAAQ,EAAE;IAC/E,OAAON,kBAAkB,CAACO,IAAI,CAACF,SAAS,CAACC,QAAQ,CAAC,GAAG,KAAK,GAAG,KAAK;AACpE;AAEA,EAAA,OAAOH,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK;AACxC;MAOaK,cAAc,CAAA;EAEzB,IAAIL,KAAKA,GAAA;AACP,IAAA,OAAO,IAAI,CAACM,WAAW,EAAE;AAC3B;EAKSA,WAAW,GAAGC,MAAM,CAAY,KAAK;;WAAC;AAGtCC,EAAAA,MAAM,GAAG,IAAIC,YAAY,EAAa;AAI/CC,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAMC,SAAS,GAAGhB,MAAM,CAACJ,YAAY,EAAE;AAACqB,MAAAA,QAAQ,EAAE;AAAK,KAAA,CAAC;AAExD,IAAA,IAAID,SAAS,EAAE;AACb,MAAA,MAAME,OAAO,GAAGF,SAAS,CAACG,IAAI,GAAGH,SAAS,CAACG,IAAI,CAACC,GAAG,GAAG,IAAI;AAC1D,MAAA,MAAMC,OAAO,GAAGL,SAAS,CAACM,eAAe,GAAGN,SAAS,CAACM,eAAe,CAACF,GAAG,GAAG,IAAI;AAChF,MAAA,IAAI,CAACT,WAAW,CAACY,GAAG,CAACpB,sBAAsB,CAACe,OAAO,IAAIG,OAAO,IAAI,KAAK,CAAC,CAAC;AAC3E;AACF;AAEAG,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAACX,MAAM,CAACY,QAAQ,EAAE;AACxB;;;;;UA5BWf,cAAc;AAAAgB,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAC;AAAA,GAAA,CAAA;AAAd,EAAA,OAAAC,KAAA,GAAAH,EAAA,CAAAI,qBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,QAAA,EAAAP,EAAA;AAAAQ,IAAAA,IAAA,EAAA1B,cAAc;gBADF;AAAM,GAAA,CAAA;;;;;;QAClBA,cAAc;AAAA2B,EAAAA,UAAA,EAAA,CAAA;UAD1BP,UAAU;WAAC;AAAChC,MAAAA,UAAU,EAAE;KAAO;;;;;;;"}
1
+ {"version":3,"file":"_directionality-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/bidi/dir-document-token.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/bidi/directionality.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 {inject, InjectionToken, DOCUMENT} from '@angular/core';\n\n/**\n * Injection token used to inject the document into Directionality.\n * This is used so that the value can be faked in tests.\n *\n * We can't use the real document in tests because changing the real `dir` causes geometry-based\n * tests in Safari to fail.\n *\n * We also can't re-provide the DOCUMENT token from platform-browser because the unit tests\n * themselves use things like `querySelector` in test code.\n *\n * This token is defined in a separate file from Directionality as a workaround for\n * https://github.com/angular/angular/issues/22559\n *\n * @docs-private\n */\nexport const DIR_DOCUMENT = new InjectionToken<Document>('cdk-dir-doc', {\n providedIn: 'root',\n factory: () => inject(DOCUMENT),\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 {EventEmitter, Injectable, OnDestroy, inject, signal} from '@angular/core';\nimport {DIR_DOCUMENT} from './dir-document-token';\n\nexport type Direction = 'ltr' | 'rtl';\n\n/** Regex that matches locales with an RTL script. Taken from `goog.i18n.bidi.isRtlLanguage`. */\nconst RTL_LOCALE_PATTERN =\n /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;\n\n/** Resolves a string value to a specific direction. */\nexport function _resolveDirectionality(rawValue: string): Direction {\n const value = rawValue?.toLowerCase() || '';\n\n if (value === 'auto' && typeof navigator !== 'undefined' && navigator?.language) {\n return RTL_LOCALE_PATTERN.test(navigator.language) ? 'rtl' : 'ltr';\n }\n\n return value === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/**\n * The directionality (LTR / RTL) context for the application (or a subtree of it).\n * Exposes the current direction and a stream of direction changes.\n */\n@Injectable({providedIn: 'root'})\nexport class Directionality implements OnDestroy {\n /** The current 'ltr' or 'rtl' value. */\n get value() {\n return this.valueSignal();\n }\n\n /**\n * The current 'ltr' or 'rtl' value.\n */\n readonly valueSignal = signal<Direction>('ltr');\n\n /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */\n readonly change = new EventEmitter<Direction>();\n\n constructor(...args: unknown[]);\n\n constructor() {\n const _document = inject(DIR_DOCUMENT, {optional: true});\n\n if (_document) {\n const bodyDir = _document.body ? _document.body.dir : null;\n const htmlDir = _document.documentElement ? _document.documentElement.dir : null;\n this.valueSignal.set(_resolveDirectionality(bodyDir || htmlDir || 'ltr'));\n }\n }\n\n ngOnDestroy() {\n this.change.complete();\n }\n}\n"],"names":["DIR_DOCUMENT","InjectionToken","providedIn","factory","inject","DOCUMENT","RTL_LOCALE_PATTERN","_resolveDirectionality","rawValue","value","toLowerCase","navigator","language","test","Directionality","valueSignal","signal","change","EventEmitter","constructor","_document","optional","bodyDir","body","dir","htmlDir","documentElement","set","ngOnDestroy","complete","deps","target","i0","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","type","decorators"],"mappings":";;;MAyBaA,YAAY,GAAG,IAAIC,cAAc,CAAW,aAAa,EAAE;AACtEC,EAAAA,UAAU,EAAE,MAAM;AAClBC,EAAAA,OAAO,EAAEA,MAAMC,MAAM,CAACC,QAAQ;AAC/B,CAAA;;ACdD,MAAMC,kBAAkB,GACtB,oHAAoH;AAGhH,SAAUC,sBAAsBA,CAACC,QAAgB,EAAA;EACrD,MAAMC,KAAK,GAAGD,QAAQ,EAAEE,WAAW,EAAE,IAAI,EAAE;AAE3C,EAAA,IAAID,KAAK,KAAK,MAAM,IAAI,OAAOE,SAAS,KAAK,WAAW,IAAIA,SAAS,EAAEC,QAAQ,EAAE;IAC/E,OAAON,kBAAkB,CAACO,IAAI,CAACF,SAAS,CAACC,QAAQ,CAAC,GAAG,KAAK,GAAG,KAAK;AACpE;AAEA,EAAA,OAAOH,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK;AACxC;MAOaK,cAAc,CAAA;EAEzB,IAAIL,KAAKA,GAAA;AACP,IAAA,OAAO,IAAI,CAACM,WAAW,EAAE;AAC3B;EAKSA,WAAW,GAAGC,MAAM,CAAY,KAAK;;WAAC;AAGtCC,EAAAA,MAAM,GAAG,IAAIC,YAAY,EAAa;AAI/CC,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAMC,SAAS,GAAGhB,MAAM,CAACJ,YAAY,EAAE;AAACqB,MAAAA,QAAQ,EAAE;AAAK,KAAA,CAAC;AAExD,IAAA,IAAID,SAAS,EAAE;AACb,MAAA,MAAME,OAAO,GAAGF,SAAS,CAACG,IAAI,GAAGH,SAAS,CAACG,IAAI,CAACC,GAAG,GAAG,IAAI;AAC1D,MAAA,MAAMC,OAAO,GAAGL,SAAS,CAACM,eAAe,GAAGN,SAAS,CAACM,eAAe,CAACF,GAAG,GAAG,IAAI;AAChF,MAAA,IAAI,CAACT,WAAW,CAACY,GAAG,CAACpB,sBAAsB,CAACe,OAAO,IAAIG,OAAO,IAAI,KAAK,CAAC,CAAC;AAC3E;AACF;AAEAG,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAACX,MAAM,CAACY,QAAQ,EAAE;AACxB;;;;;UA5BWf,cAAc;AAAAgB,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAC;AAAA,GAAA,CAAA;AAAd,EAAA,OAAAC,KAAA,GAAAH,EAAA,CAAAI,qBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,QAAA,EAAAP,EAAA;AAAAQ,IAAAA,IAAA,EAAA1B,cAAc;gBADF;AAAM,GAAA,CAAA;;;;;;QAClBA,cAAc;AAAA2B,EAAAA,UAAA,EAAA,CAAA;UAD1BP,UAAU;WAAC;AAAChC,MAAAA,UAAU,EAAE;KAAO;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"_dispose-view-repeater-strategy-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/collections/dispose-view-repeater-strategy.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 {\n EmbeddedViewRef,\n IterableChangeRecord,\n IterableChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n _ViewRepeater,\n _ViewRepeaterItemChanged,\n _ViewRepeaterItemContext,\n _ViewRepeaterItemContextFactory,\n _ViewRepeaterItemValueResolver,\n _ViewRepeaterOperation,\n} from './view-repeater';\n\n/**\n * A repeater that destroys views when they are removed from a\n * `ViewContainerRef`. When new items are inserted into the container,\n * the repeater will always construct a new embedded view for each item.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nexport class _DisposeViewRepeaterStrategy<T, R, C extends _ViewRepeaterItemContext<T>>\n implements _ViewRepeater<T, R, C>\n{\n applyChanges(\n changes: IterableChanges<R>,\n viewContainerRef: ViewContainerRef,\n itemContextFactory: _ViewRepeaterItemContextFactory<T, R, C>,\n itemValueResolver: _ViewRepeaterItemValueResolver<T, R>,\n itemViewChanged?: _ViewRepeaterItemChanged<R, C>,\n ) {\n changes.forEachOperation(\n (\n record: IterableChangeRecord<R>,\n adjustedPreviousIndex: number | null,\n currentIndex: number | null,\n ) => {\n let view: EmbeddedViewRef<C> | undefined;\n let operation: _ViewRepeaterOperation;\n if (record.previousIndex == null) {\n const insertContext = itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = viewContainerRef.createEmbeddedView(\n insertContext.templateRef,\n insertContext.context,\n insertContext.index,\n );\n operation = _ViewRepeaterOperation.INSERTED;\n } else if (currentIndex == null) {\n viewContainerRef.remove(adjustedPreviousIndex!);\n operation = _ViewRepeaterOperation.REMOVED;\n } else {\n view = viewContainerRef.get(adjustedPreviousIndex!) as EmbeddedViewRef<C>;\n viewContainerRef.move(view!, currentIndex);\n operation = _ViewRepeaterOperation.MOVED;\n }\n\n if (itemViewChanged) {\n itemViewChanged({\n context: view?.context,\n operation,\n record,\n });\n }\n },\n );\n }\n\n detach() {}\n}\n"],"names":["_DisposeViewRepeaterStrategy","applyChanges","changes","viewContainerRef","itemContextFactory","itemValueResolver","itemViewChanged","forEachOperation","record","adjustedPreviousIndex","currentIndex","view","operation","previousIndex","insertContext","createEmbeddedView","templateRef","context","index","_ViewRepeaterOperation","INSERTED","remove","REMOVED","get","move","MOVED","detach"],"mappings":";;MAgCaA,4BAA4B,CAAA;EAGvCC,YAAYA,CACVC,OAA2B,EAC3BC,gBAAkC,EAClCC,kBAA4D,EAC5DC,iBAAuD,EACvDC,eAAgD,EAAA;IAEhDJ,OAAO,CAACK,gBAAgB,CACtB,CACEC,MAA+B,EAC/BC,qBAAoC,EACpCC,YAA2B,KACzB;AACF,MAAA,IAAIC,IAAoC;AACxC,MAAA,IAAIC,SAAiC;AACrC,MAAA,IAAIJ,MAAM,CAACK,aAAa,IAAI,IAAI,EAAE;QAChC,MAAMC,aAAa,GAAGV,kBAAkB,CAACI,MAAM,EAAEC,qBAAqB,EAAEC,YAAY,CAAC;AACrFC,QAAAA,IAAI,GAAGR,gBAAgB,CAACY,kBAAkB,CACxCD,aAAa,CAACE,WAAW,EACzBF,aAAa,CAACG,OAAO,EACrBH,aAAa,CAACI,KAAK,CACpB;QACDN,SAAS,GAAGO,sBAAsB,CAACC,QAAQ;AAC7C,OAAA,MAAO,IAAIV,YAAY,IAAI,IAAI,EAAE;AAC/BP,QAAAA,gBAAgB,CAACkB,MAAM,CAACZ,qBAAsB,CAAC;QAC/CG,SAAS,GAAGO,sBAAsB,CAACG,OAAO;AAC5C,OAAA,MAAO;AACLX,QAAAA,IAAI,GAAGR,gBAAgB,CAACoB,GAAG,CAACd,qBAAsB,CAAuB;AACzEN,QAAAA,gBAAgB,CAACqB,IAAI,CAACb,IAAK,EAAED,YAAY,CAAC;QAC1CE,SAAS,GAAGO,sBAAsB,CAACM,KAAK;AAC1C;AAEA,MAAA,IAAInB,eAAe,EAAE;AACnBA,QAAAA,eAAe,CAAC;UACdW,OAAO,EAAEN,IAAI,EAAEM,OAAO;UACtBL,SAAS;AACTJ,UAAAA;AACD,SAAA,CAAC;AACJ;AACF,KAAC,CACF;AACH;EAEAkB,MAAMA;AACP;;;;"}
1
+ {"version":3,"file":"_dispose-view-repeater-strategy-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/collections/dispose-view-repeater-strategy.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 {\n EmbeddedViewRef,\n IterableChangeRecord,\n IterableChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n _ViewRepeater,\n _ViewRepeaterItemChanged,\n _ViewRepeaterItemContext,\n _ViewRepeaterItemContextFactory,\n _ViewRepeaterItemValueResolver,\n _ViewRepeaterOperation,\n} from './view-repeater';\n\n/**\n * A repeater that destroys views when they are removed from a\n * `ViewContainerRef`. When new items are inserted into the container,\n * the repeater will always construct a new embedded view for each item.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nexport class _DisposeViewRepeaterStrategy<T, R, C extends _ViewRepeaterItemContext<T>>\n implements _ViewRepeater<T, R, C>\n{\n applyChanges(\n changes: IterableChanges<R>,\n viewContainerRef: ViewContainerRef,\n itemContextFactory: _ViewRepeaterItemContextFactory<T, R, C>,\n itemValueResolver: _ViewRepeaterItemValueResolver<T, R>,\n itemViewChanged?: _ViewRepeaterItemChanged<R, C>,\n ) {\n changes.forEachOperation(\n (\n record: IterableChangeRecord<R>,\n adjustedPreviousIndex: number | null,\n currentIndex: number | null,\n ) => {\n let view: EmbeddedViewRef<C> | undefined;\n let operation: _ViewRepeaterOperation;\n if (record.previousIndex == null) {\n const insertContext = itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = viewContainerRef.createEmbeddedView(\n insertContext.templateRef,\n insertContext.context,\n insertContext.index,\n );\n operation = _ViewRepeaterOperation.INSERTED;\n } else if (currentIndex == null) {\n viewContainerRef.remove(adjustedPreviousIndex!);\n operation = _ViewRepeaterOperation.REMOVED;\n } else {\n view = viewContainerRef.get(adjustedPreviousIndex!) as EmbeddedViewRef<C>;\n viewContainerRef.move(view!, currentIndex);\n operation = _ViewRepeaterOperation.MOVED;\n }\n\n if (itemViewChanged) {\n itemViewChanged({\n context: view?.context,\n operation,\n record,\n });\n }\n },\n );\n }\n\n detach() {}\n}\n"],"names":["_DisposeViewRepeaterStrategy","applyChanges","changes","viewContainerRef","itemContextFactory","itemValueResolver","itemViewChanged","forEachOperation","record","adjustedPreviousIndex","currentIndex","view","operation","previousIndex","insertContext","createEmbeddedView","templateRef","context","index","_ViewRepeaterOperation","INSERTED","remove","REMOVED","get","move","MOVED","detach"],"mappings":";;MAgCaA,4BAA4B,CAAA;EAGvCC,YAAYA,CACVC,OAA2B,EAC3BC,gBAAkC,EAClCC,kBAA4D,EAC5DC,iBAAuD,EACvDC,eAAgD,EAAA;IAEhDJ,OAAO,CAACK,gBAAgB,CACtB,CACEC,MAA+B,EAC/BC,qBAAoC,EACpCC,YAA2B,KACzB;AACF,MAAA,IAAIC,IAAoC;AACxC,MAAA,IAAIC,SAAiC;AACrC,MAAA,IAAIJ,MAAM,CAACK,aAAa,IAAI,IAAI,EAAE;QAChC,MAAMC,aAAa,GAAGV,kBAAkB,CAACI,MAAM,EAAEC,qBAAqB,EAAEC,YAAY,CAAC;AACrFC,QAAAA,IAAI,GAAGR,gBAAgB,CAACY,kBAAkB,CACxCD,aAAa,CAACE,WAAW,EACzBF,aAAa,CAACG,OAAO,EACrBH,aAAa,CAACI,KAAK,CACpB;QACDN,SAAS,GAAGO,sBAAsB,CAACC,QAAQ;AAC7C,OAAA,MAAO,IAAIV,YAAY,IAAI,IAAI,EAAE;AAC/BP,QAAAA,gBAAgB,CAACkB,MAAM,CAACZ,qBAAsB,CAAC;QAC/CG,SAAS,GAAGO,sBAAsB,CAACG,OAAO;AAC5C,OAAA,MAAO;AACLX,QAAAA,IAAI,GAAGR,gBAAgB,CAACoB,GAAG,CAACd,qBAAsB,CAAuB;AACzEN,QAAAA,gBAAgB,CAACqB,IAAI,CAACb,IAAK,EAAED,YAAY,CAAC;QAC1CE,SAAS,GAAGO,sBAAsB,CAACM,KAAK;AAC1C;AAEA,MAAA,IAAInB,eAAe,EAAE;AACnBA,QAAAA,eAAe,CAAC;UACdW,OAAO,EAAEN,IAAI,EAAEM,OAAO;UACtBL,SAAS;AACTJ,UAAAA;AACD,SAAA,CAAC;AACJ;AACF,KAAC,CACF;AACH;EAEAkB,MAAMA;AACP;;;;"}