-
Notifications
You must be signed in to change notification settings - Fork 1
/
default~code-code-example-module-ngfactory~code-code-tabs-module-ngfactory.8ef337c56e7a06e6c4e2.js.map
1 lines (1 loc) · 355 KB
/
default~code-code-example-module-ngfactory~code-code-tabs-module-ngfactory.8ef337c56e7a06e6c4e2.js.map
1
{"version":3,"sources":["webpack:///./src/app/shared/copier.service.ts","webpack:///./src/app/custom-elements/code/code.component.ngfactory.js.pre-build-optimizer.js","webpack:///./src/app/custom-elements/code/code.component.ts.CodeComponent.html","webpack:///./node_modules/@angular/cdk/esm5/portal.es5.js.pre-build-optimizer.js","webpack:///./src/app/custom-elements/code/code.component.ts","webpack:///./src/app/custom-elements/code/code.component.ts.pre-build-optimizer.js","webpack:///./node_modules/rxjs/_esm5/internal/util/Immediate.js.pre-build-optimizer.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AsapAction.js.pre-build-optimizer.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AsapScheduler.js.pre-build-optimizer.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/asap.js.pre-build-optimizer.js","webpack:///./src/app/custom-elements/code/code.module.ts","webpack:///./node_modules/@angular/cdk/esm5/overlay.es5.js.pre-build-optimizer.js","webpack:///./node_modules/@angular/cdk/esm5/layout.es5.js.pre-build-optimizer.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromEventPattern.js.pre-build-optimizer.js","webpack:///./node_modules/@angular/material/esm5/snack-bar.es5.js.pre-build-optimizer.js","webpack:///./src/app/custom-elements/code/pretty-printer.service.ts","webpack:///./node_modules/@angular/material/snack-bar/typings/index.ngfactory.js.pre-build-optimizer.js","webpack:///./node_modules/@angular/material/snack-bar/typings/index.d.ts.MatSnackBarContainer.html","webpack:///./node_modules/@angular/material/snack-bar/typings/index.d.ts.SimpleSnackBar.html"],"names":["__webpack_require__","d","__webpack_exports__","CopierService","prototype","createFake","text","docElem","document","documentElement","isRTL","getAttribute","this","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","window","pageYOffset","scrollTop","top","setAttribute","value","body","appendChild","select","setSelectionRange","length","removeFake","removeChild","copyText","execCommand","err","RenderType_CodeComponent","View_CodeComponent_0","CodeComponentNgFactory","_angular_core__WEBPACK_IMPORTED_MODULE_0__","_angular_common__WEBPACK_IMPORTED_MODULE_1__","_code_component__WEBPACK_IMPORTED_MODULE_2__","_angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_3__","_pretty_printer_service__WEBPACK_IMPORTED_MODULE_4__","_shared_copier_service__WEBPACK_IMPORTED_MODULE_5__","_shared_logger_service__WEBPACK_IMPORTED_MODULE_6__","encapsulation","styles","data","View_CodeComponent_1","_l","_v","en","$event","ad","component","doCopy","_ck","ariaLabel","codeContainer","ngIf","hideCopy","language","View_CodeComponent_Host_0","linenums","path","region","header","codeFormatted","ComponentPortal","TemplatePortal","BasePortalOutlet","DomPortalOutlet","CdkPortal","CdkPortalOutlet","PortalModule","PortalInjector","tslib__WEBPACK_IMPORTED_MODULE_0__","_angular_core__WEBPACK_IMPORTED_MODULE_1__","throwPortalAlreadyAttachedError","Error","Portal","attach","host","throwNullPortalOutletError","hasAttached","_attachedHost","detach","throwNoPortalAttachedError","Object","defineProperty","get","enumerable","configurable","setAttachedHost","_super","viewContainerRef","injector","componentFactoryResolver","_this","call","template","context","templateRef","elementRef","undefined","_isDisposed","_attachedPortal","portal","throwNullPortalError","throwPortalOutletAlreadyDisposedError","attachComponentPortal","attachTemplatePortal","throwUnknownPortalTypeError","_invokeDisposeFn","dispose","setDisposeFn","fn","_disposeFn","outletElement","_componentFactoryResolver","_appRef","_defaultInjector","componentRef","componentFactory","resolveComponentFactory","createComponent","destroy","create","attachView","hostView","detachView","_getComponentRootNode","viewContainer","viewRef","createEmbeddedView","detectChanges","rootNodes","forEach","rootNode","index","indexOf","remove","parentNode","_viewContainerRef","_isInitialized","attached","set","_attachedRef","ngOnInit","ngOnDestroy","ref","emit","clear","_parentInjector","_customTokens","token","notFoundValue","CodeComponent","rxjs_operators__WEBPACK_IMPORTED_MODULE_1__","snackbar","pretty","copier","logger","_code","code","trim","formatDisplayedCode","showMissingCodeMessage","_header","ngOnChanges","indent","lines","leftAlignedCode","Number","MAX_VALUE","split","line","lineIndent","search","Math","min","map","substr","join","setCodeHtml","codeText","getCodeText","formatCode","getLinenums","pipe","subscribe","c","src","formattedCode","nativeElement","innerHTML","textContent","log","open","duration","error","parseInt","isNaN","match","nextHandle","tasksByHandle","AsapAction_AsapAction","AsapAction","scheduler","work","tslib_es6","requestAsyncId","id","delay","actions","push","scheduled","cb","flush","bind","handle","Promise","resolve","then","runIfPresent","recycleAsyncId","AsapScheduler_AsapScheduler","AsapScheduler","apply","arguments","action","active","count","shift","execute","state","unsubscribe","asap","CodeModule","Overlay","OverlayContainer","OverlayKeyboardDispatcher","OverlayPositionBuilder","OverlayConfig","ScrollStrategyOptions","OverlayModule","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY","_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__","_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_1__","_angular_common__WEBPACK_IMPORTED_MODULE_2__","_angular_core__WEBPACK_IMPORTED_MODULE_3__","tslib__WEBPACK_IMPORTED_MODULE_4__","rxjs__WEBPACK_IMPORTED_MODULE_5__","rxjs__WEBPACK_IMPORTED_MODULE_6__","rxjs__WEBPACK_IMPORTED_MODULE_7__","rxjs__WEBPACK_IMPORTED_MODULE_8__","rxjs_operators__WEBPACK_IMPORTED_MODULE_9__","rxjs_operators__WEBPACK_IMPORTED_MODULE_10__","_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_11__","_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_12__","BlockScrollStrategy","_viewportRuler","_previousHTMLStyles","left","_isEnabled","_document","enable","_canBeEnabled","root","_previousScrollPosition","getViewportScrollPosition","classList","add","disable","html","htmlStyle","bodyStyle","previousHtmlScrollBehavior","scrollBehavior","previousBodyScrollBehavior","scroll","contains","viewport","getViewportSize","scrollHeight","height","scrollWidth","width","getMatScrollStrategyAlreadyAttachedError","CloseScrollStrategy","_scrollDispatcher","_ngZone","_config","_scrollSubscription","_detach","_overlayRef","run","overlayRef","stream","scrolled","threshold","_initialScrollPosition","scrollPosition","abs","updatePosition","NoopScrollStrategy","isElementScrolledOutsideView","element","scrollContainers","some","containerBounds","bottom","right","isElementClippedByScrolling","scrollContainerRect","RepositionScrollStrategy","scrollThrottle","autoClose","overlayRect","overlayElement","getBoundingClientRect","_a","noop","close","config","block","reposition","ngInjectableDef","factory","providedIn","scrollStrategy","panelClass","hasBackdrop","backdropClass","disposeOnNavigation","keys","k","ConnectionPositionPair","origin","overlay","offsetX","offsetY","originX","originY","overlayX","overlayY","ConnectedOverlayPositionChange","connectionPair","scrollableViewProperties","validateVerticalPosition","property","validateHorizontalPosition","_attachedOverlays","_keydownListener","event","overlays","i","_keydownEventSubscriptions","_keydownEvents","next","_isAttached","addEventListener","splice","removeEventListener","_containerElement","getContainerElement","_createContainer","container","OverlayRef","_portalOutlet","_host","_pane","_keyboardDispatcher","_location","_backdropElement","_backdropClick","_attachments","_detachments","_locationChanges","EMPTY","_keydownEventsObservable","observer","subscription","_positionStrategy","positionStrategy","attachResult","parentElement","_previousHostParent","_updateStackingOrder","_updateElementSize","_updateElementDirection","onStable","asObservable","_togglePointerEvents","_attachBackdrop","_toggleClasses","detachBackdrop","detachmentResult","_detachContentWhenStable","isAttached","complete","backdropClick","attachments","detachments","keydownEvents","getConfig","updatePositionStrategy","strategy","updateSize","sizeConfig","setDirection","dir","direction","getDirection","minWidth","minHeight","maxWidth","maxHeight","enablePointer","pointerEvents","insertBefore","requestAnimationFrame","runOutsideAngular","nextSibling","backdropToDetach","timeoutId_1","finishDetach_1","clearTimeout","setTimeout","cssClasses","isAdd","cssClass","children","FlexibleConnectedPositionStrategy","connectedTo","_platform","_overlayContainer","_lastBoundingBoxSize","_isPushed","_canPush","_growAfterOpen","_hasFlexibleDimensions","_positionLocked","_viewportMargin","scrollables","_preferredPositions","_positionChanges","_resizeSubscription","_offsetX","_offsetY","_positionChangeSubscriptions","_appliedPanelClasses","positionChanges","setOrigin","_validatePositions","hostElement","_boundingBox","_isInitialRender","_lastPosition","change","isBrowser","reapplyLastPosition","_clearPanelClasses","_resetOverlayElementStyles","_resetBoundingBoxStyles","_viewportRect","_getNarrowedViewportRect","_originRect","_origin","_overlayRect","fallback","originRect","viewportRect","flexibleFits","_i","pos","originPoint","_getOriginPoint","overlayPoint","_getOverlayPoint","overlayFit","_getOverlayFit","isCompletelyWithinViewport","_applyPosition","_canFitWithFlexibleDimensions","boundingBoxRect","_calculateBoundingBoxRect","visibleArea","bestFit","bestScore","_b","flexibleFits_1","fit_1","score","weight","_previousPushAmount","extendStyles","alignItems","justifyContent","lastPosition","withScrollableContainers","withPositions","positions","withViewportMargin","withFlexibleDimensions","flexibleDimensions","withGrowAfterOpen","growAfterOpen","withPush","canPush","withLockedPosition","isLocked","withDefaultOffsetX","offset","withDefaultOffsetY","withTransformOriginOn","selector","_transformOriginSelector","x","startX","_isRtl","endX","y","overlayStartX","point","_getOffset","topOverflow","bottomOverflow","visibleWidth","_subtractOverflows","visibleHeight","fitsInViewportVertically","fitsInViewportHorizontally","fit","availableHeight","availableWidth","_pushOverlayOnScreen","start","pushX","pushY","overflowRight","max","overflowBottom","overflowTop","overflowLeft","_setTransformOrigin","_setOverlayElementStyles","_setBoundingBoxStyles","_addPanelClasses","_getScrollVisibility","changeEvent","xOrigin","elements","querySelectorAll","yOrigin","transformOrigin","isRtl","smallestDistanceToViewportEdge","previousHeight","previousWidth","_hasExactPosition","_getExactOverlayY","_getExactOverlayX","transformString","transform","virtualKeyboardOffset","clientHeight","clientWidth","originBounds","overlayBounds","scrollContainerBounds","scrollable","getElementRef","isOriginClipped","isOriginOutsideView","isOverlayClipped","isOverlayOutsideView","overflows","reduce","currentValue","currentOverflow","axis","pair","dest","source","key","hasOwnProperty","ConnectedPositionStrategy","originPos","overlayPos","viewportRuler","platform","withFallbackPosition","_direction","recalculateLastPosition","withDirection","withOffsetX","withOffsetY","slice","GlobalPositionStrategy","_cssPosition","_topOffset","_bottomOffset","_leftOffset","_rightOffset","_alignItems","_justifyContent","_width","_height","centerHorizontally","centerVertically","parentStyles","marginLeft","marginTop","marginBottom","marginRight","parent","global","flexibleConnectedTo","nextUniqueId","scrollStrategies","_positionBuilder","_injector","_directionality","_createHostElement","pane","_createPaneElement","portalOutlet","_createPortalOutlet","overlayConfig","mediaQueryStyleNode","mediaQueriesForWebkitCompatibility","Set","layout_es5_MediaMatcher","MediaMatcher","_matchMedia","matchMedia","noopMatchMedia","query","WEBKIT","has","sheet","insertRule","e","console","createEmptyStyleRule","core","platform_es5","matches","media","addListener","removeListener","layout_es5_BreakpointObserver","BreakpointObserver","mediaMatcher","zone","_queries","Map","_destroySubject","Subject","isMatched","splitQueries","coercion_es5","mediaQuery","_registerQuery","mql","observe","observables","observable","combineLatest","debounceTime","breakpointStates","response","breakpoints","queryListener","output","fromEventPattern","addHandler","removeHandler","resultSelector","args","isArray","Observable","subscriber","retValue","handler","isFunction","listener","takeUntil","startWith","nextMql","queries","a1","a2","concat","MatSnackBarModule","snack_bar_es5_MatSnackBar","snack_bar_es5_MatSnackBarContainer","MAT_SNACK_BAR_DATA","MatSnackBarConfig","snack_bar_es5_MatSnackBarRef","SimpleSnackBar","MatSnackBarRef","containerInstance","_afterDismissed","_afterOpened","_onAction","_dismissedByAction","onAction","dismiss","_onExit","_finishDismiss","closed","exit","_durationTimeoutId","dismissWithAction","closeWithAction","_dismissAfter","_open","dismissedByAction","afterDismissed","afterOpened","_onEnter","politeness","announcementMessage","horizontalPosition","verticalPosition","snackBarRef","MatSnackBarContainer","_elementRef","_changeDetectorRef","snackBarConfig","_destroyed","_animationState","_assertNotAttached","_applySnackBarClasses","onAnimationEnd","toState","fromState","_completeExit","onEnter_1","enter","onMicrotaskEmpty","take","panelClasses","Array","portal_es5","MAT_SNACK_BAR_DEFAULT_OPTIONS","MatSnackBar","_overlay","_live","_breakpointObserver","_parentSnackBar","_defaultConfig","_snackBarRefAtThisLevel","_openedSnackBarRef","openFromComponent","_attach","openFromTemplate","message","_attachSnackBarContainer","WeakMap","containerPortal","containerRef","instance","content","userConfig","_createOverlay","$implicit","_createInjector","contentRef","state$$1","_animateSnackBar","announce","overlay_es5","isLeft","isRight","a11y_es5","PrettyPrinter","rxjs__WEBPACK_IMPORTED_MODULE_0__","rxjs_operators__WEBPACK_IMPORTED_MODULE_2__","rxjs_operators__WEBPACK_IMPORTED_MODULE_3__","prettyPrintOne","getPrettyPrintOne","ppo","t","msg","MatSnackBarContainerNgFactory","SimpleSnackBarNgFactory","_angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_1__","_angular_common__WEBPACK_IMPORTED_MODULE_3__","_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_5__","_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__","_angular_material_button__WEBPACK_IMPORTED_MODULE_10__","_button_typings_index_ngfactory__WEBPACK_IMPORTED_MODULE_11__","_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_12__","_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_13__","RenderType_MatSnackBarContainer","animation","type","name","definitions","opacity","options","expr","timings","View_MatSnackBarContainer_1","View_MatSnackBarContainer_0","View_MatSnackBarContainer_Host_0","RenderType_SimpleSnackBar","View_SimpleSnackBar_1","_co","disabled","_animationMode","View_SimpleSnackBar_0","hasAction","View_SimpleSnackBar_Host_0"],"mappings":"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","file":"default~code-code-example-module-ngfactory~code-code-tabs-module-ngfactory.8ef337c56e7a06e6c4e2.js","sourcesContent":["/**\n * This class is based on the code in the following projects:\n *\n * - https://github.com/zenorocha/select\n * - https://github.com/zenorocha/clipboard.js/\n *\n * Both released under MIT license - © Zeno Rocha\n */\n\n\nexport class CopierService {\n private fakeElem: HTMLTextAreaElement|null;\n\n /**\n * Creates a fake textarea element, sets its value from `text` property,\n * and makes a selection on it.\n */\n createFake(text: string) {\n const docElem = document.documentElement!;\n const isRTL = docElem.getAttribute('dir') === 'rtl';\n\n // Create a fake element to hold the contents to copy\n this.fakeElem = document.createElement('textarea');\n\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[ isRTL ? 'right' : 'left' ] = '-9999px';\n\n // Move element to the same position vertically\n const yPosition = window.pageYOffset || docElem.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = text;\n\n document.body.appendChild(this.fakeElem);\n\n this.fakeElem.select();\n this.fakeElem.setSelectionRange(0, this.fakeElem.value.length);\n }\n\n removeFake() {\n if (this.fakeElem) {\n document.body.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n\n copyText(text: string) {\n try {\n this.createFake(text);\n return document.execCommand('copy');\n } catch (err) {\n return false;\n } finally {\n this.removeFake();\n }\n }\n}\n","/**\n * @fileoverview This file was generated by the Angular template compiler. Do not edit.\n *\n * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}\n * tslint:disable\n */ \nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"./code.component\";\nimport * as i3 from \"@angular/material/snack-bar\";\nimport * as i4 from \"./pretty-printer.service\";\nimport * as i5 from \"../../shared/copier.service\";\nimport * as i6 from \"../../shared/logger.service\";\nvar styles_CodeComponent = [];\nvar RenderType_CodeComponent = i0.ɵcrt({ encapsulation: 2, styles: styles_CodeComponent, data: {} });\nexport { RenderType_CodeComponent as RenderType_CodeComponent };\nfunction View_CodeComponent_1(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵeld(0, 0, null, null, 4, \"button\", [[\"class\", \"material-icons copy-button no-print\"], [\"title\", \"Copy code snippet\"]], [[1, \"aria-label\", 0]], [[null, \"click\"]], function (_v, en, $event) { var ad = true; var _co = _v.component; if ((\"click\" === en)) {\n var pd_0 = (_co.doCopy() !== false);\n ad = (pd_0 && ad);\n } return ad; }, null, null)), (_l()(), i0.ɵted(-1, null, [\"\\n \"])), (_l()(), i0.ɵeld(2, 0, null, null, 1, \"span\", [[\"aria-hidden\", \"true\"]], null, null, null, null, null)), (_l()(), i0.ɵted(-1, null, [\"content_copy\"])), (_l()(), i0.ɵted(-1, null, [\"\\n \"]))], null, function (_ck, _v) { var _co = _v.component; var currVal_0 = _co.ariaLabel; _ck(_v, 0, 0, currVal_0); }); }\nexport function View_CodeComponent_0(_l) { return i0.ɵvid(0, [i0.ɵqud(402653184, 1, { codeContainer: 0 }), (_l()(), i0.ɵeld(1, 0, null, null, 6, \"pre\", [], [[8, \"className\", 0]], null, null, null, null)), (_l()(), i0.ɵted(-1, null, [\" \"])), (_l()(), i0.ɵand(16777216, null, null, 1, null, View_CodeComponent_1)), i0.ɵdid(4, 16384, null, 0, i1.NgIf, [i0.ViewContainerRef, i0.TemplateRef], { ngIf: [0, \"ngIf\"] }, null), (_l()(), i0.ɵted(-1, null, [\"\\n \"])), (_l()(), i0.ɵeld(6, 0, [[1, 0], [\"codeContainer\", 1]], null, 0, \"code\", [[\"class\", \"animated fadeIn\"]], null, null, null, null, null)), (_l()(), i0.ɵted(-1, null, [\"\\n \"]))], function (_ck, _v) { var _co = _v.component; var currVal_1 = !_co.hideCopy; _ck(_v, 4, 0, currVal_1); }, function (_ck, _v) { var _co = _v.component; var currVal_0 = i0.ɵinlineInterpolate(1, \"prettyprint lang-\", _co.language, \"\"); _ck(_v, 1, 0, currVal_0); }); }\nexport function View_CodeComponent_Host_0(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵeld(0, 0, null, null, 1, \"aio-code\", [], null, null, null, View_CodeComponent_0, RenderType_CodeComponent)), i0.ɵdid(1, 573440, null, 0, i2.CodeComponent, [i3.MatSnackBar, i4.PrettyPrinter, i5.CopierService, i6.Logger], null, null)], null, null); }\nvar CodeComponentNgFactory = i0.ɵccf(\"aio-code\", i2.CodeComponent, View_CodeComponent_Host_0, { hideCopy: \"hideCopy\", language: \"language\", linenums: \"linenums\", path: \"path\", region: \"region\", header: \"header\" }, { codeFormatted: \"codeFormatted\" }, []);\nexport { CodeComponentNgFactory as CodeComponentNgFactory };\n","\n <pre class=\"prettyprint lang-{{language}}\">\n <button *ngIf=\"!hideCopy\" class=\"material-icons copy-button no-print\"\n title=\"Copy code snippet\"\n [attr.aria-label]=\"ariaLabel\"\n (click)=\"doCopy()\">\n <span aria-hidden=\"true\">content_copy</span>\n </button>\n <code class=\"animated fadeIn\" #codeContainer></code>\n </pre>\n ","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { __extends } from 'tslib';\nimport { ComponentFactoryResolver, Directive, EventEmitter, NgModule, Output, TemplateRef, ViewContainerRef } from '@angular/core';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * Throws an exception when attempting to attach a null portal to a host.\n * \\@docs-private\n * @return {?}\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 * @return {?}\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 * @return {?}\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 * @return {?}\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 * @return {?}\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 * @return {?}\n */\nfunction throwNoPortalAttachedError() {\n throw Error('Attempting to detach a portal that is not attached to a host');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\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 * @abstract\n * @template T\n */\nvar /**\n * A `Portal` is something that you want to render somewhere else.\n * It can be attach to / detached from a `PortalOutlet`.\n * @abstract\n * @template T\n */\nPortal = /** @class */ (function () {\n function Portal() {\n }\n /** Attach this portal to a host. */\n /**\n * Attach this portal to a host.\n * @param {?} host\n * @return {?}\n */\n Portal.prototype.attach = /**\n * Attach this portal to a host.\n * @param {?} host\n * @return {?}\n */\n function (host) {\n if (host == null) {\n throwNullPortalOutletError();\n }\n if (host.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n this._attachedHost = host;\n return /** @type {?} */ (host.attach(this));\n };\n /** Detach this portal from its host */\n /**\n * Detach this portal from its host\n * @return {?}\n */\n Portal.prototype.detach = /**\n * Detach this portal from its host\n * @return {?}\n */\n function () {\n /** @type {?} */\n var host = this._attachedHost;\n if (host == null) {\n throwNoPortalAttachedError();\n }\n else {\n this._attachedHost = null;\n host.detach();\n }\n };\n Object.defineProperty(Portal.prototype, \"isAttached\", {\n /** Whether this portal is attached to a host. */\n get: /**\n * Whether this portal is attached to a host.\n * @return {?}\n */\n function () {\n return this._attachedHost != null;\n },\n enumerable: true,\n configurable: true\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 /**\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 * @param {?} host\n * @return {?}\n */\n Portal.prototype.setAttachedHost = /**\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 * @param {?} host\n * @return {?}\n */\n function (host) {\n this._attachedHost = host;\n };\n return Portal;\n}());\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n * @template T\n */\nvar /**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n * @template T\n */\nComponentPortal = /** @class */ (function (_super) {\n __extends(ComponentPortal, _super);\n function ComponentPortal(component, viewContainerRef, injector, componentFactoryResolver) {\n var _this = _super.call(this) || this;\n _this.component = component;\n _this.viewContainerRef = viewContainerRef;\n _this.injector = injector;\n _this.componentFactoryResolver = componentFactoryResolver;\n return _this;\n }\n return ComponentPortal;\n}(Portal));\n/**\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\n * @template C\n */\nvar /**\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\n * @template C\n */\nTemplatePortal = /** @class */ (function (_super) {\n __extends(TemplatePortal, _super);\n function TemplatePortal(template, viewContainerRef, context) {\n var _this = _super.call(this) || this;\n _this.templateRef = template;\n _this.viewContainerRef = viewContainerRef;\n _this.context = context;\n return _this;\n }\n Object.defineProperty(TemplatePortal.prototype, \"origin\", {\n get: /**\n * @return {?}\n */\n function () {\n return this.templateRef.elementRef;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Attach the 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 /**\n * Attach the the portal to the provided `PortalOutlet`.\n * When a context is provided it will override the `context` property of the `TemplatePortal`\n * instance.\n * @param {?} host\n * @param {?=} context\n * @return {?}\n */\n TemplatePortal.prototype.attach = /**\n * Attach the the portal to the provided `PortalOutlet`.\n * When a context is provided it will override the `context` property of the `TemplatePortal`\n * instance.\n * @param {?} host\n * @param {?=} context\n * @return {?}\n */\n function (host, context) {\n if (context === void 0) { context = this.context; }\n this.context = context;\n return _super.prototype.attach.call(this, host);\n };\n /**\n * @return {?}\n */\n TemplatePortal.prototype.detach = /**\n * @return {?}\n */\n function () {\n this.context = undefined;\n return _super.prototype.detach.call(this);\n };\n return TemplatePortal;\n}(Portal));\n/**\n * Partial implementation of PortalOutlet that handles attaching\n * ComponentPortal and TemplatePortal.\n * @abstract\n */\nvar /**\n * Partial implementation of PortalOutlet that handles attaching\n * ComponentPortal and TemplatePortal.\n * @abstract\n */\nBasePortalOutlet = /** @class */ (function () {\n function BasePortalOutlet() {\n /**\n * Whether this host has already been permanently disposed.\n */\n this._isDisposed = false;\n }\n /** Whether this host has an attached portal. */\n /**\n * Whether this host has an attached portal.\n * @return {?}\n */\n BasePortalOutlet.prototype.hasAttached = /**\n * Whether this host has an attached portal.\n * @return {?}\n */\n function () {\n return !!this._attachedPortal;\n };\n /** Attaches a portal. */\n /**\n * Attaches a portal.\n * @param {?} portal\n * @return {?}\n */\n BasePortalOutlet.prototype.attach = /**\n * Attaches a portal.\n * @param {?} portal\n * @return {?}\n */\n function (portal) {\n if (!portal) {\n throwNullPortalError();\n }\n if (this.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n if (this._isDisposed) {\n throwPortalOutletAlreadyDisposedError();\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 }\n throwUnknownPortalTypeError();\n };\n /** Detaches a previously attached portal. */\n /**\n * Detaches a previously attached portal.\n * @return {?}\n */\n BasePortalOutlet.prototype.detach = /**\n * Detaches a previously attached portal.\n * @return {?}\n */\n function () {\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 /**\n * Permanently dispose of this portal host.\n * @return {?}\n */\n BasePortalOutlet.prototype.dispose = /**\n * Permanently dispose of this portal host.\n * @return {?}\n */\n function () {\n if (this.hasAttached()) {\n this.detach();\n }\n this._invokeDisposeFn();\n this._isDisposed = true;\n };\n /** @docs-private */\n /**\n * \\@docs-private\n * @param {?} fn\n * @return {?}\n */\n BasePortalOutlet.prototype.setDisposeFn = /**\n * \\@docs-private\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n this._disposeFn = fn;\n };\n /**\n * @return {?}\n */\n BasePortalOutlet.prototype._invokeDisposeFn = /**\n * @return {?}\n */\n function () {\n if (this._disposeFn) {\n this._disposeFn();\n this._disposeFn = null;\n }\n };\n return BasePortalOutlet;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n */\nvar /**\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n */\nDomPortalOutlet = /** @class */ (function (_super) {\n __extends(DomPortalOutlet, _super);\n function DomPortalOutlet(outletElement, _componentFactoryResolver, _appRef, _defaultInjector) {\n var _this = _super.call(this) || this;\n _this.outletElement = outletElement;\n _this._componentFactoryResolver = _componentFactoryResolver;\n _this._appRef = _appRef;\n _this._defaultInjector = _defaultInjector;\n return _this;\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 /**\n * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n * @template T\n * @param {?} portal Portal to be attached\n * @return {?} Reference to the created component.\n */\n DomPortalOutlet.prototype.attachComponentPortal = /**\n * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n * @template T\n * @param {?} portal Portal to be attached\n * @return {?} Reference to the created component.\n */\n function (portal) {\n var _this = this;\n /** @type {?} */\n var resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n /** @type {?} */\n var componentFactory = resolver.resolveComponentFactory(portal.component);\n /** @type {?} */\n var 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(function () { return componentRef.destroy(); });\n }\n else {\n componentRef = componentFactory.create(portal.injector || this._defaultInjector);\n this._appRef.attachView(componentRef.hostView);\n this.setDisposeFn(function () {\n _this._appRef.detachView(componentRef.hostView);\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 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 /**\n * Attaches a template portal to the DOM as an embedded view.\n * @template C\n * @param {?} portal Portal to be attached.\n * @return {?} Reference to the created embedded view.\n */\n DomPortalOutlet.prototype.attachTemplatePortal = /**\n * Attaches a template portal to the DOM as an embedded view.\n * @template C\n * @param {?} portal Portal to be attached.\n * @return {?} Reference to the created embedded view.\n */\n function (portal) {\n var _this = this;\n /** @type {?} */\n var viewContainer = portal.viewContainerRef;\n /** @type {?} */\n var viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context);\n viewRef.detectChanges();\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(function (rootNode) { return _this.outletElement.appendChild(rootNode); });\n this.setDisposeFn((function () {\n /** @type {?} */\n var index = viewContainer.indexOf(viewRef);\n if (index !== -1) {\n viewContainer.remove(index);\n }\n }));\n // TODO(jelbourn): Return locals from view.\n return viewRef;\n };\n /**\n * Clears out a portal from the DOM.\n */\n /**\n * Clears out a portal from the DOM.\n * @return {?}\n */\n DomPortalOutlet.prototype.dispose = /**\n * Clears out a portal from the DOM.\n * @return {?}\n */\n function () {\n _super.prototype.dispose.call(this);\n if (this.outletElement.parentNode != null) {\n this.outletElement.parentNode.removeChild(this.outletElement);\n }\n };\n /**\n * Gets the root HTMLElement for an instantiated component.\n * @param {?} componentRef\n * @return {?}\n */\n DomPortalOutlet.prototype._getComponentRootNode = /**\n * Gets the root HTMLElement for an instantiated component.\n * @param {?} componentRef\n * @return {?}\n */\n function (componentRef) {\n return /** @type {?} */ ((/** @type {?} */ (componentRef.hostView)).rootNodes[0]);\n };\n return DomPortalOutlet;\n}(BasePortalOutlet));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\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 */\nvar CdkPortal = /** @class */ (function (_super) {\n __extends(CdkPortal, _super);\n function CdkPortal(templateRef, viewContainerRef) {\n return _super.call(this, templateRef, viewContainerRef) || this;\n }\n CdkPortal.decorators = [\n { type: Directive, args: [{\n selector: '[cdk-portal], [cdkPortal], [portal]',\n exportAs: 'cdkPortal',\n },] },\n ];\n /** @nocollapse */\n CdkPortal.ctorParameters = function () { return [\n { type: TemplateRef },\n { type: ViewContainerRef }\n ]; };\n return CdkPortal;\n}(TemplatePortal));\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 * `<ng-template [cdkPortalOutlet]=\"greeting\"></ng-template>`\n */\nvar CdkPortalOutlet = /** @class */ (function (_super) {\n __extends(CdkPortalOutlet, _super);\n function CdkPortalOutlet(_componentFactoryResolver, _viewContainerRef) {\n var _this = _super.call(this) || this;\n _this._componentFactoryResolver = _componentFactoryResolver;\n _this._viewContainerRef = _viewContainerRef;\n /**\n * Whether the portal component is initialized.\n */\n _this._isInitialized = false;\n _this.attached = new EventEmitter();\n return _this;\n }\n Object.defineProperty(CdkPortalOutlet.prototype, \"portal\", {\n /** Portal associated with the Portal outlet. */\n get: /**\n * Portal associated with the Portal outlet.\n * @return {?}\n */\n function () {\n return this._attachedPortal;\n },\n set: /**\n * @param {?} portal\n * @return {?}\n */\n function (portal) {\n // Ignore the cases where the `portal` is set to a falsy value before the lifecycle hooks have\n // run. This handles the cases where the user might do something like `<div cdkPortalOutlet>`\n // and attach a portal programmatically in the parent component. When Angular does the first CD\n // round, it will fire the setter with empty string, causing the user's content to be cleared.\n if (this.hasAttached() && !portal && !this._isInitialized) {\n return;\n }\n if (this.hasAttached()) {\n _super.prototype.detach.call(this);\n }\n if (portal) {\n _super.prototype.attach.call(this, portal);\n }\n this._attachedPortal = portal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkPortalOutlet.prototype, \"attachedRef\", {\n /** Component or view reference that is attached to the portal. */\n get: /**\n * Component or view reference that is attached to the portal.\n * @return {?}\n */\n function () {\n return this._attachedRef;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n CdkPortalOutlet.prototype.ngOnInit = /**\n * @return {?}\n */\n function () {\n this._isInitialized = true;\n };\n /**\n * @return {?}\n */\n CdkPortalOutlet.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n _super.prototype.dispose.call(this);\n this._attachedPortal = null;\n this._attachedRef = null;\n };\n /**\n * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.\n *\n * @param portal Portal to be attached to the portal outlet.\n * @returns Reference to the created component.\n */\n /**\n * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.\n *\n * @template T\n * @param {?} portal Portal to be attached to the portal outlet.\n * @return {?} Reference to the created component.\n */\n CdkPortalOutlet.prototype.attachComponentPortal = /**\n * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.\n *\n * @template T\n * @param {?} portal Portal to be attached to the portal outlet.\n * @return {?} Reference to the created component.\n */\n function (portal) {\n portal.setAttachedHost(this);\n /** @type {?} */\n var viewContainerRef = portal.viewContainerRef != null ?\n portal.viewContainerRef :\n this._viewContainerRef;\n /** @type {?} */\n var componentFactory = this._componentFactoryResolver.resolveComponentFactory(portal.component);\n /** @type {?} */\n var ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector);\n _super.prototype.setDisposeFn.call(this, function () { return ref.destroy(); });\n this._attachedPortal = portal;\n this._attachedRef = ref;\n this.attached.emit(ref);\n return ref;\n };\n /**\n * Attach the given TemplatePortal to this PortlHost as an embedded View.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n /**\n * Attach the given TemplatePortal to this PortlHost as an embedded View.\n * @template C\n * @param {?} portal Portal to be attached.\n * @return {?} Reference to the created embedded view.\n */\n CdkPortalOutlet.prototype.attachTemplatePortal = /**\n * Attach the given TemplatePortal to this PortlHost as an embedded View.\n * @template C\n * @param {?} portal Portal to be attached.\n * @return {?} Reference to the created embedded view.\n */\n function (portal) {\n var _this = this;\n portal.setAttachedHost(this);\n /** @type {?} */\n var viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context);\n _super.prototype.setDisposeFn.call(this, function () { return _this._viewContainerRef.clear(); });\n this._attachedPortal = portal;\n this._attachedRef = viewRef;\n this.attached.emit(viewRef);\n return viewRef;\n };\n CdkPortalOutlet.decorators = [\n { type: Directive, args: [{\n selector: '[cdkPortalOutlet], [cdkPortalHost], [portalHost]',\n exportAs: 'cdkPortalOutlet, cdkPortalHost',\n inputs: ['portal: cdkPortalOutlet']\n },] },\n ];\n /** @nocollapse */\n CdkPortalOutlet.ctorParameters = function () { return [\n { type: ComponentFactoryResolver },\n { type: ViewContainerRef }\n ]; };\n CdkPortalOutlet.propDecorators = {\n attached: [{ type: Output }]\n };\n return CdkPortalOutlet;\n}(BasePortalOutlet));\nvar PortalModule = /** @class */ (function () {\n function PortalModule() {\n }\n PortalModule.decorators = [\n { type: NgModule, args: [{\n exports: [CdkPortal, CdkPortalOutlet],\n declarations: [CdkPortal, CdkPortalOutlet],\n },] },\n ];\n return PortalModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * Custom injector to be used when providing custom\n * injection tokens to components inside a portal.\n * \\@docs-private\n */\nvar /**\n * Custom injector to be used when providing custom\n * injection tokens to components inside a portal.\n * \\@docs-private\n */\nPortalInjector = /** @class */ (function () {\n function PortalInjector(_parentInjector, _customTokens) {\n this._parentInjector = _parentInjector;\n this._customTokens = _customTokens;\n }\n /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n PortalInjector.prototype.get = /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n function (token, notFoundValue) {\n /** @type {?} */\n var value = this._customTokens.get(token);\n if (typeof value !== 'undefined') {\n return value;\n }\n return this._parentInjector.get(token, notFoundValue);\n };\n return PortalInjector;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\nexport { DomPortalOutlet as DomPortalHost, CdkPortalOutlet as PortalHostDirective, CdkPortal as TemplatePortalDirective, BasePortalOutlet as BasePortalHost, Portal, ComponentPortal, TemplatePortal, BasePortalOutlet, DomPortalOutlet, CdkPortal, CdkPortalOutlet, PortalModule, PortalInjector };\n//# sourceMappingURL=portal.es5.js.map\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\nimport { Logger } from 'app/shared/logger.service';\nimport { PrettyPrinter } from './pretty-printer.service';\nimport { CopierService } from 'app/shared/copier.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { tap } from 'rxjs/operators';\n\n/**\n * If linenums is not set, this is the default maximum number of lines that\n * an example can display without line numbers.\n */\nconst DEFAULT_LINE_NUMS_COUNT = 10;\n\n/**\n * Formatted Code Block\n *\n * Pretty renders a code block, used in the docs and API reference by the code-example and\n * code-tabs embedded components.\n * It includes a \"copy\" button that will send the content to the clipboard when clicked\n *\n * Example usage:\n *\n * ```\n * <aio-code\n * [language]=\"ts\"\n * [linenums]=\"true\"\n * [path]=\"router/src/app/app.module.ts\"\n * [region]=\"animations-module\">\n * </aio-code>\n * ```\n *\n *\n * Renders code provided through the `updateCode` method.\n */\n@Component({\n selector: 'aio-code',\n template: `\n <pre class=\"prettyprint lang-{{language}}\">\n <button *ngIf=\"!hideCopy\" class=\"material-icons copy-button no-print\"\n title=\"Copy code snippet\"\n [attr.aria-label]=\"ariaLabel\"\n (click)=\"doCopy()\">\n <span aria-hidden=\"true\">content_copy</span>\n </button>\n <code class=\"animated fadeIn\" #codeContainer></code>\n </pre>\n `\n})\nexport class CodeComponent implements OnChanges {\n ariaLabel = '';\n\n /** The code to be copied when clicking the copy button, this should not be HTML encoded */\n private codeText: string;\n\n /** Code that should be formatted with current inputs and displayed in the view. */\n set code(code: string) {\n this._code = code;\n\n if (!this._code || !this._code.trim()) {\n this.showMissingCodeMessage();\n } else {\n this.formatDisplayedCode();\n }\n }\n get code(): string { return this._code; }\n _code: string;\n\n /** Whether the copy button should be shown. */\n @Input() hideCopy: boolean;\n\n /** Language to render the code (e.g. javascript, dart, typescript). */\n @Input() language: string;\n\n /**\n * Whether to display line numbers:\n * - If false: hide\n * - If true: show\n * - If number: show but start at that number\n */\n @Input() linenums: boolean | number | string;\n\n /** Path to the source of the code. */\n @Input() path: string;\n\n /** Region of the source of the code being displayed. */\n @Input() region: string;\n\n /** Optional header to be displayed above the code. */\n @Input()\n set header(header: string) {\n this._header = header;\n this.ariaLabel = this.header ? `Copy code snippet from ${this.header}` : '';\n }\n get header(): string { return this._header; }\n private _header: string;\n\n @Output() codeFormatted = new EventEmitter<void>();\n\n /** The element in the template that will display the formatted code. */\n @ViewChild('codeContainer') codeContainer: ElementRef;\n\n constructor(\n private snackbar: MatSnackBar,\n private pretty: PrettyPrinter,\n private copier: CopierService,\n private logger: Logger) {}\n\n ngOnChanges() {\n // If some inputs have changed and there is code displayed, update the view with the latest\n // formatted code.\n if (this.code) {\n this.formatDisplayedCode();\n }\n }\n\n private formatDisplayedCode() {\n const leftAlignedCode = leftAlign(this.code);\n this.setCodeHtml(leftAlignedCode); // start with unformatted code\n this.codeText = this.getCodeText(); // store the unformatted code as text (for copying)\n\n this.pretty\n .formatCode(leftAlignedCode, this.language, this.getLinenums(leftAlignedCode))\n .pipe(tap(() => this.codeFormatted.emit()))\n .subscribe(c => this.setCodeHtml(c), err => { /* ignore failure to format */ }\n );\n }\n\n /** Sets the message showing that the code could not be found. */\n private showMissingCodeMessage() {\n const src = this.path ? this.path + (this.region ? '#' + this.region : '') : '';\n const srcMsg = src ? ` for\\n${src}` : '.';\n this.setCodeHtml(`<p class=\"code-missing\">The code sample is missing${srcMsg}</p>`);\n }\n\n /** Sets the innerHTML of the code container to the provided code string. */\n private setCodeHtml(formattedCode: string) {\n // **Security:** Code example content is provided by docs authors and as such its considered to\n // be safe for innerHTML purposes.\n this.codeContainer.nativeElement.innerHTML = formattedCode;\n }\n\n /** Gets the textContent of the displayed code element. */\n private getCodeText() {\n // `prettify` may remove newlines, e.g. when `linenums` are on. Retrieve the content of the\n // container as text, before prettifying it.\n // We take the textContent because we don't want it to be HTML encoded.\n return this.codeContainer.nativeElement.textContent;\n }\n\n /** Copies the code snippet to the user's clipboard. */\n doCopy() {\n const code = this.codeText;\n const successfullyCopied = this.copier.copyText(code);\n\n if (successfullyCopied) {\n this.logger.log('Copied code to clipboard:', code);\n this.snackbar.open('Code Copied', '', { duration: 800 });\n } else {\n this.logger.error(new Error(`ERROR copying code to clipboard: \"${code}\"`));\n this.snackbar.open('Copy failed. Please try again!', '', { duration: 800 });\n }\n }\n\n /** Gets the calculated value of linenums (boolean/number). */\n getLinenums(code: string) {\n const linenums =\n typeof this.linenums === 'boolean' ? this.linenums :\n this.linenums === 'true' ? true :\n this.linenums === 'false' ? false :\n typeof this.linenums === 'string' ? parseInt(this.linenums, 10) :\n this.linenums;\n\n // if no linenums, enable line numbers if more than one line\n return linenums == null || isNaN(linenums as number) ?\n (code.match(/\\n/g) || []).length > DEFAULT_LINE_NUMS_COUNT : linenums;\n }\n}\n\nfunction leftAlign(text: string): string {\n let indent = Number.MAX_VALUE;\n\n const lines = text.split('\\n');\n lines.forEach(line => {\n const lineIndent = line.search(/\\S/);\n if (lineIndent !== -1) {\n indent = Math.min(lineIndent, indent);\n }\n });\n\n return lines.map(line => line.substr(indent)).join('\\n').trim();\n}\n","import { ElementRef, EventEmitter, OnChanges } from '@angular/core';\nimport { Logger } from 'app/shared/logger.service';\nimport { PrettyPrinter } from './pretty-printer.service';\nimport { CopierService } from 'app/shared/copier.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { tap } from 'rxjs/operators';\n/**\n * If linenums is not set, this is the default maximum number of lines that\n * an example can display without line numbers.\n */\nvar DEFAULT_LINE_NUMS_COUNT = 10;\n/**\n * Formatted Code Block\n *\n * Pretty renders a code block, used in the docs and API reference by the code-example and\n * code-tabs embedded components.\n * It includes a \"copy\" button that will send the content to the clipboard when clicked\n *\n * Example usage:\n *\n * ```\n * <aio-code\n * [language]=\"ts\"\n * [linenums]=\"true\"\n * [path]=\"router/src/app/app.module.ts\"\n * [region]=\"animations-module\">\n * </aio-code>\n * ```\n *\n *\n * Renders code provided through the `updateCode` method.\n */\nvar CodeComponent = /** @class */ (function () {\n function CodeComponent(snackbar, pretty, copier, logger) {\n this.snackbar = snackbar;\n this.pretty = pretty;\n this.copier = copier;\n this.logger = logger;\n this.ariaLabel = '';\n this.codeFormatted = new EventEmitter();\n }\n Object.defineProperty(CodeComponent.prototype, \"code\", {\n get: function () { return this._code; },\n /** Code that should be formatted with current inputs and displayed in the view. */\n set: function (code) {\n this._code = code;\n if (!this._code || !this._code.trim()) {\n this.showMissingCodeMessage();\n }\n else {\n this.formatDisplayedCode();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CodeComponent.prototype, \"header\", {\n get: function () { return this._header; },\n /** Optional header to be displayed above the code. */\n set: function (header) {\n this._header = header;\n this.ariaLabel = this.header ? \"Copy code snippet from \" + this.header : '';\n },\n enumerable: true,\n configurable: true\n });\n CodeComponent.prototype.ngOnChanges = function () {\n // If some inputs have changed and there is code displayed, update the view with the latest\n // formatted code.\n if (this.code) {\n this.formatDisplayedCode();\n }\n };\n CodeComponent.prototype.formatDisplayedCode = function () {\n var _this = this;\n var leftAlignedCode = leftAlign(this.code);\n this.setCodeHtml(leftAlignedCode); // start with unformatted code\n this.codeText = this.getCodeText(); // store the unformatted code as text (for copying)\n this.pretty\n .formatCode(leftAlignedCode, this.language, this.getLinenums(leftAlignedCode))\n .pipe(tap(function () { return _this.codeFormatted.emit(); }))\n .subscribe(function (c) { return _this.setCodeHtml(c); }, function (err) { });\n };\n /** Sets the message showing that the code could not be found. */\n CodeComponent.prototype.showMissingCodeMessage = function () {\n var src = this.path ? this.path + (this.region ? '#' + this.region : '') : '';\n var srcMsg = src ? \" for\\n\" + src : '.';\n this.setCodeHtml(\"<p class=\\\"code-missing\\\">The code sample is missing\" + srcMsg + \"</p>\");\n };\n /** Sets the innerHTML of the code container to the provided code string. */\n CodeComponent.prototype.setCodeHtml = function (formattedCode) {\n // **Security:** Code example content is provided by docs authors and as such its considered to\n // be safe for innerHTML purposes.\n this.codeContainer.nativeElement.innerHTML = formattedCode;\n };\n /** Gets the textContent of the displayed code element. */\n CodeComponent.prototype.getCodeText = function () {\n // `prettify` may remove newlines, e.g. when `linenums` are on. Retrieve the content of the\n // container as text, before prettifying it.\n // We take the textContent because we don't want it to be HTML encoded.\n return this.codeContainer.nativeElement.textContent;\n };\n /** Copies the code snippet to the user's clipboard. */\n CodeComponent.prototype.doCopy = function () {\n var code = this.codeText;\n var successfullyCopied = this.copier.copyText(code);\n if (successfullyCopied) {\n this.logger.log('Copied code to clipboard:', code);\n this.snackbar.open('Code Copied', '', { duration: 800 });\n }\n else {\n this.logger.error(new Error(\"ERROR copying code to clipboard: \\\"\" + code + \"\\\"\"));\n this.snackbar.open('Copy failed. Please try again!', '', { duration: 800 });\n }\n };\n /** Gets the calculated value of linenums (boolean/number). */\n CodeComponent.prototype.getLinenums = function (code) {\n var linenums = typeof this.linenums === 'boolean' ? this.linenums :\n this.linenums === 'true' ? true :\n this.linenums === 'false' ? false :\n typeof this.linenums === 'string' ? parseInt(this.linenums, 10) :\n this.linenums;\n // if no linenums, enable line numbers if more than one line\n return linenums == null || isNaN(linenums) ?\n (code.match(/\\n/g) || []).length > DEFAULT_LINE_NUMS_COUNT : linenums;\n };\n return CodeComponent;\n}());\nexport { CodeComponent };\nfunction leftAlign(text) {\n var indent = Number.MAX_VALUE;\n var lines = text.split('\\n');\n lines.forEach(function (line) {\n var lineIndent = line.search(/\\S/);\n if (lineIndent !== -1) {\n indent = Math.min(lineIndent, indent);\n }\n });\n return lines.map(function (line) { return line.substr(indent); }).join('\\n').trim();\n}\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar nextHandle = 1;\nvar tasksByHandle = {};\nfunction runIfPresent(handle) {\n var cb = tasksByHandle[handle];\n if (cb) {\n cb();\n }\n}\nexport var Immediate = {\n setImmediate: function (cb) {\n var handle = nextHandle++;\n tasksByHandle[handle] = cb;\n Promise.resolve().then(function () { return runIfPresent(handle); });\n return handle;\n },\n clearImmediate: function (handle) {\n delete tasksByHandle[handle];\n },\n};\n//# sourceMappingURL=Immediate.js.map\n","/** PURE_IMPORTS_START tslib,_util_Immediate,_AsyncAction PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Immediate } from '../util/Immediate';\nimport { AsyncAction } from './AsyncAction';\nvar AsapAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsapAction, _super);\n function AsapAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n return _this;\n }\n AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay !== null && delay > 0) {\n return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler.scheduled || (scheduler.scheduled = Immediate.setImmediate(scheduler.flush.bind(scheduler, null)));\n };\n AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n }\n if (scheduler.actions.length === 0) {\n Immediate.clearImmediate(id);\n scheduler.scheduled = undefined;\n }\n return undefined;\n };\n return AsapAction;\n}(AsyncAction));\nexport { AsapAction };\n//# sourceMappingURL=AsapAction.js.map\n","/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar AsapScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsapScheduler, _super);\n function AsapScheduler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AsapScheduler.prototype.flush = function (action) {\n this.active = true;\n this.scheduled = undefined;\n var actions = this.actions;\n var error;\n var index = -1;\n var count = actions.length;\n action = action || actions.shift();\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (++index < count && (action = actions.shift()));\n this.active = false;\n if (error) {\n while (++index < count && (action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsapScheduler;\n}(AsyncScheduler));\nexport { AsapScheduler };\n//# sourceMappingURL=AsapScheduler.js.map\n","/** PURE_IMPORTS_START _AsapAction,_AsapScheduler PURE_IMPORTS_END */\nimport { AsapAction } from './AsapAction';\nimport { AsapScheduler } from './AsapScheduler';\nexport var asap = /*@__PURE__*/ new AsapScheduler(AsapAction);\n//# sourceMappingURL=asap.js.map\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CodeComponent } from './code.component';\nimport { MatSnackBarModule } from '@angular/material';\nimport { PrettyPrinter } from './pretty-printer.service';\nimport { CopierService } from 'app/shared/copier.service';\n\n@NgModule({\n imports: [ CommonModule, MatSnackBarModule ],\n declarations: [ CodeComponent ],\n entryComponents: [ CodeComponent ],\n exports: [ CodeComponent ],\n providers: [ PrettyPrinter, CopierService ]\n})\nexport class CodeModule { }\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { coerceCssPixelValue, coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ScrollDispatcher, ViewportRuler, ScrollingModule, VIEWPORT_RULER_PROVIDER } from '@angular/cdk/scrolling';\nexport { ViewportRuler, VIEWPORT_RULER_PROVIDER, CdkScrollable, ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { DOCUMENT, Location } from '@angular/common';\nimport { Inject, Injectable, NgZone, Optional, NgModule, SkipSelf, ApplicationRef, ComponentFactoryResolver, Injector, ElementRef, Directive, EventEmitter, InjectionToken, Input, Output, TemplateRef, ViewContainerRef, defineInjectable, inject } from '@angular/core';\nimport { __assign, __extends } from 'tslib';\nimport { Observable, Subject, merge, Subscription } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { Platform } from '@angular/cdk/platform';\nimport { Directionality, BidiModule } from '@angular/cdk/bidi';\nimport { DomPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { ESCAPE } from '@angular/cdk/keycodes';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nvar /**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nBlockScrollStrategy = /** @class */ (function () {\n function BlockScrollStrategy(_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 /**\n * Attaches this scroll strategy to an overlay.\n * @return {?}\n */\n BlockScrollStrategy.prototype.attach = /**\n * Attaches this scroll strategy to an overlay.\n * @return {?}\n */\n function () { };\n /** Blocks page-level scroll while the attached overlay is open. */\n /**\n * Blocks page-level scroll while the attached overlay is open.\n * @return {?}\n */\n BlockScrollStrategy.prototype.enable = /**\n * Blocks page-level scroll while the attached overlay is open.\n * @return {?}\n */\n function () {\n if (this._canBeEnabled()) {\n /** @type {?} */\n var root = /** @type {?} */ ((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 /**\n * Unblocks page-level scroll while the attached overlay is open.\n * @return {?}\n */\n BlockScrollStrategy.prototype.disable = /**\n * Unblocks page-level scroll while the attached overlay is open.\n * @return {?}\n */\n function () {\n if (this._isEnabled) {\n /** @type {?} */\n var html = /** @type {?} */ ((this._document.documentElement));\n /** @type {?} */\n var body = /** @type {?} */ ((this._document.body));\n /** @type {?} */\n var htmlStyle = /** @type {?} */ (html.style);\n /** @type {?} */\n var bodyStyle = /** @type {?} */ (body.style);\n /** @type {?} */\n var previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n /** @type {?} */\n var 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 htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n }\n };\n /**\n * @return {?}\n */\n BlockScrollStrategy.prototype._canBeEnabled = /**\n * @return {?}\n */\n function () {\n /** @type {?} */\n var html = /** @type {?} */ ((this._document.documentElement));\n if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n return false;\n }\n /** @type {?} */\n var body = this._document.body;\n /** @type {?} */\n var viewport = this._viewportRuler.getViewportSize();\n return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\n };\n return BlockScrollStrategy;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n * @return {?}\n */\nfunction getMatScrollStrategyAlreadyAttachedError() {\n return Error(\"Scroll strategy has already been attached.\");\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nvar /**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nCloseScrollStrategy = /** @class */ (function () {\n function CloseScrollStrategy(_scrollDispatcher, _ngZone, _viewportRuler, _config) {\n var _this = this;\n this._scrollDispatcher = _scrollDispatcher;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._config = _config;\n this._scrollSubscription = null;\n /**\n * Detaches the overlay ref and disables the scroll strategy.\n */\n this._detach = function () {\n _this.disable();\n if (_this._overlayRef.hasAttached()) {\n _this._ngZone.run(function () { return _this._overlayRef.detach(); });\n }\n };\n }\n /** Attaches this scroll strategy to an overlay. */\n /**\n * Attaches this scroll strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n CloseScrollStrategy.prototype.attach = /**\n * Attaches this scroll strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n function (overlayRef) {\n if (this._overlayRef) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n };\n /** Enables the closing of the attached overlay on scroll. */\n /**\n * Enables the closing of the attached overlay on scroll.\n * @return {?}\n */\n CloseScrollStrategy.prototype.enable = /**\n * Enables the closing of the attached overlay on scroll.\n * @return {?}\n */\n function () {\n var _this = this;\n if (this._scrollSubscription) {\n return;\n }\n /** @type {?} */\n var 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(function () {\n /** @type {?} */\n var scrollPosition = _this._viewportRuler.getViewportScrollPosition().top;\n if (Math.abs(scrollPosition - _this._initialScrollPosition) > /** @type {?} */ ((/** @type {?} */ ((_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 /**\n * Disables the closing the attached overlay on scroll.\n * @return {?}\n */\n CloseScrollStrategy.prototype.disable = /**\n * Disables the closing the attached overlay on scroll.\n * @return {?}\n */\n function () {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n };\n return CloseScrollStrategy;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * Scroll strategy that doesn't do anything.\n */\nvar /**\n * Scroll strategy that doesn't do anything.\n */\nNoopScrollStrategy = /** @class */ (function () {\n function NoopScrollStrategy() {\n }\n /** Does nothing, as this scroll strategy is a no-op. */\n /**\n * Does nothing, as this scroll strategy is a no-op.\n * @return {?}\n */\n NoopScrollStrategy.prototype.enable = /**\n * Does nothing, as this scroll strategy is a no-op.\n * @return {?}\n */\n function () { };\n /** Does nothing, as this scroll strategy is a no-op. */\n /**\n * Does nothing, as this scroll strategy is a no-op.\n * @return {?}\n */\n NoopScrollStrategy.prototype.disable = /**\n * Does nothing, as this scroll strategy is a no-op.\n * @return {?}\n */\n function () { };\n /** Does nothing, as this scroll strategy is a no-op. */\n /**\n * Does nothing, as this scroll strategy is a no-op.\n * @return {?}\n */\n NoopScrollStrategy.prototype.attach = /**\n * Does nothing, as this scroll strategy is a no-op.\n * @return {?}\n */\n function () { };\n return NoopScrollStrategy;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n// TODO(jelbourn): move this to live with the rest of the scrolling code\n// TODO(jelbourn): someday replace this with IntersectionObservers\n/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * \\@docs-private\n * @param {?} element Dimensions of the element (from getBoundingClientRect)\n * @param {?} scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @return {?} Whether the element is scrolled out of view\n */\nfunction isElementScrolledOutsideView(element, scrollContainers) {\n return scrollContainers.some(function (containerBounds) {\n /** @type {?} */\n var outsideAbove = element.bottom < containerBounds.top;\n /** @type {?} */\n var outsideBelow = element.top > containerBounds.bottom;\n /** @type {?} */\n var outsideLeft = element.right < containerBounds.left;\n /** @type {?} */\n var 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 * \\@docs-private\n * @param {?} element Dimensions of the element (from getBoundingClientRect)\n * @param {?} scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @return {?} Whether the element is clipped\n */\nfunction isElementClippedByScrolling(element, scrollContainers) {\n return scrollContainers.some(function (scrollContainerRect) {\n /** @type {?} */\n var clippedAbove = element.top < scrollContainerRect.top;\n /** @type {?} */\n var clippedBelow = element.bottom > scrollContainerRect.bottom;\n /** @type {?} */\n var clippedLeft = element.left < scrollContainerRect.left;\n /** @type {?} */\n var clippedRight = element.right > scrollContainerRect.right;\n return clippedAbove || clippedBelow || clippedLeft || clippedRight;\n });\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nvar /**\n * Strategy that will update the element position as the user is scrolling.\n */\nRepositionScrollStrategy = /** @class */ (function () {\n function RepositionScrollStrategy(_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 /**\n * Attaches this scroll strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n RepositionScrollStrategy.prototype.attach = /**\n * Attaches this scroll strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n function (overlayRef) {\n if (this._overlayRef) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n };\n /** Enables repositioning of the attached overlay on scroll. */\n /**\n * Enables repositioning of the attached overlay on scroll.\n * @return {?}\n */\n RepositionScrollStrategy.prototype.enable = /**\n * Enables repositioning of the attached overlay on scroll.\n * @return {?}\n */\n function () {\n var _this = this;\n if (!this._scrollSubscription) {\n /** @type {?} */\n var throttle = this._config ? this._config.scrollThrottle : 0;\n this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(function () {\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 /** @type {?} */\n var overlayRect = _this._overlayRef.overlayElement.getBoundingClientRect();\n var _a = _this._viewportRuler.getViewportSize(), width = _a.width, height = _a.height;\n /** @type {?} */\n var parentRects = [{ width: width, height: height, bottom: height, right: width, top: 0, left: 0 }];\n if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n _this.disable();\n _this._ngZone.run(function () { return _this._overlayRef.detach(); });\n }\n }\n });\n }\n };\n /** Disables repositioning of the attached overlay on scroll. */\n /**\n * Disables repositioning of the attached overlay on scroll.\n * @return {?}\n */\n RepositionScrollStrategy.prototype.disable = /**\n * Disables repositioning of the attached overlay on scroll.\n * @return {?}\n */\n function () {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n };\n return RepositionScrollStrategy;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\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 */\nvar ScrollStrategyOptions = /** @class */ (function () {\n function ScrollStrategyOptions(_scrollDispatcher, _viewportRuler, _ngZone, document) {\n var _this = this;\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n /**\n * Do nothing on scroll.\n */\n this.noop = function () { return 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 = function (config) { return new CloseScrollStrategy(_this._scrollDispatcher, _this._ngZone, _this._viewportRuler, config); };\n /**\n * Block scrolling.\n */\n this.block = function () { return 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 = function (config) { return new RepositionScrollStrategy(_this._scrollDispatcher, _this._viewportRuler, _this._ngZone, config); };\n this._document = document;\n }\n ScrollStrategyOptions.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n ScrollStrategyOptions.ctorParameters = function () { return [\n { type: ScrollDispatcher },\n { type: ViewportRuler },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n ]; };\n /** @nocollapse */ ScrollStrategyOptions.ngInjectableDef = defineInjectable({ factory: function ScrollStrategyOptions_Factory() { return new ScrollStrategyOptions(inject(ScrollDispatcher), inject(ViewportRuler), inject(NgZone), inject(DOCUMENT)); }, token: ScrollStrategyOptions, providedIn: \"root\" });\n return ScrollStrategyOptions;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Initial configuration used when creating an overlay.\n */\nvar /**\n * Initial configuration used when creating an overlay.\n */\nOverlayConfig = /** @class */ (function () {\n function OverlayConfig(config) {\n var _this = this;\n /**\n * Strategy to be used when handling scroll events while the overlay is open.\n */\n this.scrollStrategy = new NoopScrollStrategy();\n /**\n * Custom class to add to the overlay pane.\n */\n this.panelClass = '';\n /**\n * Whether the overlay has a backdrop.\n */\n this.hasBackdrop = false;\n /**\n * Custom class to add to the backdrop\n */\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 Object.keys(config).forEach(function (k) {\n /** @type {?} */\n var key = /** @type {?} */ (k);\n if (typeof config[key] !== 'undefined') {\n _this[key] = config[key];\n }\n });\n }\n }\n return OverlayConfig;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * The points of the origin element and the overlay element to connect.\n */\nvar /**\n * The points of the origin element and the overlay element to connect.\n */\nConnectionPositionPair = /** @class */ (function () {\n function ConnectionPositionPair(origin, overlay, offsetX, offsetY, 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 return ConnectionPositionPair;\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 */\nvar /**\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 */\nScrollingVisibility = /** @class */ (function () {\n function ScrollingVisibility() {\n }\n return ScrollingVisibility;\n}());\n/**\n * The change event emitted by the strategy when a fallback position is used.\n */\nvar ConnectedOverlayPositionChange = /** @class */ (function () {\n function ConnectedOverlayPositionChange(connectionPair, /** @docs-private */\n scrollableViewProperties) {\n this.connectionPair = connectionPair;\n this.scrollableViewProperties = scrollableViewProperties;\n }\n /** @nocollapse */\n ConnectedOverlayPositionChange.ctorParameters = function () { return [\n { type: ConnectionPositionPair },\n { type: ScrollingVisibility, decorators: [{ type: Optional }] }\n ]; };\n return ConnectedOverlayPositionChange;\n}());\n/**\n * Validates whether a vertical position property matches the expected values.\n * \\@docs-private\n * @param {?} property Name of the property being validated.\n * @param {?} value Value of the property being validated.\n * @return {?}\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 * \\@docs-private\n * @param {?} property Name of the property being validated.\n * @param {?} value Value of the property being validated.\n * @return {?}\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 * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\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 */\nvar OverlayKeyboardDispatcher = /** @class */ (function () {\n function OverlayKeyboardDispatcher(document) {\n var _this = this;\n /**\n * Currently attached overlays in the order they were attached.\n */\n this._attachedOverlays = [];\n /**\n * Keyboard event listener that will be attached to the body.\n */\n this._keydownListener = function (event) {\n /** @type {?} */\n var overlays = _this._attachedOverlays;\n for (var 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]._keydownEventSubscriptions > 0) {\n overlays[i]._keydownEvents.next(event);\n break;\n }\n }\n };\n this._document = document;\n }\n /**\n * @return {?}\n */\n OverlayKeyboardDispatcher.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n this._detach();\n };\n /** Add a new overlay to the list of attached overlay refs. */\n /**\n * Add a new overlay to the list of attached overlay refs.\n * @param {?} overlayRef\n * @return {?}\n */\n OverlayKeyboardDispatcher.prototype.add = /**\n * Add a new overlay to the list of attached overlay refs.\n * @param {?} overlayRef\n * @return {?}\n */\n function (overlayRef) {\n // Ensure that we don't get the same overlay multiple times.\n this.remove(overlayRef);\n // Lazily start dispatcher once first overlay is added\n if (!this._isAttached) {\n this._document.body.addEventListener('keydown', this._keydownListener, true);\n this._isAttached = true;\n }\n this._attachedOverlays.push(overlayRef);\n };\n /** Remove an overlay from the list of attached overlay refs. */\n /**\n * Remove an overlay from the list of attached overlay refs.\n * @param {?} overlayRef\n * @return {?}\n */\n OverlayKeyboardDispatcher.prototype.remove = /**\n * Remove an overlay from the list of attached overlay refs.\n * @param {?} overlayRef\n * @return {?}\n */\n function (overlayRef) {\n /** @type {?} */\n var 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 /**\n * Detaches the global keyboard event listener.\n * @return {?}\n */\n OverlayKeyboardDispatcher.prototype._detach = /**\n * Detaches the global keyboard event listener.\n * @return {?}\n */\n function () {\n if (this._isAttached) {\n this._document.body.removeEventListener('keydown', this._keydownListener, true);\n this._isAttached = false;\n }\n };\n OverlayKeyboardDispatcher.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n OverlayKeyboardDispatcher.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n ]; };\n /** @nocollapse */ OverlayKeyboardDispatcher.ngInjectableDef = defineInjectable({ factory: function OverlayKeyboardDispatcher_Factory() { return new OverlayKeyboardDispatcher(inject(DOCUMENT)); }, token: OverlayKeyboardDispatcher, providedIn: \"root\" });\n return OverlayKeyboardDispatcher;\n}());\n/**\n * \\@docs-private \\@deprecated \\@breaking-change 7.0.0\n * @param {?} dispatcher\n * @param {?} _document\n * @return {?}\n */\nfunction OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY(dispatcher, _document) {\n return dispatcher || new OverlayKeyboardDispatcher(_document);\n}\n/** *\n * \\@docs-private \\@deprecated \\@breaking-change 7.0.0\n @type {?} */\nvar OVERLAY_KEYBOARD_DISPATCHER_PROVIDER = {\n // If there is already an OverlayKeyboardDispatcher available, use that.\n // Otherwise, provide a new one.\n provide: OverlayKeyboardDispatcher,\n deps: [\n [new Optional(), new SkipSelf(), OverlayKeyboardDispatcher],\n /** @type {?} */ ((\n // Coerce to `InjectionToken` so that the `deps` match the \"shape\"\n // of the type expected by Angular\n DOCUMENT))\n ],\n useFactory: OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Container inside which all overlays will render.\n */\nvar OverlayContainer = /** @class */ (function () {\n function OverlayContainer(_document) {\n this._document = _document;\n }\n /**\n * @return {?}\n */\n OverlayContainer.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n if (this._containerElement && this._containerElement.parentNode) {\n this._containerElement.parentNode.removeChild(this._containerElement);\n }\n };\n /**\n * This method returns the overlay container element. It will lazily\n * create the element the first time it is called to facilitate using\n * the container in non-browser environments.\n * @returns the container element\n */\n /**\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 * @return {?} the container element\n */\n OverlayContainer.prototype.getContainerElement = /**\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 * @return {?} the container element\n */\n function () {\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 /**\n * Create the overlay container element, which is simply a div\n * with the 'cdk-overlay-container' class on the document body.\n * @return {?}\n */\n OverlayContainer.prototype._createContainer = /**\n * Create the overlay container element, which is simply a div\n * with the 'cdk-overlay-container' class on the document body.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var container = this._document.createElement('div');\n container.classList.add('cdk-overlay-container');\n this._document.body.appendChild(container);\n this._containerElement = container;\n };\n OverlayContainer.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n OverlayContainer.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n ]; };\n /** @nocollapse */ OverlayContainer.ngInjectableDef = defineInjectable({ factory: function OverlayContainer_Factory() { return new OverlayContainer(inject(DOCUMENT)); }, token: OverlayContainer, providedIn: \"root\" });\n return OverlayContainer;\n}());\n/**\n * \\@docs-private \\@deprecated \\@breaking-change 7.0.0\n * @param {?} parentContainer\n * @param {?} _document\n * @return {?}\n */\nfunction OVERLAY_CONTAINER_PROVIDER_FACTORY(parentContainer, _document) {\n return parentContainer || new OverlayContainer(_document);\n}\n/** *\n * \\@docs-private \\@deprecated \\@breaking-change 7.0.0\n @type {?} */\nvar OVERLAY_CONTAINER_PROVIDER = {\n // If there is already an OverlayContainer available, use that. Otherwise, provide a new one.\n provide: OverlayContainer,\n deps: [\n [new Optional(), new SkipSelf(), OverlayContainer],\n /** @type {?} */ (DOCUMENT // We need to use the InjectionToken somewhere to keep TS happy\n ) // We need to use the InjectionToken somewhere to keep TS happy\n ],\n useFactory: OVERLAY_CONTAINER_PROVIDER_FACTORY\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\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 */\nvar /**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nOverlayRef = /** @class */ (function () {\n function OverlayRef(_portalOutlet, _host, _pane, _config, _ngZone, _keyboardDispatcher, _document, _location) {\n var _this = this;\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._backdropElement = null;\n this._backdropClick = new Subject();\n this._attachments = new Subject();\n this._detachments = new Subject();\n this._locationChanges = Subscription.EMPTY;\n this._keydownEventsObservable = Observable.create(function (observer) {\n /** @type {?} */\n var subscription = _this._keydownEvents.subscribe(observer);\n _this._keydownEventSubscriptions++;\n return function () {\n subscription.unsubscribe();\n _this._keydownEventSubscriptions--;\n };\n });\n /**\n * Stream of keydown events dispatched to this overlay.\n */\n this._keydownEvents = new Subject();\n /**\n * Amount of subscriptions to the keydown events.\n */\n this._keydownEventSubscriptions = 0;\n if (_config.scrollStrategy) {\n _config.scrollStrategy.attach(this);\n }\n this._positionStrategy = _config.positionStrategy;\n }\n Object.defineProperty(OverlayRef.prototype, \"overlayElement\", {\n /** The overlay's HTML element */\n get: /**\n * The overlay's HTML element\n * @return {?}\n */\n function () {\n return this._pane;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OverlayRef.prototype, \"backdropElement\", {\n /** The overlay's backdrop HTML element. */\n get: /**\n * The overlay's backdrop HTML element.\n * @return {?}\n */\n function () {\n return this._backdropElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OverlayRef.prototype, \"hostElement\", {\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: /**\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 * @return {?}\n */\n function () {\n return this._host;\n },\n enumerable: true,\n configurable: true\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 /**\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 * @return {?} The portal attachment result.\n */\n OverlayRef.prototype.attach = /**\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 * @return {?} The portal attachment result.\n */\n function (portal) {\n var _this = this;\n /** @type {?} */\n var attachResult = this._portalOutlet.attach(portal);\n if (this._positionStrategy) {\n this._positionStrategy.attach(this);\n }\n // Update the pane element with the given configuration.\n if (!this._host.parentElement && this._previousHostParent) {\n this._previousHostParent.appendChild(this._host);\n }\n this._updateStackingOrder();\n this._updateElementSize();\n this._updateElementDirection();\n if (this._config.scrollStrategy) {\n this._config.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\n .asObservable()\n .pipe(take(1))\n .subscribe(function () {\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 // @breaking-change 8.0.0 remove the null check for `_location`\n // once the constructor parameter is made required.\n if (this._config.disposeOnNavigation && this._location) {\n this._locationChanges = this._location.subscribe(function () { return _this.dispose(); });\n }\n return attachResult;\n };\n /**\n * Detaches an overlay from a portal.\n * @returns The portal detachment result.\n */\n /**\n * Detaches an overlay from a portal.\n * @return {?} The portal detachment result.\n */\n OverlayRef.prototype.detach = /**\n * Detaches an overlay from a portal.\n * @return {?} The portal detachment result.\n */\n function () {\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._config.scrollStrategy) {\n this._config.scrollStrategy.disable();\n }\n /** @type {?} */\n var 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 DOM the 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 // Stop listening for location changes.\n this._locationChanges.unsubscribe();\n return detachmentResult;\n };\n /** Cleans up the overlay from the DOM. */\n /**\n * Cleans up the overlay from the DOM.\n * @return {?}\n */\n OverlayRef.prototype.dispose = /**\n * Cleans up the overlay from the DOM.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var isAttached = this.hasAttached();\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n if (this._config.scrollStrategy) {\n this._config.scrollStrategy.disable();\n }\n this.detachBackdrop();\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 if (this._host && this._host.parentNode) {\n this._host.parentNode.removeChild(this._host);\n this._host = /** @type {?} */ ((null));\n }\n this._previousHostParent = this._pane = /** @type {?} */ ((null));\n if (isAttached) {\n this._detachments.next();\n }\n this._detachments.complete();\n };\n /** Whether the overlay has attached content. */\n /**\n * Whether the overlay has attached content.\n * @return {?}\n */\n OverlayRef.prototype.hasAttached = /**\n * Whether the overlay has attached content.\n * @return {?}\n */\n function () {\n return this._portalOutlet.hasAttached();\n };\n /** Gets an observable that emits when the backdrop has been clicked. */\n /**\n * Gets an observable that emits when the backdrop has been clicked.\n * @return {?}\n */\n OverlayRef.prototype.backdropClick = /**\n * Gets an observable that emits when the backdrop has been clicked.\n * @return {?}\n */\n function () {\n return this._backdropClick.asObservable();\n };\n /** Gets an observable that emits when the overlay has been attached. */\n /**\n * Gets an observable that emits when the overlay has been attached.\n * @return {?}\n */\n OverlayRef.prototype.attachments = /**\n * Gets an observable that emits when the overlay has been attached.\n * @return {?}\n */\n function () {\n return this._attachments.asObservable();\n };\n /** Gets an observable that emits when the overlay has been detached. */\n /**\n * Gets an observable that emits when the overlay has been detached.\n * @return {?}\n */\n OverlayRef.prototype.detachments = /**\n * Gets an observable that emits when the overlay has been detached.\n * @return {?}\n */\n function () {\n return this._detachments.asObservable();\n };\n /** Gets an observable of keydown events targeted to this overlay. */\n /**\n * Gets an observable of keydown events targeted to this overlay.\n * @return {?}\n */\n OverlayRef.prototype.keydownEvents = /**\n * Gets an observable of keydown events targeted to this overlay.\n * @return {?}\n */\n function () {\n return this._keydownEventsObservable;\n };\n /** Gets the the current overlay configuration, which is immutable. */\n /**\n * Gets the the current overlay configuration, which is immutable.\n * @return {?}\n */\n OverlayRef.prototype.getConfig = /**\n * Gets the the current overlay configuration, which is immutable.\n * @return {?}\n */\n function () {\n return this._config;\n };\n /** Updates the position of the overlay based on the position strategy. */\n /**\n * Updates the position of the overlay based on the position strategy.\n * @return {?}\n */\n OverlayRef.prototype.updatePosition = /**\n * Updates the position of the overlay based on the position strategy.\n * @return {?}\n */\n function () {\n if (this._positionStrategy) {\n this._positionStrategy.apply();\n }\n };\n /** Switches to a new position strategy and updates the overlay position. */\n /**\n * Switches to a new position strategy and updates the overlay position.\n * @param {?} strategy\n * @return {?}\n */\n OverlayRef.prototype.updatePositionStrategy = /**\n * Switches to a new position strategy and updates the overlay position.\n * @param {?} strategy\n * @return {?}\n */\n function (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 /**\n * Update the size properties of the overlay.\n * @param {?} sizeConfig\n * @return {?}\n */\n OverlayRef.prototype.updateSize = /**\n * Update the size properties of the overlay.\n * @param {?} sizeConfig\n * @return {?}\n */\n function (sizeConfig) {\n this._config = __assign({}, this._config, sizeConfig);\n this._updateElementSize();\n };\n /** Sets the LTR/RTL direction for the overlay. */\n /**\n * Sets the LTR/RTL direction for the overlay.\n * @param {?} dir\n * @return {?}\n */\n OverlayRef.prototype.setDirection = /**\n * Sets the LTR/RTL direction for the overlay.\n * @param {?} dir\n * @return {?}\n */\n function (dir) {\n this._config = __assign({}, this._config, { direction: dir });\n this._updateElementDirection();\n };\n /**\n * Returns the layout direction of the overlay panel.\n */\n /**\n * Returns the layout direction of the overlay panel.\n * @return {?}\n */\n OverlayRef.prototype.getDirection = /**\n * Returns the layout direction of the overlay panel.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var direction = this._config.direction;\n if (!direction) {\n return 'ltr';\n }\n return typeof direction === 'string' ? direction : direction.value;\n };\n /**\n * Updates the text direction of the overlay panel.\n * @return {?}\n */\n OverlayRef.prototype._updateElementDirection = /**\n * Updates the text direction of the overlay panel.\n * @return {?}\n */\n function () {\n this._host.setAttribute('dir', this.getDirection());\n };\n /**\n * Updates the size of the overlay element based on the overlay config.\n * @return {?}\n */\n OverlayRef.prototype._updateElementSize = /**\n * Updates the size of the overlay element based on the overlay config.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var 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 /**\n * Toggles the pointer events for the overlay pane element.\n * @param {?} enablePointer\n * @return {?}\n */\n OverlayRef.prototype._togglePointerEvents = /**\n * Toggles the pointer events for the overlay pane element.\n * @param {?} enablePointer\n * @return {?}\n */\n function (enablePointer) {\n this._pane.style.pointerEvents = enablePointer ? 'auto' : 'none';\n };\n /**\n * Attaches a backdrop for this overlay.\n * @return {?}\n */\n OverlayRef.prototype._attachBackdrop = /**\n * Attaches a backdrop for this overlay.\n * @return {?}\n */\n function () {\n var _this = this;\n /** @type {?} */\n var 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 } /** @type {?} */\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', function (event) { return _this._backdropClick.next(event); });\n // Add class to fade-in the backdrop after one frame.\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(function () {\n requestAnimationFrame(function () {\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 * @return {?}\n */\n OverlayRef.prototype._updateStackingOrder = /**\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 * @return {?}\n */\n function () {\n if (this._host.nextSibling) {\n /** @type {?} */ ((this._host.parentNode)).appendChild(this._host);\n }\n };\n /** Detaches the backdrop (if any) associated with the overlay. */\n /**\n * Detaches the backdrop (if any) associated with the overlay.\n * @return {?}\n */\n OverlayRef.prototype.detachBackdrop = /**\n * Detaches the backdrop (if any) associated with the overlay.\n * @return {?}\n */\n function () {\n var _this = this;\n /** @type {?} */\n var backdropToDetach = this._backdropElement;\n if (backdropToDetach) {\n /** @type {?} */\n var timeoutId_1 = void 0;\n /** @type {?} */\n var finishDetach_1 = function () {\n // It may not be attached to anything in certain cases (e.g. unit tests).\n if (backdropToDetach && backdropToDetach.parentNode) {\n backdropToDetach.parentNode.removeChild(backdropToDetach);\n }\n // It is possible that a new portal has been attached to this overlay since we started\n // removing the backdrop. If that is the case, only clear the backdrop reference if it\n // is still the same instance that we started to remove.\n if (_this._backdropElement == backdropToDetach) {\n _this._backdropElement = null;\n }\n clearTimeout(timeoutId_1);\n };\n backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\n if (this._config.backdropClass) {\n this._toggleClasses(backdropToDetach, this._config.backdropClass, false);\n }\n this._ngZone.runOutsideAngular(function () {\n /** @type {?} */ ((backdropToDetach)).addEventListener('transitionend', finishDetach_1);\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 timeoutId_1 = this._ngZone.runOutsideAngular(function () { return setTimeout(finishDetach_1, 500); });\n }\n };\n /**\n * Toggles a single CSS class or an array of classes on an element.\n * @param {?} element\n * @param {?} cssClasses\n * @param {?} isAdd\n * @return {?}\n */\n OverlayRef.prototype._toggleClasses = /**\n * Toggles a single CSS class or an array of classes on an element.\n * @param {?} element\n * @param {?} cssClasses\n * @param {?} isAdd\n * @return {?}\n */\n function (element, cssClasses, isAdd) {\n /** @type {?} */\n var classList = element.classList;\n coerceArray(cssClasses).forEach(function (cssClass) {\n // We can't do a spread here, because IE doesn't support setting multiple classes.\n isAdd ? classList.add(cssClass) : classList.remove(cssClass);\n });\n };\n /**\n * Detaches the overlay content next time the zone stabilizes.\n * @return {?}\n */\n OverlayRef.prototype._detachContentWhenStable = /**\n * Detaches the overlay content next time the zone stabilizes.\n * @return {?}\n */\n function () {\n var _this = this;\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(function () {\n /** @type {?} */\n var subscription = _this._ngZone.onStable\n .asObservable()\n .pipe(takeUntil(merge(_this._attachments, _this._detachments)))\n .subscribe(function () {\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._previousHostParent.removeChild(_this._host);\n }\n subscription.unsubscribe();\n }\n });\n });\n };\n return OverlayRef;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** *\n * Class to be added to the overlay bounding box.\n @type {?} */\nvar boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\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 */\nvar /**\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 */\nFlexibleConnectedPositionStrategy = /** @class */ (function () {\n function FlexibleConnectedPositionStrategy(connectedTo, _viewportRuler, _document, _platform, _overlayContainer) {\n var _this = this;\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n /**\n * Last size used for the bounding box. Used to avoid resizing the overlay after open.\n */\n this._lastBoundingBoxSize = { width: 0, height: 0 };\n /**\n * Whether the overlay was pushed in a previous positioning.\n */\n this._isPushed = false;\n /**\n * Whether the overlay can be pushed on-screen on the initial open.\n */\n this._canPush = true;\n /**\n * Whether the overlay can grow via flexible width/height after the initial open.\n */\n this._growAfterOpen = false;\n /**\n * Whether the overlay's width and height can be constrained to fit within the viewport.\n */\n this._hasFlexibleDimensions = true;\n /**\n * Whether the overlay position is locked.\n */\n this._positionLocked = false;\n /**\n * Amount of space that must be maintained between the overlay and the edge of the viewport.\n */\n this._viewportMargin = 0;\n /**\n * The Scrollable containers used to check scrollable view properties on position change.\n */\n this.scrollables = [];\n /**\n * Ordered list of preferred positions, from most to least desirable.\n */\n this._preferredPositions = [];\n /**\n * Subject that emits whenever the position changes.\n */\n this._positionChanges = new Subject();\n /**\n * Subscription to viewport size changes.\n */\n this._resizeSubscription = Subscription.EMPTY;\n /**\n * Default offset for the overlay along the x axis.\n */\n this._offsetX = 0;\n /**\n * Default offset for the overlay along the y axis.\n */\n this._offsetY = 0;\n /**\n * Amount of subscribers to the `positionChanges` stream.\n */\n this._positionChangeSubscriptions = 0;\n /**\n * Keeps track of the CSS classes that the position strategy has applied on the overlay panel.\n */\n this._appliedPanelClasses = [];\n /**\n * Observable sequence of position changes.\n */\n this.positionChanges = Observable.create(function (observer) {\n /** @type {?} */\n var subscription = _this._positionChanges.subscribe(observer);\n _this._positionChangeSubscriptions++;\n return function () {\n subscription.unsubscribe();\n _this._positionChangeSubscriptions--;\n };\n });\n this.setOrigin(connectedTo);\n }\n Object.defineProperty(FlexibleConnectedPositionStrategy.prototype, \"positions\", {\n /** Ordered list of preferred positions, from most to least desirable. */\n get: /**\n * Ordered list of preferred positions, from most to least desirable.\n * @return {?}\n */\n function () {\n return this._preferredPositions;\n },\n enumerable: true,\n configurable: true\n });\n /** Attaches this position strategy to an overlay. */\n /**\n * Attaches this position strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.attach = /**\n * Attaches this position strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n function (overlayRef) {\n var _this = this;\n if (this._overlayRef && overlayRef !== this._overlayRef) {\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(function () {\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 /**\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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.apply = /**\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 * @return {?}\n */\n function () {\n // We shouldn't do anything if the strategy was disposed or we're on the server.\n // @breaking-change 7.0.0 Remove `_platform` null check once it's guaranteed to be defined.\n if (this._isDisposed || (this._platform && !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 and the overlay to determine how to position\n // the overlay relative to the origin.\n // We use the viewport rect to determine whether a position would go off-screen.\n this._viewportRect = this._getNarrowedViewportRect();\n this._originRect = this._origin.getBoundingClientRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n /** @type {?} */\n var originRect = this._originRect;\n /** @type {?} */\n var overlayRect = this._overlayRect;\n /** @type {?} */\n var viewportRect = this._viewportRect;\n /** @type {?} */\n var flexibleFits = [];\n /** @type {?} */\n var 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 (var _i = 0, _a = this._preferredPositions; _i < _a.length; _i++) {\n var pos = _a[_i];\n /** @type {?} */\n var originPoint = this._getOriginPoint(originRect, pos);\n /** @type {?} */\n var overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos);\n /** @type {?} */\n var 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: 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: overlayFit, overlayPoint: overlayPoint, originPoint: originPoint, position: pos, overlayRect: 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 /** @type {?} */\n var bestFit = null;\n /** @type {?} */\n var bestScore = -1;\n for (var _b = 0, flexibleFits_1 = flexibleFits; _b < flexibleFits_1.length; _b++) {\n var fit_1 = flexibleFits_1[_b];\n /** @type {?} */\n var score = fit_1.boundingBoxRect.width * fit_1.boundingBoxRect.height * (fit_1.position.weight || 1);\n if (score > bestScore) {\n bestScore = score;\n bestFit = fit_1;\n }\n }\n this._isPushed = false;\n this._applyPosition(/** @type {?} */ ((bestFit)).position, /** @type {?} */ ((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(/** @type {?} */ ((fallback)).position, /** @type {?} */ ((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(/** @type {?} */ ((fallback)).position, /** @type {?} */ ((fallback)).originPoint);\n };\n /**\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.detach = /**\n * @return {?}\n */\n function () {\n this._clearPanelClasses();\n this._lastPosition = null;\n this._previousPushAmount = null;\n this._resizeSubscription.unsubscribe();\n };\n /** Cleanup after the element gets destroyed. */\n /**\n * Cleanup after the element gets destroyed.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.dispose = /**\n * Cleanup after the element gets destroyed.\n * @return {?}\n */\n function () {\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, /** @type {?} */ ({\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 = /** @type {?} */ ((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 /**\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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.reapplyLastPosition = /**\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 * @return {?}\n */\n function () {\n if (!this._isDisposed && (!this._platform || this._platform.isBrowser)) {\n this._originRect = this._origin.getBoundingClientRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n this._viewportRect = this._getNarrowedViewportRect();\n /** @type {?} */\n var lastPosition = this._lastPosition || this._preferredPositions[0];\n /** @type {?} */\n var originPoint = this._getOriginPoint(this._originRect, lastPosition);\n this._applyPosition(lastPosition, originPoint);\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 /**\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 * @param {?} scrollables\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withScrollableContainers = /**\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 * @param {?} scrollables\n * @return {?}\n */\n function (scrollables) {\n this.scrollables = scrollables;\n };\n /**\n * Adds new preferred positions.\n * @param positions List of positions options for this overlay.\n */\n /**\n * Adds new preferred positions.\n * @param {?} positions List of positions options for this overlay.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withPositions = /**\n * Adds new preferred positions.\n * @param {?} positions List of positions options for this overlay.\n * @return {?}\n */\n function (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(/** @type {?} */ ((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 /**\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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withViewportMargin = /**\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 * @return {?}\n */\n function (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 /**\n * Sets whether the overlay's width and height can be constrained to fit within the viewport.\n * @param {?=} flexibleDimensions\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withFlexibleDimensions = /**\n * Sets whether the overlay's width and height can be constrained to fit within the viewport.\n * @param {?=} flexibleDimensions\n * @return {?}\n */\n function (flexibleDimensions) {\n if (flexibleDimensions === void 0) { 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 /**\n * Sets whether the overlay can grow after the initial open via flexible width/height.\n * @param {?=} growAfterOpen\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withGrowAfterOpen = /**\n * Sets whether the overlay can grow after the initial open via flexible width/height.\n * @param {?=} growAfterOpen\n * @return {?}\n */\n function (growAfterOpen) {\n if (growAfterOpen === void 0) { 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 /**\n * Sets whether the overlay can be pushed on-screen if none of the provided positions fit.\n * @param {?=} canPush\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withPush = /**\n * Sets whether the overlay can be pushed on-screen if none of the provided positions fit.\n * @param {?=} canPush\n * @return {?}\n */\n function (canPush) {\n if (canPush === void 0) { 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 /**\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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withLockedPosition = /**\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 * @return {?}\n */\n function (isLocked) {\n if (isLocked === void 0) { isLocked = true; }\n this._positionLocked = isLocked;\n return this;\n };\n /**\n * Sets the origin element, relative to which to position the overlay.\n * @param origin Reference to the new origin element.\n */\n /**\n * Sets the origin element, relative to which to position the overlay.\n * @param {?} origin Reference to the new origin element.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.setOrigin = /**\n * Sets the origin element, relative to which to position the overlay.\n * @param {?} origin Reference to the new origin element.\n * @return {?}\n */\n function (origin) {\n this._origin = origin instanceof ElementRef ? origin.nativeElement : 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 /**\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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withDefaultOffsetX = /**\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 * @return {?}\n */\n function (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 /**\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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withDefaultOffsetY = /**\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 * @return {?}\n */\n function (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 /**\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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype.withTransformOriginOn = /**\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 * @return {?}\n */\n function (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 * @param {?} originRect\n * @param {?} pos\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getOriginPoint = /**\n * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n * @param {?} originRect\n * @param {?} pos\n * @return {?}\n */\n function (originRect, pos) {\n /** @type {?} */\n var 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 /** @type {?} */\n var startX = this._isRtl() ? originRect.right : originRect.left;\n /** @type {?} */\n var endX = this._isRtl() ? originRect.left : originRect.right;\n x = pos.originX == 'start' ? startX : endX;\n }\n /** @type {?} */\n var 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 return { x: x, y: 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 * @param {?} originPoint\n * @param {?} overlayRect\n * @param {?} pos\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getOverlayPoint = /**\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 * @param {?} originPoint\n * @param {?} overlayRect\n * @param {?} pos\n * @return {?}\n */\n function (originPoint, overlayRect, pos) {\n /** @type {?} */\n var 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 /** @type {?} */\n var 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 /**\n * Gets how well an overlay at the given point will fit within the viewport.\n * @param {?} point\n * @param {?} overlay\n * @param {?} viewport\n * @param {?} position\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getOverlayFit = /**\n * Gets how well an overlay at the given point will fit within the viewport.\n * @param {?} point\n * @param {?} overlay\n * @param {?} viewport\n * @param {?} position\n * @return {?}\n */\n function (point, overlay, viewport, position) {\n var x = point.x, y = point.y;\n /** @type {?} */\n var offsetX = this._getOffset(position, 'x');\n /** @type {?} */\n var 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 /** @type {?} */\n var leftOverflow = 0 - x;\n /** @type {?} */\n var rightOverflow = (x + overlay.width) - viewport.width;\n /** @type {?} */\n var topOverflow = 0 - y;\n /** @type {?} */\n var bottomOverflow = (y + overlay.height) - viewport.height;\n /** @type {?} */\n var visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);\n /** @type {?} */\n var visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);\n /** @type {?} */\n var visibleArea = visibleWidth * visibleHeight;\n return {\n visibleArea: 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 overlat at some position.\n * @param {?} viewport The geometry of the viewport.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._canFitWithFlexibleDimensions = /**\n * Whether the overlay can fit within the viewport when it may resize either its width or height.\n * @param {?} fit How well the overlay fits in the viewport at some position.\n * @param {?} point The (x, y) coordinates of the overlat at some position.\n * @param {?} viewport The geometry of the viewport.\n * @return {?}\n */\n function (fit, point, viewport) {\n if (this._hasFlexibleDimensions) {\n /** @type {?} */\n var availableHeight = viewport.bottom - point.y;\n /** @type {?} */\n var availableWidth = viewport.right - point.x;\n /** @type {?} */\n var minHeight = this._overlayRef.getConfig().minHeight;\n /** @type {?} */\n var minWidth = this._overlayRef.getConfig().minWidth;\n /** @type {?} */\n var verticalFit = fit.fitsInViewportVertically ||\n (minHeight != null && minHeight <= availableHeight);\n /** @type {?} */\n var horizontalFit = fit.fitsInViewportHorizontally ||\n (minWidth != null && minWidth <= availableWidth);\n return verticalFit && horizontalFit;\n }\n };\n /**\n * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the\n * right and bottom).\n *\n * @param {?} start Starting point from which the overlay is pushed.\n * @param {?} overlay Dimensions of the overlay.\n * @param {?} scrollPosition Current viewport scroll position.\n * @return {?} The point at which to position the overlay after pushing. This is effectively a new\n * originPoint.\n */\n FlexibleConnectedPositionStrategy.prototype._pushOverlayOnScreen = /**\n * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the\n * right and bottom).\n *\n * @param {?} start Starting point from which the overlay is pushed.\n * @param {?} overlay Dimensions of the overlay.\n * @param {?} scrollPosition Current viewport scroll position.\n * @return {?} The point at which to position the overlay after pushing. This is effectively a new\n * originPoint.\n */\n function (start, overlay, 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 /** @type {?} */\n var viewport = this._viewportRect;\n /** @type {?} */\n var overflowRight = Math.max(start.x + overlay.width - viewport.right, 0);\n /** @type {?} */\n var overflowBottom = Math.max(start.y + overlay.height - viewport.bottom, 0);\n /** @type {?} */\n var overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);\n /** @type {?} */\n var overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0);\n /** @type {?} */\n var pushX = 0;\n /** @type {?} */\n var 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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._applyPosition = /**\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 * @return {?}\n */\n function (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._positionChangeSubscriptions > 0) {\n /** @type {?} */\n var scrollableViewProperties = this._getScrollVisibility();\n /** @type {?} */\n var changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties);\n this._positionChanges.next(changeEvent);\n }\n this._isInitialRender = false;\n };\n /**\n * Sets the transform origin based on the configured selector and the passed-in position.\n * @param {?} position\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._setTransformOrigin = /**\n * Sets the transform origin based on the configured selector and the passed-in position.\n * @param {?} position\n * @return {?}\n */\n function (position) {\n if (!this._transformOriginSelector) {\n return;\n }\n /** @type {?} */\n var elements = /** @type {?} */ ((this._boundingBox)).querySelectorAll(this._transformOriginSelector);\n /** @type {?} */\n var xOrigin;\n /** @type {?} */\n var 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 (var 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 * @param {?} origin\n * @param {?} position\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._calculateBoundingBoxRect = /**\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 * @param {?} origin\n * @param {?} position\n * @return {?}\n */\n function (origin, position) {\n /** @type {?} */\n var viewport = this._viewportRect;\n /** @type {?} */\n var isRtl = this._isRtl();\n /** @type {?} */\n var height;\n /** @type {?} */\n var top;\n /** @type {?} */\n var 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.bottom - origin.y;\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 /** @type {?} */\n var smallestDistanceToViewportEdge = Math.min(viewport.bottom - origin.y + viewport.top, origin.y);\n /** @type {?} */\n var 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 /** @type {?} */\n var isBoundedByRightViewportEdge = (position.overlayX === 'start' && !isRtl) ||\n (position.overlayX === 'end' && isRtl);\n /** @type {?} */\n var isBoundedByLeftViewportEdge = (position.overlayX === 'end' && !isRtl) ||\n (position.overlayX === 'start' && isRtl);\n /** @type {?} */\n var width;\n /** @type {?} */\n var left;\n /** @type {?} */\n var right;\n if (isBoundedByLeftViewportEdge) {\n right = viewport.right - origin.x + this._viewportMargin;\n width = origin.x - viewport.left;\n }\n else if (isBoundedByRightViewportEdge) {\n left = origin.x;\n width = viewport.right - origin.x;\n }\n else {\n /** @type {?} */\n var smallestDistanceToViewportEdge = Math.min(viewport.right - origin.x + viewport.left, origin.x);\n /** @type {?} */\n var 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: /** @type {?} */ ((top)), left: /** @type {?} */ ((left)), bottom: /** @type {?} */ ((bottom)), right: /** @type {?} */ ((right)), width: width, height: 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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._setBoundingBoxStyles = /**\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 * @return {?}\n */\n function (origin, position) {\n /** @type {?} */\n var 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 /** @type {?} */\n var styles = /** @type {?} */ ({});\n if (this._hasExactPosition()) {\n styles.top = styles.left = '0';\n styles.bottom = styles.right = '';\n styles.width = styles.height = '100%';\n }\n else {\n /** @type {?} */\n var maxHeight = this._overlayRef.getConfig().maxHeight;\n /** @type {?} */\n var 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(/** @type {?} */ ((this._boundingBox)).style, styles);\n };\n /**\n * Resets the styles for the bounding box so that a new positioning can be computed.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._resetBoundingBoxStyles = /**\n * Resets the styles for the bounding box so that a new positioning can be computed.\n * @return {?}\n */\n function () {\n extendStyles(/** @type {?} */ ((this._boundingBox)).style, /** @type {?} */ ({\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n height: '',\n width: '',\n alignItems: '',\n justifyContent: '',\n }));\n };\n /**\n * Resets the styles for the overlay pane so that a new positioning can be computed.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._resetOverlayElementStyles = /**\n * Resets the styles for the overlay pane so that a new positioning can be computed.\n * @return {?}\n */\n function () {\n extendStyles(this._pane.style, /** @type {?} */ ({\n top: '',\n left: '',\n bottom: '',\n right: '',\n position: '',\n }));\n };\n /**\n * Sets positioning styles to the overlay element.\n * @param {?} originPoint\n * @param {?} position\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._setOverlayElementStyles = /**\n * Sets positioning styles to the overlay element.\n * @param {?} originPoint\n * @param {?} position\n * @return {?}\n */\n function (originPoint, position) {\n /** @type {?} */\n var styles = /** @type {?} */ ({});\n if (this._hasExactPosition()) {\n /** @type {?} */\n var 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 /** @type {?} */\n var transformString = '';\n /** @type {?} */\n var offsetX = this._getOffset(position, 'x');\n /** @type {?} */\n var 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 if (this._hasFlexibleDimensions && this._overlayRef.getConfig().maxHeight) {\n styles.maxHeight = '';\n }\n if (this._hasFlexibleDimensions && this._overlayRef.getConfig().maxWidth) {\n styles.maxWidth = '';\n }\n extendStyles(this._pane.style, styles);\n };\n /**\n * Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing.\n * @param {?} position\n * @param {?} originPoint\n * @param {?} scrollPosition\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getExactOverlayY = /**\n * Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing.\n * @param {?} position\n * @param {?} originPoint\n * @param {?} scrollPosition\n * @return {?}\n */\n function (position, originPoint, scrollPosition) {\n /** @type {?} */\n var styles = /** @type {?} */ ({ top: null, bottom: null });\n /** @type {?} */\n var overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n /** @type {?} */\n var virtualKeyboardOffset = this._overlayContainer ?\n this._overlayContainer.getContainerElement().getBoundingClientRect().top : 0;\n // Normally this would be zero, however when the overlay is attached to an input (e.g. in an\n // autocomplete), mobile browsers will shift everything in order to put the input in the middle\n // of the screen and to make space for the virtual keyboard. We need to account for this offset,\n // otherwise our positioning will be thrown off.\n overlayPoint.y -= virtualKeyboardOffset;\n // 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 /** @type {?} */\n var documentHeight = /** @type {?} */ ((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 /**\n * Gets the exact left/right for the overlay when not using flexible sizing or when pushing.\n * @param {?} position\n * @param {?} originPoint\n * @param {?} scrollPosition\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getExactOverlayX = /**\n * Gets the exact left/right for the overlay when not using flexible sizing or when pushing.\n * @param {?} position\n * @param {?} originPoint\n * @param {?} scrollPosition\n * @return {?}\n */\n function (position, originPoint, scrollPosition) {\n /** @type {?} */\n var styles = /** @type {?} */ ({ left: null, right: null });\n /** @type {?} */\n var overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n /** @type {?} */\n var 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 /** @type {?} */\n var documentWidth = /** @type {?} */ ((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 * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getScrollVisibility = /**\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 * @return {?}\n */\n function () {\n /** @type {?} */\n var originBounds = this._origin.getBoundingClientRect();\n /** @type {?} */\n var overlayBounds = this._pane.getBoundingClientRect();\n /** @type {?} */\n var scrollContainerBounds = this.scrollables.map(function (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 /**\n * Subtracts the amount that an element is overflowing on an axis from it's length.\n * @param {?} length\n * @param {...?} overflows\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._subtractOverflows = /**\n * Subtracts the amount that an element is overflowing on an axis from it's length.\n * @param {?} length\n * @param {...?} overflows\n * @return {?}\n */\n function (length) {\n var overflows = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n overflows[_i - 1] = arguments[_i];\n }\n return overflows.reduce(function (currentValue, currentOverflow) {\n return currentValue - Math.max(currentOverflow, 0);\n }, length);\n };\n /**\n * Narrows the given viewport rect by the current _viewportMargin.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getNarrowedViewportRect = /**\n * Narrows the given viewport rect by the current _viewportMargin.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var width = /** @type {?} */ ((this._document.documentElement)).clientWidth;\n /** @type {?} */\n var height = /** @type {?} */ ((this._document.documentElement)).clientHeight;\n /** @type {?} */\n var 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 /**\n * Whether the we're dealing with an RTL context\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._isRtl = /**\n * Whether the we're dealing with an RTL context\n * @return {?}\n */\n function () {\n return this._overlayRef.getDirection() === 'rtl';\n };\n /**\n * Determines whether the overlay uses exact or flexible positioning.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._hasExactPosition = /**\n * Determines whether the overlay uses exact or flexible positioning.\n * @return {?}\n */\n function () {\n return !this._hasFlexibleDimensions || this._isPushed;\n };\n /**\n * Retrieves the offset of a position along the x or y axis.\n * @param {?} position\n * @param {?} axis\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._getOffset = /**\n * Retrieves the offset of a position along the x or y axis.\n * @param {?} position\n * @param {?} axis\n * @return {?}\n */\n function (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 /**\n * Validates that the current position match the expected values.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._validatePositions = /**\n * Validates that the current position match the expected values.\n * @return {?}\n */\n function () {\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(function (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 * @param {?} cssClasses\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._addPanelClasses = /**\n * Adds a single CSS class or an array of classes on the overlay panel.\n * @param {?} cssClasses\n * @return {?}\n */\n function (cssClasses) {\n var _this = this;\n if (this._pane) {\n coerceArray(cssClasses).forEach(function (cssClass) {\n if (_this._appliedPanelClasses.indexOf(cssClass) === -1) {\n _this._appliedPanelClasses.push(cssClass);\n _this._pane.classList.add(cssClass);\n }\n });\n }\n };\n /**\n * Clears the classes that the position strategy has applied from the overlay panel.\n * @return {?}\n */\n FlexibleConnectedPositionStrategy.prototype._clearPanelClasses = /**\n * Clears the classes that the position strategy has applied from the overlay panel.\n * @return {?}\n */\n function () {\n var _this = this;\n if (this._pane) {\n this._appliedPanelClasses.forEach(function (cssClass) { return _this._pane.classList.remove(cssClass); });\n this._appliedPanelClasses = [];\n }\n };\n return FlexibleConnectedPositionStrategy;\n}());\n/**\n * Shallow-extends a stylesheet object with another stylesheet object.\n * @param {?} dest\n * @param {?} source\n * @return {?}\n */\nfunction extendStyles(dest, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n return dest;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative to some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n * @deprecated Use `FlexibleConnectedPositionStrategy` instead.\n * \\@breaking-change 7.0.0\n */\nvar /**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative to some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n * @deprecated Use `FlexibleConnectedPositionStrategy` instead.\n * \\@breaking-change 7.0.0\n */\nConnectedPositionStrategy = /** @class */ (function () {\n function ConnectedPositionStrategy(originPos, overlayPos, connectedTo, viewportRuler, document, \n // @breaking-change 7.0.0 `platform` parameter to be made required.\n platform) {\n /**\n * Ordered list of preferred positions, from most to least desirable.\n */\n this._preferredPositions = [];\n // Since the `ConnectedPositionStrategy` is deprecated and we don't want to maintain\n // the extra logic, we create an instance of the positioning strategy that has some\n // defaults that make it behave as the old position strategy and to which we'll\n // proxy all of the API calls.\n this._positionStrategy =\n new FlexibleConnectedPositionStrategy(connectedTo, viewportRuler, document, platform)\n .withFlexibleDimensions(false)\n .withPush(false)\n .withViewportMargin(0);\n this.withFallbackPosition(originPos, overlayPos);\n }\n Object.defineProperty(ConnectedPositionStrategy.prototype, \"_isRtl\", {\n /** Whether the we're dealing with an RTL context */\n get: /**\n * Whether the we're dealing with an RTL context\n * @return {?}\n */\n function () {\n return this._overlayRef.getDirection() === 'rtl';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectedPositionStrategy.prototype, \"onPositionChange\", {\n /** Emits an event when the connection point changes. */\n get: /**\n * Emits an event when the connection point changes.\n * @return {?}\n */\n function () {\n return this._positionStrategy.positionChanges;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectedPositionStrategy.prototype, \"positions\", {\n /** Ordered list of preferred positions, from most to least desirable. */\n get: /**\n * Ordered list of preferred positions, from most to least desirable.\n * @return {?}\n */\n function () {\n return this._preferredPositions;\n },\n enumerable: true,\n configurable: true\n });\n /** Attach this position strategy to an overlay. */\n /**\n * Attach this position strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.attach = /**\n * Attach this position strategy to an overlay.\n * @param {?} overlayRef\n * @return {?}\n */\n function (overlayRef) {\n this._overlayRef = overlayRef;\n this._positionStrategy.attach(overlayRef);\n if (this._direction) {\n overlayRef.setDirection(this._direction);\n this._direction = null;\n }\n };\n /** Disposes all resources used by the position strategy. */\n /**\n * Disposes all resources used by the position strategy.\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.dispose = /**\n * Disposes all resources used by the position strategy.\n * @return {?}\n */\n function () {\n this._positionStrategy.dispose();\n };\n /** @docs-private */\n /**\n * \\@docs-private\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.detach = /**\n * \\@docs-private\n * @return {?}\n */\n function () {\n this._positionStrategy.detach();\n };\n /**\n * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin fits on-screen.\n * @docs-private\n */\n /**\n * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin fits on-screen.\n * \\@docs-private\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.apply = /**\n * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin fits on-screen.\n * \\@docs-private\n * @return {?}\n */\n function () {\n this._positionStrategy.apply();\n };\n /**\n * Re-positions the overlay element with the trigger in its last calculated position,\n * even if a position higher in the \"preferred positions\" list would now fit. This\n * allows one to re-align the panel without changing the orientation of the panel.\n */\n /**\n * Re-positions the overlay element with the trigger in its last calculated position,\n * even if a position higher in the \"preferred positions\" list would now fit. This\n * allows one to re-align the panel without changing the orientation of the panel.\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.recalculateLastPosition = /**\n * Re-positions the overlay element with the trigger in its last calculated position,\n * even if a position higher in the \"preferred positions\" list would now fit. This\n * allows one to re-align the panel without changing the orientation of the panel.\n * @return {?}\n */\n function () {\n this._positionStrategy.reapplyLastPosition();\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 /**\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 * @param {?} scrollables\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.withScrollableContainers = /**\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 * @param {?} scrollables\n * @return {?}\n */\n function (scrollables) {\n this._positionStrategy.withScrollableContainers(scrollables);\n };\n /**\n * Adds a new preferred fallback position.\n * @param originPos\n * @param overlayPos\n */\n /**\n * Adds a new preferred fallback position.\n * @param {?} originPos\n * @param {?} overlayPos\n * @param {?=} offsetX\n * @param {?=} offsetY\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.withFallbackPosition = /**\n * Adds a new preferred fallback position.\n * @param {?} originPos\n * @param {?} overlayPos\n * @param {?=} offsetX\n * @param {?=} offsetY\n * @return {?}\n */\n function (originPos, overlayPos, offsetX, offsetY) {\n /** @type {?} */\n var position = new ConnectionPositionPair(originPos, overlayPos, offsetX, offsetY);\n this._preferredPositions.push(position);\n this._positionStrategy.withPositions(this._preferredPositions);\n return this;\n };\n /**\n * Sets the layout direction so the overlay's position can be adjusted to match.\n * @param dir New layout direction.\n */\n /**\n * Sets the layout direction so the overlay's position can be adjusted to match.\n * @param {?} dir New layout direction.\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.withDirection = /**\n * Sets the layout direction so the overlay's position can be adjusted to match.\n * @param {?} dir New layout direction.\n * @return {?}\n */\n function (dir) {\n // Since the direction might be declared before the strategy is attached,\n // we save the value in a temporary property and we'll transfer it to the\n // overlay ref on attachment.\n if (this._overlayRef) {\n this._overlayRef.setDirection(dir);\n }\n else {\n this._direction = dir;\n }\n return this;\n };\n /**\n * Sets an offset for the overlay's connection point on the x-axis\n * @param offset New offset in the X axis.\n */\n /**\n * Sets an offset for the overlay's connection point on the x-axis\n * @param {?} offset New offset in the X axis.\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.withOffsetX = /**\n * Sets an offset for the overlay's connection point on the x-axis\n * @param {?} offset New offset in the X axis.\n * @return {?}\n */\n function (offset) {\n this._positionStrategy.withDefaultOffsetX(offset);\n return this;\n };\n /**\n * Sets an offset for the overlay's connection point on the y-axis\n * @param offset New offset in the Y axis.\n */\n /**\n * Sets an offset for the overlay's connection point on the y-axis\n * @param {?} offset New offset in the Y axis.\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.withOffsetY = /**\n * Sets an offset for the overlay's connection point on the y-axis\n * @param {?} offset New offset in the Y axis.\n * @return {?}\n */\n function (offset) {\n this._positionStrategy.withDefaultOffsetY(offset);\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 /**\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 * @return {?}\n */\n ConnectedPositionStrategy.prototype.withLockedPosition = /**\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 * @return {?}\n */\n function (isLocked) {\n this._positionStrategy.withLockedPosition(isLocked);\n return this;\n };\n /**\n * Overwrites the current set of positions with an array of new ones.\n * @param positions Position pairs to be set on the strategy.\n */\n /**\n * Overwrites the current set of positions with an array of new ones.\n * @param {?} positions Position pairs to be set on the strategy.\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.withPositions = /**\n * Overwrites the current set of positions with an array of new ones.\n * @param {?} positions Position pairs to be set on the strategy.\n * @return {?}\n */\n function (positions) {\n this._preferredPositions = positions.slice();\n this._positionStrategy.withPositions(this._preferredPositions);\n return this;\n };\n /**\n * Sets the origin element, relative to which to position the overlay.\n * @param origin Reference to the new origin element.\n */\n /**\n * Sets the origin element, relative to which to position the overlay.\n * @param {?} origin Reference to the new origin element.\n * @return {?}\n */\n ConnectedPositionStrategy.prototype.setOrigin = /**\n * Sets the origin element, relative to which to position the overlay.\n * @param {?} origin Reference to the new origin element.\n * @return {?}\n */\n function (origin) {\n this._positionStrategy.setOrigin(origin);\n return this;\n };\n return ConnectedPositionStrategy;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/** *\n * Class to be added to the overlay pane wrapper.\n @type {?} */\nvar 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 */\nvar /**\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 */\nGlobalPositionStrategy = /** @class */ (function () {\n function GlobalPositionStrategy() {\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 /**\n * @param {?} overlayRef\n * @return {?}\n */\n GlobalPositionStrategy.prototype.attach = /**\n * @param {?} overlayRef\n * @return {?}\n */\n function (overlayRef) {\n /** @type {?} */\n var 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 /**\n * Sets the top position of the overlay. Clears any previously set vertical position.\n * @param {?=} value New top offset.\n * @return {?}\n */\n GlobalPositionStrategy.prototype.top = /**\n * Sets the top position of the overlay. Clears any previously set vertical position.\n * @param {?=} value New top offset.\n * @return {?}\n */\n function (value) {\n if (value === void 0) { 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 /**\n * Sets the left position of the overlay. Clears any previously set horizontal position.\n * @param {?=} value New left offset.\n * @return {?}\n */\n GlobalPositionStrategy.prototype.left = /**\n * Sets the left position of the overlay. Clears any previously set horizontal position.\n * @param {?=} value New left offset.\n * @return {?}\n */\n function (value) {\n if (value === void 0) { 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 /**\n * Sets the bottom position of the overlay. Clears any previously set vertical position.\n * @param {?=} value New bottom offset.\n * @return {?}\n */\n GlobalPositionStrategy.prototype.bottom = /**\n * Sets the bottom position of the overlay. Clears any previously set vertical position.\n * @param {?=} value New bottom offset.\n * @return {?}\n */\n function (value) {\n if (value === void 0) { 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 /**\n * Sets the right position of the overlay. Clears any previously set horizontal position.\n * @param {?=} value New right offset.\n * @return {?}\n */\n GlobalPositionStrategy.prototype.right = /**\n * Sets the right position of the overlay. Clears any previously set horizontal position.\n * @param {?=} value New right offset.\n * @return {?}\n */\n function (value) {\n if (value === void 0) { 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 7.0.0\n */\n /**\n * Sets the overlay width and clears any previously set width.\n * @deprecated Pass the `width` through the `OverlayConfig`.\n * \\@breaking-change 7.0.0\n * @param {?=} value New width for the overlay\n * @return {?}\n */\n GlobalPositionStrategy.prototype.width = /**\n * Sets the overlay width and clears any previously set width.\n * @deprecated Pass the `width` through the `OverlayConfig`.\n * \\@breaking-change 7.0.0\n * @param {?=} value New width for the overlay\n * @return {?}\n */\n function (value) {\n if (value === void 0) { 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 7.0.0\n */\n /**\n * Sets the overlay height and clears any previously set height.\n * @deprecated Pass the `height` through the `OverlayConfig`.\n * \\@breaking-change 7.0.0\n * @param {?=} value New height for the overlay\n * @return {?}\n */\n GlobalPositionStrategy.prototype.height = /**\n * Sets the overlay height and clears any previously set height.\n * @deprecated Pass the `height` through the `OverlayConfig`.\n * \\@breaking-change 7.0.0\n * @param {?=} value New height for the overlay\n * @return {?}\n */\n function (value) {\n if (value === void 0) { 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 /**\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 * @return {?}\n */\n GlobalPositionStrategy.prototype.centerHorizontally = /**\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 * @return {?}\n */\n function (offset) {\n if (offset === void 0) { 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 /**\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 * @return {?}\n */\n GlobalPositionStrategy.prototype.centerVertically = /**\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 * @return {?}\n */\n function (offset) {\n if (offset === void 0) { 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 /**\n * Apply the position to the element.\n * \\@docs-private\n * @return {?}\n */\n GlobalPositionStrategy.prototype.apply = /**\n * Apply the position to the element.\n * \\@docs-private\n * @return {?}\n */\n function () {\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 /** @type {?} */\n var styles = this._overlayRef.overlayElement.style;\n /** @type {?} */\n var parentStyles = this._overlayRef.hostElement.style;\n /** @type {?} */\n var config = this._overlayRef.getConfig();\n styles.position = this._cssPosition;\n styles.marginLeft = config.width === '100%' ? '0' : this._leftOffset;\n styles.marginTop = config.height === '100%' ? '0' : this._topOffset;\n styles.marginBottom = this._bottomOffset;\n styles.marginRight = this._rightOffset;\n if (config.width === '100%') {\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 = config.height === '100%' ? 'flex-start' : this._alignItems;\n };\n /**\n * Cleans up the DOM changes from the position strategy.\n * @docs-private\n */\n /**\n * Cleans up the DOM changes from the position strategy.\n * \\@docs-private\n * @return {?}\n */\n GlobalPositionStrategy.prototype.dispose = /**\n * Cleans up the DOM changes from the position strategy.\n * \\@docs-private\n * @return {?}\n */\n function () {\n if (this._isDisposed || !this._overlayRef) {\n return;\n }\n /** @type {?} */\n var styles = this._overlayRef.overlayElement.style;\n /** @type {?} */\n var parent = this._overlayRef.hostElement;\n /** @type {?} */\n var parentStyles = parent.style;\n parent.classList.remove(wrapperClass);\n parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop =\n styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = '';\n this._overlayRef = /** @type {?} */ ((null));\n this._isDisposed = true;\n };\n return GlobalPositionStrategy;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Builder for overlay position strategy.\n */\nvar OverlayPositionBuilder = /** @class */ (function () {\n function OverlayPositionBuilder(_viewportRuler, _document, \n // @breaking-change 7.0.0 `_platform` and `_overlayContainer` parameters to be made required.\n _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 /**\n * Creates a global position strategy.\n * @return {?}\n */\n OverlayPositionBuilder.prototype.global = /**\n * Creates a global position strategy.\n * @return {?}\n */\n function () {\n return new GlobalPositionStrategy();\n };\n /**\n * Creates a relative position strategy.\n * @param elementRef\n * @param originPos\n * @param overlayPos\n * @deprecated Use `flexibleConnectedTo` instead.\n * @breaking-change 7.0.0\n */\n /**\n * Creates a relative position strategy.\n * @deprecated Use `flexibleConnectedTo` instead.\n * \\@breaking-change 7.0.0\n * @param {?} elementRef\n * @param {?} originPos\n * @param {?} overlayPos\n * @return {?}\n */\n OverlayPositionBuilder.prototype.connectedTo = /**\n * Creates a relative position strategy.\n * @deprecated Use `flexibleConnectedTo` instead.\n * \\@breaking-change 7.0.0\n * @param {?} elementRef\n * @param {?} originPos\n * @param {?} overlayPos\n * @return {?}\n */\n function (elementRef, originPos, overlayPos) {\n return new ConnectedPositionStrategy(originPos, overlayPos, elementRef, this._viewportRuler, this._document);\n };\n /**\n * Creates a flexible position strategy.\n * @param elementRef\n */\n /**\n * Creates a flexible position strategy.\n * @param {?} elementRef\n * @return {?}\n */\n OverlayPositionBuilder.prototype.flexibleConnectedTo = /**\n * Creates a flexible position strategy.\n * @param {?} elementRef\n * @return {?}\n */\n function (elementRef) {\n return new FlexibleConnectedPositionStrategy(elementRef, this._viewportRuler, this._document, this._platform, this._overlayContainer);\n };\n OverlayPositionBuilder.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n OverlayPositionBuilder.ctorParameters = function () { return [\n { type: ViewportRuler },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Platform, decorators: [{ type: Optional }] },\n { type: OverlayContainer, decorators: [{ type: Optional }] }\n ]; };\n /** @nocollapse */ OverlayPositionBuilder.ngInjectableDef = defineInjectable({ factory: function OverlayPositionBuilder_Factory() { return new OverlayPositionBuilder(inject(ViewportRuler), inject(DOCUMENT), inject(Platform, 8), inject(OverlayContainer, 8)); }, token: OverlayPositionBuilder, providedIn: \"root\" });\n return OverlayPositionBuilder;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** *\n * Next overlay unique ID.\n @type {?} */\nvar nextUniqueId = 0;\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 */\nvar Overlay = /** @class */ (function () {\n function Overlay(scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, \n // @breaking-change 8.0.0 `_location` parameter to be made required.\n _location) {\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 }\n /**\n * Creates an overlay.\n * @param config Configuration applied to the overlay.\n * @returns Reference to the created overlay.\n */\n /**\n * Creates an overlay.\n * @param {?=} config Configuration applied to the overlay.\n * @return {?} Reference to the created overlay.\n */\n Overlay.prototype.create = /**\n * Creates an overlay.\n * @param {?=} config Configuration applied to the overlay.\n * @return {?} Reference to the created overlay.\n */\n function (config) {\n /** @type {?} */\n var host = this._createHostElement();\n /** @type {?} */\n var pane = this._createPaneElement(host);\n /** @type {?} */\n var portalOutlet = this._createPortalOutlet(pane);\n /** @type {?} */\n var 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);\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 /**\n * Gets a position builder that can be used, via fluent API,\n * to construct and configure a position strategy.\n * @return {?} An overlay position builder.\n */\n Overlay.prototype.position = /**\n * Gets a position builder that can be used, via fluent API,\n * to construct and configure a position strategy.\n * @return {?} An overlay position builder.\n */\n function () {\n return this._positionBuilder;\n };\n /**\n * Creates the DOM element for an overlay and appends it to the overlay container.\n * @param {?} host\n * @return {?} Newly-created pane element\n */\n Overlay.prototype._createPaneElement = /**\n * Creates the DOM element for an overlay and appends it to the overlay container.\n * @param {?} host\n * @return {?} Newly-created pane element\n */\n function (host) {\n /** @type {?} */\n var 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 * @return {?} Newly-create host element.\n */\n Overlay.prototype._createHostElement = /**\n * Creates the host element that wraps around an overlay\n * and can be used for advanced positioning.\n * @return {?} Newly-create host element.\n */\n function () {\n /** @type {?} */\n var 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 * @return {?} A portal outlet for the given DOM element.\n */\n Overlay.prototype._createPortalOutlet = /**\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 * @return {?} A portal outlet for the given DOM element.\n */\n function (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);\n };\n Overlay.decorators = [\n { type: Injectable },\n ];\n /** @nocollapse */\n Overlay.ctorParameters = function () { return [\n { type: ScrollStrategyOptions },\n { type: OverlayContainer },\n { type: ComponentFactoryResolver },\n { type: OverlayPositionBuilder },\n { type: OverlayKeyboardDispatcher },\n { type: Injector },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Directionality },\n { type: Location, decorators: [{ type: Optional }] }\n ]; };\n return Overlay;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** *\n * Default set of positions for the overlay. Follows the behavior of a dropdown.\n @type {?} */\nvar 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/** *\n * Injection token that determines the scroll handling while the connected overlay is open.\n @type {?} */\nvar 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 */\nvar CdkOverlayOrigin = /** @class */ (function () {\n function CdkOverlayOrigin(elementRef) {\n this.elementRef = elementRef;\n }\n CdkOverlayOrigin.decorators = [\n { type: Directive, args: [{\n selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\n exportAs: 'cdkOverlayOrigin',\n },] },\n ];\n /** @nocollapse */\n CdkOverlayOrigin.ctorParameters = function () { return [\n { type: ElementRef }\n ]; };\n return CdkOverlayOrigin;\n}());\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\nvar CdkConnectedOverlay = /** @class */ (function () {\n // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n function CdkConnectedOverlay(_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 /**\n * Margin between the overlay and the viewport edges.\n */\n this.viewportMargin = 0;\n /**\n * Whether the overlay is open.\n */\n this.open = false;\n /**\n * Event emitted when the backdrop is clicked.\n */\n this.backdropClick = new EventEmitter();\n /**\n * Event emitted when the position has changed.\n */\n this.positionChange = new EventEmitter();\n /**\n * Event emitted when the overlay has been attached.\n */\n this.attach = new EventEmitter();\n /**\n * Event emitted when the overlay has been detached.\n */\n this.detach = new EventEmitter();\n /**\n * Emits when there are keyboard events that are targeted at the overlay.\n */\n this.overlayKeydown = new EventEmitter();\n this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n this._scrollStrategyFactory = scrollStrategyFactory;\n this.scrollStrategy = this._scrollStrategyFactory();\n }\n Object.defineProperty(CdkConnectedOverlay.prototype, \"offsetX\", {\n /** The offset in pixels for the overlay connection point on the x-axis */\n get: /**\n * The offset in pixels for the overlay connection point on the x-axis\n * @return {?}\n */\n function () { return this._offsetX; },\n set: /**\n * @param {?} offsetX\n * @return {?}\n */\n function (offsetX) {\n this._offsetX = offsetX;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"offsetY\", {\n /** The offset in pixels for the overlay connection point on the y-axis */\n get: /**\n * The offset in pixels for the overlay connection point on the y-axis\n * @return {?}\n */\n function () { return this._offsetY; },\n set: /**\n * @param {?} offsetY\n * @return {?}\n */\n function (offsetY) {\n this._offsetY = offsetY;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"hasBackdrop\", {\n /** Whether or not the overlay should attach a backdrop. */\n get: /**\n * Whether or not the overlay should attach a backdrop.\n * @return {?}\n */\n function () { return this._hasBackdrop; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) { this._hasBackdrop = coerceBooleanProperty(value); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"lockPosition\", {\n /** Whether or not the overlay should be locked when scrolling. */\n get: /**\n * Whether or not the overlay should be locked when scrolling.\n * @return {?}\n */\n function () { return this._lockPosition; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) { this._lockPosition = coerceBooleanProperty(value); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"flexibleDimensions\", {\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n get: /**\n * Whether the overlay's width and height can be constrained to fit within the viewport.\n * @return {?}\n */\n function () { return this._flexibleDimensions; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n this._flexibleDimensions = coerceBooleanProperty(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"growAfterOpen\", {\n /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n get: /**\n * Whether the overlay can grow after the initial open when flexible positioning is turned on.\n * @return {?}\n */\n function () { return this._growAfterOpen; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) { this._growAfterOpen = coerceBooleanProperty(value); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"push\", {\n /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n get: /**\n * Whether the overlay can be pushed on-screen if none of the provided positions fit.\n * @return {?}\n */\n function () { return this._push; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) { this._push = coerceBooleanProperty(value); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"overlayRef\", {\n /** The associated overlay reference. */\n get: /**\n * The associated overlay reference.\n * @return {?}\n */\n function () {\n return this._overlayRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkConnectedOverlay.prototype, \"dir\", {\n /** The element's layout direction. */\n get: /**\n * The element's layout direction.\n * @return {?}\n */\n function () {\n return this._dir ? this._dir.value : 'ltr';\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n CdkConnectedOverlay.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n this._destroyOverlay();\n };\n /**\n * @param {?} changes\n * @return {?}\n */\n CdkConnectedOverlay.prototype.ngOnChanges = /**\n * @param {?} changes\n * @return {?}\n */\n function (changes) {\n if (this._position) {\n this._updatePositionStrategy(this._position);\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 /**\n * Creates an overlay\n * @return {?}\n */\n CdkConnectedOverlay.prototype._createOverlay = /**\n * Creates an overlay\n * @return {?}\n */\n function () {\n var _this = this;\n if (!this.positions || !this.positions.length) {\n this.positions = defaultPositionList;\n }\n this._overlayRef = this._overlay.create(this._buildConfig());\n this._overlayRef.keydownEvents().subscribe(function (event) {\n _this.overlayKeydown.next(event);\n if (event.keyCode === ESCAPE) {\n _this._detachOverlay();\n }\n });\n };\n /**\n * Builds the overlay config based on the directive's inputs\n * @return {?}\n */\n CdkConnectedOverlay.prototype._buildConfig = /**\n * Builds the overlay config based on the directive's inputs\n * @return {?}\n */\n function () {\n /** @type {?} */\n var positionStrategy = this._position = this._createPositionStrategy();\n /** @type {?} */\n var overlayConfig = new OverlayConfig({\n direction: this._dir,\n positionStrategy: 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 /**\n * Updates the state of a position strategy, based on the values of the directive inputs.\n * @param {?} positionStrategy\n * @return {?}\n */\n CdkConnectedOverlay.prototype._updatePositionStrategy = /**\n * Updates the state of a position strategy, based on the values of the directive inputs.\n * @param {?} positionStrategy\n * @return {?}\n */\n function (positionStrategy) {\n var _this = this;\n /** @type {?} */\n var positions = this.positions.map(function (currentPosition) { return ({\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 }); });\n return positionStrategy\n .setOrigin(this.origin.elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(this.flexibleDimensions)\n .withPush(this.push)\n .withGrowAfterOpen(this.growAfterOpen)\n .withViewportMargin(this.viewportMargin)\n .withLockedPosition(this.lockPosition);\n };\n /**\n * Returns the position strategy of the overlay to be set on the overlay config\n * @return {?}\n */\n CdkConnectedOverlay.prototype._createPositionStrategy = /**\n * Returns the position strategy of the overlay to be set on the overlay config\n * @return {?}\n */\n function () {\n var _this = this;\n /** @type {?} */\n var strategy = this._overlay.position().flexibleConnectedTo(this.origin.elementRef);\n this._updatePositionStrategy(strategy);\n strategy.positionChanges.subscribe(function (p) { return _this.positionChange.emit(p); });\n return strategy;\n };\n /**\n * Attaches the overlay and subscribes to backdrop clicks if backdrop exists\n * @return {?}\n */\n CdkConnectedOverlay.prototype._attachOverlay = /**\n * Attaches the overlay and subscribes to backdrop clicks if backdrop exists\n * @return {?}\n */\n function () {\n var _this = this;\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.updateSize({\n width: this.width,\n minWidth: this.minWidth,\n height: this.height,\n minHeight: this.minHeight,\n });\n }\n if (!this._overlayRef.hasAttached()) {\n this._overlayRef.attach(this._templatePortal);\n this.attach.emit();\n }\n if (this.hasBackdrop) {\n this._backdropSubscription = this._overlayRef.backdropClick().subscribe(function (event) {\n _this.backdropClick.emit(event);\n });\n }\n };\n /**\n * Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists\n * @return {?}\n */\n CdkConnectedOverlay.prototype._detachOverlay = /**\n * Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists\n * @return {?}\n */\n function () {\n if (this._overlayRef) {\n this._overlayRef.detach();\n this.detach.emit();\n }\n this._backdropSubscription.unsubscribe();\n };\n /**\n * Destroys the overlay created by this directive.\n * @return {?}\n */\n CdkConnectedOverlay.prototype._destroyOverlay = /**\n * Destroys the overlay created by this directive.\n * @return {?}\n */\n function () {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n }\n this._backdropSubscription.unsubscribe();\n };\n CdkConnectedOverlay.decorators = [\n { type: Directive, args: [{\n selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\n exportAs: 'cdkConnectedOverlay'\n },] },\n ];\n /** @nocollapse */\n CdkConnectedOverlay.ctorParameters = function () { return [\n { type: Overlay },\n { type: TemplateRef },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,] }] },\n { type: Directionality, decorators: [{ type: Optional }] }\n ]; };\n CdkConnectedOverlay.propDecorators = {\n origin: [{ type: Input, args: ['cdkConnectedOverlayOrigin',] }],\n positions: [{ type: Input, args: ['cdkConnectedOverlayPositions',] }],\n offsetX: [{ type: Input, args: ['cdkConnectedOverlayOffsetX',] }],\n offsetY: [{ type: Input, args: ['cdkConnectedOverlayOffsetY',] }],\n width: [{ type: Input, args: ['cdkConnectedOverlayWidth',] }],\n height: [{ type: Input, args: ['cdkConnectedOverlayHeight',] }],\n minWidth: [{ type: Input, args: ['cdkConnectedOverlayMinWidth',] }],\n minHeight: [{ type: Input, args: ['cdkConnectedOverlayMinHeight',] }],\n backdropClass: [{ type: Input, args: ['cdkConnectedOverlayBackdropClass',] }],\n panelClass: [{ type: Input, args: ['cdkConnectedOverlayPanelClass',] }],\n viewportMargin: [{ type: Input, args: ['cdkConnectedOverlayViewportMargin',] }],\n scrollStrategy: [{ type: Input, args: ['cdkConnectedOverlayScrollStrategy',] }],\n open: [{ type: Input, args: ['cdkConnectedOverlayOpen',] }],\n hasBackdrop: [{ type: Input, args: ['cdkConnectedOverlayHasBackdrop',] }],\n lockPosition: [{ type: Input, args: ['cdkConnectedOverlayLockPosition',] }],\n flexibleDimensions: [{ type: Input, args: ['cdkConnectedOverlayFlexibleDimensions',] }],\n growAfterOpen: [{ type: Input, args: ['cdkConnectedOverlayGrowAfterOpen',] }],\n push: [{ type: Input, args: ['cdkConnectedOverlayPush',] }],\n backdropClick: [{ type: Output }],\n positionChange: [{ type: Output }],\n attach: [{ type: Output }],\n detach: [{ type: Output }],\n overlayKeydown: [{ type: Output }]\n };\n return CdkConnectedOverlay;\n}());\n/**\n * \\@docs-private\n * @param {?} overlay\n * @return {?}\n */\nfunction CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return function () { return overlay.scrollStrategies.reposition(); };\n}\n/** *\n * \\@docs-private\n @type {?} */\nvar 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 * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar OverlayModule = /** @class */ (function () {\n function OverlayModule() {\n }\n OverlayModule.decorators = [\n { type: NgModule, args: [{\n imports: [BidiModule, PortalModule, ScrollingModule],\n exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule],\n declarations: [CdkConnectedOverlay, CdkOverlayOrigin],\n providers: [\n Overlay,\n CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n ],\n },] },\n ];\n return OverlayModule;\n}());\n/** *\n * @deprecated Use `OverlayModule` instead.\n * \\@breaking-change 7.0.0\n * \\@docs-private\n @type {?} */\nvar OVERLAY_PROVIDERS = [\n Overlay,\n OverlayPositionBuilder,\n OVERLAY_KEYBOARD_DISPATCHER_PROVIDER,\n VIEWPORT_RULER_PROVIDER,\n OVERLAY_CONTAINER_PROVIDER,\n CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\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 */\nvar FullscreenOverlayContainer = /** @class */ (function (_super) {\n __extends(FullscreenOverlayContainer, _super);\n function FullscreenOverlayContainer(_document) {\n return _super.call(this, _document) || this;\n }\n /**\n * @return {?}\n */\n FullscreenOverlayContainer.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n _super.prototype.ngOnDestroy.call(this);\n if (this._fullScreenEventName && this._fullScreenListener) {\n this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);\n }\n };\n /**\n * @return {?}\n */\n FullscreenOverlayContainer.prototype._createContainer = /**\n * @return {?}\n */\n function () {\n var _this = this;\n _super.prototype._createContainer.call(this);\n this._adjustParentForFullscreenChange();\n this._addFullscreenChangeListener(function () { return _this._adjustParentForFullscreenChange(); });\n };\n /**\n * @return {?}\n */\n FullscreenOverlayContainer.prototype._adjustParentForFullscreenChange = /**\n * @return {?}\n */\n function () {\n if (!this._containerElement) {\n return;\n }\n /** @type {?} */\n var fullscreenElement = this.getFullscreenElement();\n /** @type {?} */\n var parent = fullscreenElement || this._document.body;\n parent.appendChild(this._containerElement);\n };\n /**\n * @param {?} fn\n * @return {?}\n */\n FullscreenOverlayContainer.prototype._addFullscreenChangeListener = /**\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n /** @type {?} */\n var 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 /**\n * @return {?}\n */\n FullscreenOverlayContainer.prototype._getEventName = /**\n * @return {?}\n */\n function () {\n if (!this._fullScreenEventName) {\n if (this._document.fullscreenEnabled) {\n this._fullScreenEventName = 'fullscreenchange';\n }\n else if (this._document.webkitFullscreenEnabled) {\n this._fullScreenEventName = 'webkitfullscreenchange';\n }\n else if ((/** @type {?} */ (this._document)).mozFullScreenEnabled) {\n this._fullScreenEventName = 'mozfullscreenchange';\n }\n else if ((/** @type {?} */ (this._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 /**\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 * @return {?}\n */\n FullscreenOverlayContainer.prototype.getFullscreenElement = /**\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 * @return {?}\n */\n function () {\n return this._document.fullscreenElement ||\n this._document.webkitFullscreenElement ||\n (/** @type {?} */ (this._document)).mozFullScreenElement ||\n (/** @type {?} */ (this._document)).msFullscreenElement ||\n null;\n };\n FullscreenOverlayContainer.decorators = [\n { type: Injectable },\n ];\n /** @nocollapse */\n FullscreenOverlayContainer.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n ]; };\n return FullscreenOverlayContainer;\n}(OverlayContainer));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\nexport { Overlay, OverlayContainer, CdkOverlayOrigin, CdkConnectedOverlay, FullscreenOverlayContainer, OverlayRef, OverlayKeyboardDispatcher, OverlayPositionBuilder, GlobalPositionStrategy, ConnectedPositionStrategy, FlexibleConnectedPositionStrategy, OverlayConfig, validateVerticalPosition, validateHorizontalPosition, ConnectionPositionPair, ScrollingVisibility, ConnectedOverlayPositionChange, ScrollStrategyOptions, RepositionScrollStrategy, CloseScrollStrategy, NoopScrollStrategy, BlockScrollStrategy, OverlayModule, OVERLAY_PROVIDERS, OVERLAY_KEYBOARD_DISPATCHER_PROVIDER as ɵg, OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY as ɵf, OVERLAY_CONTAINER_PROVIDER as ɵb, OVERLAY_CONTAINER_PROVIDER_FACTORY as ɵa, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY as ɵc, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER as ɵe, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵd };\n//# sourceMappingURL=overlay.es5.js.map\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { NgModule, Injectable, NgZone, defineInjectable, inject } from '@angular/core';\nimport { Platform } from '@angular/cdk/platform';\nimport { asapScheduler, combineLatest, fromEventPattern, Subject } from 'rxjs';\nimport { debounceTime, map, startWith, takeUntil } from 'rxjs/operators';\nimport { coerceArray } from '@angular/cdk/coercion';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar LayoutModule = /** @class */ (function () {\n function LayoutModule() {\n }\n LayoutModule.decorators = [\n { type: NgModule },\n ];\n return LayoutModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** *\n * Global registry for all dynamically-created, injected media queries.\n @type {?} */\nvar mediaQueriesForWebkitCompatibility = new Set();\n/** *\n * Style tag that holds all of the dynamically-created media queries.\n @type {?} */\nvar mediaQueryStyleNode;\n/**\n * A utility for calling matchMedia queries.\n */\nvar MediaMatcher = /** @class */ (function () {\n function MediaMatcher(platform) {\n this.platform = platform;\n this._matchMedia = this.platform.isBrowser && window.matchMedia ?\n // matchMedia is bound to the window scope intentionally as it is an illegal invocation to\n // call it from a different scope.\n window.matchMedia.bind(window) :\n noopMatchMedia;\n }\n /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n */\n /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n * @param {?} query\n * @return {?}\n */\n MediaMatcher.prototype.matchMedia = /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n * @param {?} query\n * @return {?}\n */\n function (query) {\n if (this.platform.WEBKIT) {\n createEmptyStyleRule(query);\n }\n return this._matchMedia(query);\n };\n MediaMatcher.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n MediaMatcher.ctorParameters = function () { return [\n { type: Platform }\n ]; };\n /** @nocollapse */ MediaMatcher.ngInjectableDef = defineInjectable({ factory: function MediaMatcher_Factory() { return new MediaMatcher(inject(Platform)); }, token: MediaMatcher, providedIn: \"root\" });\n return MediaMatcher;\n}());\n/**\n * For Webkit engines that only trigger the MediaQueryListListener when\n * there is at least one CSS selector for the respective media query.\n * @param {?} query\n * @return {?}\n */\nfunction createEmptyStyleRule(query) {\n if (mediaQueriesForWebkitCompatibility.has(query)) {\n return;\n }\n try {\n if (!mediaQueryStyleNode) {\n mediaQueryStyleNode = document.createElement('style');\n mediaQueryStyleNode.setAttribute('type', 'text/css'); /** @type {?} */\n ((document.head)).appendChild(mediaQueryStyleNode);\n }\n if (mediaQueryStyleNode.sheet) {\n (/** @type {?} */ (mediaQueryStyleNode.sheet))\n .insertRule(\"@media \" + query + \" {.fx-query-test{ }}\", 0);\n mediaQueriesForWebkitCompatibility.add(query);\n }\n }\n catch (e) {\n console.error(e);\n }\n}\n/**\n * No-op matchMedia replacement for non-browser platforms.\n * @param {?} query\n * @return {?}\n */\nfunction noopMatchMedia(query) {\n // Use `as any` here to avoid adding additional necessary properties for\n // the noop matcher.\n return /** @type {?} */ ({\n matches: query === 'all' || query === '',\n media: query,\n addListener: function () { },\n removeListener: function () { }\n });\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Utility for checking the matching state of \\@media queries.\n */\nvar BreakpointObserver = /** @class */ (function () {\n function BreakpointObserver(mediaMatcher, zone) {\n this.mediaMatcher = mediaMatcher;\n this.zone = zone;\n /**\n * A map of all media queries currently being listened for.\n */\n this._queries = new Map();\n /**\n * A subject for all other observables to takeUntil based on.\n */\n this._destroySubject = new Subject();\n }\n /** Completes the active subject, signalling to all other observables to complete. */\n /**\n * Completes the active subject, signalling to all other observables to complete.\n * @return {?}\n */\n BreakpointObserver.prototype.ngOnDestroy = /**\n * Completes the active subject, signalling to all other observables to complete.\n * @return {?}\n */\n function () {\n this._destroySubject.next();\n this._destroySubject.complete();\n };\n /**\n * Whether one or more media queries match the current viewport size.\n * @param value One or more media queries to check.\n * @returns Whether any of the media queries match.\n */\n /**\n * Whether one or more media queries match the current viewport size.\n * @param {?} value One or more media queries to check.\n * @return {?} Whether any of the media queries match.\n */\n BreakpointObserver.prototype.isMatched = /**\n * Whether one or more media queries match the current viewport size.\n * @param {?} value One or more media queries to check.\n * @return {?} Whether any of the media queries match.\n */\n function (value) {\n var _this = this;\n /** @type {?} */\n var queries = splitQueries(coerceArray(value));\n return queries.some(function (mediaQuery) { return _this._registerQuery(mediaQuery).mql.matches; });\n };\n /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param value One or more media queries to check.\n * @returns A stream of matches for the given queries.\n */\n /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param {?} value One or more media queries to check.\n * @return {?} A stream of matches for the given queries.\n */\n BreakpointObserver.prototype.observe = /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param {?} value One or more media queries to check.\n * @return {?} A stream of matches for the given queries.\n */\n function (value) {\n var _this = this;\n /** @type {?} */\n var queries = splitQueries(coerceArray(value));\n /** @type {?} */\n var observables = queries.map(function (query) { return _this._registerQuery(query).observable; });\n return combineLatest(observables).pipe(debounceTime(0, asapScheduler), map(function (breakpointStates) {\n /** @type {?} */\n var response = {\n matches: false,\n breakpoints: {},\n };\n breakpointStates.forEach(function (state) {\n response.matches = response.matches || state.matches;\n response.breakpoints[state.query] = state.matches;\n });\n return response;\n }));\n };\n /**\n * Registers a specific query to be listened for.\n * @param {?} query\n * @return {?}\n */\n BreakpointObserver.prototype._registerQuery = /**\n * Registers a specific query to be listened for.\n * @param {?} query\n * @return {?}\n */\n function (query) {\n var _this = this;\n // Only set up a new MediaQueryList if it is not already being listened for.\n if (this._queries.has(query)) {\n return /** @type {?} */ ((this._queries.get(query)));\n }\n /** @type {?} */\n var mql = this.mediaMatcher.matchMedia(query);\n /** @type {?} */\n var queryListener;\n /** @type {?} */\n var queryObservable = fromEventPattern(\n // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed\n // back into the zone because matchMedia is only included in Zone.js by loading the\n // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not\n // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js\n // patches it.\n // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed\n // back into the zone because matchMedia is only included in Zone.js by loading the\n // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not\n // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js\n // patches it.\n function (listener) {\n queryListener = function (e) { return _this.zone.run(function () { return listener(e); }); };\n mql.addListener(queryListener);\n }, function () { return mql.removeListener(queryListener); })\n .pipe(takeUntil(this._destroySubject), startWith(mql), map(function (nextMql) { return ({ query: query, matches: nextMql.matches }); }));\n /** @type {?} */\n var output = { observable: queryObservable, mql: mql };\n this._queries.set(query, output);\n return output;\n };\n BreakpointObserver.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n BreakpointObserver.ctorParameters = function () { return [\n { type: MediaMatcher },\n { type: NgZone }\n ]; };\n /** @nocollapse */ BreakpointObserver.ngInjectableDef = defineInjectable({ factory: function BreakpointObserver_Factory() { return new BreakpointObserver(inject(MediaMatcher), inject(NgZone)); }, token: BreakpointObserver, providedIn: \"root\" });\n return BreakpointObserver;\n}());\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n * @param {?} queries\n * @return {?}\n */\nfunction splitQueries(queries) {\n return queries.map(function (query) { return query.split(','); })\n .reduce(function (a1, a2) { return a1.concat(a2); })\n .map(function (query) { return query.trim(); });\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\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 @type {?} */\nvar Breakpoints = {\n XSmall: '(max-width: 599px)',\n Small: '(min-width: 600px) and (max-width: 959px)',\n Medium: '(min-width: 960px) and (max-width: 1279px)',\n Large: '(min-width: 1280px) and (max-width: 1919px)',\n XLarge: '(min-width: 1920px)',\n Handset: '(max-width: 599px) and (orientation: portrait), ' +\n '(max-width: 959px) and (orientation: landscape)',\n Tablet: '(min-width: 600px) and (max-width: 839px) and (orientation: portrait), ' +\n '(min-width: 960px) and (max-width: 1279px) and (orientation: landscape)',\n Web: '(min-width: 840px) and (orientation: portrait), ' +\n '(min-width: 1280px) and (orientation: landscape)',\n HandsetPortrait: '(max-width: 599px) and (orientation: portrait)',\n TabletPortrait: '(min-width: 600px) and (max-width: 839px) and (orientation: portrait)',\n WebPortrait: '(min-width: 840px) and (orientation: portrait)',\n HandsetLandscape: '(max-width: 959px) and (orientation: landscape)',\n TabletLandscape: '(min-width: 960px) and (max-width: 1279px) and (orientation: landscape)',\n WebLandscape: '(min-width: 1280px) and (orientation: landscape)',\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\nexport { LayoutModule, BreakpointObserver, Breakpoints, MediaMatcher };\n//# sourceMappingURL=layout.es5.js.map\n","/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isArray } from '../util/isArray';\nimport { isFunction } from '../util/isFunction';\nimport { map } from '../operators/map';\nexport function fromEventPattern(addHandler, removeHandler, resultSelector) {\n if (resultSelector) {\n return fromEventPattern(addHandler, removeHandler).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));\n }\n return new Observable(function (subscriber) {\n var handler = function () {\n var e = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n e[_i] = arguments[_i];\n }\n return subscriber.next(e.length === 1 ? e[0] : e);\n };\n var retValue;\n try {\n retValue = addHandler(handler);\n }\n catch (err) {\n subscriber.error(err);\n return undefined;\n }\n if (!isFunction(removeHandler)) {\n return undefined;\n }\n return function () { return removeHandler(handler, retValue); };\n });\n}\n//# sourceMappingURL=fromEventPattern.js.map\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Subject } from 'rxjs';\nimport { InjectionToken, Component, ViewEncapsulation, Inject, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, NgZone, ViewChild, NgModule, Injectable, Injector, Optional, SkipSelf, TemplateRef, defineInjectable, inject, INJECTOR } from '@angular/core';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { __extends, __assign } from 'tslib';\nimport { BasePortalOutlet, CdkPortalOutlet, PortalModule, ComponentPortal, PortalInjector, TemplatePortal } from '@angular/cdk/portal';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { OverlayModule, Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n * @template T\n */\nvar /**\n * Reference to a snack bar dispatched from the snack bar service.\n * @template T\n */\nMatSnackBarRef = /** @class */ (function () {\n function MatSnackBarRef(containerInstance, _overlayRef) {\n var _this = this;\n this._overlayRef = _overlayRef;\n /**\n * Subject for notifying the user that the snack bar has been dismissed.\n */\n this._afterDismissed = new Subject();\n /**\n * Subject for notifying the user that the snack bar has opened and appeared.\n */\n this._afterOpened = new Subject();\n /**\n * Subject for notifying the user that the snack bar action was called.\n */\n this._onAction = new Subject();\n /**\n * Whether the snack bar was dismissed using the action button.\n */\n this._dismissedByAction = false;\n this.containerInstance = containerInstance;\n // Dismiss snackbar on action.\n this.onAction().subscribe(function () { return _this.dismiss(); });\n containerInstance._onExit.subscribe(function () { return _this._finishDismiss(); });\n }\n /** Dismisses the snack bar. */\n /**\n * Dismisses the snack bar.\n * @return {?}\n */\n MatSnackBarRef.prototype.dismiss = /**\n * Dismisses the snack bar.\n * @return {?}\n */\n function () {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n clearTimeout(this._durationTimeoutId);\n };\n /** Marks the snackbar action clicked. */\n /**\n * Marks the snackbar action clicked.\n * @return {?}\n */\n MatSnackBarRef.prototype.dismissWithAction = /**\n * Marks the snackbar action clicked.\n * @return {?}\n */\n function () {\n if (!this._onAction.closed) {\n this._dismissedByAction = true;\n this._onAction.next();\n this._onAction.complete();\n }\n };\n /**\n * Marks the snackbar action clicked.\n * @deprecated Use `dismissWithAction` instead.\n * @breaking-change 7.0.0\n */\n /**\n * Marks the snackbar action clicked.\n * @deprecated Use `dismissWithAction` instead.\n * \\@breaking-change 7.0.0\n * @return {?}\n */\n MatSnackBarRef.prototype.closeWithAction = /**\n * Marks the snackbar action clicked.\n * @deprecated Use `dismissWithAction` instead.\n * \\@breaking-change 7.0.0\n * @return {?}\n */\n function () {\n this.dismissWithAction();\n };\n /** Dismisses the snack bar after some duration */\n /**\n * Dismisses the snack bar after some duration\n * @param {?} duration\n * @return {?}\n */\n MatSnackBarRef.prototype._dismissAfter = /**\n * Dismisses the snack bar after some duration\n * @param {?} duration\n * @return {?}\n */\n function (duration) {\n var _this = this;\n this._durationTimeoutId = setTimeout(function () { return _this.dismiss(); }, duration);\n };\n /** Marks the snackbar as opened */\n /**\n * Marks the snackbar as opened\n * @return {?}\n */\n MatSnackBarRef.prototype._open = /**\n * Marks the snackbar as opened\n * @return {?}\n */\n function () {\n if (!this._afterOpened.closed) {\n this._afterOpened.next();\n this._afterOpened.complete();\n }\n };\n /**\n * Cleans up the DOM after closing.\n * @return {?}\n */\n MatSnackBarRef.prototype._finishDismiss = /**\n * Cleans up the DOM after closing.\n * @return {?}\n */\n function () {\n this._overlayRef.dispose();\n if (!this._onAction.closed) {\n this._onAction.complete();\n }\n this._afterDismissed.next({ dismissedByAction: this._dismissedByAction });\n this._afterDismissed.complete();\n this._dismissedByAction = false;\n };\n /** Gets an observable that is notified when the snack bar is finished closing. */\n /**\n * Gets an observable that is notified when the snack bar is finished closing.\n * @return {?}\n */\n MatSnackBarRef.prototype.afterDismissed = /**\n * Gets an observable that is notified when the snack bar is finished closing.\n * @return {?}\n */\n function () {\n return this._afterDismissed.asObservable();\n };\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n /**\n * Gets an observable that is notified when the snack bar has opened and appeared.\n * @return {?}\n */\n MatSnackBarRef.prototype.afterOpened = /**\n * Gets an observable that is notified when the snack bar has opened and appeared.\n * @return {?}\n */\n function () {\n return this.containerInstance._onEnter;\n };\n /** Gets an observable that is notified when the snack bar action is called. */\n /**\n * Gets an observable that is notified when the snack bar action is called.\n * @return {?}\n */\n MatSnackBarRef.prototype.onAction = /**\n * Gets an observable that is notified when the snack bar action is called.\n * @return {?}\n */\n function () {\n return this._onAction.asObservable();\n };\n return MatSnackBarRef;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** *\n * Injection token that can be used to access the data that was passed in to a snack bar.\n @type {?} */\nvar MAT_SNACK_BAR_DATA = new InjectionToken('MatSnackBarData');\n/**\n * Configuration used when opening a snack-bar.\n * @template D\n */\nvar /**\n * Configuration used when opening a snack-bar.\n * @template D\n */\nMatSnackBarConfig = /** @class */ (function () {\n function MatSnackBarConfig() {\n /**\n * The politeness level for the MatAriaLiveAnnouncer announcement.\n */\n this.politeness = 'assertive';\n /**\n * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n * component or template, the announcement message will default to the specified message.\n */\n this.announcementMessage = '';\n /**\n * The length of time in milliseconds to wait before automatically dismissing the snack bar.\n */\n this.duration = 0;\n /**\n * Data being injected into the child component.\n */\n this.data = null;\n /**\n * The horizontal position to place the snack bar.\n */\n this.horizontalPosition = 'center';\n /**\n * The vertical position to place the snack bar.\n */\n this.verticalPosition = 'bottom';\n }\n return MatSnackBarConfig;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\nvar SimpleSnackBar = /** @class */ (function () {\n function SimpleSnackBar(snackBarRef, data) {\n this.snackBarRef = snackBarRef;\n this.data = data;\n }\n /** Performs the action on the snack bar. */\n /**\n * Performs the action on the snack bar.\n * @return {?}\n */\n SimpleSnackBar.prototype.action = /**\n * Performs the action on the snack bar.\n * @return {?}\n */\n function () {\n this.snackBarRef.dismissWithAction();\n };\n Object.defineProperty(SimpleSnackBar.prototype, \"hasAction\", {\n /** If the action button should be shown. */\n get: /**\n * If the action button should be shown.\n * @return {?}\n */\n function () {\n return !!this.data.action;\n },\n enumerable: true,\n configurable: true\n });\n SimpleSnackBar.decorators = [\n { type: Component, args: [{selector: 'simple-snack-bar',\n template: \"<span>{{data.message}}</span><div class=\\\"mat-simple-snackbar-action\\\" *ngIf=\\\"hasAction\\\"><button mat-button (click)=\\\"action()\\\">{{data.action}}</button></div>\",\n styles: [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;height:100%;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-simple-snackbar',\n }\n },] },\n ];\n /** @nocollapse */\n SimpleSnackBar.ctorParameters = function () { return [\n { type: MatSnackBarRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DATA,] }] }\n ]; };\n return SimpleSnackBar;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** *\n * Animations used by the Material snack bar.\n * \\@docs-private\n @type {?} */\nvar matSnackBarAnimations = {\n /** Animation that shows and hides a snack bar. */\n snackBarState: trigger('state', [\n state('void, hidden', style({\n transform: 'scale(0.8)',\n opacity: 0,\n })),\n state('visible', style({\n transform: 'scale(1)',\n opacity: 1,\n })),\n transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n opacity: 0\n }))),\n ])\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Internal component that wraps user-provided snack bar content.\n * \\@docs-private\n */\nvar MatSnackBarContainer = /** @class */ (function (_super) {\n __extends(MatSnackBarContainer, _super);\n function MatSnackBarContainer(_ngZone, _elementRef, _changeDetectorRef, snackBarConfig) {\n var _this = _super.call(this) || this;\n _this._ngZone = _ngZone;\n _this._elementRef = _elementRef;\n _this._changeDetectorRef = _changeDetectorRef;\n _this.snackBarConfig = snackBarConfig;\n /**\n * Whether the component has been destroyed.\n */\n _this._destroyed = false;\n /**\n * Subject for notifying that the snack bar has exited from view.\n */\n _this._onExit = new Subject();\n /**\n * Subject for notifying that the snack bar has finished entering the view.\n */\n _this._onEnter = new Subject();\n /**\n * The state of the snack bar animations.\n */\n _this._animationState = 'void';\n return _this;\n }\n /** Attach a component portal as content to this snack bar container. */\n /**\n * Attach a component portal as content to this snack bar container.\n * @template T\n * @param {?} portal\n * @return {?}\n */\n MatSnackBarContainer.prototype.attachComponentPortal = /**\n * Attach a component portal as content to this snack bar container.\n * @template T\n * @param {?} portal\n * @return {?}\n */\n function (portal) {\n this._assertNotAttached();\n this._applySnackBarClasses();\n return this._portalOutlet.attachComponentPortal(portal);\n };\n /** Attach a template portal as content to this snack bar container. */\n /**\n * Attach a template portal as content to this snack bar container.\n * @template C\n * @param {?} portal\n * @return {?}\n */\n MatSnackBarContainer.prototype.attachTemplatePortal = /**\n * Attach a template portal as content to this snack bar container.\n * @template C\n * @param {?} portal\n * @return {?}\n */\n function (portal) {\n this._assertNotAttached();\n this._applySnackBarClasses();\n return this._portalOutlet.attachTemplatePortal(portal);\n };\n /** Handle end of animations, updating the state of the snackbar. */\n /**\n * Handle end of animations, updating the state of the snackbar.\n * @param {?} event\n * @return {?}\n */\n MatSnackBarContainer.prototype.onAnimationEnd = /**\n * Handle end of animations, updating the state of the snackbar.\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var fromState = event.fromState, toState = event.toState;\n if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {\n this._completeExit();\n }\n if (toState === 'visible') {\n /** @type {?} */\n var onEnter_1 = this._onEnter;\n this._ngZone.run(function () {\n onEnter_1.next();\n onEnter_1.complete();\n });\n }\n };\n /** Begin animation of snack bar entrance into view. */\n /**\n * Begin animation of snack bar entrance into view.\n * @return {?}\n */\n MatSnackBarContainer.prototype.enter = /**\n * Begin animation of snack bar entrance into view.\n * @return {?}\n */\n function () {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.detectChanges();\n }\n };\n /** Begin animation of the snack bar exiting from view. */\n /**\n * Begin animation of the snack bar exiting from view.\n * @return {?}\n */\n MatSnackBarContainer.prototype.exit = /**\n * Begin animation of the snack bar exiting from view.\n * @return {?}\n */\n function () {\n // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n // `MatSnackBar.open`).\n this._animationState = 'hidden';\n return this._onExit;\n };\n /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n /**\n * Makes sure the exit callbacks have been invoked when the element is destroyed.\n * @return {?}\n */\n MatSnackBarContainer.prototype.ngOnDestroy = /**\n * Makes sure the exit callbacks have been invoked when the element is destroyed.\n * @return {?}\n */\n function () {\n this._destroyed = true;\n this._completeExit();\n };\n /**\n * Waits for the zone to settle before removing the element. Helps prevent\n * errors where we end up removing an element which is in the middle of an animation.\n * @return {?}\n */\n MatSnackBarContainer.prototype._completeExit = /**\n * Waits for the zone to settle before removing the element. Helps prevent\n * errors where we end up removing an element which is in the middle of an animation.\n * @return {?}\n */\n function () {\n var _this = this;\n this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1)).subscribe(function () {\n _this._onExit.next();\n _this._onExit.complete();\n });\n };\n /**\n * Applies the various positioning and user-configured CSS classes to the snack bar.\n * @return {?}\n */\n MatSnackBarContainer.prototype._applySnackBarClasses = /**\n * Applies the various positioning and user-configured CSS classes to the snack bar.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var element = this._elementRef.nativeElement;\n /** @type {?} */\n var panelClasses = this.snackBarConfig.panelClass;\n if (panelClasses) {\n if (Array.isArray(panelClasses)) {\n // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n panelClasses.forEach(function (cssClass) { return element.classList.add(cssClass); });\n }\n else {\n element.classList.add(panelClasses);\n }\n }\n if (this.snackBarConfig.horizontalPosition === 'center') {\n element.classList.add('mat-snack-bar-center');\n }\n if (this.snackBarConfig.verticalPosition === 'top') {\n element.classList.add('mat-snack-bar-top');\n }\n };\n /**\n * Asserts that no content is already attached to the container.\n * @return {?}\n */\n MatSnackBarContainer.prototype._assertNotAttached = /**\n * Asserts that no content is already attached to the container.\n * @return {?}\n */\n function () {\n if (this._portalOutlet.hasAttached()) {\n throw Error('Attempting to attach snack bar content after content is already attached');\n }\n };\n MatSnackBarContainer.decorators = [\n { type: Component, args: [{selector: 'snack-bar-container',\n template: \"<ng-template cdkPortalOutlet></ng-template>\",\n styles: [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}@media screen and (-ms-high-contrast:active){.mat-snack-bar-container{border:solid 1px}}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;width:100%}\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [matSnackBarAnimations.snackBarState],\n host: {\n 'role': 'alert',\n 'class': 'mat-snack-bar-container',\n '[@state]': '_animationState',\n '(@state.done)': 'onAnimationEnd($event)'\n },\n },] },\n ];\n /** @nocollapse */\n MatSnackBarContainer.ctorParameters = function () { return [\n { type: NgZone },\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: MatSnackBarConfig }\n ]; };\n MatSnackBarContainer.propDecorators = {\n _portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet,] }]\n };\n return MatSnackBarContainer;\n}(BasePortalOutlet));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar MatSnackBarModule = /** @class */ (function () {\n function MatSnackBarModule() {\n }\n MatSnackBarModule.decorators = [\n { type: NgModule, args: [{\n imports: [\n OverlayModule,\n PortalModule,\n CommonModule,\n MatButtonModule,\n MatCommonModule,\n ],\n exports: [MatSnackBarContainer, MatCommonModule],\n declarations: [MatSnackBarContainer, SimpleSnackBar],\n entryComponents: [MatSnackBarContainer, SimpleSnackBar],\n },] },\n ];\n return MatSnackBarModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** *\n * Injection token that can be used to specify default snack bar.\n @type {?} */\nvar MAT_SNACK_BAR_DEFAULT_OPTIONS = new InjectionToken('mat-snack-bar-default-options', {\n providedIn: 'root',\n factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY,\n});\n/**\n * \\@docs-private\n * @return {?}\n */\nfunction MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY() {\n return new MatSnackBarConfig();\n}\n/**\n * Service to dispatch Material Design snack bar messages.\n */\nvar MatSnackBar = /** @class */ (function () {\n function MatSnackBar(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {\n this._overlay = _overlay;\n this._live = _live;\n this._injector = _injector;\n this._breakpointObserver = _breakpointObserver;\n this._parentSnackBar = _parentSnackBar;\n this._defaultConfig = _defaultConfig;\n /**\n * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n * If there is a parent snack-bar service, all operations should delegate to that parent\n * via `_openedSnackBarRef`.\n */\n this._snackBarRefAtThisLevel = null;\n }\n Object.defineProperty(MatSnackBar.prototype, \"_openedSnackBarRef\", {\n /** Reference to the currently opened snackbar at *any* level. */\n get: /**\n * Reference to the currently opened snackbar at *any* level.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var parent = this._parentSnackBar;\n return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n if (this._parentSnackBar) {\n this._parentSnackBar._openedSnackBarRef = value;\n }\n else {\n this._snackBarRefAtThisLevel = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n *\n * @param component Component to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n /**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n *\n * @template T\n * @param {?} component Component to be instantiated.\n * @param {?=} config Extra configuration for the snack bar.\n * @return {?}\n */\n MatSnackBar.prototype.openFromComponent = /**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n *\n * @template T\n * @param {?} component Component to be instantiated.\n * @param {?=} config Extra configuration for the snack bar.\n * @return {?}\n */\n function (component, config) {\n return /** @type {?} */ (this._attach(component, config));\n };\n /**\n * Creates and dispatches a snack bar with a custom template for the content, removing any\n * currently opened snack bars.\n *\n * @param template Template to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n /**\n * Creates and dispatches a snack bar with a custom template for the content, removing any\n * currently opened snack bars.\n *\n * @param {?} template Template to be instantiated.\n * @param {?=} config Extra configuration for the snack bar.\n * @return {?}\n */\n MatSnackBar.prototype.openFromTemplate = /**\n * Creates and dispatches a snack bar with a custom template for the content, removing any\n * currently opened snack bars.\n *\n * @param {?} template Template to be instantiated.\n * @param {?=} config Extra configuration for the snack bar.\n * @return {?}\n */\n function (template, config) {\n return this._attach(template, config);\n };\n /**\n * Opens a snackbar with a message and an optional action.\n * @param message The message to show in the snackbar.\n * @param action The label for the snackbar action.\n * @param config Additional configuration options for the snackbar.\n */\n /**\n * Opens a snackbar with a message and an optional action.\n * @param {?} message The message to show in the snackbar.\n * @param {?=} action The label for the snackbar action.\n * @param {?=} config Additional configuration options for the snackbar.\n * @return {?}\n */\n MatSnackBar.prototype.open = /**\n * Opens a snackbar with a message and an optional action.\n * @param {?} message The message to show in the snackbar.\n * @param {?=} action The label for the snackbar action.\n * @param {?=} config Additional configuration options for the snackbar.\n * @return {?}\n */\n function (message, action, config) {\n if (action === void 0) { action = ''; }\n /** @type {?} */\n var _config = __assign({}, this._defaultConfig, config);\n // Since the user doesn't have access to the component, we can\n // override the data to pass in our own message and action.\n _config.data = { message: message, action: action };\n if (!_config.announcementMessage) {\n _config.announcementMessage = message;\n }\n return this.openFromComponent(SimpleSnackBar, _config);\n };\n /**\n * Dismisses the currently-visible snack bar.\n */\n /**\n * Dismisses the currently-visible snack bar.\n * @return {?}\n */\n MatSnackBar.prototype.dismiss = /**\n * Dismisses the currently-visible snack bar.\n * @return {?}\n */\n function () {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n };\n /**\n * @return {?}\n */\n MatSnackBar.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n // Only dismiss the snack bar at the current level on destroy.\n if (this._snackBarRefAtThisLevel) {\n this._snackBarRefAtThisLevel.dismiss();\n }\n };\n /**\n * Attaches the snack bar container component to the overlay.\n * @param {?} overlayRef\n * @param {?} config\n * @return {?}\n */\n MatSnackBar.prototype._attachSnackBarContainer = /**\n * Attaches the snack bar container component to the overlay.\n * @param {?} overlayRef\n * @param {?} config\n * @return {?}\n */\n function (overlayRef, config) {\n /** @type {?} */\n var userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n /** @type {?} */\n var injector = new PortalInjector(userInjector || this._injector, new WeakMap([\n [MatSnackBarConfig, config]\n ]));\n /** @type {?} */\n var containerPortal = new ComponentPortal(MatSnackBarContainer, config.viewContainerRef, injector);\n /** @type {?} */\n var containerRef = overlayRef.attach(containerPortal);\n containerRef.instance.snackBarConfig = config;\n return containerRef.instance;\n };\n /**\n * Places a new component or a template as the content of the snack bar container.\n * @template T\n * @param {?} content\n * @param {?=} userConfig\n * @return {?}\n */\n MatSnackBar.prototype._attach = /**\n * Places a new component or a template as the content of the snack bar container.\n * @template T\n * @param {?} content\n * @param {?=} userConfig\n * @return {?}\n */\n function (content, userConfig) {\n /** @type {?} */\n var config = __assign({}, new MatSnackBarConfig(), this._defaultConfig, userConfig);\n /** @type {?} */\n var overlayRef = this._createOverlay(config);\n /** @type {?} */\n var container = this._attachSnackBarContainer(overlayRef, config);\n /** @type {?} */\n var snackBarRef = new MatSnackBarRef(container, overlayRef);\n if (content instanceof TemplateRef) {\n /** @type {?} */\n var portal = new TemplatePortal(content, /** @type {?} */ ((null)), /** @type {?} */ ({\n $implicit: config.data,\n snackBarRef: snackBarRef\n }));\n snackBarRef.instance = container.attachTemplatePortal(portal);\n }\n else {\n /** @type {?} */\n var injector = this._createInjector(config, snackBarRef);\n /** @type {?} */\n var portal = new ComponentPortal(content, undefined, injector);\n /** @type {?} */\n var contentRef = container.attachComponentPortal(portal);\n // We can't pass this via the injector, because the injector is created earlier.\n snackBarRef.instance = contentRef.instance;\n }\n // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n // appropriate. This class is applied to the overlay element because the overlay must expand to\n // fill the width of the screen for full width snackbars.\n this._breakpointObserver.observe(Breakpoints.Handset).pipe(takeUntil(overlayRef.detachments().pipe(take(1)))).subscribe(function (state$$1) {\n if (state$$1.matches) {\n overlayRef.overlayElement.classList.add('mat-snack-bar-handset');\n }\n else {\n overlayRef.overlayElement.classList.remove('mat-snack-bar-handset');\n }\n });\n this._animateSnackBar(snackBarRef, config);\n this._openedSnackBarRef = snackBarRef;\n return this._openedSnackBarRef;\n };\n /**\n * Animates the old snack bar out and the new one in.\n * @param {?} snackBarRef\n * @param {?} config\n * @return {?}\n */\n MatSnackBar.prototype._animateSnackBar = /**\n * Animates the old snack bar out and the new one in.\n * @param {?} snackBarRef\n * @param {?} config\n * @return {?}\n */\n function (snackBarRef, config) {\n var _this = this;\n // When the snackbar is dismissed, clear the reference to it.\n snackBarRef.afterDismissed().subscribe(function () {\n // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n if (_this._openedSnackBarRef == snackBarRef) {\n _this._openedSnackBarRef = null;\n }\n });\n if (this._openedSnackBarRef) {\n // If a snack bar is already in view, dismiss it and enter the\n // new snack bar after exit animation is complete.\n this._openedSnackBarRef.afterDismissed().subscribe(function () {\n snackBarRef.containerInstance.enter();\n });\n this._openedSnackBarRef.dismiss();\n }\n else {\n // If no snack bar is in view, enter the new snack bar.\n snackBarRef.containerInstance.enter();\n }\n // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n if (config.duration && config.duration > 0) {\n snackBarRef.afterOpened().subscribe(function () { return snackBarRef._dismissAfter(/** @type {?} */ ((config.duration))); });\n }\n if (config.announcementMessage) {\n this._live.announce(config.announcementMessage, config.politeness);\n }\n };\n /**\n * Creates a new overlay and places it in the correct location.\n * @param {?} config The user-specified snack bar config.\n * @return {?}\n */\n MatSnackBar.prototype._createOverlay = /**\n * Creates a new overlay and places it in the correct location.\n * @param {?} config The user-specified snack bar config.\n * @return {?}\n */\n function (config) {\n /** @type {?} */\n var overlayConfig = new OverlayConfig();\n overlayConfig.direction = config.direction;\n /** @type {?} */\n var positionStrategy = this._overlay.position().global();\n /** @type {?} */\n var isRtl = config.direction === 'rtl';\n /** @type {?} */\n var isLeft = (config.horizontalPosition === 'left' ||\n (config.horizontalPosition === 'start' && !isRtl) ||\n (config.horizontalPosition === 'end' && isRtl));\n /** @type {?} */\n var isRight = !isLeft && config.horizontalPosition !== 'center';\n if (isLeft) {\n positionStrategy.left('0');\n }\n else if (isRight) {\n positionStrategy.right('0');\n }\n else {\n positionStrategy.centerHorizontally();\n }\n // Set horizontal position.\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n }\n else {\n positionStrategy.bottom('0');\n }\n overlayConfig.positionStrategy = positionStrategy;\n return this._overlay.create(overlayConfig);\n };\n /**\n * Creates an injector to be used inside of a snack bar component.\n * @template T\n * @param {?} config Config that was used to create the snack bar.\n * @param {?} snackBarRef Reference to the snack bar.\n * @return {?}\n */\n MatSnackBar.prototype._createInjector = /**\n * Creates an injector to be used inside of a snack bar component.\n * @template T\n * @param {?} config Config that was used to create the snack bar.\n * @param {?} snackBarRef Reference to the snack bar.\n * @return {?}\n */\n function (config, snackBarRef) {\n /** @type {?} */\n var userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n return new PortalInjector(userInjector || this._injector, new WeakMap([\n [MatSnackBarRef, snackBarRef],\n [MAT_SNACK_BAR_DATA, config.data]\n ]));\n };\n MatSnackBar.decorators = [\n { type: Injectable, args: [{ providedIn: MatSnackBarModule },] },\n ];\n /** @nocollapse */\n MatSnackBar.ctorParameters = function () { return [\n { type: Overlay },\n { type: LiveAnnouncer },\n { type: Injector },\n { type: BreakpointObserver },\n { type: MatSnackBar, decorators: [{ type: Optional }, { type: SkipSelf }] },\n { type: MatSnackBarConfig, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DEFAULT_OPTIONS,] }] }\n ]; };\n /** @nocollapse */ MatSnackBar.ngInjectableDef = defineInjectable({ factory: function MatSnackBar_Factory() { return new MatSnackBar(inject(Overlay), inject(LiveAnnouncer), inject(INJECTOR), inject(BreakpointObserver), inject(MatSnackBar, 12), inject(MAT_SNACK_BAR_DEFAULT_OPTIONS)); }, token: MatSnackBar, providedIn: MatSnackBarModule });\n return MatSnackBar;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\nexport { MatSnackBarModule, MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY, MAT_SNACK_BAR_DEFAULT_OPTIONS, MatSnackBar, MatSnackBarContainer, MAT_SNACK_BAR_DATA, MatSnackBarConfig, MatSnackBarRef, SimpleSnackBar, matSnackBarAnimations };\n//# sourceMappingURL=snack-bar.es5.js.map\n","import { Injectable } from '@angular/core';\n\nimport { from as fromPromise, Observable } from 'rxjs';\nimport { first, map, share } from 'rxjs/operators';\n\nimport { Logger } from 'app/shared/logger.service';\n\ndeclare const System: {\n import(name: string): Promise<any>;\n};\n\ntype PrettyPrintOne = (code: string, language?: string, linenums?: number | boolean) => string;\n\n/**\n * Wrapper around the prettify.js library\n */\n@Injectable()\nexport class PrettyPrinter {\n\n private prettyPrintOne: Observable<PrettyPrintOne>;\n\n constructor(private logger: Logger) {\n this.prettyPrintOne = fromPromise(this.getPrettyPrintOne()).pipe(share());\n }\n\n private getPrettyPrintOne(): Promise<PrettyPrintOne> {\n const ppo = (window as any)['prettyPrintOne'];\n return ppo ? Promise.resolve(ppo) :\n // prettify.js is not in window global; load it with webpack loader\n System.import('assets/js/prettify.js')\n .then(\n () => (window as any)['prettyPrintOne'],\n err => {\n const msg = `Cannot get prettify.js from server: ${err.message}`;\n this.logger.error(new Error(msg));\n // return a pretty print fn that always fails.\n return () => { throw new Error(msg); };\n });\n }\n\n /**\n * Format code snippet as HTML\n * @param {string} code - the code snippet to format; should already be HTML encoded\n * @param {string} [language] - The language of the code to render (could be javascript, html, typescript, etc)\n * @param {string|number} [linenums] - Whether to display line numbers:\n * - false: don't display\n * - true: do display\n * - number: do display but start at the given number\n * @returns Observable<string> - Observable of formatted code\n */\n formatCode(code: string, language?: string, linenums?: number | boolean) {\n return this.prettyPrintOne.pipe(\n map(ppo => {\n try {\n return ppo(code, language, linenums);\n } catch (err) {\n const msg = `Could not format code that begins '${code.substr(0, 50)}...'.`;\n console.error(msg, err);\n throw new Error(msg);\n }\n }),\n first(), // complete immediately\n );\n }\n}\n","/**\n * @fileoverview This file was generated by the Angular template compiler. Do not edit.\n *\n * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}\n * tslint:disable\n */ \nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/material/snack-bar\";\nimport * as i2 from \"@angular/cdk/overlay\";\nimport * as i3 from \"@angular/common\";\nimport * as i4 from \"@angular/cdk/bidi\";\nimport * as i5 from \"@angular/cdk/portal\";\nimport * as i6 from \"@angular/cdk/platform\";\nimport * as i7 from \"@angular/cdk/scrolling\";\nimport * as i8 from \"@angular/material/core\";\nimport * as i9 from \"@angular/platform-browser\";\nimport * as i10 from \"@angular/material/button\";\nimport * as i11 from \"../../button/typings/index.ngfactory\";\nimport * as i12 from \"@angular/cdk/a11y\";\nimport * as i13 from \"@angular/platform-browser/animations\";\nvar MatSnackBarModuleNgFactory = i0.ɵcmf(i1.MatSnackBarModule, [], function (_l) { return i0.ɵmod([i0.ɵmpd(512, i0.ComponentFactoryResolver, i0.ɵCodegenComponentFactoryResolver, [[8, [MatSnackBarContainerNgFactory, SimpleSnackBarNgFactory]], [3, i0.ComponentFactoryResolver], i0.NgModuleRef]), i0.ɵmpd(4608, i2.Overlay, i2.Overlay, [i2.ScrollStrategyOptions, i2.OverlayContainer, i0.ComponentFactoryResolver, i2.OverlayPositionBuilder, i2.OverlayKeyboardDispatcher, i0.Injector, i0.NgZone, i3.DOCUMENT, i4.Directionality, [2, i3.Location]]), i0.ɵmpd(5120, i2.ɵc, i2.ɵd, [i2.Overlay]), i0.ɵmpd(4608, i3.NgLocalization, i3.NgLocaleLocalization, [i0.LOCALE_ID, [2, i3.ɵangular_packages_common_common_a]]), i0.ɵmpd(1073742336, i4.BidiModule, i4.BidiModule, []), i0.ɵmpd(1073742336, i5.PortalModule, i5.PortalModule, []), i0.ɵmpd(1073742336, i6.PlatformModule, i6.PlatformModule, []), i0.ɵmpd(1073742336, i7.ScrollingModule, i7.ScrollingModule, []), i0.ɵmpd(1073742336, i2.OverlayModule, i2.OverlayModule, []), i0.ɵmpd(1073742336, i3.CommonModule, i3.CommonModule, []), i0.ɵmpd(1073742336, i8.MatCommonModule, i8.MatCommonModule, [[2, i8.MATERIAL_SANITY_CHECKS], [2, i9.HAMMER_LOADER]]), i0.ɵmpd(1073742336, i8.MatRippleModule, i8.MatRippleModule, []), i0.ɵmpd(1073742336, i10.MatButtonModule, i10.MatButtonModule, []), i0.ɵmpd(1073742336, i1.MatSnackBarModule, i1.MatSnackBarModule, [])]); });\nexport { MatSnackBarModuleNgFactory as MatSnackBarModuleNgFactory };\nvar styles_MatSnackBarContainer = [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}@media screen and (-ms-high-contrast:active){.mat-snack-bar-container{border:solid 1px}}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;width:100%}\"];\nvar RenderType_MatSnackBarContainer = i0.ɵcrt({ encapsulation: 2, styles: styles_MatSnackBarContainer, data: { \"animation\": [{ type: 7, name: \"state\", definitions: [{ type: 0, name: \"void, hidden\", styles: { type: 6, styles: { transform: \"scale(0.8)\", opacity: 0 }, offset: null }, options: undefined }, { type: 0, name: \"visible\", styles: { type: 6, styles: { transform: \"scale(1)\", opacity: 1 }, offset: null }, options: undefined }, { type: 1, expr: \"* => visible\", animation: { type: 4, styles: null, timings: \"150ms cubic-bezier(0, 0, 0.2, 1)\" }, options: null }, { type: 1, expr: \"* => void, * => hidden\", animation: { type: 4, styles: { type: 6, styles: { opacity: 0 }, offset: null }, timings: \"75ms cubic-bezier(0.4, 0.0, 1, 1)\" }, options: null }], options: {} }] } });\nexport { RenderType_MatSnackBarContainer as RenderType_MatSnackBarContainer };\nfunction View_MatSnackBarContainer_1(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵand(0, null, null, 0))], null, null); }\nexport function View_MatSnackBarContainer_0(_l) { return i0.ɵvid(2, [i0.ɵqud(402653184, 1, { _portalOutlet: 0 }), (_l()(), i0.ɵand(16777216, null, null, 1, null, View_MatSnackBarContainer_1)), i0.ɵdid(2, 212992, [[1, 4]], 0, i5.CdkPortalOutlet, [i0.ComponentFactoryResolver, i0.ViewContainerRef], { portal: [0, \"portal\"] }, null)], function (_ck, _v) { var currVal_0 = \"\"; _ck(_v, 2, 0, currVal_0); }, null); }\nexport function View_MatSnackBarContainer_Host_0(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵeld(0, 0, null, null, 1, \"snack-bar-container\", [[\"class\", \"mat-snack-bar-container\"], [\"role\", \"alert\"]], [[40, \"@state\", 0]], [[\"component\", \"@state.done\"]], function (_v, en, $event) { var ad = true; if ((\"component:@state.done\" === en)) {\n var pd_0 = (i0.ɵnov(_v, 1).onAnimationEnd($event) !== false);\n ad = (pd_0 && ad);\n } return ad; }, View_MatSnackBarContainer_0, RenderType_MatSnackBarContainer)), i0.ɵdid(1, 180224, null, 0, i1.MatSnackBarContainer, [i0.NgZone, i0.ElementRef, i0.ChangeDetectorRef, i1.MatSnackBarConfig], null, null)], null, function (_ck, _v) { var currVal_0 = i0.ɵnov(_v, 1)._animationState; _ck(_v, 0, 0, currVal_0); }); }\nvar MatSnackBarContainerNgFactory = i0.ɵccf(\"snack-bar-container\", i1.MatSnackBarContainer, View_MatSnackBarContainer_Host_0, {}, {}, []);\nexport { MatSnackBarContainerNgFactory as MatSnackBarContainerNgFactory };\nvar styles_SimpleSnackBar = [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;height:100%;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\"];\nvar RenderType_SimpleSnackBar = i0.ɵcrt({ encapsulation: 2, styles: styles_SimpleSnackBar, data: {} });\nexport { RenderType_SimpleSnackBar as RenderType_SimpleSnackBar };\nfunction View_SimpleSnackBar_1(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵeld(0, 0, null, null, 3, \"div\", [[\"class\", \"mat-simple-snackbar-action\"]], null, null, null, null, null)), (_l()(), i0.ɵeld(1, 0, null, null, 2, \"button\", [[\"mat-button\", \"\"]], [[8, \"disabled\", 0], [2, \"_mat-animation-noopable\", null]], [[null, \"click\"]], function (_v, en, $event) { var ad = true; var _co = _v.component; if ((\"click\" === en)) {\n var pd_0 = (_co.action() !== false);\n ad = (pd_0 && ad);\n } return ad; }, i11.View_MatButton_0, i11.RenderType_MatButton)), i0.ɵdid(2, 180224, null, 0, i10.MatButton, [i0.ElementRef, i6.Platform, i12.FocusMonitor, [2, i13.ANIMATION_MODULE_TYPE]], null, null), (_l()(), i0.ɵted(3, 0, [\"\", \"\"]))], null, function (_ck, _v) { var _co = _v.component; var currVal_0 = (i0.ɵnov(_v, 2).disabled || null); var currVal_1 = (i0.ɵnov(_v, 2)._animationMode === \"NoopAnimations\"); _ck(_v, 1, 0, currVal_0, currVal_1); var currVal_2 = _co.data.action; _ck(_v, 3, 0, currVal_2); }); }\nexport function View_SimpleSnackBar_0(_l) { return i0.ɵvid(2, [(_l()(), i0.ɵeld(0, 0, null, null, 1, \"span\", [], null, null, null, null, null)), (_l()(), i0.ɵted(1, null, [\"\", \"\"])), (_l()(), i0.ɵand(16777216, null, null, 1, null, View_SimpleSnackBar_1)), i0.ɵdid(3, 16384, null, 0, i3.NgIf, [i0.ViewContainerRef, i0.TemplateRef], { ngIf: [0, \"ngIf\"] }, null)], function (_ck, _v) { var _co = _v.component; var currVal_1 = _co.hasAction; _ck(_v, 3, 0, currVal_1); }, function (_ck, _v) { var _co = _v.component; var currVal_0 = _co.data.message; _ck(_v, 1, 0, currVal_0); }); }\nexport function View_SimpleSnackBar_Host_0(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵeld(0, 0, null, null, 1, \"simple-snack-bar\", [[\"class\", \"mat-simple-snackbar\"]], null, null, null, View_SimpleSnackBar_0, RenderType_SimpleSnackBar)), i0.ɵdid(1, 49152, null, 0, i1.SimpleSnackBar, [i1.MatSnackBarRef, i1.MAT_SNACK_BAR_DATA], null, null)], null, null); }\nvar SimpleSnackBarNgFactory = i0.ɵccf(\"simple-snack-bar\", i1.SimpleSnackBar, View_SimpleSnackBar_Host_0, {}, {}, []);\nexport { SimpleSnackBarNgFactory as SimpleSnackBarNgFactory };\n","<ng-template cdkPortalOutlet></ng-template>","<span>{{data.message}}</span><div class=\"mat-simple-snackbar-action\" *ngIf=\"hasAction\"><button mat-button (click)=\"action()\">{{data.action}}</button></div>"],"sourceRoot":""}