{"version":3,"file":"_overlay-module-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/scroll/block-scroll-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/scroll/scroll-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/scroll/close-scroll-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/scroll/noop-scroll-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/position/scroll-clip.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/scroll/reposition-scroll-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/scroll/scroll-strategy-options.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/overlay-config.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/position/connected-position.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/dispatchers/base-overlay-dispatcher.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/dispatchers/overlay-keyboard-dispatcher.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/dispatchers/overlay-outside-click-dispatcher.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/overlay-container.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/backdrop-ref.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/overlay-ref.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/position/flexible-connected-position-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/position/global-position-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/position/overlay-position-builder.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/overlay.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/overlay-directives.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/overlay/overlay-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 {DOCUMENT, Injector} from '@angular/core';\nimport {ScrollStrategy} from './scroll-strategy';\nimport {ViewportRuler} from '../../scrolling';\nimport {coerceCssPixelValue} from '../../coercion';\nimport {supportsScrollBehavior} from '../../platform';\n\nconst scrollBehaviorSupported = supportsScrollBehavior();\n\n/**\n * Creates a scroll strategy that prevents the user from scrolling while the overlay is open.\n * @param injector Injector used to resolve dependencies of the scroll strategy.\n * @param config Configuration options for the scroll strategy.\n */\nexport function createBlockScrollStrategy(injector: Injector): BlockScrollStrategy {\n  return new BlockScrollStrategy(injector.get(ViewportRuler), injector.get(DOCUMENT));\n}\n\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nexport class BlockScrollStrategy implements ScrollStrategy {\n  private _previousHTMLStyles = {top: '', left: ''};\n  private _previousScrollPosition: {top: number; left: number} | undefined;\n  private _isEnabled = false;\n  private _document: Document;\n\n  constructor(\n    private _viewportRuler: ViewportRuler,\n    document: any,\n  ) {\n    this._document = document;\n  }\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach() {}\n\n  /** Blocks page-level scroll while the attached overlay is open. */\n  enable() {\n    if (this._canBeEnabled()) {\n      const root = this._document.documentElement!;\n\n      this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\n\n      // Cache the previous inline styles in case the user had set them.\n      this._previousHTMLStyles.left = root.style.left || '';\n      this._previousHTMLStyles.top = root.style.top || '';\n\n      // Note: we're using the `html` node, instead of the `body`, because the `body` may\n      // have the user agent margin, whereas the `html` is guaranteed not to have one.\n      root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n      root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n      root.classList.add('cdk-global-scrollblock');\n      this._isEnabled = true;\n    }\n  }\n\n  /** Unblocks page-level scroll while the attached overlay is open. */\n  disable() {\n    if (this._isEnabled) {\n      const html = this._document.documentElement!;\n      const body = this._document.body!;\n      const htmlStyle = html.style;\n      const bodyStyle = body.style;\n      const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n      const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';\n\n      this._isEnabled = false;\n\n      htmlStyle.left = this._previousHTMLStyles.left;\n      htmlStyle.top = this._previousHTMLStyles.top;\n      html.classList.remove('cdk-global-scrollblock');\n\n      // Disable user-defined smooth scrolling temporarily while we restore the scroll position.\n      // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior\n      // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`,\n      // because it can throw off feature detections in `supportsScrollBehavior` which\n      // checks for `'scrollBehavior' in documentElement.style`.\n      if (scrollBehaviorSupported) {\n        htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n      }\n\n      window.scroll(this._previousScrollPosition!.left, this._previousScrollPosition!.top);\n\n      if (scrollBehaviorSupported) {\n        htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n        bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n      }\n    }\n  }\n\n  private _canBeEnabled(): boolean {\n    // Since the scroll strategies can't be singletons, we have to use a global CSS class\n    // (`cdk-global-scrollblock`) to make sure that we don't try to disable global\n    // scrolling multiple times.\n    const html = this._document.documentElement!;\n\n    if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n      return false;\n    }\n\n    const rootElement = this._document.documentElement;\n    const viewport = this._viewportRuler.getViewportSize();\n    return rootElement.scrollHeight > viewport.height || rootElement.scrollWidth > viewport.width;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport type {OverlayRef} from '../overlay-ref';\n\n/**\n * Describes a strategy that will be used by an overlay to handle scroll events while it is open.\n */\nexport interface ScrollStrategy {\n  /** Enable this scroll strategy (called when the attached overlay is attached to a portal). */\n  enable: () => void;\n\n  /** Disable this scroll strategy (called when the attached overlay is detached from a portal). */\n  disable: () => void;\n\n  /** Attaches this `ScrollStrategy` to an overlay. */\n  attach: (overlayRef: OverlayRef) => void;\n\n  /** Detaches the scroll strategy from the current overlay. */\n  detach?: () => void;\n}\n\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n */\nexport function getMatScrollStrategyAlreadyAttachedError(): Error {\n  return Error(`Scroll strategy has already been attached.`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\nimport {Injector, NgZone} from '@angular/core';\nimport {ScrollStrategy, getMatScrollStrategyAlreadyAttachedError} from './scroll-strategy';\nimport {Subscription} from 'rxjs';\nimport {ScrollDispatcher, ViewportRuler} from '../../scrolling';\nimport {filter} from 'rxjs/operators';\nimport type {OverlayRef} from '../overlay-ref';\n\n/**\n * Config options for the CloseScrollStrategy.\n */\nexport interface CloseScrollStrategyConfig {\n  /** Amount of pixels the user has to scroll before the overlay is closed. */\n  threshold?: number;\n}\n\n/**\n * Creates a scroll strategy that closes the overlay when the user starts to scroll.\n * @param injector Injector used to resolve dependencies of the scroll strategy.\n * @param config Configuration options for the scroll strategy.\n */\nexport function createCloseScrollStrategy(\n  injector: Injector,\n  config?: CloseScrollStrategyConfig,\n): CloseScrollStrategy {\n  return new CloseScrollStrategy(\n    injector.get(ScrollDispatcher),\n    injector.get(NgZone),\n    injector.get(ViewportRuler),\n    config,\n  );\n}\n\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nexport class CloseScrollStrategy implements ScrollStrategy {\n  private _scrollSubscription: Subscription | null = null;\n  private _overlayRef!: OverlayRef;\n  private _initialScrollPosition!: number;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _ngZone: NgZone,\n    private _viewportRuler: ViewportRuler,\n    private _config?: CloseScrollStrategyConfig,\n  ) {}\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach(overlayRef: OverlayRef) {\n    if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatScrollStrategyAlreadyAttachedError();\n    }\n\n    this._overlayRef = overlayRef;\n  }\n\n  /** Enables the closing of the attached overlay on scroll. */\n  enable() {\n    if (this._scrollSubscription) {\n      return;\n    }\n\n    const stream = this._scrollDispatcher.scrolled(0).pipe(\n      filter(scrollable => {\n        return (\n          !scrollable ||\n          !this._overlayRef.overlayElement.contains(scrollable.getElementRef().nativeElement)\n        );\n      }),\n    );\n\n    if (this._config && this._config.threshold && this._config.threshold > 1) {\n      this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n\n      this._scrollSubscription = stream.subscribe(() => {\n        const scrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n\n        if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config!.threshold!) {\n          this._detach();\n        } else {\n          this._overlayRef.updatePosition();\n        }\n      });\n    } else {\n      this._scrollSubscription = stream.subscribe(this._detach);\n    }\n  }\n\n  /** Disables the closing the attached overlay on scroll. */\n  disable() {\n    if (this._scrollSubscription) {\n      this._scrollSubscription.unsubscribe();\n      this._scrollSubscription = null;\n    }\n  }\n\n  detach() {\n    this.disable();\n    this._overlayRef = null!;\n  }\n\n  /** Detaches the overlay ref and disables the scroll strategy. */\n  private _detach = () => {\n    this.disable();\n\n    if (this._overlayRef.hasAttached()) {\n      this._ngZone.run(() => this._overlayRef.detach());\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ScrollStrategy} from './scroll-strategy';\n\n/** Creates a scroll strategy that does nothing. */\nexport function createNoopScrollStrategy(): NoopScrollStrategy {\n  return new NoopScrollStrategy();\n}\n\n/** Scroll strategy that doesn't do anything. */\nexport class NoopScrollStrategy implements ScrollStrategy {\n  /** Does nothing, as this scroll strategy is a no-op. */\n  enable() {}\n  /** Does nothing, as this scroll strategy is a no-op. */\n  disable() {}\n  /** Does nothing, as this scroll strategy is a no-op. */\n  attach() {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// TODO(jelbourn): move this to live with the rest of the scrolling code\n// TODO(jelbourn): someday replace this with IntersectionObservers\n\n/** Equivalent of `DOMRect` without some of the properties we don't care about. */\ntype Dimensions = Omit<DOMRect, 'x' | 'y' | 'toJSON'>;\n\n/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is scrolled out of view\n * @docs-private\n */\nexport function isElementScrolledOutsideView(element: Dimensions, scrollContainers: Dimensions[]) {\n  return scrollContainers.some(containerBounds => {\n    const outsideAbove = element.bottom < containerBounds.top;\n    const outsideBelow = element.top > containerBounds.bottom;\n    const outsideLeft = element.right < containerBounds.left;\n    const outsideRight = element.left > containerBounds.right;\n\n    return outsideAbove || outsideBelow || outsideLeft || outsideRight;\n  });\n}\n\n/**\n * Gets whether an element is clipped by any of its scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is clipped\n * @docs-private\n */\nexport function isElementClippedByScrolling(element: Dimensions, scrollContainers: Dimensions[]) {\n  return scrollContainers.some(scrollContainerRect => {\n    const clippedAbove = element.top < scrollContainerRect.top;\n    const clippedBelow = element.bottom > scrollContainerRect.bottom;\n    const clippedLeft = element.left < scrollContainerRect.left;\n    const clippedRight = element.right > scrollContainerRect.right;\n\n    return clippedAbove || clippedBelow || clippedLeft || clippedRight;\n  });\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injector, NgZone} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ScrollStrategy, getMatScrollStrategyAlreadyAttachedError} from './scroll-strategy';\nimport {ScrollDispatcher, ViewportRuler} from '../../scrolling';\nimport {isElementScrolledOutsideView} from '../position/scroll-clip';\nimport type {OverlayRef} from '../overlay-ref';\n\n/**\n * Config options for the RepositionScrollStrategy.\n */\nexport interface RepositionScrollStrategyConfig {\n  /** Time in milliseconds to throttle the scroll events. */\n  scrollThrottle?: number;\n\n  /** Whether to close the overlay once the user has scrolled away completely. */\n  autoClose?: boolean;\n}\n\n/**\n * Creates a scroll strategy that updates the overlay's position when the user scrolls.\n * @param injector Injector used to resolve dependencies of the scroll strategy.\n * @param config Configuration options for the scroll strategy.\n */\nexport function createRepositionScrollStrategy(\n  injector: Injector,\n  config?: RepositionScrollStrategyConfig,\n): RepositionScrollStrategy {\n  return new RepositionScrollStrategy(\n    injector.get(ScrollDispatcher),\n    injector.get(ViewportRuler),\n    injector.get(NgZone),\n    config,\n  );\n}\n\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nexport class RepositionScrollStrategy implements ScrollStrategy {\n  private _scrollSubscription: Subscription | null = null;\n  private _overlayRef!: OverlayRef;\n\n  constructor(\n    private _scrollDispatcher: ScrollDispatcher,\n    private _viewportRuler: ViewportRuler,\n    private _ngZone: NgZone,\n    private _config?: RepositionScrollStrategyConfig,\n  ) {}\n\n  /** Attaches this scroll strategy to an overlay. */\n  attach(overlayRef: OverlayRef) {\n    if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatScrollStrategyAlreadyAttachedError();\n    }\n\n    this._overlayRef = overlayRef;\n  }\n\n  /** Enables repositioning of the attached overlay on scroll. */\n  enable() {\n    if (!this._scrollSubscription) {\n      const throttle = this._config ? this._config.scrollThrottle : 0;\n\n      this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => {\n        this._overlayRef.updatePosition();\n\n        // TODO(crisbeto): make `close` on by default once all components can handle it.\n        if (this._config && this._config.autoClose) {\n          const overlayRect = this._overlayRef.overlayElement.getBoundingClientRect();\n          const {width, height} = this._viewportRuler.getViewportSize();\n\n          // TODO(crisbeto): include all ancestor scroll containers here once\n          // we have a way of exposing the trigger element to the scroll strategy.\n          const parentRects = [{width, height, bottom: height, right: width, top: 0, left: 0}];\n\n          if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n            this.disable();\n            this._ngZone.run(() => this._overlayRef.detach());\n          }\n        }\n      });\n    }\n  }\n\n  /** Disables repositioning of the attached overlay on scroll. */\n  disable() {\n    if (this._scrollSubscription) {\n      this._scrollSubscription.unsubscribe();\n      this._scrollSubscription = null;\n    }\n  }\n\n  detach() {\n    this.disable();\n    this._overlayRef = null!;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Service, Injector, inject} from '@angular/core';\nimport {createBlockScrollStrategy} from './block-scroll-strategy';\nimport {CloseScrollStrategyConfig, createCloseScrollStrategy} from './close-scroll-strategy';\nimport {NoopScrollStrategy} from './noop-scroll-strategy';\nimport {\n  createRepositionScrollStrategy,\n  RepositionScrollStrategyConfig,\n} from './reposition-scroll-strategy';\n\n/**\n * Options for how an overlay will handle scrolling.\n *\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\n */\n@Service()\nexport class ScrollStrategyOptions {\n  private _injector = inject(Injector);\n\n  /** Do nothing on scroll. */\n  noop = () => new NoopScrollStrategy();\n\n  /**\n   * Close the overlay as soon as the user scrolls.\n   * @param config Configuration to be used inside the scroll strategy.\n   */\n  close = (config?: CloseScrollStrategyConfig) => createCloseScrollStrategy(this._injector, config);\n\n  /** Block scrolling. */\n  block = () => createBlockScrollStrategy(this._injector);\n\n  /**\n   * Update the overlay's position on scroll.\n   * @param config Configuration to be used inside the scroll strategy.\n   * Allows debouncing the reposition calls.\n   */\n  reposition = (config?: RepositionScrollStrategyConfig) =>\n    createRepositionScrollStrategy(this._injector, config);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {PositionStrategy} from './position/position-strategy';\nimport {Direction, Directionality} from '../bidi';\nimport {ScrollStrategy, NoopScrollStrategy} from './scroll/index';\n\n/** Initial configuration used when creating an overlay. */\nexport class OverlayConfig {\n  /** Strategy with which to position the overlay. */\n  positionStrategy?: PositionStrategy;\n\n  /** Strategy to be used when handling scroll events while the overlay is open. */\n  scrollStrategy?: ScrollStrategy = new NoopScrollStrategy();\n\n  /** Custom class to add to the overlay pane. */\n  panelClass?: string | string[] = '';\n\n  /** Whether the overlay has a backdrop. */\n  hasBackdrop?: boolean = false;\n\n  /** Custom class to add to the backdrop */\n  backdropClass?: string | string[] = 'cdk-overlay-dark-backdrop';\n\n  /** Whether to disable any built-in animations. */\n  disableAnimations?: boolean;\n\n  /** The width of the overlay panel. If a number is provided, pixel units are assumed. */\n  width?: number | string;\n\n  /** The height of the overlay panel. If a number is provided, pixel units are assumed. */\n  height?: number | string;\n\n  /** The min-width of the overlay panel. If a number is provided, pixel units are assumed. */\n  minWidth?: number | string;\n\n  /** The min-height of the overlay panel. If a number is provided, pixel units are assumed. */\n  minHeight?: number | string;\n\n  /** The max-width of the overlay panel. If a number is provided, pixel units are assumed. */\n  maxWidth?: number | string;\n\n  /** The max-height of the overlay panel. If a number is provided, pixel units are assumed. */\n  maxHeight?: number | string;\n\n  /**\n   * Direction of the text in the overlay panel. If a `Directionality` instance\n   * is passed in, the overlay will handle changes to its value automatically.\n   */\n  direction?: Direction | Directionality;\n\n  /**\n   * Whether the overlay should be disposed of when the user goes backwards/forwards in history.\n   * Note that this usually doesn't include clicking on links (unless the user is using\n   * the `HashLocationStrategy`).\n   */\n  disposeOnNavigation?: boolean = false;\n\n  /**\n   * Whether the overlay should be rendered as a native popover element,\n   * rather than placing it inside of the overlay container.\n   */\n  usePopover?: boolean;\n\n  /**\n   * Function that determines if the overlay should receive a specific\n   * event or if the event should go to the next overlay in the stack.\n   */\n  eventPredicate?: (event: Event) => boolean;\n\n  constructor(config?: OverlayConfig) {\n    if (config) {\n      // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n      // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n      // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n      const configKeys = Object.keys(config) as Iterable<keyof OverlayConfig> &\n        (keyof OverlayConfig)[];\n      for (const key of configKeys) {\n        if (config[key] !== undefined) {\n          // TypeScript, as of version 3.5, sees the left-hand-side of this expression\n          // as \"I don't know *which* key this is, so the only valid value is the intersection\n          // of all the possible values.\" In this case, that happens to be `undefined`. TypeScript\n          // is not smart enough to see that the right-hand-side is actually an access of the same\n          // exact type with the same exact key, meaning that the value type must be identical.\n          // So we use `any` to work around this.\n          this[key] = config[key] as any;\n        }\n      }\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/** Horizontal dimension of a connection point on the perimeter of the origin or overlay element. */\nexport type HorizontalConnectionPos = 'start' | 'center' | 'end';\n\n/** Vertical dimension of a connection point on the perimeter of the origin or overlay element. */\nexport type VerticalConnectionPos = 'top' | 'center' | 'bottom';\n\n/** The distance between the overlay element and the viewport. */\nexport type ViewportMargin = number | {top?: number; bottom?: number; start?: number; end?: number};\n\n/** A connection point on the origin element. */\nexport interface OriginConnectionPosition {\n  originX: HorizontalConnectionPos;\n  originY: VerticalConnectionPos;\n}\n\n/** A connection point on the overlay element. */\nexport interface OverlayConnectionPosition {\n  overlayX: HorizontalConnectionPos;\n  overlayY: VerticalConnectionPos;\n}\n\n/** The points of the origin element and the overlay element to connect. */\nexport class ConnectionPositionPair {\n  /** X-axis attachment point for connected overlay origin. Can be 'start', 'end', or 'center'. */\n  originX: HorizontalConnectionPos;\n  /** Y-axis attachment point for connected overlay origin. Can be 'top', 'bottom', or 'center'. */\n  originY: VerticalConnectionPos;\n  /** X-axis attachment point for connected overlay. Can be 'start', 'end', or 'center'. */\n  overlayX: HorizontalConnectionPos;\n  /** Y-axis attachment point for connected overlay. Can be 'top', 'bottom', or 'center'. */\n  overlayY: VerticalConnectionPos;\n\n  constructor(\n    origin: OriginConnectionPosition,\n    overlay: OverlayConnectionPosition,\n    /** Offset along the X axis. */\n    public offsetX?: number,\n    /** Offset along the Y axis. */\n    public offsetY?: number,\n    /** Class(es) to be applied to the panel while this position is active. */\n    public panelClass?: string | string[],\n  ) {\n    this.originX = origin.originX;\n    this.originY = origin.originY;\n    this.overlayX = overlay.overlayX;\n    this.overlayY = overlay.overlayY;\n  }\n}\n\n/**\n * Set of properties regarding the position of the origin and overlay relative to the viewport\n * with respect to the containing Scrollable elements.\n *\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\n *\n * The overlay and origin are outside view if there is no overlap between their bounding client\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\n *\n *       -----------                    -----------\n *       | outside |                    | clipped |\n *       |  view   |              --------------------------\n *       |         |              |     |         |        |\n *       ----------               |     -----------        |\n *  --------------------------    |                        |\n *  |                        |    |      Scrollable        |\n *  |                        |    |                        |\n *  |                        |     --------------------------\n *  |      Scrollable        |\n *  |                        |\n *  --------------------------\n *\n *  @docs-private\n */\nexport class ScrollingVisibility {\n  isOriginClipped: boolean = false;\n  isOriginOutsideView: boolean = false;\n  isOverlayClipped: boolean = false;\n  isOverlayOutsideView: boolean = false;\n}\n\n/** The change event emitted by the strategy when a fallback position is used. */\nexport class ConnectedOverlayPositionChange {\n  constructor(\n    /** The position used as a result of this change. */\n    public connectionPair: ConnectionPositionPair,\n    /** @docs-private */\n    public scrollableViewProperties: ScrollingVisibility,\n  ) {}\n}\n\n/**\n * Validates whether a vertical position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nexport function validateVerticalPosition(property: string, value: VerticalConnectionPos) {\n  if (value !== 'top' && value !== 'bottom' && value !== 'center') {\n    throw Error(\n      `ConnectedPosition: Invalid ${property} \"${value}\". ` +\n        `Expected \"top\", \"bottom\" or \"center\".`,\n    );\n  }\n}\n\n/**\n * Validates whether a horizontal position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nexport function validateHorizontalPosition(property: string, value: HorizontalConnectionPos) {\n  if (value !== 'start' && value !== 'end' && value !== 'center') {\n    throw Error(\n      `ConnectedPosition: Invalid ${property} \"${value}\". ` +\n        `Expected \"start\", \"end\" or \"center\".`,\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 {Service, OnDestroy, inject, DOCUMENT} from '@angular/core';\nimport type {OverlayRef} from '../overlay-ref';\nimport {Subject} from 'rxjs';\n\n/**\n * Service for dispatching events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Service()\nexport abstract class BaseOverlayDispatcher implements OnDestroy {\n  /** Currently attached overlays in the order they were attached. */\n  _attachedOverlays: OverlayRef[] = [];\n\n  protected _document = inject(DOCUMENT);\n  protected _isAttached = false;\n\n  ngOnDestroy(): void {\n    this.detach();\n  }\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  add(overlayRef: OverlayRef): void {\n    // Ensure that we don't get the same overlay multiple times.\n    this.remove(overlayRef);\n    this._attachedOverlays.push(overlayRef);\n  }\n\n  /** Remove an overlay from the list of attached overlay refs. */\n  remove(overlayRef: OverlayRef): void {\n    const index = this._attachedOverlays.indexOf(overlayRef);\n\n    if (index > -1) {\n      this._attachedOverlays.splice(index, 1);\n    }\n\n    // Remove the global listener once there are no more overlays.\n    if (this._attachedOverlays.length === 0) {\n      this.detach();\n    }\n  }\n\n  /** Detaches the global event listener. */\n  protected abstract detach(): void;\n\n  /** Determines whether an overlay is allowed to receive an event. */\n  protected canReceiveEvent<T>(overlayRef: OverlayRef, event: Event, stream: Subject<T>): boolean {\n    if (stream.observers.length < 1) {\n      return false;\n    }\n\n    if (overlayRef.eventPredicate) {\n      return overlayRef.eventPredicate(event);\n    }\n\n    return true;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Service, NgZone, RendererFactory2, inject} from '@angular/core';\nimport {BaseOverlayDispatcher} from './base-overlay-dispatcher';\nimport type {OverlayRef} from '../overlay-ref';\n\n/**\n * Service for dispatching keyboard events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Service()\nexport class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {\n  private _ngZone = inject(NgZone);\n  private _renderer = inject(RendererFactory2).createRenderer(null, null);\n  private _cleanupKeydown: (() => void) | undefined;\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  override add(overlayRef: OverlayRef): void {\n    super.add(overlayRef);\n\n    // Lazily start dispatcher once first overlay is added\n    if (!this._isAttached) {\n      this._ngZone.runOutsideAngular(() => {\n        this._cleanupKeydown = this._renderer.listen('body', 'keydown', this._keydownListener);\n      });\n\n      this._isAttached = true;\n    }\n  }\n\n  /** Detaches the global keyboard event listener. */\n  protected detach() {\n    if (this._isAttached) {\n      this._cleanupKeydown?.();\n      this._isAttached = false;\n    }\n  }\n\n  /** Keyboard event listener that will be attached to the body. */\n  private _keydownListener = (event: KeyboardEvent) => {\n    const overlays = this._attachedOverlays;\n\n    for (let i = overlays.length - 1; i > -1; i--) {\n      // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.\n      // We want to target the most recent overlay, rather than trying to match where the event came\n      // from, because some components might open an overlay, but keep focus on a trigger element\n      // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,\n      // because we don't want overlays that don't handle keyboard events to block the ones below\n      // them that do.\n      const overlayRef = overlays[i];\n      if (this.canReceiveEvent(overlayRef, event, overlayRef._keydownEvents)) {\n        this._ngZone.run(() => overlayRef._keydownEvents.next(event));\n        break;\n      }\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Service, NgZone, RendererFactory2, inject} from '@angular/core';\nimport {Platform, _getEventTarget} from '../../platform';\nimport {BaseOverlayDispatcher} from './base-overlay-dispatcher';\nimport type {OverlayRef} from '../overlay-ref';\n\n/**\n * Service for dispatching mouse click events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\n@Service()\nexport class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {\n  private _platform = inject(Platform);\n  private _ngZone = inject(NgZone);\n  private _renderer = inject(RendererFactory2).createRenderer(null, null);\n\n  private _cursorOriginalValue!: string;\n  private _cursorStyleIsSet = false;\n  private _pointerDownEventTarget: HTMLElement | null = null;\n  private _cleanups: (() => void)[] | undefined;\n\n  /** Add a new overlay to the list of attached overlay refs. */\n  override add(overlayRef: OverlayRef): void {\n    super.add(overlayRef);\n\n    // Safari on iOS does not generate click events for non-interactive\n    // elements. However, we want to receive a click for any element outside\n    // the overlay. We can force a \"clickable\" state by setting\n    // `cursor: pointer` on the document body. See:\n    // https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile\n    // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n    if (!this._isAttached) {\n      const body = this._document.body;\n      const eventOptions = {capture: true};\n      const renderer = this._renderer;\n\n      this._cleanups = this._ngZone.runOutsideAngular(() => [\n        renderer.listen(body, 'pointerdown', this._pointerDownListener, eventOptions),\n        renderer.listen(body, 'click', this._clickListener, eventOptions),\n        renderer.listen(body, 'auxclick', this._clickListener, eventOptions),\n        renderer.listen(body, 'contextmenu', this._clickListener, eventOptions),\n      ]);\n\n      // click event is not fired on iOS. To make element \"clickable\" we are\n      // setting the cursor to pointer\n      if (this._platform.IOS && !this._cursorStyleIsSet) {\n        this._cursorOriginalValue = body.style.cursor;\n        body.style.cursor = 'pointer';\n        this._cursorStyleIsSet = true;\n      }\n\n      this._isAttached = true;\n    }\n  }\n\n  /** Detaches the global keyboard event listener. */\n  protected detach() {\n    if (this._isAttached) {\n      this._cleanups?.forEach(cleanup => cleanup());\n      this._cleanups = undefined;\n      if (this._platform.IOS && this._cursorStyleIsSet) {\n        this._document.body.style.cursor = this._cursorOriginalValue;\n        this._cursorStyleIsSet = false;\n      }\n      this._isAttached = false;\n    }\n  }\n\n  /** Store pointerdown event target to track origin of click. */\n  private _pointerDownListener = (event: PointerEvent) => {\n    this._pointerDownEventTarget = _getEventTarget<HTMLElement>(event);\n  };\n\n  /** Click event listener that will be attached to the body propagate phase. */\n  private _clickListener = (event: MouseEvent) => {\n    const target = _getEventTarget<HTMLElement>(event);\n    // In case of a click event, we want to check the origin of the click\n    // (e.g. in case where a user starts a click inside the overlay and\n    // releases the click outside of it).\n    // This is done by using the event target of the preceding pointerdown event.\n    // Every click event caused by a pointer device has a preceding pointerdown\n    // event, unless the click was programmatically triggered (e.g. in a unit test).\n    const origin =\n      event.type === 'click' && this._pointerDownEventTarget\n        ? this._pointerDownEventTarget\n        : target;\n    // Reset the stored pointerdown event target, to avoid having it interfere\n    // in subsequent events.\n    this._pointerDownEventTarget = null;\n\n    // We copy the array because the original may be modified asynchronously if the\n    // outsidePointerEvents listener decides to detach overlays resulting in index errors inside\n    // the for loop.\n    const overlays = this._attachedOverlays.slice();\n\n    // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.\n    // We want to target all overlays for which the click could be considered as outside click.\n    // As soon as we reach an overlay for which the click is not outside click we break off\n    // the loop.\n    for (let i = overlays.length - 1; i > -1; i--) {\n      const overlayRef = overlays[i];\n      const outsidePointerEvents = overlayRef._outsidePointerEvents;\n\n      if (\n        // TODO(crisbeto): this should move into `canReceiveEvent` but may be breaking.\n        !overlayRef.hasAttached() ||\n        !this.canReceiveEvent(overlayRef, event, outsidePointerEvents)\n      ) {\n        continue;\n      }\n\n      // If it's a click inside the overlay, just break - we should do nothing\n      // If it's an outside click (both origin and target of the click) dispatch the mouse event,\n      // and proceed with the next overlay\n      if (\n        containsPierceShadowDom(overlayRef.overlayElement, target) ||\n        containsPierceShadowDom(overlayRef.overlayElement, origin)\n      ) {\n        break;\n      }\n\n      /** @breaking-change 14.0.0 _ngZone will be required. */\n      if (this._ngZone) {\n        this._ngZone.run(() => outsidePointerEvents.next(event));\n      } else {\n        outsidePointerEvents.next(event);\n      }\n    }\n  };\n}\n\n/** Version of `Element.contains` that transcends shadow DOM boundaries. */\nfunction containsPierceShadowDom(parent: HTMLElement, child: HTMLElement | null): boolean {\n  const supportsShadowRoot = typeof ShadowRoot !== 'undefined' && ShadowRoot;\n  let current: Node | null = child;\n\n  while (current) {\n    if (current === parent) {\n      return true;\n    }\n\n    current =\n      supportsShadowRoot && current instanceof ShadowRoot ? current.host : current.parentNode;\n  }\n\n  return false;\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 {Service, OnDestroy, Component, ViewEncapsulation, inject, DOCUMENT} from '@angular/core';\nimport {_CdkPrivateStyleLoader} from '../private';\nimport {Platform, _isTestEnvironment} from '../platform';\n\n@Component({\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  styleUrl: 'overlay-structure.css',\n  host: {'cdk-overlay-style-loader': ''},\n})\nexport class _CdkOverlayStyleLoader {}\n\n/** Container inside which all overlays will render. */\n@Service()\nexport class OverlayContainer implements OnDestroy {\n  protected _platform = inject(Platform);\n\n  protected _containerElement: HTMLElement | undefined;\n  protected _document = inject(DOCUMENT);\n  protected _styleLoader = inject(_CdkPrivateStyleLoader);\n\n  ngOnDestroy() {\n    this._containerElement?.remove();\n  }\n\n  /**\n   * This method returns the overlay container element. It will lazily\n   * create the element the first time it is called to facilitate using\n   * the container in non-browser environments.\n   * @returns the container element\n   */\n  getContainerElement(): HTMLElement {\n    this._loadStyles();\n\n    if (!this._containerElement) {\n      this._createContainer();\n    }\n\n    return this._containerElement!;\n  }\n\n  /**\n   * Create the overlay container element, which is simply a div\n   * with the 'cdk-overlay-container' class on the document body.\n   */\n  protected _createContainer(): void {\n    const containerClass = 'cdk-overlay-container';\n\n    // TODO(crisbeto): remove the testing check once we have an overlay testing\n    // module or Angular starts tearing down the testing `NgModule`. See:\n    // https://github.com/angular/angular/issues/18831\n    if (this._platform.isBrowser || _isTestEnvironment()) {\n      const oppositePlatformContainers = this._document.querySelectorAll(\n        `.${containerClass}[platform=\"server\"], ` + `.${containerClass}[platform=\"test\"]`,\n      );\n\n      // Remove any old containers from the opposite platform.\n      // This can happen when transitioning from the server to the client.\n      for (let i = 0; i < oppositePlatformContainers.length; i++) {\n        oppositePlatformContainers[i].remove();\n      }\n    }\n\n    const container = this._document.createElement('div');\n    container.classList.add(containerClass);\n\n    // A long time ago we kept adding new overlay containers whenever a new app was instantiated,\n    // but at some point we added logic which clears the duplicate ones in order to avoid leaks.\n    // The new logic was a little too aggressive since it was breaking some legitimate use cases.\n    // To mitigate the problem we made it so that only containers from a different platform are\n    // cleared, but the side-effect was that people started depending on the overly-aggressive\n    // logic to clean up their tests for them. Until we can introduce an overlay-specific testing\n    // module which does the cleanup, we try to detect that we're in a test environment and we\n    // always clear the container. See #17006.\n    // TODO(crisbeto): remove the test environment check once we have an overlay testing module.\n    if (_isTestEnvironment()) {\n      container.setAttribute('platform', 'test');\n    } else if (!this._platform.isBrowser) {\n      container.setAttribute('platform', 'server');\n    }\n\n    this._document.body.appendChild(container);\n    this._containerElement = container;\n  }\n\n  /** Loads the structural styles necessary for the overlay to work. */\n  protected _loadStyles(): void {\n    this._styleLoader.load(_CdkOverlayStyleLoader);\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 {NgZone, Renderer2} from '@angular/core';\n\n/** Encapsulates the logic for attaching and detaching a backdrop. */\nexport class BackdropRef {\n  readonly element: HTMLElement;\n  private _cleanupClick: (() => void) | undefined;\n  private _cleanupTransitionEnd: (() => void) | undefined;\n  private _fallbackTimeout: ReturnType<typeof setTimeout> | undefined;\n\n  constructor(\n    document: Document,\n    private _renderer: Renderer2,\n    private _ngZone: NgZone,\n    onClick: (event: MouseEvent) => void,\n  ) {\n    this.element = document.createElement('div');\n    this.element.classList.add('cdk-overlay-backdrop');\n    this._cleanupClick = _renderer.listen(this.element, 'click', onClick);\n  }\n\n  detach() {\n    this._ngZone.runOutsideAngular(() => {\n      const element = this.element;\n      clearTimeout(this._fallbackTimeout);\n      this._cleanupTransitionEnd?.();\n      this._cleanupTransitionEnd = this._renderer.listen(element, 'transitionend', this.dispose);\n      this._fallbackTimeout = setTimeout(this.dispose, 500);\n\n      // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\n      // In this case we make it unclickable and we try to remove it after a delay.\n      element.style.pointerEvents = 'none';\n      element.classList.remove('cdk-overlay-backdrop-showing');\n    });\n  }\n\n  dispose = () => {\n    clearTimeout(this._fallbackTimeout);\n    this._cleanupClick?.();\n    this._cleanupTransitionEnd?.();\n    this._cleanupClick = this._cleanupTransitionEnd = this._fallbackTimeout = undefined;\n    this.element.remove();\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 {Location} from '@angular/common';\nimport {\n  AfterRenderRef,\n  ComponentRef,\n  EmbeddedViewRef,\n  EnvironmentInjector,\n  NgZone,\n  Renderer2,\n  afterNextRender,\n} from '@angular/core';\nimport {Observable, Subject, Subscription, SubscriptionLike} from 'rxjs';\nimport {Direction, Directionality} from '../bidi';\nimport {coerceArray, coerceCssPixelValue} from '../coercion';\nimport {ComponentPortal, Portal, PortalOutlet, TemplatePortal} from '../portal';\nimport {BackdropRef} from './backdrop-ref';\nimport {OverlayKeyboardDispatcher} from './dispatchers/overlay-keyboard-dispatcher';\nimport {OverlayOutsideClickDispatcher} from './dispatchers/overlay-outside-click-dispatcher';\nimport {OverlayConfig} from './overlay-config';\nimport {PositionStrategy} from './position/position-strategy';\nimport {ScrollStrategy} from './scroll';\n\n/** An object where all of its properties cannot be written. */\nexport type ImmutableObject<T> = {\n  readonly [P in keyof T]: T[P];\n};\n\n/** Checks if a value is an element. */\nexport function isElement(value: any): value is Element {\n  return value && (value as Element).nodeType === 1;\n}\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nexport class OverlayRef implements PortalOutlet {\n  private readonly _backdropClick = new Subject<MouseEvent>();\n  private readonly _attachments = new Subject<void>();\n  private readonly _detachments = new Subject<void>();\n  private _positionStrategy: PositionStrategy | undefined;\n  private _scrollStrategy: ScrollStrategy | undefined;\n  private _locationChanges: SubscriptionLike = Subscription.EMPTY;\n  private _backdropRef: BackdropRef | null = null;\n  private _detachContentMutationObserver: MutationObserver | undefined;\n  private _detachContentAfterRenderRef: AfterRenderRef | undefined;\n  private _disposed = false;\n\n  /**\n   * Reference to the parent of the `_host` at the time it was detached. Used to restore\n   * the `_host` to its original position in the DOM when it gets re-attached.\n   */\n  private _previousHostParent!: HTMLElement;\n\n  /** Stream of keydown events dispatched to this overlay. */\n  readonly _keydownEvents = new Subject<KeyboardEvent>();\n\n  /** Stream of mouse outside events dispatched to this overlay. */\n  readonly _outsidePointerEvents = new Subject<MouseEvent>();\n\n  /** Reference to the currently-running `afterNextRender` call. */\n  private _afterNextRenderRef: AfterRenderRef | undefined;\n\n  constructor(\n    private _portalOutlet: PortalOutlet,\n    private _host: HTMLElement,\n    private _pane: HTMLElement,\n    private _config: ImmutableObject<OverlayConfig>,\n    private _ngZone: NgZone,\n    private _keyboardDispatcher: OverlayKeyboardDispatcher,\n    private _document: Document,\n    private _location: Location,\n    private _outsideClickDispatcher: OverlayOutsideClickDispatcher,\n    private _animationsDisabled = false,\n    private _injector: EnvironmentInjector,\n    private _renderer: Renderer2,\n  ) {\n    if (_config.scrollStrategy) {\n      this._scrollStrategy = _config.scrollStrategy;\n      this._scrollStrategy.attach(this);\n    }\n\n    this._positionStrategy = _config.positionStrategy;\n  }\n\n  /** The overlay's HTML element */\n  get overlayElement(): HTMLElement {\n    return this._pane;\n  }\n\n  /** The overlay's backdrop HTML element. */\n  get backdropElement(): HTMLElement | null {\n    return this._backdropRef?.element || null;\n  }\n\n  /**\n   * Wrapper around the panel element. Can be used for advanced\n   * positioning where a wrapper with specific styling is\n   * required around the overlay pane.\n   */\n  get hostElement(): HTMLElement {\n    return this._host;\n  }\n\n  /**\n   * Function that determines if this overlay should receive a specific event.\n   */\n  get eventPredicate(): ((event: Event) => boolean) | null {\n    // Note: the safe read here is redundant, but some internal tests mock out the overlay ref.\n    return this._config?.eventPredicate || null;\n  }\n\n  attach<T>(portal: ComponentPortal<T>): ComponentRef<T>;\n  attach<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T>;\n  attach(portal: any): any;\n\n  /**\n   * Attaches content, given via a Portal, to the overlay.\n   * If the overlay is configured to have a backdrop, it will be created.\n   *\n   * @param portal Portal instance to which to attach the overlay.\n   * @returns The portal attachment result.\n   */\n  attach(portal: Portal<any>): any {\n    if (this._disposed) {\n      return null;\n    }\n\n    // Insert the host into the DOM before attaching the portal, otherwise\n    // the animations module will skip animations on repeat attachments.\n    this._attachHost();\n\n    const attachResult = this._portalOutlet.attach(portal);\n    this._positionStrategy?.attach(this);\n    this._updateStackingOrder();\n    this._updateElementSize();\n    this._updateElementDirection();\n\n    if (this._scrollStrategy) {\n      this._scrollStrategy.enable();\n    }\n\n    // We need to clean this up ourselves, because we're passing in an\n    // `EnvironmentInjector` below which won't ever be destroyed.\n    // Otherwise it causes some callbacks to be retained (see #29696).\n    this._afterNextRenderRef?.destroy();\n\n    // Update the position once the overlay is fully rendered before attempting to position it,\n    // as the position may depend on the size of the rendered content.\n    this._afterNextRenderRef = afterNextRender(\n      () => {\n        // The overlay could've been detached before the callback executed.\n        if (this.hasAttached()) {\n          this.updatePosition();\n        }\n      },\n      {injector: this._injector},\n    );\n\n    // Enable pointer events for the overlay pane element.\n    this._togglePointerEvents(true);\n\n    if (this._config.hasBackdrop) {\n      this._attachBackdrop();\n    }\n\n    if (this._config.panelClass) {\n      this._toggleClasses(this._pane, this._config.panelClass, true);\n    }\n\n    // Only emit the `attachments` event once all other setup is done.\n    this._attachments.next();\n    this._completeDetachContent();\n\n    // Track this overlay by the keyboard dispatcher\n    this._keyboardDispatcher.add(this);\n\n    if (this._config.disposeOnNavigation) {\n      this._locationChanges = this._location.subscribe(() => this.dispose());\n    }\n\n    this._outsideClickDispatcher.add(this);\n\n    // TODO(crisbeto): the null check is here, because the portal outlet returns `any`.\n    // We should be guaranteed for the result to be `ComponentRef | EmbeddedViewRef`, but\n    // `instanceof EmbeddedViewRef` doesn't appear to work at the moment.\n    if (typeof attachResult?.onDestroy === 'function') {\n      // In most cases we control the portal and we know when it is being detached so that\n      // we can finish the disposal process. The exception is if the user passes in a custom\n      // `ViewContainerRef` that isn't destroyed through the overlay API. Note that we use\n      // `detach` here instead of `dispose`, because we don't know if the user intends to\n      // reattach the overlay at a later point. It also has the advantage of waiting for animations.\n      attachResult.onDestroy(() => {\n        if (this.hasAttached()) {\n          // We have to delay the `detach` call, because detaching immediately prevents\n          // other destroy hooks from running. This is likely a framework bug similar to\n          // https://github.com/angular/angular/issues/46119\n          this._ngZone.runOutsideAngular(() => Promise.resolve().then(() => this.detach()));\n        }\n      });\n    }\n\n    return attachResult;\n  }\n\n  /**\n   * Detaches an overlay from a portal.\n   * @returns The portal detachment result.\n   */\n  detach(): any {\n    if (!this.hasAttached()) {\n      return;\n    }\n\n    this.detachBackdrop();\n\n    // When the overlay is detached, the pane element should disable pointer events.\n    // This is necessary because otherwise the pane element will cover the page and disable\n    // pointer events therefore. Depends on the position strategy and the applied pane boundaries.\n    this._togglePointerEvents(false);\n\n    if (this._positionStrategy && this._positionStrategy.detach) {\n      this._positionStrategy.detach();\n    }\n\n    if (this._scrollStrategy) {\n      this._scrollStrategy.disable();\n    }\n\n    const detachmentResult = this._portalOutlet.detach();\n\n    // Only emit after everything is detached.\n    this._detachments.next();\n    this._completeDetachContent();\n\n    // Remove this overlay from keyboard dispatcher tracking.\n    this._keyboardDispatcher.remove(this);\n\n    // Keeping the host element in the DOM can cause scroll jank, because it still gets\n    // rendered, even though it's transparent and unclickable which is why we remove it.\n    this._detachContentWhenEmpty();\n    this._locationChanges.unsubscribe();\n    this._outsideClickDispatcher.remove(this);\n    return detachmentResult;\n  }\n\n  /** Cleans up the overlay from the DOM. */\n  dispose(): void {\n    if (this._disposed) {\n      return;\n    }\n\n    const isAttached = this.hasAttached();\n\n    if (this._positionStrategy) {\n      this._positionStrategy.dispose();\n    }\n\n    this._disposeScrollStrategy();\n    this._backdropRef?.dispose();\n    this._locationChanges.unsubscribe();\n    this._keyboardDispatcher.remove(this);\n    this._portalOutlet.dispose();\n    this._attachments.complete();\n    this._backdropClick.complete();\n    this._keydownEvents.complete();\n    this._outsidePointerEvents.complete();\n    this._outsideClickDispatcher.remove(this);\n    this._host?.remove();\n    this._afterNextRenderRef?.destroy();\n    this._previousHostParent = this._pane = this._host = this._backdropRef = null!;\n\n    if (isAttached) {\n      this._detachments.next();\n    }\n\n    this._detachments.complete();\n    this._completeDetachContent();\n    this._disposed = true;\n  }\n\n  /** Whether the overlay has attached content. */\n  hasAttached(): boolean {\n    return this._portalOutlet.hasAttached();\n  }\n\n  /** Gets an observable that emits when the backdrop has been clicked. */\n  backdropClick(): Observable<MouseEvent> {\n    return this._backdropClick;\n  }\n\n  /** Gets an observable that emits when the overlay has been attached. */\n  attachments(): Observable<void> {\n    return this._attachments;\n  }\n\n  /** Gets an observable that emits when the overlay has been detached. */\n  detachments(): Observable<void> {\n    return this._detachments;\n  }\n\n  /** Gets an observable of keydown events targeted to this overlay. */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this._keydownEvents;\n  }\n\n  /** Gets an observable of pointer events targeted outside this overlay. */\n  outsidePointerEvents(): Observable<MouseEvent> {\n    return this._outsidePointerEvents;\n  }\n\n  /** Gets the current overlay configuration, which is immutable. */\n  getConfig(): OverlayConfig {\n    return this._config;\n  }\n\n  /** Updates the position of the overlay based on the position strategy. */\n  updatePosition(): void {\n    if (this._positionStrategy) {\n      this._positionStrategy.apply();\n    }\n  }\n\n  /** Switches to a new position strategy and updates the overlay position. */\n  updatePositionStrategy(strategy: PositionStrategy): void {\n    if (strategy === this._positionStrategy) {\n      return;\n    }\n\n    if (this._positionStrategy) {\n      this._positionStrategy.dispose();\n    }\n\n    this._positionStrategy = strategy;\n\n    if (this.hasAttached()) {\n      strategy.attach(this);\n      this.updatePosition();\n    }\n  }\n\n  /** Update the size properties of the overlay. */\n  updateSize(sizeConfig: OverlaySizeConfig): void {\n    this._config = {...this._config, ...sizeConfig};\n    this._updateElementSize();\n  }\n\n  /** Sets the LTR/RTL direction for the overlay. */\n  setDirection(dir: Direction | Directionality): void {\n    this._config = {...this._config, direction: dir};\n    this._updateElementDirection();\n  }\n\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes: string | string[]): void {\n    if (this._pane) {\n      this._toggleClasses(this._pane, classes, true);\n    }\n  }\n\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes: string | string[]): void {\n    if (this._pane) {\n      this._toggleClasses(this._pane, classes, false);\n    }\n  }\n\n  /**\n   * Returns the layout direction of the overlay panel.\n   */\n  getDirection(): Direction {\n    const direction = this._config.direction;\n\n    if (!direction) {\n      return 'ltr';\n    }\n\n    return typeof direction === 'string' ? direction : direction.value;\n  }\n\n  /** Switches to a new scroll strategy. */\n  updateScrollStrategy(strategy: ScrollStrategy): void {\n    if (strategy === this._scrollStrategy) {\n      return;\n    }\n\n    this._disposeScrollStrategy();\n    this._scrollStrategy = strategy;\n\n    if (this.hasAttached()) {\n      strategy.attach(this);\n      strategy.enable();\n    }\n  }\n\n  /** Updates the text direction of the overlay panel. */\n  private _updateElementDirection() {\n    this._host.setAttribute('dir', this.getDirection());\n  }\n\n  /** Updates the size of the overlay element based on the overlay config. */\n  private _updateElementSize() {\n    if (!this._pane) {\n      return;\n    }\n\n    const style = this._pane.style;\n\n    style.width = coerceCssPixelValue(this._config.width);\n    style.height = coerceCssPixelValue(this._config.height);\n    style.minWidth = coerceCssPixelValue(this._config.minWidth);\n    style.minHeight = coerceCssPixelValue(this._config.minHeight);\n    style.maxWidth = coerceCssPixelValue(this._config.maxWidth);\n    style.maxHeight = coerceCssPixelValue(this._config.maxHeight);\n  }\n\n  /** Toggles the pointer events for the overlay pane element. */\n  private _togglePointerEvents(enablePointer: boolean) {\n    this._pane.style.pointerEvents = enablePointer ? '' : 'none';\n  }\n\n  private _attachHost() {\n    if (!this._host.parentElement) {\n      const customInsertionPoint = this._config.usePopover\n        ? this._positionStrategy?.getPopoverInsertionPoint?.()\n        : null;\n\n      if (isElement(customInsertionPoint)) {\n        customInsertionPoint.after(this._host);\n      } else if (customInsertionPoint?.type === 'parent') {\n        customInsertionPoint.element.appendChild(this._host);\n      } else {\n        this._previousHostParent?.appendChild(this._host);\n      }\n    }\n\n    if (this._config.usePopover) {\n      // We need the try/catch because the browser will throw if the\n      // host or any of the parents are outside the DOM. Also note\n      // the string access which is there for compatibility with Closure.\n      try {\n        this._host['showPopover']();\n      } catch {}\n    }\n  }\n\n  /** Attaches a backdrop for this overlay. */\n  private _attachBackdrop() {\n    const showingClass = 'cdk-overlay-backdrop-showing';\n\n    this._backdropRef?.dispose();\n    this._backdropRef = new BackdropRef(this._document, this._renderer, this._ngZone, event => {\n      this._backdropClick.next(event);\n    });\n\n    if (this._animationsDisabled) {\n      this._backdropRef.element.classList.add('cdk-overlay-backdrop-noop-animation');\n    }\n\n    if (this._config.backdropClass) {\n      this._toggleClasses(this._backdropRef.element, this._config.backdropClass, true);\n    }\n\n    if (this._config.usePopover) {\n      // When using popovers, the backdrop needs to be inside the popover.\n      this._host.prepend(this._backdropRef.element);\n    } else {\n      // Insert the backdrop before the pane in the DOM order,\n      // in order to handle stacked overlays properly.\n      this._host.parentElement!.insertBefore(this._backdropRef.element, this._host);\n    }\n\n    // Add class to fade-in the backdrop after one frame.\n    if (!this._animationsDisabled && typeof requestAnimationFrame !== 'undefined') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => this._backdropRef?.element.classList.add(showingClass));\n      });\n    } else {\n      this._backdropRef.element.classList.add(showingClass);\n    }\n  }\n\n  /**\n   * Updates the stacking order of the element, moving it to the top if necessary.\n   * This is required in cases where one overlay was detached, while another one,\n   * that should be behind it, was destroyed. The next time both of them are opened,\n   * the stacking will be wrong, because the detached element's pane will still be\n   * in its original DOM position.\n   */\n  private _updateStackingOrder() {\n    if (!this._config.usePopover && this._host.nextSibling) {\n      this._host.parentNode!.appendChild(this._host);\n    }\n  }\n\n  /** Detaches the backdrop (if any) associated with the overlay. */\n  detachBackdrop(): void {\n    if (this._animationsDisabled) {\n      this._backdropRef?.dispose();\n      this._backdropRef = null;\n    } else {\n      this._backdropRef?.detach();\n    }\n  }\n\n  /** Toggles a single CSS class or an array of classes on an element. */\n  private _toggleClasses(element: HTMLElement, cssClasses: string | string[], isAdd: boolean) {\n    const classes = coerceArray(cssClasses || []).filter(c => !!c);\n\n    if (classes.length) {\n      isAdd ? element.classList.add(...classes) : element.classList.remove(...classes);\n    }\n  }\n\n  /** Detaches the overlay once the content finishes animating and is removed from the DOM. */\n  private _detachContentWhenEmpty() {\n    let rethrow = false;\n    // Attempt to detach on the next render.\n    try {\n      this._detachContentAfterRenderRef = afterNextRender(\n        () => {\n          // Rethrow if we encounter an actual error detaching.\n          rethrow = true;\n          this._detachContent();\n        },\n        {\n          injector: this._injector,\n        },\n      );\n    } catch (e) {\n      if (rethrow) {\n        throw e;\n      }\n      // afterNextRender throws if the EnvironmentInjector is has already been destroyed.\n      // This may happen in tests that don't properly flush all async work.\n      // In order to avoid breaking those tests, we just detach immediately in this case.\n      this._detachContent();\n    }\n    // Otherwise wait until the content finishes animating out and detach.\n    if (globalThis.MutationObserver && this._pane) {\n      this._detachContentMutationObserver ||= new globalThis.MutationObserver(() => {\n        this._detachContent();\n      });\n      this._detachContentMutationObserver.observe(this._pane, {childList: true});\n    }\n  }\n\n  private _detachContent() {\n    // Needs a couple of checks for the pane and host, because\n    // they may have been removed by the time the zone stabilizes.\n    if (!this._pane || !this._host || this._pane.children.length === 0) {\n      if (this._pane && this._config.panelClass) {\n        this._toggleClasses(this._pane, this._config.panelClass, false);\n      }\n\n      if (this._host && this._host.parentElement) {\n        this._previousHostParent = this._host.parentElement;\n        this._host.remove();\n      }\n\n      this._completeDetachContent();\n    }\n  }\n\n  private _completeDetachContent() {\n    this._detachContentAfterRenderRef?.destroy();\n    this._detachContentAfterRenderRef = undefined;\n    this._detachContentMutationObserver?.disconnect();\n  }\n\n  /** Disposes of a scroll strategy. */\n  private _disposeScrollStrategy() {\n    const scrollStrategy = this._scrollStrategy;\n    scrollStrategy?.disable();\n    scrollStrategy?.detach?.();\n  }\n}\n\n/** Size properties for an overlay. */\nexport interface OverlaySizeConfig {\n  width?: number | string;\n  height?: number | string;\n  minWidth?: number | string;\n  minHeight?: number | string;\n  maxWidth?: number | string;\n  maxHeight?: number | string;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {PositionStrategy} from './position-strategy';\nimport {DOCUMENT, ElementRef, Injector} from '@angular/core';\nimport {ViewportRuler, ScrollDispatcherTarget, ViewportScrollPosition} from '../../scrolling';\nimport {\n  ConnectedOverlayPositionChange,\n  ConnectionPositionPair,\n  ScrollingVisibility,\n  validateHorizontalPosition,\n  validateVerticalPosition,\n  ViewportMargin,\n} from './connected-position';\nimport {Observable, Subscription, Subject} from 'rxjs';\nimport {isElementScrolledOutsideView, isElementClippedByScrolling} from './scroll-clip';\nimport {coerceCssPixelValue, coerceArray} from '../../coercion';\nimport {Platform} from '../../platform';\nimport {OverlayContainer} from '../overlay-container';\nimport {isElement, OverlayRef} from '../overlay-ref';\n\n// TODO: refactor clipping detection into a separate thing (part of scrolling module)\n// TODO: doesn't handle both flexible width and height when it has to scroll along both axis.\n\n/** Class to be added to the overlay bounding box. */\nconst boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\n\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n\n/** Possible values that can be set as the origin of a FlexibleConnectedPositionStrategy. */\nexport type FlexibleConnectedPositionStrategyOrigin =\n  | ElementRef\n  | Element\n  | (Point & {\n      width?: number;\n      height?: number;\n    });\n\n/** Equivalent of `DOMRect` without some of the properties we don't care about. */\ntype Dimensions = Omit<DOMRect, 'x' | 'y' | 'toJSON'>;\n\n/**\n * Creates a flexible position strategy.\n * @param injector Injector used to resolve dependnecies for the position strategy.\n * @param origin Origin relative to which to position the overlay.\n */\nexport function createFlexibleConnectedPositionStrategy(\n  injector: Injector,\n  origin: FlexibleConnectedPositionStrategyOrigin,\n): FlexibleConnectedPositionStrategy {\n  return new FlexibleConnectedPositionStrategy(\n    origin,\n    injector.get(ViewportRuler),\n    injector.get(DOCUMENT),\n    injector.get(Platform),\n    injector.get(OverlayContainer),\n  );\n}\n\n/** Supported locations in the DOM for connected overlays. */\nexport type FlexibleOverlayPopoverLocation =\n  | 'global'\n  | 'inline'\n  | {type: 'parent'; element: Element};\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n */\nexport class FlexibleConnectedPositionStrategy implements PositionStrategy {\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef!: OverlayRef;\n\n  /** Whether we're performing the very first positioning of the overlay. */\n  private _isInitialRender = false;\n\n  /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\n  private _lastBoundingBoxSize = {width: 0, height: 0};\n\n  /** Whether the overlay was pushed in a previous positioning. */\n  private _isPushed = false;\n\n  /** Whether the overlay can be pushed on-screen on the initial open. */\n  private _canPush = true;\n\n  /** Whether the overlay can grow via flexible width/height after the initial open. */\n  private _growAfterOpen = false;\n\n  /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n  private _hasFlexibleDimensions = true;\n\n  /** Whether the overlay position is locked. */\n  private _positionLocked = false;\n\n  /** Cached origin dimensions */\n  private _originRect!: Dimensions;\n\n  /** Cached overlay dimensions */\n  private _overlayRect!: Dimensions;\n\n  /** Cached viewport dimensions */\n  private _viewportRect!: Dimensions;\n\n  /** Cached container dimensions */\n  private _containerRect!: Dimensions;\n\n  /** Amount of space that must be maintained between the overlay and the right edge of the viewport. */\n  private _viewportMargin: ViewportMargin = 0;\n\n  /** The Scrollable containers used to check scrollable view properties on position change. */\n  private _scrollables: ScrollDispatcherTarget[] = [];\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  _preferredPositions: ConnectionPositionPair[] = [];\n\n  /** The origin element against which the overlay will be positioned. */\n  _origin!: FlexibleConnectedPositionStrategyOrigin;\n\n  /** The overlay pane element. */\n  private _pane!: HTMLElement;\n\n  /** Whether the strategy has been disposed of already. */\n  private _isDisposed = false;\n\n  /**\n   * Parent element for the overlay panel used to constrain the overlay panel's size to fit\n   * within the viewport.\n   */\n  private _boundingBox: HTMLElement | null = null;\n\n  /** The last position to have been calculated as the best fit position. */\n  private _lastPosition: ConnectedPosition | null = null;\n\n  /** The last calculated scroll visibility. Only tracked  */\n  private _lastScrollVisibility: ScrollingVisibility | null = null;\n\n  /** Subject that emits whenever the position changes. */\n  private readonly _positionChanges = new Subject<ConnectedOverlayPositionChange>();\n\n  /** Subscription to viewport size changes. */\n  private _resizeSubscription = Subscription.EMPTY;\n\n  /** Default offset for the overlay along the x axis. */\n  private _offsetX = 0;\n\n  /** Default offset for the overlay along the y axis. */\n  private _offsetY = 0;\n\n  /** Selector to be used when finding the elements on which to set the transform origin. */\n  private _transformOriginSelector!: string;\n\n  /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\n  private _appliedPanelClasses: string[] = [];\n\n  /** Amount by which the overlay was pushed in each axis during the last time it was positioned. */\n  private _previousPushAmount: {x: number; y: number} | null = null;\n\n  /** Configures where in the DOM to insert the overlay when popovers are enabled. */\n  private _popoverLocation: FlexibleOverlayPopoverLocation = 'global';\n\n  /** Observable sequence of position changes. */\n  positionChanges: Observable<ConnectedOverlayPositionChange> = this._positionChanges;\n\n  /** Ordered list of preferred positions, from most to least desirable. */\n  get positions(): ConnectionPositionPair[] {\n    return this._preferredPositions;\n  }\n\n  constructor(\n    connectedTo: FlexibleConnectedPositionStrategyOrigin,\n    private _viewportRuler: ViewportRuler,\n    private _document: Document,\n    private _platform: Platform,\n    private _overlayContainer: OverlayContainer,\n  ) {\n    this.setOrigin(connectedTo);\n  }\n\n  /** Attaches this position strategy to an overlay. */\n  attach(overlayRef: OverlayRef): void {\n    if (\n      this._overlayRef &&\n      overlayRef !== this._overlayRef &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)\n    ) {\n      throw Error('This position strategy is already attached to an overlay');\n    }\n\n    this._validatePositions();\n\n    overlayRef.hostElement.classList.add(boundingBoxClass);\n\n    this._overlayRef = overlayRef;\n    this._boundingBox = overlayRef.hostElement;\n    this._pane = overlayRef.overlayElement;\n    this._isDisposed = false;\n    this._isInitialRender = true;\n    this._lastPosition = null;\n    this._resizeSubscription.unsubscribe();\n    this._resizeSubscription = this._viewportRuler.change().subscribe(() => {\n      // When the window is resized, we want to trigger the next reposition as if it\n      // was an initial render, in order for the strategy to pick a new optimal position,\n      // otherwise position locking will cause it to stay at the old one.\n      this._isInitialRender = true;\n      this.apply();\n    });\n  }\n\n  /**\n   * Updates the position of the overlay element, using whichever preferred position relative\n   * to the origin best fits on-screen.\n   *\n   * The selection of a position goes as follows:\n   *  - If any positions fit completely within the viewport as-is,\n   *      choose the first position that does so.\n   *  - If flexible dimensions are enabled and at least one satisfies the given minimum width/height,\n   *      choose the position with the greatest available size modified by the positions' weight.\n   *  - If pushing is enabled, take the position that went off-screen the least and push it\n   *      on-screen.\n   *  - If none of the previous criteria were met, use the position that goes off-screen the least.\n   * @docs-private\n   */\n  apply(): void {\n    // We shouldn't do anything if the strategy was disposed or we're on the server.\n    if (this._isDisposed || !this._platform.isBrowser) {\n      return;\n    }\n\n    // If the position has been applied already (e.g. when the overlay was opened) and the\n    // consumer opted into locking in the position, re-use the old position, in order to\n    // prevent the overlay from jumping around.\n    if (!this._isInitialRender && this._positionLocked && this._lastPosition) {\n      this.reapplyLastPosition();\n      return;\n    }\n\n    this._clearPanelClasses();\n    this._resetOverlayElementStyles();\n    this._resetBoundingBoxStyles();\n\n    // We need the bounding rects for the origin, the overlay and the container to determine how to position\n    // the overlay relative to the origin.\n    // We use the viewport rect to determine whether a position would go off-screen.\n    this._viewportRect = this._getNarrowedViewportRect();\n    this._originRect = this._getOriginRect();\n    this._overlayRect = this._pane.getBoundingClientRect();\n    this._containerRect = this._getContainerRect();\n\n    const originRect = this._originRect;\n    const overlayRect = this._overlayRect;\n    const viewportRect = this._viewportRect;\n    const containerRect = this._containerRect;\n\n    // Positions where the overlay will fit with flexible dimensions.\n    const flexibleFits: FlexibleFit[] = [];\n\n    // Fallback if none of the preferred positions fit within the viewport.\n    let fallback: FallbackPosition | undefined;\n\n    // Go through each of the preferred positions looking for a good fit.\n    // If a good fit is found, it will be applied immediately.\n    for (let pos of this._preferredPositions) {\n      // Get the exact (x, y) coordinate for the point-of-origin on the origin element.\n      let originPoint = this._getOriginPoint(originRect, containerRect, pos);\n\n      // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the\n      // overlay in this position. We use the top-left corner for calculations and later translate\n      // this into an appropriate (top, left, bottom, right) style.\n      let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos);\n\n      // Calculate how well the overlay would fit into the viewport with this point.\n      let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos);\n\n      // If the overlay, without any further work, fits into the viewport, use this position.\n      if (overlayFit.isCompletelyWithinViewport) {\n        this._isPushed = false;\n        this._applyPosition(pos, originPoint);\n        return;\n      }\n\n      // If the overlay has flexible dimensions, we can use this position\n      // so long as there's enough space for the minimum dimensions.\n      if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) {\n        // Save positions where the overlay will fit with flexible dimensions. We will use these\n        // if none of the positions fit *without* flexible dimensions.\n        flexibleFits.push({\n          position: pos,\n          origin: originPoint,\n          overlayRect,\n          boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos),\n        });\n\n        continue;\n      }\n\n      // If the current preferred position does not fit on the screen, remember the position\n      // if it has more visible area on-screen than we've seen and move onto the next preferred\n      // position.\n      if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) {\n        fallback = {overlayFit, overlayPoint, originPoint, position: pos, overlayRect};\n      }\n    }\n\n    // If there are any positions where the overlay would fit with flexible dimensions, choose the\n    // one that has the greatest area available modified by the position's weight\n    if (flexibleFits.length) {\n      let bestFit: FlexibleFit | null = null;\n      let bestScore = -1;\n      for (const fit of flexibleFits) {\n        const score =\n          fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);\n        if (score > bestScore) {\n          bestScore = score;\n          bestFit = fit;\n        }\n      }\n\n      this._isPushed = false;\n      this._applyPosition(bestFit!.position, bestFit!.origin);\n      return;\n    }\n\n    // When none of the preferred positions fit within the viewport, take the position\n    // that went off-screen the least and attempt to push it on-screen.\n    if (this._canPush) {\n      // TODO(jelbourn): after pushing, the opening \"direction\" of the overlay might not make sense.\n      this._isPushed = true;\n      this._applyPosition(fallback!.position, fallback!.originPoint);\n      return;\n    }\n\n    // All options for getting the overlay within the viewport have been exhausted, so go with the\n    // position that went off-screen the least.\n    this._applyPosition(fallback!.position, fallback!.originPoint);\n  }\n\n  detach(): void {\n    this._clearPanelClasses();\n    this._lastPosition = null;\n    this._previousPushAmount = null;\n    this._resizeSubscription.unsubscribe();\n  }\n\n  /** Cleanup after the element gets destroyed. */\n  dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n\n    // We can't use `_resetBoundingBoxStyles` here, because it resets\n    // some properties to zero, rather than removing them.\n    if (this._boundingBox) {\n      extendStyles(this._boundingBox.style, {\n        top: '',\n        left: '',\n        right: '',\n        bottom: '',\n        height: '',\n        width: '',\n        alignItems: '',\n        justifyContent: '',\n      } as CSSStyleDeclaration);\n    }\n\n    if (this._pane) {\n      this._resetOverlayElementStyles();\n    }\n\n    if (this._overlayRef) {\n      this._overlayRef.hostElement.classList.remove(boundingBoxClass);\n    }\n\n    this.detach();\n    this._positionChanges.complete();\n    this._overlayRef = this._boundingBox = null!;\n    this._isDisposed = true;\n  }\n\n  /**\n   * This re-aligns the overlay element with the trigger in its last calculated position,\n   * even if a position higher in the \"preferred positions\" list would now fit. This\n   * allows one to re-align the panel without changing the orientation of the panel.\n   */\n  reapplyLastPosition(): void {\n    if (this._isDisposed || !this._platform.isBrowser) {\n      return;\n    }\n\n    const lastPosition = this._lastPosition;\n\n    if (lastPosition) {\n      this._originRect = this._getOriginRect();\n      this._overlayRect = this._pane.getBoundingClientRect();\n      this._viewportRect = this._getNarrowedViewportRect();\n      this._containerRect = this._getContainerRect();\n      this._applyPosition(\n        lastPosition,\n        this._getOriginPoint(this._originRect, this._containerRect, lastPosition),\n      );\n    } else {\n      this.apply();\n    }\n  }\n\n  /**\n   * Sets the list of Scrollable containers that host the origin element so that\n   * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n   * Scrollable must be an ancestor element of the strategy's origin element.\n   */\n  withScrollableContainers(scrollables: ScrollDispatcherTarget[]): this {\n    this._scrollables = scrollables;\n    return this;\n  }\n\n  /**\n   * Adds new preferred positions.\n   * @param positions List of positions options for this overlay.\n   */\n  withPositions(positions: ConnectedPosition[]): this {\n    this._preferredPositions = positions;\n\n    // If the last calculated position object isn't part of the positions anymore, clear\n    // it in order to avoid it being picked up if the consumer tries to re-apply.\n    if (positions.indexOf(this._lastPosition!) === -1) {\n      this._lastPosition = null;\n    }\n\n    this._validatePositions();\n\n    return this;\n  }\n\n  /**\n   * Sets a minimum distance the overlay may be positioned from the bottom edge of the viewport.\n   * @param margin Required margin between the overlay and the viewport.\n   * It can be a number to be applied to all directions, or an object to supply different values for each direction.\n   */\n  withViewportMargin(margin: ViewportMargin): this {\n    this._viewportMargin = margin;\n    return this;\n  }\n\n  /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\n  withFlexibleDimensions(flexibleDimensions = true): this {\n    this._hasFlexibleDimensions = flexibleDimensions;\n    return this;\n  }\n\n  /** Sets whether the overlay can grow after the initial open via flexible width/height. */\n  withGrowAfterOpen(growAfterOpen = true): this {\n    this._growAfterOpen = growAfterOpen;\n    return this;\n  }\n\n  /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\n  withPush(canPush = true): this {\n    this._canPush = canPush;\n    return this;\n  }\n\n  /**\n   * Sets whether the overlay's position should be locked in after it is positioned\n   * initially. When an overlay is locked in, it won't attempt to reposition itself\n   * when the position is re-applied (e.g. when the user scrolls away).\n   * @param isLocked Whether the overlay should locked in.\n   */\n  withLockedPosition(isLocked = true): this {\n    this._positionLocked = isLocked;\n    return this;\n  }\n\n  /**\n   * Sets the origin, relative to which to position the overlay.\n   * Using an element origin is useful for building components that need to be positioned\n   * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be\n   * used for cases like contextual menus which open relative to the user's pointer.\n   * @param origin Reference to the new origin.\n   */\n  setOrigin(origin: FlexibleConnectedPositionStrategyOrigin): this {\n    this._origin = origin;\n    return this;\n  }\n\n  /**\n   * Sets the default offset for the overlay's connection point on the x-axis.\n   * @param offset New offset in the X axis.\n   */\n  withDefaultOffsetX(offset: number): this {\n    this._offsetX = offset;\n    return this;\n  }\n\n  /**\n   * Sets the default offset for the overlay's connection point on the y-axis.\n   * @param offset New offset in the Y axis.\n   */\n  withDefaultOffsetY(offset: number): this {\n    this._offsetY = offset;\n    return this;\n  }\n\n  /**\n   * Configures that the position strategy should set a `transform-origin` on some elements\n   * inside the overlay, depending on the current position that is being applied. This is\n   * useful for the cases where the origin of an animation can change depending on the\n   * alignment of the overlay.\n   * @param selector CSS selector that will be used to find the target\n   *    elements onto which to set the transform origin.\n   */\n  withTransformOriginOn(selector: string): this {\n    this._transformOriginSelector = selector;\n    return this;\n  }\n\n  /**\n   * Determines where in the DOM the overlay will be rendered when popover mode is enabled.\n   * @param location Configures the location in the DOM. Supports the following values:\n   *  - `global` - The default which inserts the overlay inside the overlay container.\n   *  - `inline` - Inserts the overlay next to the trigger.\n   *  - {type: 'parent', element: element} - Inserts the overlay to a child of a custom parent\n   *  element.\n   */\n  withPopoverLocation(location: FlexibleOverlayPopoverLocation): this {\n    this._popoverLocation = location;\n    return this;\n  }\n\n  /** @docs-private */\n  getPopoverInsertionPoint(): Element | null | {type: 'parent'; element: Element} {\n    if (this._popoverLocation === 'global') {\n      return null;\n    } else if (this._popoverLocation !== 'inline') {\n      return this._popoverLocation;\n    }\n\n    if (this._origin instanceof ElementRef) {\n      return this._origin.nativeElement;\n    } else if (isElement(this._origin)) {\n      return this._origin;\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n   */\n  private _getOriginPoint(\n    originRect: Dimensions,\n    containerRect: Dimensions,\n    pos: ConnectedPosition,\n  ): Point {\n    let x: number;\n    if (pos.originX == 'center') {\n      // Note: when centering we should always use the `left`\n      // offset, otherwise the position will be wrong in RTL.\n      x = originRect.left + originRect.width / 2;\n    } else {\n      const startX = this._isRtl() ? originRect.right : originRect.left;\n      const endX = this._isRtl() ? originRect.left : originRect.right;\n      x = pos.originX == 'start' ? startX : endX;\n    }\n\n    // When zooming in Safari the container rectangle contains negative values for the position\n    // and we need to re-add them to the calculated coordinates.\n    if (containerRect.left < 0) {\n      x -= containerRect.left;\n    }\n\n    let y: number;\n    if (pos.originY == 'center') {\n      y = originRect.top + originRect.height / 2;\n    } else {\n      y = pos.originY == 'top' ? originRect.top : originRect.bottom;\n    }\n\n    // Normally the containerRect's top value would be zero, however when the overlay is attached to an input\n    // (e.g. in an autocomplete), mobile browsers will shift everything in order to put the input in the middle\n    // of the screen and to make space for the virtual keyboard. We need to account for this offset,\n    // otherwise our positioning will be thrown off.\n    // Additionally, when zooming in Safari this fixes the vertical position.\n    if (containerRect.top < 0) {\n      y -= containerRect.top;\n    }\n\n    return {x, y};\n  }\n\n  /**\n   * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\n   * origin point to which the overlay should be connected.\n   */\n  private _getOverlayPoint(\n    originPoint: Point,\n    overlayRect: Dimensions,\n    pos: ConnectedPosition,\n  ): Point {\n    // Calculate the (overlayStartX, overlayStartY), the start of the\n    // potential overlay position relative to the origin point.\n    let overlayStartX: number;\n    if (pos.overlayX == 'center') {\n      overlayStartX = -overlayRect.width / 2;\n    } else if (pos.overlayX === 'start') {\n      overlayStartX = this._isRtl() ? -overlayRect.width : 0;\n    } else {\n      overlayStartX = this._isRtl() ? 0 : -overlayRect.width;\n    }\n\n    let overlayStartY: number;\n    if (pos.overlayY == 'center') {\n      overlayStartY = -overlayRect.height / 2;\n    } else {\n      overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\n    }\n\n    // The (x, y) coordinates of the overlay.\n    return {\n      x: originPoint.x + overlayStartX,\n      y: originPoint.y + overlayStartY,\n    };\n  }\n\n  /** Gets how well an overlay at the given point will fit within the viewport. */\n  private _getOverlayFit(\n    point: Point,\n    rawOverlayRect: Dimensions,\n    viewport: Dimensions,\n    position: ConnectedPosition,\n  ): OverlayFit {\n    // Round the overlay rect when comparing against the\n    // viewport, because the viewport is always rounded.\n    const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n    let {x, y} = point;\n    let offsetX = this._getOffset(position, 'x');\n    let offsetY = this._getOffset(position, 'y');\n\n    // Account for the offsets since they could push the overlay out of the viewport.\n    if (offsetX) {\n      x += offsetX;\n    }\n\n    if (offsetY) {\n      y += offsetY;\n    }\n\n    // How much the overlay would overflow at this position, on each side.\n    let leftOverflow = 0 - x;\n    let rightOverflow = x + overlay.width - viewport.width;\n    let topOverflow = 0 - y;\n    let bottomOverflow = y + overlay.height - viewport.height;\n\n    // Visible parts of the element on each axis.\n    let visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);\n    let visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);\n    let visibleArea = visibleWidth * visibleHeight;\n\n    return {\n      visibleArea,\n      isCompletelyWithinViewport: overlay.width * overlay.height === visibleArea,\n      fitsInViewportVertically: visibleHeight === overlay.height,\n      fitsInViewportHorizontally: visibleWidth == overlay.width,\n    };\n  }\n\n  /**\n   * Whether the overlay can fit within the viewport when it may resize either its width or height.\n   * @param fit How well the overlay fits in the viewport at some position.\n   * @param point The (x, y) coordinates of the overlay at some position.\n   * @param viewport The geometry of the viewport.\n   */\n  private _canFitWithFlexibleDimensions(fit: OverlayFit, point: Point, viewport: Dimensions) {\n    if (this._hasFlexibleDimensions) {\n      const availableHeight = viewport.bottom - point.y;\n      const availableWidth = viewport.right - point.x;\n      const minHeight = getPixelValue(this._overlayRef.getConfig().minHeight);\n      const minWidth = getPixelValue(this._overlayRef.getConfig().minWidth);\n\n      const verticalFit =\n        fit.fitsInViewportVertically || (minHeight != null && minHeight <= availableHeight);\n      const horizontalFit =\n        fit.fitsInViewportHorizontally || (minWidth != null && minWidth <= availableWidth);\n\n      return verticalFit && horizontalFit;\n    }\n    return false;\n  }\n\n  /**\n   * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n   * the viewport, the top-left corner will be pushed on-screen (with overflow occurring on the\n   * right and bottom).\n   *\n   * @param start Starting point from which the overlay is pushed.\n   * @param rawOverlayRect Dimensions of the overlay.\n   * @param scrollPosition Current viewport scroll position.\n   * @returns The point at which to position the overlay after pushing. This is effectively a new\n   *     originPoint.\n   */\n  private _pushOverlayOnScreen(\n    start: Point,\n    rawOverlayRect: Dimensions,\n    scrollPosition: ViewportScrollPosition,\n  ): Point {\n    // If the position is locked and we've pushed the overlay already, reuse the previous push\n    // amount, rather than pushing it again. If we were to continue pushing, the element would\n    // remain in the viewport, which goes against the expectations when position locking is enabled.\n    if (this._previousPushAmount && this._positionLocked) {\n      return {\n        x: start.x + this._previousPushAmount.x,\n        y: start.y + this._previousPushAmount.y,\n      };\n    }\n\n    // Round the overlay rect when comparing against the\n    // viewport, because the viewport is always rounded.\n    const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n    const viewport = this._viewportRect;\n\n    // Determine how much the overlay goes outside the viewport on each\n    // side, which we'll use to decide which direction to push it.\n    const overflowRight = Math.max(start.x + overlay.width - viewport.width, 0);\n    const overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0);\n    const overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);\n    const overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0);\n\n    // Amount by which to push the overlay in each axis such that it remains on-screen.\n    let pushX = 0;\n    let pushY = 0;\n\n    // If the overlay fits completely within the bounds of the viewport, push it from whichever\n    // direction is goes off-screen. Otherwise, push the top-left corner such that its in the\n    // viewport and allow for the trailing end of the overlay to go out of bounds.\n    if (overlay.width <= viewport.width) {\n      pushX = overflowLeft || -overflowRight;\n    } else {\n      pushX =\n        start.x < this._getViewportMarginStart()\n          ? viewport.left - scrollPosition.left - start.x\n          : 0;\n    }\n\n    if (overlay.height <= viewport.height) {\n      pushY = overflowTop || -overflowBottom;\n    } else {\n      pushY =\n        start.y < this._getViewportMarginTop() ? viewport.top - scrollPosition.top - start.y : 0;\n    }\n\n    this._previousPushAmount = {x: pushX, y: pushY};\n\n    return {\n      x: start.x + pushX,\n      y: start.y + pushY,\n    };\n  }\n\n  /**\n   * Applies a computed position to the overlay and emits a position change.\n   * @param position The position preference\n   * @param originPoint The point on the origin element where the overlay is connected.\n   */\n  private _applyPosition(position: ConnectedPosition, originPoint: Point) {\n    this._setTransformOrigin(position);\n    this._setOverlayElementStyles(originPoint, position);\n    this._setBoundingBoxStyles(originPoint, position);\n\n    if (position.panelClass) {\n      this._addPanelClasses(position.panelClass);\n    }\n\n    // Notify that the position has been changed along with its change properties.\n    // We only emit if we've got any subscriptions, because the scroll visibility\n    // calculations can be somewhat expensive.\n    if (this._positionChanges.observers.length) {\n      const scrollVisibility = this._getScrollVisibility();\n\n      // We're recalculating on scroll, but we only want to emit if anything\n      // changed since downstream code might be hitting the `NgZone`.\n      if (\n        position !== this._lastPosition ||\n        !this._lastScrollVisibility ||\n        !compareScrollVisibility(this._lastScrollVisibility, scrollVisibility)\n      ) {\n        const changeEvent = new ConnectedOverlayPositionChange(position, scrollVisibility);\n        this._positionChanges.next(changeEvent);\n      }\n\n      this._lastScrollVisibility = scrollVisibility;\n    }\n\n    // Save the last connected position in case the position needs to be re-calculated.\n    this._lastPosition = position;\n    this._isInitialRender = false;\n  }\n\n  /** Sets the transform origin based on the configured selector and the passed-in position.  */\n  private _setTransformOrigin(position: ConnectedPosition) {\n    if (!this._transformOriginSelector) {\n      return;\n    }\n\n    const elements: NodeListOf<HTMLElement> = this._boundingBox!.querySelectorAll(\n      this._transformOriginSelector,\n    );\n    let xOrigin: 'left' | 'right' | 'center';\n    let yOrigin: 'top' | 'bottom' | 'center' = position.overlayY;\n\n    if (position.overlayX === 'center') {\n      xOrigin = 'center';\n    } else if (this._isRtl()) {\n      xOrigin = position.overlayX === 'start' ? 'right' : 'left';\n    } else {\n      xOrigin = position.overlayX === 'start' ? 'left' : 'right';\n    }\n\n    for (let i = 0; i < elements.length; i++) {\n      elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`;\n    }\n  }\n\n  /**\n   * Gets the position and size of the overlay's sizing container.\n   *\n   * This method does no measuring and applies no styles so that we can cheaply compute the\n   * bounds for all positions and choose the best fit based on these results.\n   */\n  private _calculateBoundingBoxRect(origin: Point, position: ConnectedPosition): BoundingBoxRect {\n    const viewport = this._viewportRect;\n    const isRtl = this._isRtl();\n    let height: number, top: number, bottom: number;\n\n    if (position.overlayY === 'top') {\n      // Overlay is opening \"downward\" and thus is bound by the bottom viewport edge.\n      top = origin.y;\n      height = viewport.height - top + this._getViewportMarginBottom();\n    } else if (position.overlayY === 'bottom') {\n      // Overlay is opening \"upward\" and thus is bound by the top viewport edge. We need to add\n      // the viewport margin back in, because the viewport rect is narrowed down to remove the\n      // margin, whereas the `origin` position is calculated based on its `DOMRect`.\n      bottom =\n        viewport.height - origin.y + this._getViewportMarginTop() + this._getViewportMarginBottom();\n      height = viewport.height - bottom + this._getViewportMarginTop();\n    } else {\n      // If neither top nor bottom, it means that the overlay is vertically centered on the\n      // origin point. Note that we want the position relative to the viewport, rather than\n      // the page, which is why we don't use something like `viewport.bottom - origin.y` and\n      // `origin.y - viewport.top`.\n      const smallestDistanceToViewportEdge = Math.min(\n        viewport.bottom - origin.y + viewport.top,\n        origin.y,\n      );\n\n      const previousHeight = this._lastBoundingBoxSize.height;\n\n      height = smallestDistanceToViewportEdge * 2;\n      top = origin.y - smallestDistanceToViewportEdge;\n\n      if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {\n        top = origin.y - previousHeight / 2;\n      }\n    }\n\n    // The overlay is opening 'right-ward' (the content flows to the right).\n    const isBoundedByRightViewportEdge =\n      (position.overlayX === 'start' && !isRtl) || (position.overlayX === 'end' && isRtl);\n\n    // The overlay is opening 'left-ward' (the content flows to the left).\n    const isBoundedByLeftViewportEdge =\n      (position.overlayX === 'end' && !isRtl) || (position.overlayX === 'start' && isRtl);\n\n    let width: number, left: number, right: number;\n\n    if (isBoundedByLeftViewportEdge) {\n      right =\n        viewport.width - origin.x + this._getViewportMarginStart() + this._getViewportMarginEnd();\n      width = origin.x - this._getViewportMarginStart();\n    } else if (isBoundedByRightViewportEdge) {\n      left = origin.x;\n      width = viewport.right - origin.x - this._getViewportMarginEnd();\n    } else {\n      // If neither start nor end, it means that the overlay is horizontally centered on the\n      // origin point. Note that we want the position relative to the viewport, rather than\n      // the page, which is why we don't use something like `viewport.right - origin.x` and\n      // `origin.x - viewport.left`.\n      const smallestDistanceToViewportEdge = Math.min(\n        viewport.right - origin.x + viewport.left,\n        origin.x,\n      );\n      const previousWidth = this._lastBoundingBoxSize.width;\n\n      width = smallestDistanceToViewportEdge * 2;\n      left = origin.x - smallestDistanceToViewportEdge;\n\n      if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {\n        left = origin.x - previousWidth / 2;\n      }\n    }\n\n    return {top: top!, left: left!, bottom: bottom!, right: right!, width, height};\n  }\n\n  /**\n   * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\n   * origin's connection point and stretches to the bounds of the viewport.\n   *\n   * @param origin The point on the origin element where the overlay is connected.\n   * @param position The position preference\n   */\n  private _setBoundingBoxStyles(origin: Point, position: ConnectedPosition): void {\n    const boundingBoxRect = this._calculateBoundingBoxRect(origin, position);\n\n    // It's weird if the overlay *grows* while scrolling, so we take the last size into account\n    // when applying a new size.\n    if (!this._isInitialRender && !this._growAfterOpen) {\n      boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height);\n      boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width);\n    }\n\n    const styles = {} as CSSStyleDeclaration;\n\n    if (this._hasExactPosition()) {\n      styles.top = styles.left = '0';\n      styles.bottom = styles.right = 'auto';\n      styles.maxHeight = styles.maxWidth = '';\n      styles.width = styles.height = '100%';\n    } else {\n      const maxHeight = this._overlayRef.getConfig().maxHeight;\n      const maxWidth = this._overlayRef.getConfig().maxWidth;\n\n      styles.width = coerceCssPixelValue(boundingBoxRect.width);\n      styles.height = coerceCssPixelValue(boundingBoxRect.height);\n      styles.top = coerceCssPixelValue(boundingBoxRect.top) || 'auto';\n      styles.bottom = coerceCssPixelValue(boundingBoxRect.bottom) || 'auto';\n      styles.left = coerceCssPixelValue(boundingBoxRect.left) || 'auto';\n      styles.right = coerceCssPixelValue(boundingBoxRect.right) || 'auto';\n\n      // Push the pane content towards the proper direction.\n      if (position.overlayX === 'center') {\n        styles.alignItems = 'center';\n      } else {\n        styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';\n      }\n\n      if (position.overlayY === 'center') {\n        styles.justifyContent = 'center';\n      } else {\n        styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';\n      }\n\n      if (maxHeight) {\n        styles.maxHeight = coerceCssPixelValue(maxHeight);\n      }\n\n      if (maxWidth) {\n        styles.maxWidth = coerceCssPixelValue(maxWidth);\n      }\n    }\n\n    this._lastBoundingBoxSize = boundingBoxRect;\n\n    extendStyles(this._boundingBox!.style, styles);\n  }\n\n  /** Resets the styles for the bounding box so that a new positioning can be computed. */\n  private _resetBoundingBoxStyles() {\n    extendStyles(this._boundingBox!.style, {\n      top: '0',\n      left: '0',\n      right: '0',\n      bottom: '0',\n      height: '',\n      width: '',\n      alignItems: '',\n      justifyContent: '',\n    } as CSSStyleDeclaration);\n  }\n\n  /** Resets the styles for the overlay pane so that a new positioning can be computed. */\n  private _resetOverlayElementStyles() {\n    extendStyles(this._pane.style, {\n      top: '',\n      left: '',\n      bottom: '',\n      right: '',\n      position: '',\n      transform: '',\n    } as CSSStyleDeclaration);\n  }\n\n  /** Sets positioning styles to the overlay element. */\n  private _setOverlayElementStyles(originPoint: Point, position: ConnectedPosition): void {\n    const styles = {} as CSSStyleDeclaration;\n    const hasExactPosition = this._hasExactPosition();\n    const hasFlexibleDimensions = this._hasFlexibleDimensions;\n    const config = this._overlayRef.getConfig();\n\n    if (hasExactPosition) {\n      const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n      extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition));\n      extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition));\n    } else {\n      styles.position = 'static';\n    }\n\n    // Use a transform to apply the offsets. We do this because the `center` positions rely on\n    // being in the normal flex flow and setting a `top` / `left` at all will completely throw\n    // off the position. We also can't use margins, because they won't have an effect in some\n    // cases where the element doesn't have anything to \"push off of\". Finally, this works\n    // better both with flexible and non-flexible positioning.\n    let transformString = '';\n    let offsetX = this._getOffset(position, 'x');\n    let offsetY = this._getOffset(position, 'y');\n\n    if (offsetX) {\n      transformString += `translateX(${offsetX}px) `;\n    }\n\n    if (offsetY) {\n      transformString += `translateY(${offsetY}px)`;\n    }\n\n    styles.transform = transformString.trim();\n\n    // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because\n    // we need these values to both be set to \"100%\" for the automatic flexible sizing to work.\n    // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint.\n    // Note that this doesn't apply when we have an exact position, in which case we do want to\n    // apply them because they'll be cleared from the bounding box.\n    if (config.maxHeight) {\n      if (hasExactPosition) {\n        styles.maxHeight = coerceCssPixelValue(config.maxHeight);\n      } else if (hasFlexibleDimensions) {\n        styles.maxHeight = '';\n      }\n    }\n\n    if (config.maxWidth) {\n      if (hasExactPosition) {\n        styles.maxWidth = coerceCssPixelValue(config.maxWidth);\n      } else if (hasFlexibleDimensions) {\n        styles.maxWidth = '';\n      }\n    }\n\n    extendStyles(this._pane.style, styles);\n  }\n\n  /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\n  private _getExactOverlayY(\n    position: ConnectedPosition,\n    originPoint: Point,\n    scrollPosition: ViewportScrollPosition,\n  ) {\n    // Reset any existing styles. This is necessary in case the\n    // preferred position has changed since the last `apply`.\n    let styles = {top: '', bottom: ''} as CSSStyleDeclaration;\n    let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n\n    if (this._isPushed) {\n      overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n    }\n\n    // We want to set either `top` or `bottom` based on whether the overlay wants to appear\n    // above or below the origin and the direction in which the element will expand.\n    if (position.overlayY === 'bottom') {\n      // When using `bottom`, we adjust the y position such that it is the distance\n      // from the bottom of the viewport rather than the top.\n      const documentHeight = this._document.documentElement!.clientHeight;\n      styles.bottom = `${documentHeight - (overlayPoint.y + this._overlayRect.height)}px`;\n    } else {\n      styles.top = coerceCssPixelValue(overlayPoint.y);\n    }\n\n    return styles;\n  }\n\n  /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\n  private _getExactOverlayX(\n    position: ConnectedPosition,\n    originPoint: Point,\n    scrollPosition: ViewportScrollPosition,\n  ) {\n    // Reset any existing styles. This is necessary in case the preferred position has\n    // changed since the last `apply`.\n    let styles = {left: '', right: ''} as CSSStyleDeclaration;\n    let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n\n    if (this._isPushed) {\n      overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n    }\n\n    // We want to set either `left` or `right` based on whether the overlay wants to appear \"before\"\n    // or \"after\" the origin, which determines the direction in which the element will expand.\n    // For the horizontal axis, the meaning of \"before\" and \"after\" change based on whether the\n    // page is in RTL or LTR.\n    let horizontalStyleProperty: 'left' | 'right';\n\n    if (this._isRtl()) {\n      horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';\n    } else {\n      horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';\n    }\n\n    // When we're setting `right`, we adjust the x position such that it is the distance\n    // from the right edge of the viewport rather than the left edge.\n    if (horizontalStyleProperty === 'right') {\n      const documentWidth = this._document.documentElement!.clientWidth;\n      styles.right = `${documentWidth - (overlayPoint.x + this._overlayRect.width)}px`;\n    } else {\n      styles.left = coerceCssPixelValue(overlayPoint.x);\n    }\n\n    return styles;\n  }\n\n  /**\n   * Gets the view properties of the trigger and overlay, including whether they are clipped\n   * or completely outside the view of any of the strategy's scrollables.\n   */\n  private _getScrollVisibility(): ScrollingVisibility {\n    // Note: needs fresh rects since the position could've changed.\n    const originBounds = this._getOriginRect();\n    const overlayBounds = this._pane.getBoundingClientRect();\n\n    // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers\n    // every time, we should be able to use the scrollTop of the containers if the size of those\n    // containers hasn't changed.\n    const scrollContainerBounds = this._scrollables.map(scrollable => {\n      return scrollable.getElementRef().nativeElement.getBoundingClientRect();\n    });\n\n    return {\n      isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),\n      isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),\n      isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),\n      isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds),\n    };\n  }\n\n  /** Subtracts the amount that an element is overflowing on an axis from its length. */\n  private _subtractOverflows(length: number, ...overflows: number[]): number {\n    return overflows.reduce((currentValue: number, currentOverflow: number) => {\n      return currentValue - Math.max(currentOverflow, 0);\n    }, length);\n  }\n\n  /** Narrows the given viewport rect by the current _viewportMargin. */\n  private _getNarrowedViewportRect(): Dimensions {\n    // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler,\n    // because we want to use the `clientWidth` and `clientHeight` as the base. The difference\n    // being that the client properties don't include the scrollbar, as opposed to `innerWidth`\n    // and `innerHeight` that do. This is necessary, because the overlay container uses\n    // 100% `width` and `height` which don't include the scrollbar either.\n    const width = this._document.documentElement!.clientWidth;\n    const height = this._document.documentElement!.clientHeight;\n    const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n\n    return {\n      top: scrollPosition.top + this._getViewportMarginTop(),\n      left: scrollPosition.left + this._getViewportMarginStart(),\n      right: scrollPosition.left + width - this._getViewportMarginEnd(),\n      bottom: scrollPosition.top + height - this._getViewportMarginBottom(),\n      width: width - this._getViewportMarginStart() - this._getViewportMarginEnd(),\n      height: height - this._getViewportMarginTop() - this._getViewportMarginBottom(),\n    };\n  }\n\n  /** Whether the we're dealing with an RTL context */\n  private _isRtl() {\n    return this._overlayRef.getDirection() === 'rtl';\n  }\n\n  /** Determines whether the overlay uses exact or flexible positioning. */\n  private _hasExactPosition() {\n    return !this._hasFlexibleDimensions || this._isPushed;\n  }\n\n  /** Retrieves the offset of a position along the x or y axis. */\n  private _getOffset(position: ConnectedPosition, axis: 'x' | 'y') {\n    if (axis === 'x') {\n      // We don't do something like `position['offset' + axis]` in\n      // order to avoid breaking minifiers that rename properties.\n      return position.offsetX == null ? this._offsetX : position.offsetX;\n    }\n\n    return position.offsetY == null ? this._offsetY : position.offsetY;\n  }\n\n  /** Validates that the current position match the expected values. */\n  private _validatePositions(): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._preferredPositions.length) {\n        throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');\n      }\n\n      // TODO(crisbeto): remove these once Angular's template type\n      // checking is advanced enough to catch these cases.\n      this._preferredPositions.forEach(pair => {\n        validateHorizontalPosition('originX', pair.originX);\n        validateVerticalPosition('originY', pair.originY);\n        validateHorizontalPosition('overlayX', pair.overlayX);\n        validateVerticalPosition('overlayY', pair.overlayY);\n      });\n    }\n  }\n\n  /** Adds a single CSS class or an array of classes on the overlay panel. */\n  private _addPanelClasses(cssClasses: string | string[]) {\n    if (this._pane) {\n      coerceArray(cssClasses).forEach(cssClass => {\n        if (cssClass !== '' && this._appliedPanelClasses.indexOf(cssClass) === -1) {\n          this._appliedPanelClasses.push(cssClass);\n          this._pane.classList.add(cssClass);\n        }\n      });\n    }\n  }\n\n  /** Clears the classes that the position strategy has applied from the overlay panel. */\n  private _clearPanelClasses() {\n    if (this._pane) {\n      this._appliedPanelClasses.forEach(cssClass => {\n        this._pane.classList.remove(cssClass);\n      });\n      this._appliedPanelClasses = [];\n    }\n  }\n\n  /**\n   * Returns either the _viewportMargin directly (if it is a number) or its 'start' value.\n   * @private\n   */\n  private _getViewportMarginStart(): number {\n    if (typeof this._viewportMargin === 'number') return this._viewportMargin;\n    return this._viewportMargin?.start ?? 0;\n  }\n\n  /**\n   * Returns either the _viewportMargin directly (if it is a number) or its 'end' value.\n   * @private\n   */\n  private _getViewportMarginEnd(): number {\n    if (typeof this._viewportMargin === 'number') return this._viewportMargin;\n    return this._viewportMargin?.end ?? 0;\n  }\n\n  /**\n   * Returns either the _viewportMargin directly (if it is a number) or its 'top' value.\n   * @private\n   */\n  private _getViewportMarginTop(): number {\n    if (typeof this._viewportMargin === 'number') return this._viewportMargin;\n    return this._viewportMargin?.top ?? 0;\n  }\n\n  /**\n   * Returns either the _viewportMargin directly (if it is a number) or its 'bottom' value.\n   * @private\n   */\n  private _getViewportMarginBottom(): number {\n    if (typeof this._viewportMargin === 'number') return this._viewportMargin;\n    return this._viewportMargin?.bottom ?? 0;\n  }\n\n  /** Returns the DOMRect of the current origin. */\n  private _getOriginRect(): Dimensions {\n    const origin = this._origin;\n\n    if (origin instanceof ElementRef) {\n      return origin.nativeElement.getBoundingClientRect();\n    }\n\n    // Check for Element so SVG elements are also supported.\n    if (origin instanceof Element) {\n      return origin.getBoundingClientRect();\n    }\n\n    const width = origin.width || 0;\n    const height = origin.height || 0;\n\n    // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\n    return {\n      top: origin.y,\n      bottom: origin.y + height,\n      left: origin.x,\n      right: origin.x + width,\n      height,\n      width,\n    };\n  }\n\n  /** Gets the dimensions of the overlay container. */\n  private _getContainerRect(): Dimensions {\n    // We have some CSS that hides the overlay container when it's empty. This can happen\n    // when a popover-based overlay is open and it hasn't been inserted into the overlay\n    // container. If that's the case, make the container temporarily visible so that we\n    // can measure it. This information is used to work around some issues in Safari.\n    const isInlinePopover =\n      this._overlayRef.getConfig().usePopover && this._popoverLocation !== 'global';\n    const element = this._overlayContainer.getContainerElement();\n\n    if (isInlinePopover) {\n      element.style.display = 'block';\n    }\n\n    const dimensions = element.getBoundingClientRect();\n\n    if (isInlinePopover) {\n      element.style.display = '';\n    }\n\n    return dimensions;\n  }\n}\n\n/** A simple (x, y) coordinate. */\ninterface Point {\n  x: number;\n  y: number;\n}\n\n/** Record of measurements for how an overlay (at a given position) fits into the viewport. */\ninterface OverlayFit {\n  /** Whether the overlay fits completely in the viewport. */\n  isCompletelyWithinViewport: boolean;\n\n  /** Whether the overlay fits in the viewport on the y-axis. */\n  fitsInViewportVertically: boolean;\n\n  /** Whether the overlay fits in the viewport on the x-axis. */\n  fitsInViewportHorizontally: boolean;\n\n  /** The total visible area (in px^2) of the overlay inside the viewport. */\n  visibleArea: number;\n}\n\n/** Record of the measurements determining whether an overlay will fit in a specific position. */\ninterface FallbackPosition {\n  position: ConnectedPosition;\n  originPoint: Point;\n  overlayPoint: Point;\n  overlayFit: OverlayFit;\n  overlayRect: Dimensions;\n}\n\n/** Position and size of the overlay sizing wrapper for a specific position. */\ninterface BoundingBoxRect {\n  top: number;\n  left: number;\n  bottom: number;\n  right: number;\n  height: number;\n  width: number;\n}\n\n/** Record of measures determining how well a given position will fit with flexible dimensions. */\ninterface FlexibleFit {\n  position: ConnectedPosition;\n  origin: Point;\n  overlayRect: Dimensions;\n  boundingBoxRect: BoundingBoxRect;\n}\n\n/** A connected position as specified by the user. */\nexport interface ConnectedPosition {\n  originX: 'start' | 'center' | 'end';\n  originY: 'top' | 'center' | 'bottom';\n\n  overlayX: 'start' | 'center' | 'end';\n  overlayY: 'top' | 'center' | 'bottom';\n\n  weight?: number;\n  offsetX?: number;\n  offsetY?: number;\n  panelClass?: string | string[];\n}\n\n/** Shallow-extends a stylesheet object with another stylesheet object. */\nfunction extendStyles(\n  destination: CSSStyleDeclaration,\n  source: CSSStyleDeclaration,\n): CSSStyleDeclaration {\n  for (let key in source) {\n    if (source.hasOwnProperty(key)) {\n      destination[key] = source[key];\n    }\n  }\n\n  return destination;\n}\n\n/**\n * Extracts the pixel value as a number from a value, if it's a number\n * or a CSS pixel string (e.g. `1337px`). Otherwise returns null.\n */\nfunction getPixelValue(input: number | string | null | undefined): number | null {\n  if (typeof input !== 'number' && input != null) {\n    const [value, units] = input.split(cssUnitPattern);\n    return !units || units === 'px' ? parseFloat(value) : null;\n  }\n\n  return input || null;\n}\n\n/**\n * Gets a version of an element's bounding `DOMRect` where all the values are rounded down to\n * the nearest pixel. This allows us to account for the cases where there may be sub-pixel\n * deviations in the `DOMRect` returned by the browser (e.g. when zoomed in with a percentage\n * size, see #21350).\n */\nfunction getRoundedBoundingClientRect(clientRect: Dimensions): Dimensions {\n  return {\n    top: Math.floor(clientRect.top),\n    right: Math.floor(clientRect.right),\n    bottom: Math.floor(clientRect.bottom),\n    left: Math.floor(clientRect.left),\n    width: Math.floor(clientRect.width),\n    height: Math.floor(clientRect.height),\n  };\n}\n\n/** Returns whether two `ScrollingVisibility` objects are identical. */\nfunction compareScrollVisibility(a: ScrollingVisibility, b: ScrollingVisibility): boolean {\n  if (a === b) {\n    return true;\n  }\n\n  return (\n    a.isOriginClipped === b.isOriginClipped &&\n    a.isOriginOutsideView === b.isOriginOutsideView &&\n    a.isOverlayClipped === b.isOverlayClipped &&\n    a.isOverlayOutsideView === b.isOverlayOutsideView\n  );\n}\n\nexport const STANDARD_DROPDOWN_BELOW_POSITIONS: ConnectedPosition[] = [\n  {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n  {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'},\n  {originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top'},\n  {originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom'},\n];\n\nexport const STANDARD_DROPDOWN_ADJACENT_POSITIONS: ConnectedPosition[] = [\n  {originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top'},\n  {originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom'},\n  {originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top'},\n  {originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom'},\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 {Injector} from '@angular/core';\nimport {OverlayRef} from '../overlay-ref';\nimport {PositionStrategy} from './position-strategy';\n\n/** Class to be added to the overlay pane wrapper. */\nconst wrapperClass = 'cdk-global-overlay-wrapper';\n\n/**\n * Creates a global position strategy.\n * @param injector Injector used to resolve dependencies for the strategy.\n */\nexport function createGlobalPositionStrategy(_injector: Injector): GlobalPositionStrategy {\n  return new GlobalPositionStrategy();\n}\n\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * explicit position relative to the browser's viewport. We use flexbox, instead of\n * transforms, in order to avoid issues with subpixel rendering which can cause the\n * element to become blurry.\n */\nexport class GlobalPositionStrategy implements PositionStrategy {\n  /** The overlay to which this strategy is attached. */\n  private _overlayRef!: OverlayRef;\n  private _cssPosition = 'static';\n  private _topOffset = '';\n  private _bottomOffset = '';\n  private _alignItems = '';\n  private _xPosition = '';\n  private _xOffset = '';\n  private _width = '';\n  private _height = '';\n  private _isDisposed = false;\n\n  attach(overlayRef: OverlayRef): void {\n    const config = overlayRef.getConfig();\n\n    this._overlayRef = overlayRef;\n\n    if (this._width && !config.width) {\n      overlayRef.updateSize({width: this._width});\n    }\n\n    if (this._height && !config.height) {\n      overlayRef.updateSize({height: this._height});\n    }\n\n    overlayRef.hostElement.classList.add(wrapperClass);\n    this._isDisposed = false;\n  }\n\n  /**\n   * Sets the top position of the overlay. Clears any previously set vertical position.\n   * @param value New top offset.\n   */\n  top(value: string = ''): this {\n    this._bottomOffset = '';\n    this._topOffset = value;\n    this._alignItems = 'flex-start';\n    return this;\n  }\n\n  /**\n   * Sets the left position of the overlay. Clears any previously set horizontal position.\n   * @param value New left offset.\n   */\n  left(value: string = ''): this {\n    this._xOffset = value;\n    this._xPosition = 'left';\n    return this;\n  }\n\n  /**\n   * Sets the bottom position of the overlay. Clears any previously set vertical position.\n   * @param value New bottom offset.\n   */\n  bottom(value: string = ''): this {\n    this._topOffset = '';\n    this._bottomOffset = value;\n    this._alignItems = 'flex-end';\n    return this;\n  }\n\n  /**\n   * Sets the right position of the overlay. Clears any previously set horizontal position.\n   * @param value New right offset.\n   */\n  right(value: string = ''): this {\n    this._xOffset = value;\n    this._xPosition = 'right';\n    return this;\n  }\n\n  /**\n   * Sets the overlay to the start of the viewport, depending on the overlay direction.\n   * This will be to the left in LTR layouts and to the right in RTL.\n   * @param offset Offset from the edge of the screen.\n   */\n  start(value: string = ''): this {\n    this._xOffset = value;\n    this._xPosition = 'start';\n    return this;\n  }\n\n  /**\n   * Sets the overlay to the end of the viewport, depending on the overlay direction.\n   * This will be to the right in LTR layouts and to the left in RTL.\n   * @param offset Offset from the edge of the screen.\n   */\n  end(value: string = ''): this {\n    this._xOffset = value;\n    this._xPosition = 'end';\n    return this;\n  }\n\n  /**\n   * Sets the overlay width and clears any previously set width.\n   * @param value New width for the overlay\n   * @deprecated Pass the `width` through the `OverlayConfig`.\n   * @breaking-change 8.0.0\n   */\n  width(value: string = ''): this {\n    if (this._overlayRef) {\n      this._overlayRef.updateSize({width: value});\n    } else {\n      this._width = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Sets the overlay height and clears any previously set height.\n   * @param value New height for the overlay\n   * @deprecated Pass the `height` through the `OverlayConfig`.\n   * @breaking-change 8.0.0\n   */\n  height(value: string = ''): this {\n    if (this._overlayRef) {\n      this._overlayRef.updateSize({height: value});\n    } else {\n      this._height = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Centers the overlay horizontally with an optional offset.\n   * Clears any previously set horizontal position.\n   *\n   * @param offset Overlay offset from the horizontal center.\n   */\n  centerHorizontally(offset: string = ''): this {\n    this.left(offset);\n    this._xPosition = 'center';\n    return this;\n  }\n\n  /**\n   * Centers the overlay vertically with an optional offset.\n   * Clears any previously set vertical position.\n   *\n   * @param offset Overlay offset from the vertical center.\n   */\n  centerVertically(offset: string = ''): this {\n    this.top(offset);\n    this._alignItems = 'center';\n    return this;\n  }\n\n  /**\n   * Apply the position to the element.\n   * @docs-private\n   */\n  apply(): void {\n    // Since the overlay ref applies the strategy asynchronously, it could\n    // have been disposed before it ends up being applied. If that is the\n    // case, we shouldn't do anything.\n    if (!this._overlayRef || !this._overlayRef.hasAttached()) {\n      return;\n    }\n\n    const styles = this._overlayRef.overlayElement.style;\n    const parentStyles = this._overlayRef.hostElement.style;\n    const config = this._overlayRef.getConfig();\n    const {width, height, maxWidth, maxHeight} = config;\n    const shouldBeFlushHorizontally =\n      (width === '100%' || width === '100vw') &&\n      (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');\n    const shouldBeFlushVertically =\n      (height === '100%' || height === '100vh') &&\n      (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');\n    const xPosition = this._xPosition;\n    const xOffset = this._xOffset;\n    const isRtl = this._overlayRef.getConfig().direction === 'rtl';\n    let marginLeft = '';\n    let marginRight = '';\n    let justifyContent = '';\n\n    if (shouldBeFlushHorizontally) {\n      justifyContent = 'flex-start';\n    } else if (xPosition === 'center') {\n      justifyContent = 'center';\n\n      if (isRtl) {\n        marginRight = xOffset;\n      } else {\n        marginLeft = xOffset;\n      }\n    } else if (isRtl) {\n      if (xPosition === 'left' || xPosition === 'end') {\n        justifyContent = 'flex-end';\n        marginLeft = xOffset;\n      } else if (xPosition === 'right' || xPosition === 'start') {\n        justifyContent = 'flex-start';\n        marginRight = xOffset;\n      }\n    } else if (xPosition === 'left' || xPosition === 'start') {\n      justifyContent = 'flex-start';\n      marginLeft = xOffset;\n    } else if (xPosition === 'right' || xPosition === 'end') {\n      justifyContent = 'flex-end';\n      marginRight = xOffset;\n    }\n\n    styles.position = this._cssPosition;\n    styles.marginLeft = shouldBeFlushHorizontally ? '0' : marginLeft;\n    styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;\n    styles.marginBottom = this._bottomOffset;\n    styles.marginRight = shouldBeFlushHorizontally ? '0' : marginRight;\n    parentStyles.justifyContent = justifyContent;\n    parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;\n  }\n\n  /**\n   * Cleans up the DOM changes from the position strategy.\n   * @docs-private\n   */\n  dispose(): void {\n    if (this._isDisposed || !this._overlayRef) {\n      return;\n    }\n\n    const styles = this._overlayRef.overlayElement.style;\n    const parent = this._overlayRef.hostElement;\n    const parentStyles = parent.style;\n\n    parent.classList.remove(wrapperClass);\n    parentStyles.justifyContent =\n      parentStyles.alignItems =\n      styles.marginTop =\n      styles.marginBottom =\n      styles.marginLeft =\n      styles.marginRight =\n      styles.position =\n        '';\n\n    this._overlayRef = null!;\n    this._isDisposed = true;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Service, Injector, inject} from '@angular/core';\nimport {\n  createFlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategyOrigin,\n} from './flexible-connected-position-strategy';\nimport {createGlobalPositionStrategy, GlobalPositionStrategy} from './global-position-strategy';\n\n/** Builder for overlay position strategy. */\n@Service()\nexport class OverlayPositionBuilder {\n  private _injector = inject(Injector);\n\n  /**\n   * Creates a global position strategy.\n   */\n  global(): GlobalPositionStrategy {\n    return createGlobalPositionStrategy(this._injector);\n  }\n\n  /**\n   * Creates a flexible position strategy.\n   * @param origin Origin relative to which to position the overlay.\n   */\n  flexibleConnectedTo(\n    origin: FlexibleConnectedPositionStrategyOrigin,\n  ): FlexibleConnectedPositionStrategy {\n    return createFlexibleConnectedPositionStrategy(this._injector, origin);\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 {Directionality} from '../bidi';\nimport {DomPortalOutlet} from '../portal';\nimport {Location} from '@angular/common';\nimport {\n  ApplicationRef,\n  Service,\n  Injector,\n  NgZone,\n  ANIMATION_MODULE_TYPE,\n  EnvironmentInjector,\n  inject,\n  RendererFactory2,\n  DOCUMENT,\n  Renderer2,\n  InjectionToken,\n} from '@angular/core';\nimport {_IdGenerator} from '../a11y';\nimport {_CdkPrivateStyleLoader} from '../private';\nimport {OverlayKeyboardDispatcher} from './dispatchers/overlay-keyboard-dispatcher';\nimport {OverlayOutsideClickDispatcher} from './dispatchers/overlay-outside-click-dispatcher';\nimport {OverlayConfig} from './overlay-config';\nimport {_CdkOverlayStyleLoader, OverlayContainer} from './overlay-container';\nimport {isElement, OverlayRef} from './overlay-ref';\nimport {OverlayPositionBuilder} from './position/overlay-position-builder';\nimport {ScrollStrategyOptions} from './scroll/index';\n\n/** Object used to configure the default options for overlays. */\nexport interface OverlayDefaultConfig {\n  /** Whether overlays should be rendered inside popovers by default. */\n  usePopover?: boolean;\n}\n\n/** Injection token used to configure the default options for CDK overlays. */\nexport const OVERLAY_DEFAULT_CONFIG = new InjectionToken<OverlayDefaultConfig>(\n  'OVERLAY_DEFAULT_CONFIG',\n);\n\n/**\n * Creates an overlay.\n * @param injector Injector to use when resolving the overlay's dependencies.\n * @param config Configuration applied to the overlay.\n * @returns Reference to the created overlay.\n */\nexport function createOverlayRef(injector: Injector, config?: OverlayConfig): OverlayRef {\n  // This is done in the overlay container as well, but we have it here\n  // since it's common to mock out the overlay container in tests.\n  injector.get(_CdkPrivateStyleLoader).load(_CdkOverlayStyleLoader);\n\n  const overlayContainer = injector.get(OverlayContainer);\n  const doc = injector.get(DOCUMENT);\n  const idGenerator = injector.get(_IdGenerator);\n  const appRef = injector.get(ApplicationRef);\n  const directionality = injector.get(Directionality);\n  const renderer =\n    injector.get(Renderer2, null, {optional: true}) ||\n    injector.get(RendererFactory2).createRenderer(null, null);\n\n  const overlayConfig = new OverlayConfig(config);\n  const defaultUsePopover =\n    injector.get(OVERLAY_DEFAULT_CONFIG, null, {optional: true})?.usePopover ?? true;\n\n  overlayConfig.direction = overlayConfig.direction || directionality.value;\n\n  // `document.body` can be null during page navigation or unload cycles per the WHATWG spec\n  // (https://html.spec.whatwg.org/multipage/dom.html#dom-document-body), even though TypeScript\n  // types it as non-nullable. Guard against it to avoid \"Cannot use 'in' operator ... in null\".\n  if (!doc.body || !('showPopover' in doc.body)) {\n    overlayConfig.usePopover = false;\n  } else {\n    overlayConfig.usePopover = config?.usePopover ?? defaultUsePopover;\n  }\n\n  const pane = doc.createElement('div');\n  const host = doc.createElement('div');\n  pane.id = idGenerator.getId('cdk-overlay-');\n  pane.classList.add('cdk-overlay-pane');\n  host.appendChild(pane);\n\n  if (overlayConfig.usePopover) {\n    host.setAttribute('popover', 'manual');\n    host.classList.add('cdk-overlay-popover');\n  }\n\n  const customInsertionPoint = overlayConfig.usePopover\n    ? overlayConfig.positionStrategy?.getPopoverInsertionPoint?.()\n    : null;\n\n  if (isElement(customInsertionPoint)) {\n    customInsertionPoint.after(host);\n  } else if (customInsertionPoint?.type === 'parent') {\n    customInsertionPoint.element.appendChild(host);\n  } else {\n    overlayContainer.getContainerElement().appendChild(host);\n  }\n\n  return new OverlayRef(\n    new DomPortalOutlet(pane, appRef, injector),\n    host,\n    pane,\n    overlayConfig,\n    injector.get(NgZone),\n    injector.get(OverlayKeyboardDispatcher),\n    doc,\n    injector.get(Location),\n    injector.get(OverlayOutsideClickDispatcher),\n    config?.disableAnimations ??\n      injector.get(ANIMATION_MODULE_TYPE, null, {optional: true}) === 'NoopAnimations',\n    injector.get(EnvironmentInjector),\n    renderer,\n  );\n}\n\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.\n */\n@Service()\nexport class Overlay {\n  scrollStrategies = inject(ScrollStrategyOptions);\n  private _positionBuilder = inject(OverlayPositionBuilder);\n  private _injector = inject(Injector);\n\n  /**\n   * Creates an overlay.\n   * @param config Configuration applied to the overlay.\n   * @returns Reference to the created overlay.\n   */\n  create(config?: OverlayConfig): OverlayRef {\n    return createOverlayRef(this._injector, config);\n  }\n\n  /**\n   * Gets a position builder that can be used, via fluent API,\n   * to construct and configure a position strategy.\n   * @returns An overlay position builder.\n   */\n  position(): OverlayPositionBuilder {\n    return this._positionBuilder;\n  }\n}\n","/**\n * @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 {Direction, Directionality} from '../bidi';\nimport {ESCAPE, hasModifierKey} from '../keycodes';\nimport {TemplatePortal} from '../portal';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  InjectionToken,\n  Injector,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  ViewContainerRef,\n  booleanAttribute,\n  inject,\n} from '@angular/core';\nimport {_getEventTarget} from '../platform';\nimport {Subscription} from 'rxjs';\nimport {takeWhile} from 'rxjs/operators';\nimport {createOverlayRef, OVERLAY_DEFAULT_CONFIG} from './overlay';\nimport {OverlayConfig} from './overlay-config';\nimport {OverlayRef} from './overlay-ref';\nimport {ConnectedOverlayPositionChange, ViewportMargin} from './position/connected-position';\nimport {\n  ConnectedPosition,\n  createFlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategy,\n  FlexibleConnectedPositionStrategyOrigin,\n  FlexibleOverlayPopoverLocation,\n} from './position/flexible-connected-position-strategy';\nimport {createRepositionScrollStrategy, ScrollStrategy} from './scroll/index';\n\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\nconst defaultPositionList: ConnectedPosition[] = [\n  {\n    originX: 'start',\n    originY: 'bottom',\n    overlayX: 'start',\n    overlayY: 'top',\n  },\n  {\n    originX: 'start',\n    originY: 'top',\n    overlayX: 'start',\n    overlayY: 'bottom',\n  },\n  {\n    originX: 'end',\n    originY: 'top',\n    overlayX: 'end',\n    overlayY: 'bottom',\n  },\n  {\n    originX: 'end',\n    originY: 'bottom',\n    overlayX: 'end',\n    overlayY: 'top',\n  },\n];\n\n/** Injection token that determines the scroll handling while the connected overlay is open. */\nexport const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'cdk-connected-overlay-scroll-strategy',\n  {\n    providedIn: 'root',\n    factory: () => {\n      const injector = inject(Injector);\n      return () => createRepositionScrollStrategy(injector);\n    },\n  },\n);\n\n/**\n * Directive applied to an element to make it usable as an origin for an Overlay using a\n * ConnectedPositionStrategy.\n */\n@Directive({\n  selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\n  exportAs: 'cdkOverlayOrigin',\n})\nexport class CdkOverlayOrigin {\n  elementRef = inject(ElementRef);\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for the `CdkConnectedOverlay` directive.\n */\nexport const CDK_CONNECTED_OVERLAY_DEFAULT_CONFIG = new InjectionToken<CdkConnectedOverlayConfig>(\n  'cdk-connected-overlay-default-config',\n);\n\n/** Object used to configure the `CdkConnectedOverlay` directive. */\nexport interface CdkConnectedOverlayConfig {\n  origin?: CdkOverlayOrigin | FlexibleConnectedPositionStrategyOrigin;\n  positions?: ConnectedPosition[];\n  positionStrategy?: FlexibleConnectedPositionStrategy;\n  offsetX?: number;\n  offsetY?: number;\n  width?: number | string;\n  height?: number | string;\n  minWidth?: number | string;\n  minHeight?: number | string;\n  backdropClass?: string | string[];\n  panelClass?: string | string[];\n  viewportMargin?: ViewportMargin;\n  scrollStrategy?: ScrollStrategy;\n  disableClose?: boolean;\n  transformOriginSelector?: string;\n  hasBackdrop?: boolean;\n  lockPosition?: boolean;\n  flexibleDimensions?: boolean;\n  growAfterOpen?: boolean;\n  push?: boolean;\n  disposeOnNavigation?: boolean;\n  usePopover?: FlexibleOverlayPopoverLocation | null;\n  matchWidth?: boolean;\n}\n\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\n@Directive({\n  selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\n  exportAs: 'cdkConnectedOverlay',\n})\nexport class CdkConnectedOverlay implements OnDestroy, OnChanges {\n  private _dir = inject(Directionality, {optional: true});\n  private _injector = inject(Injector);\n\n  private _overlayRef: OverlayRef | undefined;\n  private _templatePortal: TemplatePortal;\n  private _backdropSubscription = Subscription.EMPTY;\n  private _attachSubscription = Subscription.EMPTY;\n  private _detachSubscription = Subscription.EMPTY;\n  private _positionSubscription = Subscription.EMPTY;\n  private _offsetX: number | undefined;\n  private _offsetY: number | undefined;\n  private _position: FlexibleConnectedPositionStrategy | undefined;\n  private _scrollStrategyFactory = inject(CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY);\n  private _ngZone = inject(NgZone);\n\n  /** Origin for the connected overlay. */\n  @Input('cdkConnectedOverlayOrigin')\n  origin!: CdkOverlayOrigin | FlexibleConnectedPositionStrategyOrigin;\n\n  /** Registered connected position pairs. */\n  @Input('cdkConnectedOverlayPositions') positions!: ConnectedPosition[];\n\n  /**\n   * This input overrides the positions input if specified. It lets users pass\n   * in arbitrary positioning strategies.\n   */\n  @Input('cdkConnectedOverlayPositionStrategy')\n  positionStrategy!: FlexibleConnectedPositionStrategy;\n\n  /** The offset in pixels for the overlay connection point on the x-axis */\n  @Input('cdkConnectedOverlayOffsetX')\n  get offsetX(): number {\n    return this._offsetX!;\n  }\n  set offsetX(offsetX: number) {\n    this._offsetX = offsetX;\n\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n    }\n  }\n\n  /** The offset in pixels for the overlay connection point on the y-axis */\n  @Input('cdkConnectedOverlayOffsetY')\n  get offsetY() {\n    return this._offsetY!;\n  }\n  set offsetY(offsetY: number) {\n    this._offsetY = offsetY;\n\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n    }\n  }\n\n  /** The width of the overlay panel. */\n  @Input('cdkConnectedOverlayWidth') width!: number | string;\n\n  /** The height of the overlay panel. */\n  @Input('cdkConnectedOverlayHeight') height!: number | string;\n\n  /** The min width of the overlay panel. */\n  @Input('cdkConnectedOverlayMinWidth') minWidth!: number | string;\n\n  /** The min height of the overlay panel. */\n  @Input('cdkConnectedOverlayMinHeight') minHeight!: number | string;\n\n  /** The custom class to be set on the backdrop element. */\n  @Input('cdkConnectedOverlayBackdropClass') backdropClass!: string | string[];\n\n  /** The custom class to add to the overlay pane element. */\n  @Input('cdkConnectedOverlayPanelClass') panelClass!: string | string[];\n\n  /** Margin between the overlay and the viewport edges. */\n  @Input('cdkConnectedOverlayViewportMargin') viewportMargin: ViewportMargin = 0;\n\n  /** Strategy to be used when handling scroll events while the overlay is open. */\n  @Input('cdkConnectedOverlayScrollStrategy') scrollStrategy: ScrollStrategy;\n\n  /** Whether the overlay is open. */\n  @Input('cdkConnectedOverlayOpen') open: boolean = false;\n\n  /** Whether the overlay can be closed by user interaction. */\n  @Input('cdkConnectedOverlayDisableClose') disableClose: boolean = false;\n\n  /** CSS selector which to set the transform origin. */\n  @Input('cdkConnectedOverlayTransformOriginOn') transformOriginSelector!: string;\n\n  /** Whether or not the overlay should attach a backdrop. */\n  @Input({alias: 'cdkConnectedOverlayHasBackdrop', transform: booleanAttribute})\n  hasBackdrop: boolean = false;\n\n  /** Whether or not the overlay should be locked when scrolling. */\n  @Input({alias: 'cdkConnectedOverlayLockPosition', transform: booleanAttribute})\n  lockPosition: boolean = false;\n\n  /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n  @Input({alias: 'cdkConnectedOverlayFlexibleDimensions', transform: booleanAttribute})\n  flexibleDimensions: boolean = false;\n\n  /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n  @Input({alias: 'cdkConnectedOverlayGrowAfterOpen', transform: booleanAttribute})\n  growAfterOpen: boolean = false;\n\n  /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n  @Input({alias: 'cdkConnectedOverlayPush', transform: booleanAttribute}) push: boolean = false;\n\n  /** Whether the overlay should be disposed of when the user goes backwards/forwards in history. */\n  @Input({alias: 'cdkConnectedOverlayDisposeOnNavigation', transform: booleanAttribute})\n  disposeOnNavigation: boolean = false;\n\n  /** Whether the connected overlay should be rendered inside a popover element or the overlay container. */\n  @Input({alias: 'cdkConnectedOverlayUsePopover'})\n  usePopover: FlexibleOverlayPopoverLocation | null;\n\n  /** Whether the overlay should match the trigger's width. */\n  @Input({alias: 'cdkConnectedOverlayMatchWidth', transform: booleanAttribute})\n  matchWidth: boolean = false;\n\n  /** Shorthand for setting multiple overlay options at once. */\n  @Input('cdkConnectedOverlay')\n  set _config(value: string | CdkConnectedOverlayConfig) {\n    if (typeof value !== 'string') {\n      this._assignConfig(value);\n    }\n  }\n\n  /** Event emitted when the backdrop is clicked. */\n  @Output() readonly backdropClick = new EventEmitter<MouseEvent>();\n\n  /** Event emitted when the position has changed. */\n  @Output() readonly positionChange = new EventEmitter<ConnectedOverlayPositionChange>();\n\n  /** Event emitted when the overlay has been attached. */\n  @Output() readonly attach = new EventEmitter<void>();\n\n  /** Event emitted when the overlay has been detached. */\n  @Output() readonly detach = new EventEmitter<void>();\n\n  /** Emits when there are keyboard events that are targeted at the overlay. */\n  @Output() readonly overlayKeydown = new EventEmitter<KeyboardEvent>();\n\n  /** Emits when there are mouse outside click events that are targeted at the overlay. */\n  @Output() readonly overlayOutsideClick = new EventEmitter<MouseEvent>();\n\n  // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n\n  constructor() {\n    const templateRef = inject<TemplateRef<any>>(TemplateRef);\n    const viewContainerRef = inject(ViewContainerRef);\n    const defaultConfig = inject(CDK_CONNECTED_OVERLAY_DEFAULT_CONFIG, {optional: true});\n    const globalConfig = inject(OVERLAY_DEFAULT_CONFIG, {optional: true});\n\n    this.usePopover = globalConfig?.usePopover === false ? null : 'global';\n    this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n    this.scrollStrategy = this._scrollStrategyFactory();\n\n    if (defaultConfig) {\n      this._assignConfig(defaultConfig);\n    }\n  }\n\n  /** The associated overlay reference. */\n  get overlayRef(): OverlayRef {\n    return this._overlayRef!;\n  }\n\n  /** The element's layout direction. */\n  get dir(): Direction {\n    return this._dir ? this._dir.value : 'ltr';\n  }\n\n  ngOnDestroy() {\n    this._attachSubscription.unsubscribe();\n    this._detachSubscription.unsubscribe();\n    this._backdropSubscription.unsubscribe();\n    this._positionSubscription.unsubscribe();\n    this._overlayRef?.dispose();\n  }\n\n  ngOnChanges(changes: SimpleChanges<this>) {\n    if (this._position) {\n      this._updatePositionStrategy(this._position);\n      this._overlayRef?.updateSize({\n        width: this._getWidth(),\n        minWidth: this.minWidth,\n        height: this.height,\n        minHeight: this.minHeight,\n      });\n\n      if (changes['origin'] && this.open) {\n        this._position.apply();\n      }\n    }\n\n    if (changes['open']) {\n      this.open ? this.attachOverlay() : this.detachOverlay();\n    }\n  }\n\n  /** Creates an overlay */\n  private _createOverlay() {\n    if (!this.positions || !this.positions.length) {\n      this.positions = defaultPositionList;\n    }\n\n    const overlayRef = (this._overlayRef = createOverlayRef(this._injector, this._buildConfig()));\n    this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit());\n    this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit());\n    overlayRef.keydownEvents().subscribe((event: KeyboardEvent) => {\n      this.overlayKeydown.next(event);\n\n      if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n        event.preventDefault();\n        this.detachOverlay();\n      }\n    });\n\n    this._overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n      const origin = this._getOriginElement();\n      const target = _getEventTarget(event) as Element | null;\n\n      if (!origin || (origin !== target && !origin.contains(target))) {\n        this.overlayOutsideClick.next(event);\n      }\n    });\n  }\n\n  /** Builds the overlay config based on the directive's inputs */\n  private _buildConfig(): OverlayConfig {\n    const positionStrategy = (this._position =\n      this.positionStrategy || this._createPositionStrategy());\n    const overlayConfig = new OverlayConfig({\n      direction: this._dir || 'ltr',\n      positionStrategy,\n      scrollStrategy: this.scrollStrategy,\n      hasBackdrop: this.hasBackdrop,\n      disposeOnNavigation: this.disposeOnNavigation,\n      usePopover: !!this.usePopover,\n    });\n\n    if (this.height || this.height === 0) {\n      overlayConfig.height = this.height;\n    }\n\n    if (this.minWidth || this.minWidth === 0) {\n      overlayConfig.minWidth = this.minWidth;\n    }\n\n    if (this.minHeight || this.minHeight === 0) {\n      overlayConfig.minHeight = this.minHeight;\n    }\n\n    if (this.backdropClass) {\n      overlayConfig.backdropClass = this.backdropClass;\n    }\n\n    if (this.panelClass) {\n      overlayConfig.panelClass = this.panelClass;\n    }\n\n    return overlayConfig;\n  }\n\n  /** Updates the state of a position strategy, based on the values of the directive inputs. */\n  private _updatePositionStrategy(positionStrategy: FlexibleConnectedPositionStrategy) {\n    const positions: ConnectedPosition[] = this.positions.map(currentPosition => ({\n      originX: currentPosition.originX,\n      originY: currentPosition.originY,\n      overlayX: currentPosition.overlayX,\n      overlayY: currentPosition.overlayY,\n      offsetX: currentPosition.offsetX || this.offsetX,\n      offsetY: currentPosition.offsetY || this.offsetY,\n      panelClass: currentPosition.panelClass || undefined,\n    }));\n\n    return positionStrategy\n      .setOrigin(this._getOrigin())\n      .withPositions(positions)\n      .withFlexibleDimensions(this.flexibleDimensions)\n      .withPush(this.push)\n      .withGrowAfterOpen(this.growAfterOpen)\n      .withViewportMargin(this.viewportMargin)\n      .withLockedPosition(this.lockPosition)\n      .withTransformOriginOn(this.transformOriginSelector)\n      .withPopoverLocation(this.usePopover === null ? 'global' : this.usePopover);\n  }\n\n  /** Returns the position strategy of the overlay to be set on the overlay config */\n  private _createPositionStrategy(): FlexibleConnectedPositionStrategy {\n    const strategy = createFlexibleConnectedPositionStrategy(this._injector, this._getOrigin());\n    this._updatePositionStrategy(strategy);\n    return strategy;\n  }\n\n  private _getOrigin(): FlexibleConnectedPositionStrategyOrigin {\n    if (this.origin instanceof CdkOverlayOrigin) {\n      return this.origin.elementRef;\n    } else {\n      return this.origin;\n    }\n  }\n\n  private _getOriginElement(): Element | null {\n    if (this.origin instanceof CdkOverlayOrigin) {\n      return this.origin.elementRef.nativeElement;\n    }\n\n    if (this.origin instanceof ElementRef) {\n      return this.origin.nativeElement;\n    }\n\n    if (typeof Element !== 'undefined' && this.origin instanceof Element) {\n      return this.origin;\n    }\n\n    return null;\n  }\n\n  private _getWidth() {\n    if (this.width) {\n      return this.width;\n    }\n\n    // Null check `getBoundingClientRect` in case this is called during SSR.\n    return this.matchWidth ? this._getOriginElement()?.getBoundingClientRect?.().width : undefined;\n  }\n\n  /** Attaches the overlay. */\n  attachOverlay() {\n    if (!this._overlayRef) {\n      this._createOverlay();\n    }\n\n    const ref = this._overlayRef!;\n\n    // Update the overlay size, in case the directive's inputs have changed\n    ref.getConfig().hasBackdrop = this.hasBackdrop;\n    ref.updateSize({width: this._getWidth()});\n\n    if (!ref.hasAttached()) {\n      ref.attach(this._templatePortal);\n    }\n\n    if (this.hasBackdrop) {\n      this._backdropSubscription = ref\n        .backdropClick()\n        .subscribe(event => this.backdropClick.emit(event));\n    } else {\n      this._backdropSubscription.unsubscribe();\n    }\n\n    this._positionSubscription.unsubscribe();\n\n    // Only subscribe to `positionChanges` if requested, because putting\n    // together all the information for it can be expensive.\n    if (this.positionChange.observers.length > 0) {\n      this._positionSubscription = this._position!.positionChanges.pipe(\n        takeWhile(() => this.positionChange.observers.length > 0),\n      ).subscribe(position => {\n        this._ngZone.run(() => this.positionChange.emit(position));\n\n        if (this.positionChange.observers.length === 0) {\n          this._positionSubscription.unsubscribe();\n        }\n      });\n    }\n\n    this.open = true;\n  }\n\n  /** Detaches the overlay. */\n  detachOverlay() {\n    this._overlayRef?.detach();\n    this._backdropSubscription.unsubscribe();\n    this._positionSubscription.unsubscribe();\n    this.open = false;\n  }\n\n  private _assignConfig(config: CdkConnectedOverlayConfig) {\n    this.origin = config.origin ?? this.origin;\n    this.positions = config.positions ?? this.positions;\n    this.positionStrategy = config.positionStrategy ?? this.positionStrategy;\n    this.offsetX = config.offsetX ?? this.offsetX;\n    this.offsetY = config.offsetY ?? this.offsetY;\n    this.width = config.width ?? this.width;\n    this.height = config.height ?? this.height;\n    this.minWidth = config.minWidth ?? this.minWidth;\n    this.minHeight = config.minHeight ?? this.minHeight;\n    this.backdropClass = config.backdropClass ?? this.backdropClass;\n    this.panelClass = config.panelClass ?? this.panelClass;\n    this.viewportMargin = config.viewportMargin ?? this.viewportMargin;\n    this.scrollStrategy = config.scrollStrategy ?? this.scrollStrategy;\n    this.disableClose = config.disableClose ?? this.disableClose;\n    this.transformOriginSelector = config.transformOriginSelector ?? this.transformOriginSelector;\n    this.hasBackdrop = config.hasBackdrop ?? this.hasBackdrop;\n    this.lockPosition = config.lockPosition ?? this.lockPosition;\n    this.flexibleDimensions = config.flexibleDimensions ?? this.flexibleDimensions;\n    this.growAfterOpen = config.growAfterOpen ?? this.growAfterOpen;\n    this.push = config.push ?? this.push;\n    this.disposeOnNavigation = config.disposeOnNavigation ?? this.disposeOnNavigation;\n    this.usePopover = config.usePopover ?? this.usePopover;\n    this.matchWidth = config.matchWidth ?? this.matchWidth;\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 {BidiModule} from '../bidi';\nimport {PortalModule} from '../portal';\nimport {ScrollingModule} from '../scrolling';\nimport {NgModule} from '@angular/core';\nimport {Overlay} from './overlay';\nimport {CdkConnectedOverlay, CdkOverlayOrigin} from './overlay-directives';\n\n@NgModule({\n  imports: [BidiModule, PortalModule, ScrollingModule, CdkConnectedOverlay, CdkOverlayOrigin],\n  exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule],\n  providers: [Overlay],\n})\nexport class OverlayModule {}\n\n// Re-export needed by the Angular compiler.\n// See: https://github.com/angular/components/issues/30663.\n// Note: These exports need to be stable and shouldn't be renamed unnecessarily because\n// consuming libraries might have references to them in their own partial compilation output.\nexport {\n  CdkScrollableModule as ɵɵCdkScrollableModule,\n  CdkFixedSizeVirtualScroll as ɵɵCdkFixedSizeVirtualScroll,\n  CdkVirtualForOf as ɵɵCdkVirtualForOf,\n  CdkVirtualScrollViewport as ɵɵCdkVirtualScrollViewport,\n  CdkVirtualScrollableWindow as ɵɵCdkVirtualScrollableWindow,\n  CdkVirtualScrollableElement as ɵɵCdkVirtualScrollableElement,\n} from '../scrolling';\nexport {Dir as ɵɵDir} from '../bidi';\n"],"names":[],"mappings":"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"}