{"version":3,"file":"1735.79342e0adef8c0c4.js","mappings":"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","names":["dueTime","intervalOrScheduler","scheduler","asyncScheduler","intervalDuration","isScheduler","Observable","subscriber","due","isValidDate","now","n","schedule","closed","next","this","undefined","complete","duration","durationSelector","operate","source","hasValue","lastValue","durationSubscriber","isComplete","endDuration","unsubscribe","value","cleanupDuration","subscribe","createOperatorSubscriber","innerFrom","audit","timer","resolved","nextHandle","activeHandles","handle","Immediate","setImmediate","cb","Promise","resolve","then","findAndClearHandle","clearImmediate","immediateProvider","args","delegate","asapScheduler","AsyncScheduler","flush","action","_active","flushId","_scheduled","actions","error","shift","execute","state","delay","id","AsyncAction","constructor","work","super","requestAsyncId","push","bind","recycleAsyncId","_a","length","scrollBehaviorSupported","supportsScrollBehavior","_viewportRuler","document","_previousHTMLStyles","top","left","_isEnabled","_document","attach","enable","_canBeEnabled","root","documentElement","_previousScrollPosition","getViewportScrollPosition","style","coerceCssPixelValue","classList","add","disable","html","htmlStyle","bodyStyle","body","previousHtmlScrollBehavior","scrollBehavior","previousBodyScrollBehavior","remove","window","scroll","contains","viewport","getViewportSize","scrollHeight","height","scrollWidth","width","_scrollDispatcher","_ngZone","_config","_scrollSubscription","_detach","_overlayRef","hasAttached","run","detach","overlayRef","stream","scrolled","threshold","_initialScrollPosition","scrollPosition","Math","abs","updatePosition","element","scrollContainers","some","containerBounds","bottom","right","outsideRight","scrollContainerRect","clippedRight","scrollThrottle","autoClose","overlayRect","overlayElement","getBoundingClientRect","isElementScrolledOutsideView","ScrollStrategyOptions","noop","NoopScrollStrategy","close","config","CloseScrollStrategy","block","BlockScrollStrategy","reposition","RepositionScrollStrategy","ɵfac","i0","i1","DOCUMENT","ɵprov","factory","scrollStrategy","panelClass","hasBackdrop","backdropClass","disposeOnNavigation","configKeys","Object","keys","key","connectionPair","scrollableViewProperties","_portalOutlet","_host","_pane","_keyboardDispatcher","_location","_outsideClickDispatcher","_backdropElement","_backdropClick","Subject","_attachments","_detachments","_locationChanges","Subscription","_backdropClickHandler","event","_backdropTransitionendHandler","_disposeBackdrop","target","_keydownEvents","_outsidePointerEvents","_scrollStrategy","_positionStrategy","positionStrategy","backdropElement","hostElement","portal","parentElement","_previousHostParent","appendChild","attachResult","_updateStackingOrder","_updateElementSize","_updateElementDirection","onStable","pipe","take","_togglePointerEvents","_attachBackdrop","_toggleClasses","dispose","detachBackdrop","detachmentResult","_detachContentWhenStable","isAttached","_disposeScrollStrategy","backdropClick","attachments","detachments","keydownEvents","outsidePointerEvents","getConfig","apply","updatePositionStrategy","strategy","updateSize","sizeConfig","assign","setDirection","dir","direction","addPanelClass","classes","removePanelClass","getDirection","updateScrollStrategy","setAttribute","minWidth","minHeight","maxWidth","maxHeight","enablePointer","pointerEvents","showingClass","createElement","insertBefore","addEventListener","requestAnimationFrame","runOutsideAngular","nextSibling","parentNode","backdropToDetach","_backdropTimeout","setTimeout","cssClasses","isAdd","coerceArray","filter","c","subscription","takeUntil","merge","children","backdrop","removeEventListener","clearTimeout","OverlayContainer","_platform","ngOnDestroy","_containerElement","getContainerElement","_createContainer","containerClass","isBrowser","_isTestEnvironment","oppositePlatformContainers","querySelectorAll","i","container","i1$1","boundingBoxClass","cssUnitPattern","connectedTo","_overlayContainer","_lastBoundingBoxSize","_isPushed","_canPush","_growAfterOpen","_hasFlexibleDimensions","_positionLocked","_viewportMargin","_scrollables","_preferredPositions","_positionChanges","_resizeSubscription","_offsetX","_offsetY","_appliedPanelClasses","positionChanges","setOrigin","positions","_validatePositions","_boundingBox","_isDisposed","_isInitialRender","_lastPosition","change","reapplyLastPosition","_clearPanelClasses","_resetOverlayElementStyles","_resetBoundingBoxStyles","_viewportRect","_getNarrowedViewportRect","_originRect","_getOriginRect","_overlayRect","_containerRect","originRect","viewportRect","containerRect","flexibleFits","fallback","pos","originPoint","_getOriginPoint","overlayPoint","_getOverlayPoint","overlayFit","_getOverlayFit","isCompletelyWithinViewport","_applyPosition","_canFitWithFlexibleDimensions","position","origin","boundingBoxRect","_calculateBoundingBoxRect","visibleArea","bestFit","bestScore","fit","score","weight","_previousPushAmount","extendStyles","alignItems","justifyContent","lastPosition","withScrollableContainers","scrollables","withPositions","indexOf","withViewportMargin","margin","withFlexibleDimensions","flexibleDimensions","withGrowAfterOpen","growAfterOpen","withPush","canPush","withLockedPosition","isLocked","_origin","withDefaultOffsetX","offset","withDefaultOffsetY","withTransformOriginOn","selector","_transformOriginSelector","x","y","originX","startX","_isRtl","endX","originY","overlayStartX","overlayStartY","overlayX","overlayY","point","rawOverlayRect","overlay","getRoundedBoundingClientRect","offsetX","_getOffset","offsetY","topOverflow","bottomOverflow","visibleWidth","_subtractOverflows","visibleHeight","fitsInViewportVertically","fitsInViewportHorizontally","availableHeight","availableWidth","getPixelValue","horizontalFit","_pushOverlayOnScreen","start","overflowRight","max","overflowBottom","overflowTop","overflowLeft","pushX","pushY","_setTransformOrigin","_setOverlayElementStyles","_setBoundingBoxStyles","_addPanelClasses","observers","_getScrollVisibility","changeEvent","ConnectedOverlayPositionChange","elements","xOrigin","yOrigin","transformOrigin","isRtl","smallestDistanceToViewportEdge","min","previousHeight","previousWidth","styles","_hasExactPosition","e","transform","hasExactPosition","hasFlexibleDimensions","_getExactOverlayY","_getExactOverlayX","transformString","trim","clientHeight","horizontalStyleProperty","clientWidth","originBounds","overlayBounds","scrollContainerBounds","map","scrollable","getElementRef","nativeElement","isOriginClipped","isElementClippedByScrolling","isOriginOutsideView","isOverlayClipped","isOverlayOutsideView","overflows","reduce","currentValue","currentOverflow","axis","forEach","cssClass","ElementRef","Element","destination","hasOwnProperty","input","units","split","parseFloat","clientRect","floor","wrapperClass","_cssPosition","_topOffset","_bottomOffset","_leftOffset","_rightOffset","_alignItems","_justifyContent","_width","_height","centerHorizontally","centerVertically","parentStyles","shouldBeFlushHorizontally","shouldBeFlushVertically","marginLeft","marginTop","marginBottom","marginRight","E","parent","OverlayPositionBuilder","global","GlobalPositionStrategy","flexibleConnectedTo","FlexibleConnectedPositionStrategy","BaseOverlayDispatcher","_attachedOverlays","index","splice","OverlayKeyboardDispatcher","_keydownListener","overlays","_isAttached","OverlayOutsideClickDispatcher","_cursorStyleIsSet","_pointerDownListener","_pointerDownEventTarget","_getEventTarget","_clickListener","type","slice","_addEventListeners","IOS","_cursorOriginalValue","cursor","nextUniqueId","Overlay","scrollStrategies","_componentFactoryResolver","_positionBuilder","_injector","_directionality","create","host","_createHostElement","pane","_createPaneElement","portalOutlet","_createPortalOutlet","overlayConfig","OverlayConfig","OverlayRef","_appRef","get","ApplicationRef","DomPortalOutlet","i5","i6","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","InjectionToken","CdkOverlayOrigin","elementRef","ɵdir","selectors","CdkConnectedOverlay","_overlay","templateRef","viewContainerRef","scrollStrategyFactory","_dir","_hasBackdrop","_lockPosition","_flexibleDimensions","_push","_backdropSubscription","_attachSubscription","_detachSubscription","_positionSubscription","viewportMargin","open","disableClose","EventEmitter","positionChange","overlayKeydown","overlayOutsideClick","_templatePortal","TemplatePortal","_scrollStrategyFactory","_position","_updatePositionStrategy","coerceBooleanProperty","lockPosition","ngOnChanges","changes","_attachOverlay","_detachOverlay","_createOverlay","_buildConfig","emit","keyCode","ESCAPE","hasModifierKey","preventDefault","_createPositionStrategy","currentPosition","_getFlexibleConnectedPositionStrategyOrigin","transformOriginSelector","predicate","inclusive","result","takeWhile","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","provide","deps","useFactory","OverlayModule","ɵmod","ɵinj","imports","BidiModule","PortalModule","ScrollingModule","FullscreenOverlayContainer","_attachedHost","setAttachedHost","Portal","component","injector","componentFactoryResolver","template","context","attachDomPortal","_attachedPortal","ComponentPortal","attachComponentPortal","attachTemplatePortal","DomPortal","_invokeDisposeFn","setDisposeFn","fn","_disposeFn","BasePortalOutlet","outletElement","_defaultInjector","anchorNode","createComment","replaceChild","componentFactory","resolveComponentFactory","componentRef","createComponent","destroy","Injector","attachView","hostView","viewCount","detachView","_getComponentRootNode","viewContainer","viewRef","createEmbeddedView","rootNodes","rootNode","detectChanges","CdkPortal","CdkPortalOutlet","_viewContainerRef","_isInitialized","attached","_getRootNode","attachedRef","_attachedRef","ngOnInit","ref","clear","nodeType","ELEMENT_NODE","notFoundValue","ScrollDispatcher","_scrolled","_globalSubscription","_scrolledCount","Map","register","has","set","elementScrolled","deregister","scrollableReference","delete","auditTimeInMs","observer","_addGlobalListener","auditTime","_removeGlobalListener","of","_","ancestorScrolled","elementOrElementRef","ancestors","getAncestorScrollContainers","scrollingContainers","_subscription","_scrollableContainsElement","_getWindow","defaultView","coerceElement","scrollableElement","fromEvent","CdkScrollable","scrollDispatcher","ngZone","_destroyed","_elementScrolled","scrollTo","options","el","end","p","getRtlScrollAxisType","_applyScrollToOptions","scrollTop","scrollLeft","measureScrollOffset","from","LEFT","RIGHT","o","i2","ViewportRuler","_change","_changeListener","_viewportSize","_updateViewportSize","output","getViewportRect","documentRect","scrollY","scrollX","throttleTime","innerWidth","innerHeight","CdkScrollableModule","BUTTON_HOST_ATTRIBUTES","_MatButtonBase","mixinColor","mixinDisabled","mixinDisableRipple","_elementRef","MatButton","_focusMonitor","_animationMode","isRoundButton","_hasHostAttributes","isIconButton","attr","_getHostElement","color","DEFAULT_ROUND_BUTTON_COLOR","ngAfterViewInit","monitor","stopMonitoring","focus","focusVia","_isRippleDisabled","disableRipple","disabled","attributes","attribute","hasAttribute","ANIMATION_MODULE_TYPE","ɵcmp","MatRipple","F","a","attrs","directives","MatAnchor","focusMonitor","animationMode","_haltDisabledEvents","stopImmediatePropagation","MatButtonModule","MatRippleModule","MatCommonModule"],"sourceRoot":"webpack:///","sources":["./node_modules/rxjs/dist/esm/internal/observable/timer.js","./node_modules/rxjs/dist/esm/internal/operators/auditTime.js","./node_modules/rxjs/dist/esm/internal/operators/audit.js","./node_modules/rxjs/dist/esm/internal/util/Immediate.js","./node_modules/rxjs/dist/esm/internal/scheduler/immediateProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/asap.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsapScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsapAction.js","./node_modules/@angular/cdk/fesm2015/overlay.mjs","./node_modules/rxjs/dist/esm/internal/operators/takeWhile.js","./node_modules/@angular/cdk/fesm2015/portal.mjs","./node_modules/@angular/cdk/fesm2015/scrolling.mjs","./node_modules/@angular/material/fesm2015/button.mjs"],"sourcesContent":["import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime = 0, intervalOrScheduler, scheduler = asyncScheduler) {\n let intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable((subscriber) => {\n let due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n let n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { audit } from './audit';\nimport { timer } from '../observable/timer';\nexport function auditTime(duration, scheduler = asyncScheduler) {\n return audit(() => timer(duration, scheduler));\n}\n","import { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function audit(durationSelector) {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue = null;\n let durationSubscriber = null;\n let isComplete = false;\n const endDuration = () => {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n const value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n isComplete && subscriber.complete();\n };\n const cleanupDuration = () => {\n durationSubscriber = null;\n isComplete && subscriber.complete();\n };\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n hasValue = true;\n lastValue = value;\n if (!durationSubscriber) {\n innerFrom(durationSelector(value)).subscribe((durationSubscriber = createOperatorSubscriber(subscriber, endDuration, cleanupDuration)));\n }\n }, () => {\n isComplete = true;\n (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n }));\n });\n}\n","let nextHandle = 1;\nlet resolved;\nconst activeHandles = {};\nfunction findAndClearHandle(handle) {\n if (handle in activeHandles) {\n delete activeHandles[handle];\n return true;\n }\n return false;\n}\nexport const Immediate = {\n setImmediate(cb) {\n const handle = nextHandle++;\n activeHandles[handle] = true;\n if (!resolved) {\n resolved = Promise.resolve();\n }\n resolved.then(() => findAndClearHandle(handle) && cb());\n return handle;\n },\n clearImmediate(handle) {\n findAndClearHandle(handle);\n },\n};\nexport const TestTools = {\n pending() {\n return Object.keys(activeHandles).length;\n }\n};\n","import { Immediate } from '../util/Immediate';\nconst { setImmediate, clearImmediate } = Immediate;\nexport const immediateProvider = {\n setImmediate(...args) {\n const { delegate } = immediateProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate)(...args);\n },\n clearImmediate(handle) {\n const { delegate } = immediateProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle);\n },\n delegate: undefined,\n};\n","import { AsapAction } from './AsapAction';\nimport { AsapScheduler } from './AsapScheduler';\nexport const asapScheduler = new AsapScheduler(AsapAction);\nexport const asap = asapScheduler;\n","import { AsyncScheduler } from './AsyncScheduler';\nexport class AsapScheduler extends AsyncScheduler {\n flush(action) {\n this._active = true;\n const flushId = this._scheduled;\n this._scheduled = undefined;\n const { actions } = this;\n let error;\n action = action || actions.shift();\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n this._active = false;\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { immediateProvider } from './immediateProvider';\nexport class AsapAction extends AsyncAction {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n }\n requestAsyncId(scheduler, id, delay = 0) {\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler._scheduled || (scheduler._scheduled = immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined)));\n }\n recycleAsyncId(scheduler, id, delay = 0) {\n var _a;\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n const { actions } = scheduler;\n if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n immediateProvider.clearImmediate(id);\n scheduler._scheduled = undefined;\n }\n return undefined;\n }\n}\n","import * as i1 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nexport { CdkScrollable, ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\nimport * as i6 from '@angular/common';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, ElementRef, Optional, ApplicationRef, InjectionToken, Directive, EventEmitter, Input, Output, NgModule } from '@angular/core';\nimport { coerceCssPixelValue, coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i1$1 from '@angular/cdk/platform';\nimport { supportsScrollBehavior, _isTestEnvironment, _getEventTarget } from '@angular/cdk/platform';\nimport * as i5 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { DomPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { Subject, Subscription, merge } from 'rxjs';\nimport { take, takeUntil, takeWhile } from 'rxjs/operators';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst scrollBehaviorSupported = supportsScrollBehavior();\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nclass BlockScrollStrategy {\n constructor(_viewportRuler, document) {\n this._viewportRuler = _viewportRuler;\n this._previousHTMLStyles = { top: '', left: '' };\n this._isEnabled = false;\n this._document = document;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach() { }\n /** Blocks page-level scroll while the attached overlay is open. */\n enable() {\n if (this._canBeEnabled()) {\n const root = this._document.documentElement;\n this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\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 // 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 /** 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 this._isEnabled = false;\n htmlStyle.left = this._previousHTMLStyles.left;\n htmlStyle.top = this._previousHTMLStyles.top;\n html.classList.remove('cdk-global-scrollblock');\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 window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n }\n }\n }\n _canBeEnabled() {\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 if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n return false;\n }\n const body = this._document.body;\n const viewport = this._viewportRuler.getViewportSize();\n return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n */\nfunction getMatScrollStrategyAlreadyAttachedError() {\n return Error(`Scroll strategy has already been attached.`);\n}\n\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nclass CloseScrollStrategy {\n constructor(_scrollDispatcher, _ngZone, _viewportRuler, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._config = _config;\n this._scrollSubscription = null;\n /** Detaches the overlay ref and disables the scroll strategy. */\n this._detach = () => {\n this.disable();\n if (this._overlayRef.hasAttached()) {\n this._ngZone.run(() => this._overlayRef.detach());\n }\n };\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n }\n /** Enables the closing of the attached overlay on scroll. */\n enable() {\n if (this._scrollSubscription) {\n return;\n }\n const stream = this._scrollDispatcher.scrolled(0);\n if (this._config && this._config.threshold && this._config.threshold > 1) {\n this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n this._scrollSubscription = stream.subscribe(() => {\n const scrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config.threshold) {\n this._detach();\n }\n else {\n this._overlayRef.updatePosition();\n }\n });\n }\n else {\n this._scrollSubscription = stream.subscribe(this._detach);\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 detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Scroll strategy that doesn't do anything. */\nclass NoopScrollStrategy {\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/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Gets whether an 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 */\nfunction isElementScrolledOutsideView(element, scrollContainers) {\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 return outsideAbove || outsideBelow || outsideLeft || outsideRight;\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 */\nfunction isElementClippedByScrolling(element, scrollContainers) {\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 return clippedAbove || clippedBelow || clippedLeft || clippedRight;\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nclass RepositionScrollStrategy {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n this._config = _config;\n this._scrollSubscription = null;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\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 this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => {\n this._overlayRef.updatePosition();\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 // 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 if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n this.disable();\n this._ngZone.run(() => this._overlayRef.detach());\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 detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/**\n * Options for how an overlay will handle scrolling.\n *\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\n */\nclass ScrollStrategyOptions {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, document) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n /** Do nothing on scroll. */\n this.noop = () => new NoopScrollStrategy();\n /**\n * Close the overlay as soon as the user scrolls.\n * @param config Configuration to be used inside the scroll strategy.\n */\n this.close = (config) => new CloseScrollStrategy(this._scrollDispatcher, this._ngZone, this._viewportRuler, config);\n /** Block scrolling. */\n this.block = () => new BlockScrollStrategy(this._viewportRuler, this._document);\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 this.reposition = (config) => new RepositionScrollStrategy(this._scrollDispatcher, this._viewportRuler, this._ngZone, config);\n this._document = document;\n }\n}\nScrollStrategyOptions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: ScrollStrategyOptions, deps: [{ token: i1.ScrollDispatcher }, { token: i1.ViewportRuler }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });\nScrollStrategyOptions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: ScrollStrategyOptions, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: ScrollStrategyOptions, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: i1.ScrollDispatcher }, { type: i1.ViewportRuler }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Initial configuration used when creating an overlay. */\nclass OverlayConfig {\n constructor(config) {\n /** Strategy to be used when handling scroll events while the overlay is open. */\n this.scrollStrategy = new NoopScrollStrategy();\n /** Custom class to add to the overlay pane. */\n this.panelClass = '';\n /** Whether the overlay has a backdrop. */\n this.hasBackdrop = false;\n /** Custom class to add to the backdrop */\n this.backdropClass = 'cdk-overlay-dark-backdrop';\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 this.disposeOnNavigation = false;\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);\n for (const key of configKeys) {\n if (config[key] !== undefined) {\n // TypeScript, as of version 3.5, sees the left-hand-side of this expression\n // as \"I don't know *which* key this is, so the only valid value is the intersection\n // of all the posible values.\" In this case, that happens to be `undefined`. TypeScript\n // is not smart enough to see that the right-hand-side is actually an access of the same\n // exact type with the same exact key, meaning that the value type must be identical.\n // So we use `any` to work around this.\n this[key] = config[key];\n }\n }\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** The points of the origin element and the overlay element to connect. */\nclass ConnectionPositionPair {\n constructor(origin, overlay, \n /** Offset along the X axis. */\n offsetX, \n /** Offset along the Y axis. */\n offsetY, \n /** Class(es) to be applied to the panel while this position is active. */\n panelClass) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.panelClass = panelClass;\n this.originX = origin.originX;\n this.originY = origin.originY;\n this.overlayX = overlay.overlayX;\n this.overlayY = overlay.overlayY;\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 */\nclass ScrollingVisibility {\n}\n/** The change event emitted by the strategy when a fallback position is used. */\nclass ConnectedOverlayPositionChange {\n constructor(\n /** The position used as a result of this change. */\n connectionPair, \n /** @docs-private */\n scrollableViewProperties) {\n this.connectionPair = connectionPair;\n this.scrollableViewProperties = scrollableViewProperties;\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 */\nfunction validateVerticalPosition(property, value) {\n if (value !== 'top' && value !== 'bottom' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n `Expected \"top\", \"bottom\" or \"center\".`);\n }\n}\n/**\n * 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 */\nfunction validateHorizontalPosition(property, value) {\n if (value !== 'start' && value !== 'end' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n `Expected \"start\", \"end\" or \"center\".`);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nclass OverlayRef {\n constructor(_portalOutlet, _host, _pane, _config, _ngZone, _keyboardDispatcher, _document, _location, _outsideClickDispatcher) {\n this._portalOutlet = _portalOutlet;\n this._host = _host;\n this._pane = _pane;\n this._config = _config;\n this._ngZone = _ngZone;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._document = _document;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\n this._backdropElement = null;\n this._backdropClick = new Subject();\n this._attachments = new Subject();\n this._detachments = new Subject();\n this._locationChanges = Subscription.EMPTY;\n this._backdropClickHandler = (event) => this._backdropClick.next(event);\n this._backdropTransitionendHandler = (event) => {\n this._disposeBackdrop(event.target);\n };\n /** Stream of keydown events dispatched to this overlay. */\n this._keydownEvents = new Subject();\n /** Stream of mouse outside events dispatched to this overlay. */\n this._outsidePointerEvents = new Subject();\n if (_config.scrollStrategy) {\n this._scrollStrategy = _config.scrollStrategy;\n this._scrollStrategy.attach(this);\n }\n this._positionStrategy = _config.positionStrategy;\n }\n /** The overlay's HTML element */\n get overlayElement() {\n return this._pane;\n }\n /** The overlay's backdrop HTML element. */\n get backdropElement() {\n return this._backdropElement;\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() {\n return this._host;\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) {\n // Insert the host into the DOM before attaching the portal, otherwise\n // the animations module will skip animations on repeat attachments.\n if (!this._host.parentElement && this._previousHostParent) {\n this._previousHostParent.appendChild(this._host);\n }\n const attachResult = this._portalOutlet.attach(portal);\n if (this._positionStrategy) {\n this._positionStrategy.attach(this);\n }\n this._updateStackingOrder();\n this._updateElementSize();\n this._updateElementDirection();\n if (this._scrollStrategy) {\n this._scrollStrategy.enable();\n }\n // Update the position once the zone is stable so that the overlay will be fully rendered\n // before attempting to position it, as the position may depend on the size of the rendered\n // content.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n // The overlay could've been detached before the zone has stabilized.\n if (this.hasAttached()) {\n this.updatePosition();\n }\n });\n // Enable pointer events for the overlay pane element.\n this._togglePointerEvents(true);\n if (this._config.hasBackdrop) {\n this._attachBackdrop();\n }\n if (this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, true);\n }\n // Only emit the `attachments` event once all other setup is done.\n this._attachments.next();\n // Track this overlay by the keyboard dispatcher\n this._keyboardDispatcher.add(this);\n if (this._config.disposeOnNavigation) {\n this._locationChanges = this._location.subscribe(() => this.dispose());\n }\n this._outsideClickDispatcher.add(this);\n return attachResult;\n }\n /**\n * Detaches an overlay from a portal.\n * @returns The portal detachment result.\n */\n detach() {\n if (!this.hasAttached()) {\n return;\n }\n this.detachBackdrop();\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 if (this._positionStrategy && this._positionStrategy.detach) {\n this._positionStrategy.detach();\n }\n if (this._scrollStrategy) {\n this._scrollStrategy.disable();\n }\n const detachmentResult = this._portalOutlet.detach();\n // Only emit after everything is detached.\n this._detachments.next();\n // Remove this overlay from keyboard dispatcher tracking.\n this._keyboardDispatcher.remove(this);\n // Keeping the host element in the DOM can cause scroll jank, because it still gets\n // rendered, even though it's transparent and unclickable which is why we remove it.\n this._detachContentWhenStable();\n this._locationChanges.unsubscribe();\n this._outsideClickDispatcher.remove(this);\n return detachmentResult;\n }\n /** Cleans up the overlay from the DOM. */\n dispose() {\n var _a;\n const isAttached = this.hasAttached();\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._disposeScrollStrategy();\n this._disposeBackdrop(this._backdropElement);\n this._locationChanges.unsubscribe();\n this._keyboardDispatcher.remove(this);\n this._portalOutlet.dispose();\n this._attachments.complete();\n this._backdropClick.complete();\n this._keydownEvents.complete();\n this._outsidePointerEvents.complete();\n this._outsideClickDispatcher.remove(this);\n (_a = this._host) === null || _a === void 0 ? void 0 : _a.remove();\n this._previousHostParent = this._pane = this._host = null;\n if (isAttached) {\n this._detachments.next();\n }\n this._detachments.complete();\n }\n /** Whether the overlay has attached content. */\n hasAttached() {\n return this._portalOutlet.hasAttached();\n }\n /** Gets an observable that emits when the backdrop has been clicked. */\n backdropClick() {\n return this._backdropClick;\n }\n /** Gets an observable that emits when the overlay has been attached. */\n attachments() {\n return this._attachments;\n }\n /** Gets an observable that emits when the overlay has been detached. */\n detachments() {\n return this._detachments;\n }\n /** Gets an observable of keydown events targeted to this overlay. */\n keydownEvents() {\n return this._keydownEvents;\n }\n /** Gets an observable of pointer events targeted outside this overlay. */\n outsidePointerEvents() {\n return this._outsidePointerEvents;\n }\n /** Gets the current overlay configuration, which is immutable. */\n getConfig() {\n return this._config;\n }\n /** Updates the position of the overlay based on the position strategy. */\n updatePosition() {\n if (this._positionStrategy) {\n this._positionStrategy.apply();\n }\n }\n /** Switches to a new position strategy and updates the overlay position. */\n updatePositionStrategy(strategy) {\n if (strategy === this._positionStrategy) {\n return;\n }\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._positionStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n this.updatePosition();\n }\n }\n /** Update the size properties of the overlay. */\n updateSize(sizeConfig) {\n this._config = Object.assign(Object.assign({}, this._config), sizeConfig);\n this._updateElementSize();\n }\n /** Sets the LTR/RTL direction for the overlay. */\n setDirection(dir) {\n this._config = Object.assign(Object.assign({}, this._config), { direction: dir });\n this._updateElementDirection();\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, true);\n }\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, false);\n }\n }\n /**\n * Returns the layout direction of the overlay panel.\n */\n getDirection() {\n const direction = this._config.direction;\n if (!direction) {\n return 'ltr';\n }\n return typeof direction === 'string' ? direction : direction.value;\n }\n /** Switches to a new scroll strategy. */\n updateScrollStrategy(strategy) {\n if (strategy === this._scrollStrategy) {\n return;\n }\n this._disposeScrollStrategy();\n this._scrollStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n strategy.enable();\n }\n }\n /** Updates the text direction of the overlay panel. */\n _updateElementDirection() {\n this._host.setAttribute('dir', this.getDirection());\n }\n /** Updates the size of the overlay element based on the overlay config. */\n _updateElementSize() {\n if (!this._pane) {\n return;\n }\n const style = this._pane.style;\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 /** Toggles the pointer events for the overlay pane element. */\n _togglePointerEvents(enablePointer) {\n this._pane.style.pointerEvents = enablePointer ? '' : 'none';\n }\n /** Attaches a backdrop for this overlay. */\n _attachBackdrop() {\n const showingClass = 'cdk-overlay-backdrop-showing';\n this._backdropElement = this._document.createElement('div');\n this._backdropElement.classList.add('cdk-overlay-backdrop');\n if (this._config.backdropClass) {\n this._toggleClasses(this._backdropElement, this._config.backdropClass, true);\n }\n // Insert the backdrop before the pane in the DOM order,\n // in order to handle stacked overlays properly.\n this._host.parentElement.insertBefore(this._backdropElement, this._host);\n // Forward backdrop clicks such that the consumer of the overlay can perform whatever\n // action desired when such a click occurs (usually closing the overlay).\n this._backdropElement.addEventListener('click', this._backdropClickHandler);\n // Add class to fade-in the backdrop after one frame.\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (this._backdropElement) {\n this._backdropElement.classList.add(showingClass);\n }\n });\n });\n }\n else {\n this._backdropElement.classList.add(showingClass);\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 _updateStackingOrder() {\n if (this._host.nextSibling) {\n this._host.parentNode.appendChild(this._host);\n }\n }\n /** Detaches the backdrop (if any) associated with the overlay. */\n detachBackdrop() {\n const backdropToDetach = this._backdropElement;\n if (!backdropToDetach) {\n return;\n }\n backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\n this._ngZone.runOutsideAngular(() => {\n backdropToDetach.addEventListener('transitionend', this._backdropTransitionendHandler);\n });\n // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\n // In this case we make it unclickable and we try to remove it after a delay.\n backdropToDetach.style.pointerEvents = 'none';\n // Run this outside the Angular zone because there's nothing that Angular cares about.\n // If it were to run inside the Angular zone, every test that used Overlay would have to be\n // either async or fakeAsync.\n this._backdropTimeout = this._ngZone.runOutsideAngular(() => setTimeout(() => {\n this._disposeBackdrop(backdropToDetach);\n }, 500));\n }\n /** Toggles a single CSS class or an array of classes on an element. */\n _toggleClasses(element, cssClasses, isAdd) {\n const classes = coerceArray(cssClasses || []).filter(c => !!c);\n if (classes.length) {\n isAdd ? element.classList.add(...classes) : element.classList.remove(...classes);\n }\n }\n /** Detaches the overlay content next time the zone stabilizes. */\n _detachContentWhenStable() {\n // Normally we wouldn't have to explicitly run this outside the `NgZone`, however\n // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will\n // be patched to run inside the zone, which will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => {\n // We can't remove the host here immediately, because the overlay pane's content\n // might still be animating. This stream helps us avoid interrupting the animation\n // by waiting for the pane to become empty.\n const subscription = this._ngZone.onStable\n .pipe(takeUntil(merge(this._attachments, this._detachments)))\n .subscribe(() => {\n // Needs a couple of checks for the pane and host, because\n // they may have been removed by the time the zone stabilizes.\n if (!this._pane || !this._host || this._pane.children.length === 0) {\n if (this._pane && this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, false);\n }\n if (this._host && this._host.parentElement) {\n this._previousHostParent = this._host.parentElement;\n this._host.remove();\n }\n subscription.unsubscribe();\n }\n });\n });\n }\n /** Disposes of a scroll strategy. */\n _disposeScrollStrategy() {\n const scrollStrategy = this._scrollStrategy;\n if (scrollStrategy) {\n scrollStrategy.disable();\n if (scrollStrategy.detach) {\n scrollStrategy.detach();\n }\n }\n }\n /** Removes a backdrop element from the DOM. */\n _disposeBackdrop(backdrop) {\n if (backdrop) {\n backdrop.removeEventListener('click', this._backdropClickHandler);\n backdrop.removeEventListener('transitionend', this._backdropTransitionendHandler);\n backdrop.remove();\n // It is possible that a new portal has been attached to this overlay since we started\n // removing the backdrop. If that is the case, only clear the backdrop reference if it\n // is still the same instance that we started to remove.\n if (this._backdropElement === backdrop) {\n this._backdropElement = null;\n }\n }\n if (this._backdropTimeout) {\n clearTimeout(this._backdropTimeout);\n this._backdropTimeout = undefined;\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Container inside which all overlays will render. */\nclass OverlayContainer {\n constructor(document, _platform) {\n this._platform = _platform;\n this._document = document;\n }\n ngOnDestroy() {\n var _a;\n (_a = this._containerElement) === null || _a === void 0 ? void 0 : _a.remove();\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() {\n if (!this._containerElement) {\n this._createContainer();\n }\n return this._containerElement;\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 _createContainer() {\n const containerClass = 'cdk-overlay-container';\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(`.${containerClass}[platform=\"server\"], ` + `.${containerClass}[platform=\"test\"]`);\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 const container = this._document.createElement('div');\n container.classList.add(containerClass);\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 }\n else if (!this._platform.isBrowser) {\n container.setAttribute('platform', 'server');\n }\n this._document.body.appendChild(container);\n this._containerElement = container;\n }\n}\nOverlayContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayContainer, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }], target: i0.ɵɵFactoryTarget.Injectable });\nOverlayContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayContainer, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayContainer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// 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/** Class to be added to the overlay bounding box. */\nconst boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\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 */\nclass FlexibleConnectedPositionStrategy {\n constructor(connectedTo, _viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\n this._lastBoundingBoxSize = { width: 0, height: 0 };\n /** Whether the overlay was pushed in a previous positioning. */\n this._isPushed = false;\n /** Whether the overlay can be pushed on-screen on the initial open. */\n this._canPush = true;\n /** Whether the overlay can grow via flexible width/height after the initial open. */\n this._growAfterOpen = false;\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n this._hasFlexibleDimensions = true;\n /** Whether the overlay position is locked. */\n this._positionLocked = false;\n /** Amount of space that must be maintained between the overlay and the edge of the viewport. */\n this._viewportMargin = 0;\n /** The Scrollable containers used to check scrollable view properties on position change. */\n this._scrollables = [];\n /** Ordered list of preferred positions, from most to least desirable. */\n this._preferredPositions = [];\n /** Subject that emits whenever the position changes. */\n this._positionChanges = new Subject();\n /** Subscription to viewport size changes. */\n this._resizeSubscription = Subscription.EMPTY;\n /** Default offset for the overlay along the x axis. */\n this._offsetX = 0;\n /** Default offset for the overlay along the y axis. */\n this._offsetY = 0;\n /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\n this._appliedPanelClasses = [];\n /** Observable sequence of position changes. */\n this.positionChanges = this._positionChanges;\n this.setOrigin(connectedTo);\n }\n /** Ordered list of preferred positions, from most to least desirable. */\n get positions() {\n return this._preferredPositions;\n }\n /** Attaches this position strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef &&\n overlayRef !== this._overlayRef &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('This position strategy is already attached to an overlay');\n }\n this._validatePositions();\n overlayRef.hostElement.classList.add(boundingBoxClass);\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 * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin best fits on-screen.\n *\n * The selection of a position goes as follows:\n * - If any positions fit completely within the viewport as-is,\n * choose the first position that does so.\n * - If flexible dimensions are enabled and at least one satifies the given minimum width/height,\n * choose the position with the greatest available size modified by the positions' weight.\n * - If pushing is enabled, take the position that went off-screen the least and push it\n * on-screen.\n * - If none of the previous criteria were met, use the position that goes off-screen the least.\n * @docs-private\n */\n apply() {\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 // 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 this._clearPanelClasses();\n this._resetOverlayElementStyles();\n this._resetBoundingBoxStyles();\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._overlayContainer.getContainerElement().getBoundingClientRect();\n const originRect = this._originRect;\n const overlayRect = this._overlayRect;\n const viewportRect = this._viewportRect;\n const containerRect = this._containerRect;\n // Positions where the overlay will fit with flexible dimensions.\n const flexibleFits = [];\n // Fallback if none of the preferred positions fit within the viewport.\n let fallback;\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 // 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 // Calculate how well the overlay would fit into the viewport with this point.\n let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos);\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 // 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 continue;\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 // 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 = null;\n let bestScore = -1;\n for (const fit of flexibleFits) {\n const score = fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);\n if (score > bestScore) {\n bestScore = score;\n bestFit = fit;\n }\n }\n this._isPushed = false;\n this._applyPosition(bestFit.position, bestFit.origin);\n return;\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 // 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 detach() {\n this._clearPanelClasses();\n this._lastPosition = null;\n this._previousPushAmount = null;\n this._resizeSubscription.unsubscribe();\n }\n /** Cleanup after the element gets destroyed. */\n dispose() {\n if (this._isDisposed) {\n return;\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 });\n }\n if (this._pane) {\n this._resetOverlayElementStyles();\n }\n if (this._overlayRef) {\n this._overlayRef.hostElement.classList.remove(boundingBoxClass);\n }\n this.detach();\n this._positionChanges.complete();\n this._overlayRef = this._boundingBox = null;\n this._isDisposed = true;\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() {\n if (this._isDisposed || !this._platform.isBrowser) {\n return;\n }\n const lastPosition = this._lastPosition;\n if (lastPosition) {\n this._originRect = this._getOriginRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n this._viewportRect = this._getNarrowedViewportRect();\n this._containerRect = this._overlayContainer.getContainerElement().getBoundingClientRect();\n const originPoint = this._getOriginPoint(this._originRect, this._containerRect, lastPosition);\n this._applyPosition(lastPosition, originPoint);\n }\n else {\n this.apply();\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) {\n this._scrollables = scrollables;\n return this;\n }\n /**\n * Adds new preferred positions.\n * @param positions List of positions options for this overlay.\n */\n withPositions(positions) {\n this._preferredPositions = positions;\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 this._validatePositions();\n return this;\n }\n /**\n * Sets a minimum distance the overlay may be positioned to the edge of the viewport.\n * @param margin Required margin between the overlay and the viewport edge in pixels.\n */\n withViewportMargin(margin) {\n this._viewportMargin = margin;\n return this;\n }\n /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\n withFlexibleDimensions(flexibleDimensions = true) {\n this._hasFlexibleDimensions = flexibleDimensions;\n return this;\n }\n /** Sets whether the overlay can grow after the initial open via flexible width/height. */\n withGrowAfterOpen(growAfterOpen = true) {\n this._growAfterOpen = growAfterOpen;\n return this;\n }\n /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\n withPush(canPush = true) {\n this._canPush = canPush;\n return this;\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) {\n this._positionLocked = isLocked;\n return this;\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) {\n this._origin = origin;\n return this;\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) {\n this._offsetX = offset;\n return this;\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) {\n this._offsetY = offset;\n return this;\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) {\n this._transformOriginSelector = selector;\n return this;\n }\n /**\n * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n */\n _getOriginPoint(originRect, containerRect, pos) {\n let x;\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 }\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 // 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 let y;\n if (pos.originY == 'center') {\n y = originRect.top + originRect.height / 2;\n }\n else {\n y = pos.originY == 'top' ? originRect.top : originRect.bottom;\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 return { x, y };\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 _getOverlayPoint(originPoint, overlayRect, pos) {\n // Calculate the (overlayStartX, overlayStartY), the start of the\n // potential overlay position relative to the origin point.\n let overlayStartX;\n if (pos.overlayX == 'center') {\n overlayStartX = -overlayRect.width / 2;\n }\n else if (pos.overlayX === 'start') {\n overlayStartX = this._isRtl() ? -overlayRect.width : 0;\n }\n else {\n overlayStartX = this._isRtl() ? 0 : -overlayRect.width;\n }\n let overlayStartY;\n if (pos.overlayY == 'center') {\n overlayStartY = -overlayRect.height / 2;\n }\n else {\n overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\n }\n // The (x, y) coordinates of the overlay.\n return {\n x: originPoint.x + overlayStartX,\n y: originPoint.y + overlayStartY,\n };\n }\n /** Gets how well an overlay at the given point will fit within the viewport. */\n _getOverlayFit(point, rawOverlayRect, viewport, position) {\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 // Account for the offsets since they could push the overlay out of the viewport.\n if (offsetX) {\n x += offsetX;\n }\n if (offsetY) {\n y += offsetY;\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 // 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 return {\n visibleArea,\n isCompletelyWithinViewport: overlay.width * overlay.height === visibleArea,\n fitsInViewportVertically: visibleHeight === overlay.height,\n fitsInViewportHorizontally: visibleWidth == overlay.width,\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 _canFitWithFlexibleDimensions(fit, point, viewport) {\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 const verticalFit = fit.fitsInViewportVertically || (minHeight != null && minHeight <= availableHeight);\n const horizontalFit = fit.fitsInViewportHorizontally || (minWidth != null && minWidth <= availableWidth);\n return verticalFit && horizontalFit;\n }\n return false;\n }\n /**\n * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the\n * right and bottom).\n *\n * @param start Starting point from which the overlay is pushed.\n * @param 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 _pushOverlayOnScreen(start, rawOverlayRect, scrollPosition) {\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 // 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 // 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 // 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 // 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 }\n else {\n pushX = start.x < this._viewportMargin ? viewport.left - scrollPosition.left - start.x : 0;\n }\n if (overlay.height <= viewport.height) {\n pushY = overflowTop || -overflowBottom;\n }\n else {\n pushY = start.y < this._viewportMargin ? viewport.top - scrollPosition.top - start.y : 0;\n }\n this._previousPushAmount = { x: pushX, y: pushY };\n return {\n x: start.x + pushX,\n y: start.y + pushY,\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 _applyPosition(position, originPoint) {\n this._setTransformOrigin(position);\n this._setOverlayElementStyles(originPoint, position);\n this._setBoundingBoxStyles(originPoint, position);\n if (position.panelClass) {\n this._addPanelClasses(position.panelClass);\n }\n // Save the last connected position in case the position needs to be re-calculated.\n this._lastPosition = position;\n // Notify that the position has been changed along with its change properties.\n // We only emit if we've got any subscriptions, because the scroll visibility\n // calculcations can be somewhat expensive.\n if (this._positionChanges.observers.length) {\n const scrollableViewProperties = this._getScrollVisibility();\n const changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties);\n this._positionChanges.next(changeEvent);\n }\n this._isInitialRender = false;\n }\n /** Sets the transform origin based on the configured selector and the passed-in position. */\n _setTransformOrigin(position) {\n if (!this._transformOriginSelector) {\n return;\n }\n const elements = this._boundingBox.querySelectorAll(this._transformOriginSelector);\n let xOrigin;\n let yOrigin = position.overlayY;\n if (position.overlayX === 'center') {\n xOrigin = 'center';\n }\n else if (this._isRtl()) {\n xOrigin = position.overlayX === 'start' ? 'right' : 'left';\n }\n else {\n xOrigin = position.overlayX === 'start' ? 'left' : 'right';\n }\n for (let i = 0; i < elements.length; i++) {\n elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`;\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 _calculateBoundingBoxRect(origin, position) {\n const viewport = this._viewportRect;\n const isRtl = this._isRtl();\n let height, top, bottom;\n if (position.overlayY === 'top') {\n // Overlay is opening \"downward\" and thus is bound by the bottom viewport edge.\n top = origin.y;\n height = viewport.height - top + this._viewportMargin;\n }\n else if (position.overlayY === 'bottom') {\n // Overlay is opening \"upward\" and thus is bound by the top viewport edge. We need to add\n // the viewport margin back in, because the viewport rect is narrowed down to remove the\n // margin, whereas the `origin` position is calculated based on its `ClientRect`.\n bottom = viewport.height - origin.y + this._viewportMargin * 2;\n height = viewport.height - bottom + this._viewportMargin;\n }\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(viewport.bottom - origin.y + viewport.top, origin.y);\n const previousHeight = this._lastBoundingBoxSize.height;\n height = smallestDistanceToViewportEdge * 2;\n top = origin.y - smallestDistanceToViewportEdge;\n if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {\n top = origin.y - previousHeight / 2;\n }\n }\n // The overlay is opening 'right-ward' (the content flows to the right).\n const isBoundedByRightViewportEdge = (position.overlayX === 'start' && !isRtl) || (position.overlayX === 'end' && isRtl);\n // The overlay is opening 'left-ward' (the content flows to the left).\n const isBoundedByLeftViewportEdge = (position.overlayX === 'end' && !isRtl) || (position.overlayX === 'start' && isRtl);\n let width, left, right;\n if (isBoundedByLeftViewportEdge) {\n right = viewport.width - origin.x + this._viewportMargin;\n width = origin.x - this._viewportMargin;\n }\n else if (isBoundedByRightViewportEdge) {\n left = origin.x;\n width = viewport.right - origin.x;\n }\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(viewport.right - origin.x + viewport.left, origin.x);\n const previousWidth = this._lastBoundingBoxSize.width;\n width = smallestDistanceToViewportEdge * 2;\n left = origin.x - smallestDistanceToViewportEdge;\n if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {\n left = origin.x - previousWidth / 2;\n }\n }\n return { top: top, left: left, bottom: bottom, right: right, width, height };\n }\n /**\n * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\n * origin's connection point and stetches to the bounds of the viewport.\n *\n * @param origin The point on the origin element where the overlay is connected.\n * @param position The position preference\n */\n _setBoundingBoxStyles(origin, position) {\n const boundingBoxRect = this._calculateBoundingBoxRect(origin, position);\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 const styles = {};\n if (this._hasExactPosition()) {\n styles.top = styles.left = '0';\n styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = '';\n styles.width = styles.height = '100%';\n }\n else {\n const maxHeight = this._overlayRef.getConfig().maxHeight;\n const maxWidth = this._overlayRef.getConfig().maxWidth;\n styles.height = coerceCssPixelValue(boundingBoxRect.height);\n styles.top = coerceCssPixelValue(boundingBoxRect.top);\n styles.bottom = coerceCssPixelValue(boundingBoxRect.bottom);\n styles.width = coerceCssPixelValue(boundingBoxRect.width);\n styles.left = coerceCssPixelValue(boundingBoxRect.left);\n styles.right = coerceCssPixelValue(boundingBoxRect.right);\n // Push the pane content towards the proper direction.\n if (position.overlayX === 'center') {\n styles.alignItems = 'center';\n }\n else {\n styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';\n }\n if (position.overlayY === 'center') {\n styles.justifyContent = 'center';\n }\n else {\n styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';\n }\n if (maxHeight) {\n styles.maxHeight = coerceCssPixelValue(maxHeight);\n }\n if (maxWidth) {\n styles.maxWidth = coerceCssPixelValue(maxWidth);\n }\n }\n this._lastBoundingBoxSize = boundingBoxRect;\n extendStyles(this._boundingBox.style, styles);\n }\n /** Resets the styles for the bounding box so that a new positioning can be computed. */\n _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 });\n }\n /** Resets the styles for the overlay pane so that a new positioning can be computed. */\n _resetOverlayElementStyles() {\n extendStyles(this._pane.style, {\n top: '',\n left: '',\n bottom: '',\n right: '',\n position: '',\n transform: '',\n });\n }\n /** Sets positioning styles to the overlay element. */\n _setOverlayElementStyles(originPoint, position) {\n const styles = {};\n const hasExactPosition = this._hasExactPosition();\n const hasFlexibleDimensions = this._hasFlexibleDimensions;\n const config = this._overlayRef.getConfig();\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 }\n else {\n styles.position = 'static';\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 if (offsetX) {\n transformString += `translateX(${offsetX}px) `;\n }\n if (offsetY) {\n transformString += `translateY(${offsetY}px)`;\n }\n styles.transform = transformString.trim();\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 }\n else if (hasFlexibleDimensions) {\n styles.maxHeight = '';\n }\n }\n if (config.maxWidth) {\n if (hasExactPosition) {\n styles.maxWidth = coerceCssPixelValue(config.maxWidth);\n }\n else if (hasFlexibleDimensions) {\n styles.maxWidth = '';\n }\n }\n extendStyles(this._pane.style, styles);\n }\n /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayY(position, originPoint, scrollPosition) {\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: '' };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\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 }\n else {\n styles.top = coerceCssPixelValue(overlayPoint.y);\n }\n return styles;\n }\n /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayX(position, originPoint, scrollPosition) {\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: '' };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\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;\n if (this._isRtl()) {\n horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';\n }\n else {\n horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';\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 }\n else {\n styles.left = coerceCssPixelValue(overlayPoint.x);\n }\n return styles;\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 _getScrollVisibility() {\n // Note: needs fresh rects since the position could've changed.\n const originBounds = this._getOriginRect();\n const overlayBounds = this._pane.getBoundingClientRect();\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 return {\n isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),\n isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),\n isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),\n isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds),\n };\n }\n /** Subtracts the amount that an element is overflowing on an axis from its length. */\n _subtractOverflows(length, ...overflows) {\n return overflows.reduce((currentValue, currentOverflow) => {\n return currentValue - Math.max(currentOverflow, 0);\n }, length);\n }\n /** Narrows the given viewport rect by the current _viewportMargin. */\n _getNarrowedViewportRect() {\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 return {\n top: scrollPosition.top + this._viewportMargin,\n left: scrollPosition.left + this._viewportMargin,\n right: scrollPosition.left + width - this._viewportMargin,\n bottom: scrollPosition.top + height - this._viewportMargin,\n width: width - 2 * this._viewportMargin,\n height: height - 2 * this._viewportMargin,\n };\n }\n /** Whether the we're dealing with an RTL context */\n _isRtl() {\n return this._overlayRef.getDirection() === 'rtl';\n }\n /** Determines whether the overlay uses exact or flexible positioning. */\n _hasExactPosition() {\n return !this._hasFlexibleDimensions || this._isPushed;\n }\n /** Retrieves the offset of a position along the x or y axis. */\n _getOffset(position, axis) {\n if (axis === 'x') {\n // We don't do something like `position['offset' + axis]` in\n // order to avoid breking minifiers that rename properties.\n return position.offsetX == null ? this._offsetX : position.offsetX;\n }\n return position.offsetY == null ? this._offsetY : position.offsetY;\n }\n /** Validates that the current position match the expected values. */\n _validatePositions() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._preferredPositions.length) {\n throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');\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 /** Adds a single CSS class or an array of classes on the overlay panel. */\n _addPanelClasses(cssClasses) {\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 /** Clears the classes that the position strategy has applied from the overlay panel. */\n _clearPanelClasses() {\n if (this._pane) {\n this._appliedPanelClasses.forEach(cssClass => {\n this._pane.classList.remove(cssClass);\n });\n this._appliedPanelClasses = [];\n }\n }\n /** Returns the ClientRect of the current origin. */\n _getOriginRect() {\n const origin = this._origin;\n if (origin instanceof ElementRef) {\n return origin.nativeElement.getBoundingClientRect();\n }\n // Check for Element so SVG elements are also supported.\n if (origin instanceof Element) {\n return origin.getBoundingClientRect();\n }\n const width = origin.width || 0;\n const height = origin.height || 0;\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/** Shallow-extends a stylesheet object with another stylesheet object. */\nfunction extendStyles(destination, source) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n destination[key] = source[key];\n }\n }\n return destination;\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) {\n if (typeof input !== 'number' && input != null) {\n const [value, units] = input.split(cssUnitPattern);\n return !units || units === 'px' ? parseFloat(value) : null;\n }\n return input || null;\n}\n/**\n * Gets a version of an element's bounding `ClientRect` where all the values are rounded down to\n * the nearest pixel. This allows us to account for the cases where there may be sub-pixel\n * deviations in the `ClientRect` returned by the browser (e.g. when zoomed in with a percentage\n * size, see #21350).\n */\nfunction getRoundedBoundingClientRect(clientRect) {\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/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Class to be added to the overlay pane wrapper. */\nconst wrapperClass = 'cdk-global-overlay-wrapper';\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 */\nclass GlobalPositionStrategy {\n constructor() {\n this._cssPosition = 'static';\n this._topOffset = '';\n this._bottomOffset = '';\n this._leftOffset = '';\n this._rightOffset = '';\n this._alignItems = '';\n this._justifyContent = '';\n this._width = '';\n this._height = '';\n }\n attach(overlayRef) {\n const config = overlayRef.getConfig();\n this._overlayRef = overlayRef;\n if (this._width && !config.width) {\n overlayRef.updateSize({ width: this._width });\n }\n if (this._height && !config.height) {\n overlayRef.updateSize({ height: this._height });\n }\n overlayRef.hostElement.classList.add(wrapperClass);\n this._isDisposed = false;\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 = '') {\n this._bottomOffset = '';\n this._topOffset = value;\n this._alignItems = 'flex-start';\n return this;\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 = '') {\n this._rightOffset = '';\n this._leftOffset = value;\n this._justifyContent = 'flex-start';\n return this;\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 = '') {\n this._topOffset = '';\n this._bottomOffset = value;\n this._alignItems = 'flex-end';\n return this;\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 = '') {\n this._leftOffset = '';\n this._rightOffset = value;\n this._justifyContent = 'flex-end';\n return this;\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 = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({ width: value });\n }\n else {\n this._width = value;\n }\n return this;\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 = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({ height: value });\n }\n else {\n this._height = value;\n }\n return this;\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 = '') {\n this.left(offset);\n this._justifyContent = 'center';\n return this;\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 = '') {\n this.top(offset);\n this._alignItems = 'center';\n return this;\n }\n /**\n * Apply the position to the element.\n * @docs-private\n */\n apply() {\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 const styles = this._overlayRef.overlayElement.style;\n const parentStyles = this._overlayRef.hostElement.style;\n const config = this._overlayRef.getConfig();\n const { width, height, maxWidth, maxHeight } = config;\n const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') &&\n (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');\n const shouldBeFlushVertically = (height === '100%' || height === '100vh') &&\n (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');\n styles.position = this._cssPosition;\n styles.marginLeft = shouldBeFlushHorizontally ? '0' : this._leftOffset;\n styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;\n styles.marginBottom = this._bottomOffset;\n styles.marginRight = this._rightOffset;\n if (shouldBeFlushHorizontally) {\n parentStyles.justifyContent = 'flex-start';\n }\n else if (this._justifyContent === 'center') {\n parentStyles.justifyContent = 'center';\n }\n else if (this._overlayRef.getConfig().direction === 'rtl') {\n // In RTL the browser will invert `flex-start` and `flex-end` automatically, but we\n // don't want that because our positioning is explicitly `left` and `right`, hence\n // why we do another inversion to ensure that the overlay stays in the same position.\n // TODO: reconsider this if we add `start` and `end` methods.\n if (this._justifyContent === 'flex-start') {\n parentStyles.justifyContent = 'flex-end';\n }\n else if (this._justifyContent === 'flex-end') {\n parentStyles.justifyContent = 'flex-start';\n }\n }\n else {\n parentStyles.justifyContent = this._justifyContent;\n }\n parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;\n }\n /**\n * Cleans up the DOM changes from the position strategy.\n * @docs-private\n */\n dispose() {\n if (this._isDisposed || !this._overlayRef) {\n return;\n }\n const styles = this._overlayRef.overlayElement.style;\n const parent = this._overlayRef.hostElement;\n const parentStyles = parent.style;\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 this._overlayRef = null;\n this._isDisposed = true;\n }\n}\n\n/** Builder for overlay position strategy. */\nclass OverlayPositionBuilder {\n constructor(_viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n }\n /**\n * Creates a global position strategy.\n */\n global() {\n return new GlobalPositionStrategy();\n }\n /**\n * Creates a flexible position strategy.\n * @param origin Origin relative to which to position the overlay.\n */\n flexibleConnectedTo(origin) {\n return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document, this._platform, this._overlayContainer);\n }\n}\nOverlayPositionBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayPositionBuilder, deps: [{ token: i1.ViewportRuler }, { token: DOCUMENT }, { token: i1$1.Platform }, { token: OverlayContainer }], target: i0.ɵɵFactoryTarget.Injectable });\nOverlayPositionBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayPositionBuilder, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayPositionBuilder, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: i1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }, { type: OverlayContainer }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * 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 */\nclass BaseOverlayDispatcher {\n constructor(document) {\n /** Currently attached overlays in the order they were attached. */\n this._attachedOverlays = [];\n this._document = document;\n }\n ngOnDestroy() {\n this.detach();\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n // Ensure that we don't get the same overlay multiple times.\n this.remove(overlayRef);\n this._attachedOverlays.push(overlayRef);\n }\n /** Remove an overlay from the list of attached overlay refs. */\n remove(overlayRef) {\n const index = this._attachedOverlays.indexOf(overlayRef);\n if (index > -1) {\n this._attachedOverlays.splice(index, 1);\n }\n // Remove the global listener once there are no more overlays.\n if (this._attachedOverlays.length === 0) {\n this.detach();\n }\n }\n}\nBaseOverlayDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: BaseOverlayDispatcher, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });\nBaseOverlayDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: BaseOverlayDispatcher, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: BaseOverlayDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * 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 */\nclass OverlayKeyboardDispatcher extends BaseOverlayDispatcher {\n constructor(document, \n /** @breaking-change 14.0.0 _ngZone will be required. */\n _ngZone) {\n super(document);\n this._ngZone = _ngZone;\n /** Keyboard event listener that will be attached to the body. */\n this._keydownListener = (event) => {\n const overlays = this._attachedOverlays;\n for (let i = overlays.length - 1; i > -1; i--) {\n // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.\n // We want to target the most recent overlay, rather than trying to match where the event came\n // from, because some components might open an overlay, but keep focus on a trigger element\n // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,\n // because we don't want overlays that don't handle keyboard events to block the ones below\n // them that do.\n if (overlays[i]._keydownEvents.observers.length > 0) {\n const keydownEvents = overlays[i]._keydownEvents;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.run(() => keydownEvents.next(event));\n }\n else {\n keydownEvents.next(event);\n }\n break;\n }\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\n // Lazily start dispatcher once first overlay is added\n if (!this._isAttached) {\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.runOutsideAngular(() => this._document.body.addEventListener('keydown', this._keydownListener));\n }\n else {\n this._document.body.addEventListener('keydown', this._keydownListener);\n }\n this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n this._document.body.removeEventListener('keydown', this._keydownListener);\n this._isAttached = false;\n }\n }\n}\nOverlayKeyboardDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayKeyboardDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nOverlayKeyboardDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayKeyboardDispatcher, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayKeyboardDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.NgZone, decorators: [{\n type: Optional\n }] }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * 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 */\nclass OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {\n constructor(document, _platform, \n /** @breaking-change 14.0.0 _ngZone will be required. */\n _ngZone) {\n super(document);\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._cursorStyleIsSet = false;\n /** Store pointerdown event target to track origin of click. */\n this._pointerDownListener = (event) => {\n this._pointerDownEventTarget = _getEventTarget(event);\n };\n /** Click event listener that will be attached to the body propagate phase. */\n this._clickListener = (event) => {\n const target = _getEventTarget(event);\n // In case of a click event, we want to check the origin of the click\n // (e.g. in case where a user starts a click inside the overlay and\n // releases the click outside of it).\n // This is done by using the event target of the preceding pointerdown event.\n // Every click event caused by a pointer device has a preceding pointerdown\n // event, unless the click was programmatically triggered (e.g. in a unit test).\n const origin = event.type === 'click' && this._pointerDownEventTarget\n ? this._pointerDownEventTarget\n : target;\n // Reset the stored pointerdown event target, to avoid having it interfere\n // in subsequent events.\n this._pointerDownEventTarget = null;\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 // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.\n // We want to target all overlays for which the click could be considered as outside click.\n // As soon as we reach an overlay for which the click is not outside click we break off\n // the loop.\n for (let i = overlays.length - 1; i > -1; i--) {\n const overlayRef = overlays[i];\n if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {\n continue;\n }\n // If it's a click inside the overlay, just break - we should do nothing\n // If it's an outside click (both origin and target of the click) dispatch the mouse event,\n // and proceed with the next overlay\n if (overlayRef.overlayElement.contains(target) ||\n overlayRef.overlayElement.contains(origin)) {\n break;\n }\n const outsidePointerEvents = overlayRef._outsidePointerEvents;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.run(() => outsidePointerEvents.next(event));\n }\n else {\n outsidePointerEvents.next(event);\n }\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\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 /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.runOutsideAngular(() => this._addEventListeners(body));\n }\n else {\n this._addEventListeners(body);\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 this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n const body = this._document.body;\n body.removeEventListener('pointerdown', this._pointerDownListener, true);\n body.removeEventListener('click', this._clickListener, true);\n body.removeEventListener('auxclick', this._clickListener, true);\n body.removeEventListener('contextmenu', this._clickListener, true);\n if (this._platform.IOS && this._cursorStyleIsSet) {\n body.style.cursor = this._cursorOriginalValue;\n this._cursorStyleIsSet = false;\n }\n this._isAttached = false;\n }\n }\n _addEventListeners(body) {\n body.addEventListener('pointerdown', this._pointerDownListener, true);\n body.addEventListener('click', this._clickListener, true);\n body.addEventListener('auxclick', this._clickListener, true);\n body.addEventListener('contextmenu', this._clickListener, true);\n }\n}\nOverlayOutsideClickDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayOutsideClickDispatcher, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nOverlayOutsideClickDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayOutsideClickDispatcher, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayOutsideClickDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }, { type: i0.NgZone, decorators: [{\n type: Optional\n }] }];\n } });\n\n/** Next overlay unique ID. */\nlet nextUniqueId = 0;\n// Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver\n// which needs to be different depending on where OverlayModule is imported.\n/**\n * 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 */\nclass Overlay {\n constructor(\n /** Scrolling strategies that can be used when creating an overlay. */\n scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, _location, _outsideClickDispatcher) {\n this.scrollStrategies = scrollStrategies;\n this._overlayContainer = _overlayContainer;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._positionBuilder = _positionBuilder;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._injector = _injector;\n this._ngZone = _ngZone;\n this._document = _document;\n this._directionality = _directionality;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\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) {\n const host = this._createHostElement();\n const pane = this._createPaneElement(host);\n const portalOutlet = this._createPortalOutlet(pane);\n const overlayConfig = new OverlayConfig(config);\n overlayConfig.direction = overlayConfig.direction || this._directionality.value;\n return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone, this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher);\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() {\n return this._positionBuilder;\n }\n /**\n * Creates the DOM element for an overlay and appends it to the overlay container.\n * @returns Newly-created pane element\n */\n _createPaneElement(host) {\n const pane = this._document.createElement('div');\n pane.id = `cdk-overlay-${nextUniqueId++}`;\n pane.classList.add('cdk-overlay-pane');\n host.appendChild(pane);\n return pane;\n }\n /**\n * Creates the host element that wraps around an overlay\n * and can be used for advanced positioning.\n * @returns Newly-create host element.\n */\n _createHostElement() {\n const host = this._document.createElement('div');\n this._overlayContainer.getContainerElement().appendChild(host);\n return host;\n }\n /**\n * Create a DomPortalOutlet into which the overlay content can be loaded.\n * @param pane The DOM element to turn into a portal outlet.\n * @returns A portal outlet for the given DOM element.\n */\n _createPortalOutlet(pane) {\n // We have to resolve the ApplicationRef later in order to allow people\n // to use overlay-based providers during app initialization.\n if (!this._appRef) {\n this._appRef = this._injector.get(ApplicationRef);\n }\n return new DomPortalOutlet(pane, this._componentFactoryResolver, this._appRef, this._injector, this._document);\n }\n}\nOverlay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: Overlay, deps: [{ token: ScrollStrategyOptions }, { token: OverlayContainer }, { token: i0.ComponentFactoryResolver }, { token: OverlayPositionBuilder }, { token: OverlayKeyboardDispatcher }, { token: i0.Injector }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i5.Directionality }, { token: i6.Location }, { token: OverlayOutsideClickDispatcher }], target: i0.ɵɵFactoryTarget.Injectable });\nOverlay.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: Overlay });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: Overlay, decorators: [{\n type: Injectable\n }], ctorParameters: function () {\n return [{ type: ScrollStrategyOptions }, { type: OverlayContainer }, { type: i0.ComponentFactoryResolver }, { type: OverlayPositionBuilder }, { type: OverlayKeyboardDispatcher }, { type: i0.Injector }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i5.Directionality }, { type: i6.Location }, { type: OverlayOutsideClickDispatcher }];\n } });\n\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\nconst defaultPositionList = [\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/** Injection token that determines the scroll handling while the connected overlay is open. */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = new InjectionToken('cdk-connected-overlay-scroll-strategy');\n/**\n * Directive applied to an element to make it usable as an origin for an Overlay using a\n * ConnectedPositionStrategy.\n */\nclass CdkOverlayOrigin {\n constructor(\n /** Reference to the element on which the directive is applied. */\n elementRef) {\n this.elementRef = elementRef;\n }\n}\nCdkOverlayOrigin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkOverlayOrigin, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkOverlayOrigin.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkOverlayOrigin, selector: \"[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]\", exportAs: [\"cdkOverlayOrigin\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkOverlayOrigin, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\n exportAs: 'cdkOverlayOrigin',\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\nclass CdkConnectedOverlay {\n // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n constructor(_overlay, templateRef, viewContainerRef, scrollStrategyFactory, _dir) {\n this._overlay = _overlay;\n this._dir = _dir;\n this._hasBackdrop = false;\n this._lockPosition = false;\n this._growAfterOpen = false;\n this._flexibleDimensions = false;\n this._push = false;\n this._backdropSubscription = Subscription.EMPTY;\n this._attachSubscription = Subscription.EMPTY;\n this._detachSubscription = Subscription.EMPTY;\n this._positionSubscription = Subscription.EMPTY;\n /** Margin between the overlay and the viewport edges. */\n this.viewportMargin = 0;\n /** Whether the overlay is open. */\n this.open = false;\n /** Whether the overlay can be closed by user interaction. */\n this.disableClose = false;\n /** Event emitted when the backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Event emitted when the position has changed. */\n this.positionChange = new EventEmitter();\n /** Event emitted when the overlay has been attached. */\n this.attach = new EventEmitter();\n /** Event emitted when the overlay has been detached. */\n this.detach = new EventEmitter();\n /** Emits when there are keyboard events that are targeted at the overlay. */\n this.overlayKeydown = new EventEmitter();\n /** Emits when there are mouse outside click events that are targeted at the overlay. */\n this.overlayOutsideClick = new EventEmitter();\n this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n this._scrollStrategyFactory = scrollStrategyFactory;\n this.scrollStrategy = this._scrollStrategyFactory();\n }\n /** The offset in pixels for the overlay connection point on the x-axis */\n get offsetX() {\n return this._offsetX;\n }\n set offsetX(offsetX) {\n this._offsetX = offsetX;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** The offset in pixels for the overlay connection point on the y-axis */\n get offsetY() {\n return this._offsetY;\n }\n set offsetY(offsetY) {\n this._offsetY = offsetY;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** Whether or not the overlay should attach a backdrop. */\n get hasBackdrop() {\n return this._hasBackdrop;\n }\n set hasBackdrop(value) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n /** Whether or not the overlay should be locked when scrolling. */\n get lockPosition() {\n return this._lockPosition;\n }\n set lockPosition(value) {\n this._lockPosition = coerceBooleanProperty(value);\n }\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n get flexibleDimensions() {\n return this._flexibleDimensions;\n }\n set flexibleDimensions(value) {\n this._flexibleDimensions = coerceBooleanProperty(value);\n }\n /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n get growAfterOpen() {\n return this._growAfterOpen;\n }\n set growAfterOpen(value) {\n this._growAfterOpen = coerceBooleanProperty(value);\n }\n /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n get push() {\n return this._push;\n }\n set push(value) {\n this._push = coerceBooleanProperty(value);\n }\n /** The associated overlay reference. */\n get overlayRef() {\n return this._overlayRef;\n }\n /** The element's layout direction. */\n get dir() {\n return this._dir ? this._dir.value : 'ltr';\n }\n ngOnDestroy() {\n this._attachSubscription.unsubscribe();\n this._detachSubscription.unsubscribe();\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n }\n }\n ngOnChanges(changes) {\n if (this._position) {\n this._updatePositionStrategy(this._position);\n this._overlayRef.updateSize({\n width: this.width,\n minWidth: this.minWidth,\n height: this.height,\n minHeight: this.minHeight,\n });\n if (changes['origin'] && this.open) {\n this._position.apply();\n }\n }\n if (changes['open']) {\n this.open ? this._attachOverlay() : this._detachOverlay();\n }\n }\n /** Creates an overlay */\n _createOverlay() {\n if (!this.positions || !this.positions.length) {\n this.positions = defaultPositionList;\n }\n const overlayRef = (this._overlayRef = this._overlay.create(this._buildConfig()));\n this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit());\n this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit());\n overlayRef.keydownEvents().subscribe((event) => {\n this.overlayKeydown.next(event);\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this._detachOverlay();\n }\n });\n this._overlayRef.outsidePointerEvents().subscribe((event) => {\n this.overlayOutsideClick.next(event);\n });\n }\n /** Builds the overlay config based on the directive's inputs */\n _buildConfig() {\n const positionStrategy = (this._position =\n this.positionStrategy || this._createPositionStrategy());\n const overlayConfig = new OverlayConfig({\n direction: this._dir,\n positionStrategy,\n scrollStrategy: this.scrollStrategy,\n hasBackdrop: this.hasBackdrop,\n });\n if (this.width || this.width === 0) {\n overlayConfig.width = this.width;\n }\n if (this.height || this.height === 0) {\n overlayConfig.height = this.height;\n }\n if (this.minWidth || this.minWidth === 0) {\n overlayConfig.minWidth = this.minWidth;\n }\n if (this.minHeight || this.minHeight === 0) {\n overlayConfig.minHeight = this.minHeight;\n }\n if (this.backdropClass) {\n overlayConfig.backdropClass = this.backdropClass;\n }\n if (this.panelClass) {\n overlayConfig.panelClass = this.panelClass;\n }\n return overlayConfig;\n }\n /** Updates the state of a position strategy, based on the values of the directive inputs. */\n _updatePositionStrategy(positionStrategy) {\n const positions = 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 return positionStrategy\n .setOrigin(this._getFlexibleConnectedPositionStrategyOrigin())\n .withPositions(positions)\n .withFlexibleDimensions(this.flexibleDimensions)\n .withPush(this.push)\n .withGrowAfterOpen(this.growAfterOpen)\n .withViewportMargin(this.viewportMargin)\n .withLockedPosition(this.lockPosition)\n .withTransformOriginOn(this.transformOriginSelector);\n }\n /** Returns the position strategy of the overlay to be set on the overlay config */\n _createPositionStrategy() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._getFlexibleConnectedPositionStrategyOrigin());\n this._updatePositionStrategy(strategy);\n return strategy;\n }\n _getFlexibleConnectedPositionStrategyOrigin() {\n if (this.origin instanceof CdkOverlayOrigin) {\n return this.origin.elementRef;\n }\n else {\n return this.origin;\n }\n }\n /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\n _attachOverlay() {\n if (!this._overlayRef) {\n this._createOverlay();\n }\n else {\n // Update the overlay size, in case the directive's inputs have changed\n this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop;\n }\n if (!this._overlayRef.hasAttached()) {\n this._overlayRef.attach(this._templatePortal);\n }\n if (this.hasBackdrop) {\n this._backdropSubscription = this._overlayRef.backdropClick().subscribe(event => {\n this.backdropClick.emit(event);\n });\n }\n else {\n this._backdropSubscription.unsubscribe();\n }\n this._positionSubscription.unsubscribe();\n // Only subscribe to `positionChanges` if requested, because putting\n // together all the information for it can be expensive.\n if (this.positionChange.observers.length > 0) {\n this._positionSubscription = this._position.positionChanges\n .pipe(takeWhile(() => this.positionChange.observers.length > 0))\n .subscribe(position => {\n this.positionChange.emit(position);\n if (this.positionChange.observers.length === 0) {\n this._positionSubscription.unsubscribe();\n }\n });\n }\n }\n /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\n _detachOverlay() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n }\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n }\n}\nCdkConnectedOverlay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkConnectedOverlay, deps: [{ token: Overlay }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY }, { token: i5.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkConnectedOverlay.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkConnectedOverlay, selector: \"[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]\", inputs: { origin: [\"cdkConnectedOverlayOrigin\", \"origin\"], positions: [\"cdkConnectedOverlayPositions\", \"positions\"], positionStrategy: [\"cdkConnectedOverlayPositionStrategy\", \"positionStrategy\"], offsetX: [\"cdkConnectedOverlayOffsetX\", \"offsetX\"], offsetY: [\"cdkConnectedOverlayOffsetY\", \"offsetY\"], width: [\"cdkConnectedOverlayWidth\", \"width\"], height: [\"cdkConnectedOverlayHeight\", \"height\"], minWidth: [\"cdkConnectedOverlayMinWidth\", \"minWidth\"], minHeight: [\"cdkConnectedOverlayMinHeight\", \"minHeight\"], backdropClass: [\"cdkConnectedOverlayBackdropClass\", \"backdropClass\"], panelClass: [\"cdkConnectedOverlayPanelClass\", \"panelClass\"], viewportMargin: [\"cdkConnectedOverlayViewportMargin\", \"viewportMargin\"], scrollStrategy: [\"cdkConnectedOverlayScrollStrategy\", \"scrollStrategy\"], open: [\"cdkConnectedOverlayOpen\", \"open\"], disableClose: [\"cdkConnectedOverlayDisableClose\", \"disableClose\"], transformOriginSelector: [\"cdkConnectedOverlayTransformOriginOn\", \"transformOriginSelector\"], hasBackdrop: [\"cdkConnectedOverlayHasBackdrop\", \"hasBackdrop\"], lockPosition: [\"cdkConnectedOverlayLockPosition\", \"lockPosition\"], flexibleDimensions: [\"cdkConnectedOverlayFlexibleDimensions\", \"flexibleDimensions\"], growAfterOpen: [\"cdkConnectedOverlayGrowAfterOpen\", \"growAfterOpen\"], push: [\"cdkConnectedOverlayPush\", \"push\"] }, outputs: { backdropClick: \"backdropClick\", positionChange: \"positionChange\", attach: \"attach\", detach: \"detach\", overlayKeydown: \"overlayKeydown\", overlayOutsideClick: \"overlayOutsideClick\" }, exportAs: [\"cdkConnectedOverlay\"], usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkConnectedOverlay, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\n exportAs: 'cdkConnectedOverlay',\n }]\n }], ctorParameters: function () {\n return [{ type: Overlay }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY]\n }] }, { type: i5.Directionality, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { origin: [{\n type: Input,\n args: ['cdkConnectedOverlayOrigin']\n }], positions: [{\n type: Input,\n args: ['cdkConnectedOverlayPositions']\n }], positionStrategy: [{\n type: Input,\n args: ['cdkConnectedOverlayPositionStrategy']\n }], offsetX: [{\n type: Input,\n args: ['cdkConnectedOverlayOffsetX']\n }], offsetY: [{\n type: Input,\n args: ['cdkConnectedOverlayOffsetY']\n }], width: [{\n type: Input,\n args: ['cdkConnectedOverlayWidth']\n }], height: [{\n type: Input,\n args: ['cdkConnectedOverlayHeight']\n }], minWidth: [{\n type: Input,\n args: ['cdkConnectedOverlayMinWidth']\n }], minHeight: [{\n type: Input,\n args: ['cdkConnectedOverlayMinHeight']\n }], backdropClass: [{\n type: Input,\n args: ['cdkConnectedOverlayBackdropClass']\n }], panelClass: [{\n type: Input,\n args: ['cdkConnectedOverlayPanelClass']\n }], viewportMargin: [{\n type: Input,\n args: ['cdkConnectedOverlayViewportMargin']\n }], scrollStrategy: [{\n type: Input,\n args: ['cdkConnectedOverlayScrollStrategy']\n }], open: [{\n type: Input,\n args: ['cdkConnectedOverlayOpen']\n }], disableClose: [{\n type: Input,\n args: ['cdkConnectedOverlayDisableClose']\n }], transformOriginSelector: [{\n type: Input,\n args: ['cdkConnectedOverlayTransformOriginOn']\n }], hasBackdrop: [{\n type: Input,\n args: ['cdkConnectedOverlayHasBackdrop']\n }], lockPosition: [{\n type: Input,\n args: ['cdkConnectedOverlayLockPosition']\n }], flexibleDimensions: [{\n type: Input,\n args: ['cdkConnectedOverlayFlexibleDimensions']\n }], growAfterOpen: [{\n type: Input,\n args: ['cdkConnectedOverlayGrowAfterOpen']\n }], push: [{\n type: Input,\n args: ['cdkConnectedOverlayPush']\n }], backdropClick: [{\n type: Output\n }], positionChange: [{\n type: Output\n }], attach: [{\n type: Output\n }], detach: [{\n type: Output\n }], overlayKeydown: [{\n type: Output\n }], overlayOutsideClick: [{\n type: Output\n }] } });\n/** @docs-private */\nfunction CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = {\n provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass OverlayModule {\n}\nOverlayModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nOverlayModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayModule, declarations: [CdkConnectedOverlay, CdkOverlayOrigin], imports: [BidiModule, PortalModule, ScrollingModule], exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule] });\nOverlayModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayModule, providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER], imports: [[BidiModule, PortalModule, ScrollingModule], ScrollingModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: OverlayModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [BidiModule, PortalModule, ScrollingModule],\n exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule],\n declarations: [CdkConnectedOverlay, CdkOverlayOrigin],\n providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Alternative to OverlayContainer that supports correct displaying of overlay elements in\n * Fullscreen mode\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n *\n * Should be provided in the root component.\n */\nclass FullscreenOverlayContainer extends OverlayContainer {\n constructor(_document, platform) {\n super(_document, platform);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._fullScreenEventName && this._fullScreenListener) {\n this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);\n }\n }\n _createContainer() {\n super._createContainer();\n this._adjustParentForFullscreenChange();\n this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange());\n }\n _adjustParentForFullscreenChange() {\n if (!this._containerElement) {\n return;\n }\n const fullscreenElement = this.getFullscreenElement();\n const parent = fullscreenElement || this._document.body;\n parent.appendChild(this._containerElement);\n }\n _addFullscreenChangeListener(fn) {\n const eventName = this._getEventName();\n if (eventName) {\n if (this._fullScreenListener) {\n this._document.removeEventListener(eventName, this._fullScreenListener);\n }\n this._document.addEventListener(eventName, fn);\n this._fullScreenListener = fn;\n }\n }\n _getEventName() {\n if (!this._fullScreenEventName) {\n const _document = this._document;\n if (_document.fullscreenEnabled) {\n this._fullScreenEventName = 'fullscreenchange';\n }\n else if (_document.webkitFullscreenEnabled) {\n this._fullScreenEventName = 'webkitfullscreenchange';\n }\n else if (_document.mozFullScreenEnabled) {\n this._fullScreenEventName = 'mozfullscreenchange';\n }\n else if (_document.msFullscreenEnabled) {\n this._fullScreenEventName = 'MSFullscreenChange';\n }\n }\n return this._fullScreenEventName;\n }\n /**\n * When the page is put into fullscreen mode, a specific element is specified.\n * Only that element and its children are visible when in fullscreen mode.\n */\n getFullscreenElement() {\n const _document = this._document;\n return (_document.fullscreenElement ||\n _document.webkitFullscreenElement ||\n _document.mozFullScreenElement ||\n _document.msFullscreenElement ||\n null);\n }\n}\nFullscreenOverlayContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: FullscreenOverlayContainer, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }], target: i0.ɵɵFactoryTarget.Injectable });\nFullscreenOverlayContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: FullscreenOverlayContainer, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: FullscreenOverlayContainer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BlockScrollStrategy, CdkConnectedOverlay, CdkOverlayOrigin, CloseScrollStrategy, ConnectedOverlayPositionChange, ConnectionPositionPair, FlexibleConnectedPositionStrategy, FullscreenOverlayContainer, GlobalPositionStrategy, NoopScrollStrategy, Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayModule, OverlayOutsideClickDispatcher, OverlayPositionBuilder, OverlayRef, RepositionScrollStrategy, ScrollStrategyOptions, ScrollingVisibility, validateHorizontalPosition, validateVerticalPosition };\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeWhile(predicate, inclusive = false) {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n const result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n }));\n });\n}\n","import * as i0 from '@angular/core';\nimport { ElementRef, Injector, Directive, EventEmitter, Inject, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Throws an exception when attempting to attach a null portal to a host.\n * @docs-private\n */\nfunction throwNullPortalError() {\n throw Error('Must provide a portal to attach');\n}\n/**\n * Throws an exception when attempting to attach a portal to a host that is already attached.\n * @docs-private\n */\nfunction throwPortalAlreadyAttachedError() {\n throw Error('Host already has a portal attached');\n}\n/**\n * Throws an exception when attempting to attach a portal to an already-disposed host.\n * @docs-private\n */\nfunction throwPortalOutletAlreadyDisposedError() {\n throw Error('This PortalOutlet has already been disposed');\n}\n/**\n * Throws an exception when attempting to attach an unknown portal type.\n * @docs-private\n */\nfunction throwUnknownPortalTypeError() {\n throw Error('Attempting to attach an unknown Portal type. BasePortalOutlet accepts either ' +\n 'a ComponentPortal or a TemplatePortal.');\n}\n/**\n * Throws an exception when attempting to attach a portal to a null host.\n * @docs-private\n */\nfunction throwNullPortalOutletError() {\n throw Error('Attempting to attach a portal to a null PortalOutlet');\n}\n/**\n * Throws an exception when attempting to detach a portal that is not attached.\n * @docs-private\n */\nfunction throwNoPortalAttachedError() {\n throw Error('Attempting to detach a portal that is not attached to a host');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A `Portal` is something that you want to render somewhere else.\n * It can be attach to / detached from a `PortalOutlet`.\n */\nclass Portal {\n /** Attach this portal to a host. */\n attach(host) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (host == null) {\n throwNullPortalOutletError();\n }\n if (host.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n }\n this._attachedHost = host;\n return host.attach(this);\n }\n /** Detach this portal from its host */\n detach() {\n let host = this._attachedHost;\n if (host != null) {\n this._attachedHost = null;\n host.detach();\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwNoPortalAttachedError();\n }\n }\n /** Whether this portal is attached to a host. */\n get isAttached() {\n return this._attachedHost != null;\n }\n /**\n * Sets the PortalOutlet reference without performing `attach()`. This is used directly by\n * the PortalOutlet when it is performing an `attach()` or `detach()`.\n */\n setAttachedHost(host) {\n this._attachedHost = host;\n }\n}\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nclass ComponentPortal extends Portal {\n constructor(component, viewContainerRef, injector, componentFactoryResolver) {\n super();\n this.component = component;\n this.viewContainerRef = viewContainerRef;\n this.injector = injector;\n this.componentFactoryResolver = componentFactoryResolver;\n }\n}\n/**\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\n */\nclass TemplatePortal extends Portal {\n constructor(template, viewContainerRef, context) {\n super();\n this.templateRef = template;\n this.viewContainerRef = viewContainerRef;\n this.context = context;\n }\n get origin() {\n return this.templateRef.elementRef;\n }\n /**\n * Attach the portal to the provided `PortalOutlet`.\n * When a context is provided it will override the `context` property of the `TemplatePortal`\n * instance.\n */\n attach(host, context = this.context) {\n this.context = context;\n return super.attach(host);\n }\n detach() {\n this.context = undefined;\n return super.detach();\n }\n}\n/**\n * A `DomPortal` is a portal whose DOM element will be taken from its current position\n * in the DOM and moved into a portal outlet, when it is attached. On detach, the content\n * will be restored to its original position.\n */\nclass DomPortal extends Portal {\n constructor(element) {\n super();\n this.element = element instanceof ElementRef ? element.nativeElement : element;\n }\n}\n/**\n * Partial implementation of PortalOutlet that handles attaching\n * ComponentPortal and TemplatePortal.\n */\nclass BasePortalOutlet {\n constructor() {\n /** Whether this host has already been permanently disposed. */\n this._isDisposed = false;\n // @breaking-change 10.0.0 `attachDomPortal` to become a required abstract method.\n this.attachDomPortal = null;\n }\n /** Whether this host has an attached portal. */\n hasAttached() {\n return !!this._attachedPortal;\n }\n /** Attaches a portal. */\n attach(portal) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!portal) {\n throwNullPortalError();\n }\n if (this.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n if (this._isDisposed) {\n throwPortalOutletAlreadyDisposedError();\n }\n }\n if (portal instanceof ComponentPortal) {\n this._attachedPortal = portal;\n return this.attachComponentPortal(portal);\n }\n else if (portal instanceof TemplatePortal) {\n this._attachedPortal = portal;\n return this.attachTemplatePortal(portal);\n // @breaking-change 10.0.0 remove null check for `this.attachDomPortal`.\n }\n else if (this.attachDomPortal && portal instanceof DomPortal) {\n this._attachedPortal = portal;\n return this.attachDomPortal(portal);\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwUnknownPortalTypeError();\n }\n }\n /** Detaches a previously attached portal. */\n detach() {\n if (this._attachedPortal) {\n this._attachedPortal.setAttachedHost(null);\n this._attachedPortal = null;\n }\n this._invokeDisposeFn();\n }\n /** Permanently dispose of this portal host. */\n dispose() {\n if (this.hasAttached()) {\n this.detach();\n }\n this._invokeDisposeFn();\n this._isDisposed = true;\n }\n /** @docs-private */\n setDisposeFn(fn) {\n this._disposeFn = fn;\n }\n _invokeDisposeFn() {\n if (this._disposeFn) {\n this._disposeFn();\n this._disposeFn = null;\n }\n }\n}\n/**\n * @deprecated Use `BasePortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass BasePortalHost extends BasePortalOutlet {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n */\nclass DomPortalOutlet extends BasePortalOutlet {\n /**\n * @param outletElement Element into which the content is projected.\n * @param _componentFactoryResolver Used to resolve the component factory.\n * Only required when attaching component portals.\n * @param _appRef Reference to the application. Only used in component portals when there\n * is no `ViewContainerRef` available.\n * @param _defaultInjector Injector to use as a fallback when the portal being attached doesn't\n * have one. Only used for component portals.\n * @param _document Reference to the document. Used when attaching a DOM portal. Will eventually\n * become a required parameter.\n */\n constructor(\n /** Element into which the content is projected. */\n outletElement, _componentFactoryResolver, _appRef, _defaultInjector, \n /**\n * @deprecated `_document` Parameter to be made required.\n * @breaking-change 10.0.0\n */\n _document) {\n super();\n this.outletElement = outletElement;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._appRef = _appRef;\n this._defaultInjector = _defaultInjector;\n /**\n * Attaches a DOM portal by transferring its content into the outlet.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n // @breaking-change 10.0.0 Remove check and error once the\n // `_document` constructor parameter is required.\n if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot attach DOM portal without _document constructor parameter');\n }\n const element = portal.element;\n if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('DOM portal content must be attached to a parent node.');\n }\n // Anchor used to save the element's previous position so\n // that we can restore it when the portal is detached.\n const anchorNode = this._document.createComment('dom-portal');\n element.parentNode.insertBefore(anchorNode, element);\n this.outletElement.appendChild(element);\n this._attachedPortal = portal;\n super.setDisposeFn(() => {\n // We can't use `replaceWith` here because IE doesn't support it.\n if (anchorNode.parentNode) {\n anchorNode.parentNode.replaceChild(element, anchorNode);\n }\n });\n };\n this._document = _document;\n }\n /**\n * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n * @param portal Portal to be attached\n * @returns Reference to the created component.\n */\n attachComponentPortal(portal) {\n const resolver = (portal.componentFactoryResolver || this._componentFactoryResolver);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !resolver) {\n throw Error('Cannot attach component portal to outlet without a ComponentFactoryResolver.');\n }\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n let componentRef;\n // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n // for the component (in terms of Angular's component tree, not rendering).\n // When the ViewContainerRef is missing, we use the factory to create the component directly\n // and then manually attach the view to the application.\n if (portal.viewContainerRef) {\n componentRef = portal.viewContainerRef.createComponent(componentFactory, portal.viewContainerRef.length, portal.injector || portal.viewContainerRef.injector);\n this.setDisposeFn(() => componentRef.destroy());\n }\n else {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._appRef) {\n throw Error('Cannot attach component portal to outlet without an ApplicationRef.');\n }\n componentRef = componentFactory.create(portal.injector || this._defaultInjector || Injector.NULL);\n this._appRef.attachView(componentRef.hostView);\n this.setDisposeFn(() => {\n // Verify that the ApplicationRef has registered views before trying to detach a host view.\n // This check also protects the `detachView` from being called on a destroyed ApplicationRef.\n if (this._appRef.viewCount > 0) {\n this._appRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n });\n }\n // At this point the component has been instantiated, so we move it to the location in the DOM\n // where we want it to be rendered.\n this.outletElement.appendChild(this._getComponentRootNode(componentRef));\n this._attachedPortal = portal;\n return componentRef;\n }\n /**\n * Attaches a template portal to the DOM as an embedded view.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n let viewContainer = portal.viewContainerRef;\n let viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context);\n // The method `createEmbeddedView` will add the view as a child of the viewContainer.\n // But for the DomPortalOutlet the view can be added everywhere in the DOM\n // (e.g Overlay Container) To move the view to the specified host element. We just\n // re-append the existing root nodes.\n viewRef.rootNodes.forEach(rootNode => this.outletElement.appendChild(rootNode));\n // Note that we want to detect changes after the nodes have been moved so that\n // any directives inside the portal that are looking at the DOM inside a lifecycle\n // hook won't be invoked too early.\n viewRef.detectChanges();\n this.setDisposeFn(() => {\n let index = viewContainer.indexOf(viewRef);\n if (index !== -1) {\n viewContainer.remove(index);\n }\n });\n this._attachedPortal = portal;\n // TODO(jelbourn): Return locals from view.\n return viewRef;\n }\n /**\n * Clears out a portal from the DOM.\n */\n dispose() {\n super.dispose();\n this.outletElement.remove();\n }\n /** Gets the root HTMLElement for an instantiated component. */\n _getComponentRootNode(componentRef) {\n return componentRef.hostView.rootNodes[0];\n }\n}\n/**\n * @deprecated Use `DomPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass DomPortalHost extends DomPortalOutlet {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,\n * the directive instance itself can be attached to a host, enabling declarative use of portals.\n */\nclass CdkPortal extends TemplatePortal {\n constructor(templateRef, viewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\nCdkPortal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkPortal, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkPortal.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkPortal, selector: \"[cdkPortal]\", exportAs: [\"cdkPortal\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkPortal, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkPortal]',\n exportAs: 'cdkPortal',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });\n/**\n * @deprecated Use `CdkPortal` instead.\n * @breaking-change 9.0.0\n */\nclass TemplatePortalDirective extends CdkPortal {\n}\nTemplatePortalDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: TemplatePortalDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nTemplatePortalDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: TemplatePortalDirective, selector: \"[cdk-portal], [portal]\", providers: [\n {\n provide: CdkPortal,\n useExisting: TemplatePortalDirective,\n },\n ], exportAs: [\"cdkPortal\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: TemplatePortalDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdk-portal], [portal]',\n exportAs: 'cdkPortal',\n providers: [\n {\n provide: CdkPortal,\n useExisting: TemplatePortalDirective,\n },\n ],\n }]\n }] });\n/**\n * Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be\n * directly attached to it, enabling declarative use.\n *\n * Usage:\n * `