{"version":3,"file":"14.js","mappings":"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","names":["DataSource","isDataSource","value","connect","ConnectableObservable","ArrayDataSource","constructor","_data","super","this","isObservable","of","disconnect","_RecycleViewRepeaterStrategy","viewCacheSize","_viewCache","applyChanges","changes","viewContainerRef","itemContextFactory","itemValueResolver","itemViewChanged","forEachOperation","record","adjustedPreviousIndex","currentIndex","view","operation","previousIndex","_insertView","viewArgsFactory","_detachAndCacheView","_moveView","context","detach","destroy","cachedView","_insertViewFromCache","$implicit","viewArgs","createEmbeddedView","templateRef","index","detachedView","_maybeCacheView","get","move","length","push","indexOf","remove","pop","insert","SelectionModel","selected","_selected","Array","from","_selection","values","_multiple","initiallySelectedValues","_emitChanges","compareWith","Set","_deselectedToEmit","_selectedToEmit","changed","Subject","forEach","_markSelected","select","_verifyValueAssignment","_hasQueuedChanges","_emitChangeEvent","deselect","_unmarkSelected","setSelection","oldValues","newSelectedSet","filter","has","toggle","isSelected","clear","flushEvent","_unmarkAll","_getConcreteValue","isEmpty","size","hasValue","sort","predicate","isMultipleSelection","next","source","added","removed","add","delete","inputValue","selectedValue","UniqueSelectionDispatcher","_listeners","notify","id","name","listener","listen","registered","ngOnDestroy","static","ɵfac","t","ɵprov","i0","token","factory","providedIn","_VIEW_REPEATER_STRATEGY","InjectionToken","scrollBehaviorSupported","supportsScrollBehavior","BlockScrollStrategy","_viewportRuler","document","_previousHTMLStyles","top","left","_isEnabled","_document","attach","enable","_canBeEnabled","root","documentElement","_previousScrollPosition","getViewportScrollPosition","style","coerceCssPixelValue","classList","disable","html","htmlStyle","bodyStyle","body","previousHtmlScrollBehavior","scrollBehavior","previousBodyScrollBehavior","window","scroll","contains","viewport","getViewportSize","scrollHeight","height","scrollWidth","width","CloseScrollStrategy","_scrollDispatcher","_ngZone","_config","_scrollSubscription","_detach","_overlayRef","hasAttached","run","overlayRef","stream","scrolled","pipe","scrollable","overlayElement","getElementRef","nativeElement","threshold","_initialScrollPosition","subscribe","scrollPosition","Math","abs","updatePosition","unsubscribe","NoopScrollStrategy","isElementScrolledOutsideView","element","scrollContainers","some","containerBounds","bottom","right","isElementClippedByScrolling","scrollContainerRect","RepositionScrollStrategy","scrollThrottle","autoClose","overlayRect","getBoundingClientRect","ScrollStrategyOptions","noop","close","config","block","reposition","i1","DOCUMENT","OverlayConfig","scrollStrategy","panelClass","hasBackdrop","backdropClass","disposeOnNavigation","configKeys","Object","keys","key","undefined","ConnectedOverlayPositionChange","connectionPair","scrollableViewProperties","BaseOverlayDispatcher","_attachedOverlays","splice","OverlayKeyboardDispatcher","_keydownListener","event","overlays","i","_keydownEvents","observers","keydownEvents","_isAttached","runOutsideAngular","addEventListener","removeEventListener","OverlayOutsideClickDispatcher","_platform","_cursorStyleIsSet","_pointerDownListener","_pointerDownEventTarget","_getEventTarget","_clickListener","target","origin","type","slice","_outsidePointerEvents","outsidePointerEvents","_addEventListeners","IOS","_cursorOriginalValue","cursor","i1$1","OverlayContainer","_containerElement","getContainerElement","_createContainer","containerClass","isBrowser","_isTestEnvironment","oppositePlatformContainers","querySelectorAll","container","createElement","setAttribute","appendChild","OverlayRef","_portalOutlet","_host","_pane","_keyboardDispatcher","_location","_outsideClickDispatcher","_animationsDisabled","_backdropElement","_backdropClick","_attachments","_detachments","_locationChanges","Subscription","EMPTY","_backdropClickHandler","_backdropTransitionendHandler","_disposeBackdrop","_scrollStrategy","_positionStrategy","positionStrategy","backdropElement","hostElement","portal","parentElement","_previousHostParent","attachResult","_updateStackingOrder","_updateElementSize","_updateElementDirection","onStable","take","_togglePointerEvents","_attachBackdrop","_toggleClasses","dispose","onDestroy","Promise","resolve","then","detachBackdrop","detachmentResult","_detachContentWhenStable","isAttached","_disposeScrollStrategy","complete","backdropClick","attachments","detachments","getConfig","apply","updatePositionStrategy","strategy","updateSize","sizeConfig","setDirection","dir","direction","addPanelClass","classes","removePanelClass","getDirection","updateScrollStrategy","minWidth","minHeight","maxWidth","maxHeight","enablePointer","pointerEvents","showingClass","insertBefore","requestAnimationFrame","nextSibling","parentNode","backdropToDetach","_backdropTimeout","setTimeout","cssClasses","isAdd","coerceArray","c","subscription","takeUntil","merge","children","backdrop","clearTimeout","boundingBoxClass","cssUnitPattern","FlexibleConnectedPositionStrategy","positions","_preferredPositions","connectedTo","_overlayContainer","_lastBoundingBoxSize","_isPushed","_canPush","_growAfterOpen","_hasFlexibleDimensions","_positionLocked","_viewportMargin","_scrollables","_positionChanges","_resizeSubscription","_offsetX","_offsetY","_appliedPanelClasses","positionChanges","setOrigin","_validatePositions","_boundingBox","_isDisposed","_isInitialRender","_lastPosition","change","reapplyLastPosition","_clearPanelClasses","_resetOverlayElementStyles","_resetBoundingBoxStyles","_viewportRect","_getNarrowedViewportRect","_originRect","_getOriginRect","_overlayRect","_containerRect","originRect","viewportRect","containerRect","flexibleFits","fallback","pos","originPoint","_getOriginPoint","overlayPoint","_getOverlayPoint","overlayFit","_getOverlayFit","isCompletelyWithinViewport","_applyPosition","_canFitWithFlexibleDimensions","position","boundingBoxRect","_calculateBoundingBoxRect","visibleArea","bestFit","bestScore","fit","score","weight","_previousPushAmount","extendStyles","alignItems","justifyContent","lastPosition","withScrollableContainers","scrollables","withPositions","withViewportMargin","margin","withFlexibleDimensions","flexibleDimensions","withGrowAfterOpen","growAfterOpen","withPush","canPush","withLockedPosition","isLocked","_origin","withDefaultOffsetX","offset","withDefaultOffsetY","withTransformOriginOn","selector","_transformOriginSelector","x","y","originX","startX","_isRtl","endX","originY","overlayStartX","overlayStartY","overlayX","overlayY","point","rawOverlayRect","overlay","getRoundedBoundingClientRect","offsetX","_getOffset","offsetY","topOverflow","bottomOverflow","visibleWidth","_subtractOverflows","visibleHeight","fitsInViewportVertically","fitsInViewportHorizontally","availableHeight","availableWidth","getPixelValue","_pushOverlayOnScreen","start","overflowRight","max","overflowBottom","overflowTop","overflowLeft","pushX","pushY","_setTransformOrigin","_setOverlayElementStyles","_setBoundingBoxStyles","_addPanelClasses","_getScrollVisibility","changeEvent","elements","xOrigin","yOrigin","transformOrigin","isRtl","smallestDistanceToViewportEdge","min","previousHeight","previousWidth","styles","_hasExactPosition","transform","hasExactPosition","hasFlexibleDimensions","_getExactOverlayY","_getExactOverlayX","transformString","trim","clientHeight","horizontalStyleProperty","clientWidth","originBounds","overlayBounds","scrollContainerBounds","map","isOriginClipped","isOriginOutsideView","isOverlayClipped","isOverlayOutsideView","overflows","reduce","currentValue","currentOverflow","axis","cssClass","ElementRef","Element","destination","hasOwnProperty","input","units","split","parseFloat","clientRect","floor","wrapperClass","GlobalPositionStrategy","_cssPosition","_topOffset","_bottomOffset","_alignItems","_xPosition","_xOffset","_width","_height","end","centerHorizontally","centerVertically","parentStyles","shouldBeFlushHorizontally","shouldBeFlushVertically","xPosition","xOffset","marginLeft","marginRight","marginTop","marginBottom","parent","OverlayPositionBuilder","global","flexibleConnectedTo","nextUniqueId","Overlay","scrollStrategies","_componentFactoryResolver","_positionBuilder","_injector","_directionality","_animationsModuleType","create","host","_createHostElement","pane","_createPaneElement","portalOutlet","_createPortalOutlet","overlayConfig","_appRef","ApplicationRef","DomPortalOutlet","i5","i6","ANIMATION_MODULE_TYPE","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","CdkOverlayOrigin","elementRef","ɵdir","selectors","exportAs","standalone","CdkConnectedOverlay","_position","_updatePositionStrategy","_hasBackdrop","coerceBooleanProperty","lockPosition","_lockPosition","_flexibleDimensions","_push","_overlay","scrollStrategyFactory","_dir","_backdropSubscription","_attachSubscription","_detachSubscription","_positionSubscription","viewportMargin","open","disableClose","EventEmitter","positionChange","overlayKeydown","overlayOutsideClick","_templatePortal","TemplatePortal","_scrollStrategyFactory","ngOnChanges","_attachOverlay","_detachOverlay","_createOverlay","_buildConfig","emit","keyCode","ESCAPE","hasModifierKey","preventDefault","_createPositionStrategy","currentPosition","_getFlexibleConnectedPositionStrategyOrigin","transformOriginSelector","takeWhile","inclusive","operate","subscriber","createOperatorSubscriber","result","inputs","outputs","features","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","provide","deps","useFactory","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY","OverlayModule","ɵmod","ɵinj","providers","imports","BidiModule","PortalModule","ScrollingModule","Portal","_attachedHost","setAttachedHost","ComponentPortal","component","injector","componentFactoryResolver","projectableNodes","DomPortal","BasePortalOutlet","attachDomPortal","_attachedPortal","attachComponentPortal","attachTemplatePortal","_invokeDisposeFn","setDisposeFn","fn","_disposeFn","outletElement","_defaultInjector","anchorNode","createComment","replaceChild","componentFactory","resolveComponentFactory","componentRef","createComponent","Injector","NULL","attachView","hostView","viewCount","detachView","_getComponentRootNode","viewContainer","viewRef","rootNodes","rootNode","detectChanges","CdkPortal","CdkPortalOutlet","_viewContainerRef","_isInitialized","attached","_getRootNode","attachedRef","_attachedRef","ngOnInit","ref","nodeType","ELEMENT_NODE","animationFrameProvider","schedule","callback","request","cancel","cancelAnimationFrame","delegate","handle","timestamp","args","animationFrameScheduler","AnimationFrameScheduler","AsyncScheduler","flush","action","_active","flushId","_scheduled","actions","error","shift","execute","state","delay","AnimationFrameAction","AsyncAction","scheduler","work","requestAsyncId","recycleAsyncId","_a","resolved","nextHandle","activeHandles","findAndClearHandle","Immediate","setImmediate","cb","clearImmediate","immediateProvider","asapScheduler","AsapScheduler","AsapAction","bind","auditTime","duration","asyncScheduler","audit","durationSelector","lastValue","durationSubscriber","isComplete","endDuration","cleanupDuration","innerFrom","closed","timer","_c0","_c1","VIRTUAL_SCROLL_STRATEGY","FixedSizeVirtualScrollStrategy","itemSize","minBufferPx","maxBufferPx","_scrolledIndexChange","scrolledIndexChange","distinctUntilChanged","_viewport","_itemSize","_minBufferPx","_maxBufferPx","_updateTotalContentSize","_updateRenderedRange","updateItemAndBufferSize","onContentScrolled","onDataLengthChanged","onContentRendered","onRenderedOffsetChanged","scrollToIndex","behavior","scrollToOffset","setTotalContentSize","getDataLength","renderedRange","getRenderedRange","newRange","viewportSize","dataLength","scrollOffset","measureScrollOffset","firstVisibleIndex","maxVisibleItems","ceil","newVisibleIndex","startBuffer","expandStart","endBuffer","expandEnd","setRenderedRange","setRenderedContentOffset","_fixedSizeVirtualScrollStrategyFactory","fixedSizeDir","CdkFixedSizeVirtualScroll","coerceNumberProperty","forwardRef","ScrollDispatcher","_scrolled","_globalSubscription","_scrolledCount","Map","register","set","elementScrolled","deregister","scrollableReference","auditTimeInMs","Observable","observer","_addGlobalListener","_removeGlobalListener","_","ancestorScrolled","elementOrElementRef","ancestors","getAncestorScrollContainers","scrollingContainers","_subscription","_scrollableContainsElement","_getWindow","defaultView","coerceElement","scrollableElement","fromEvent","CdkScrollable","scrollDispatcher","ngZone","_destroyed","_elementScrolled","scrollTo","options","el","getRtlScrollAxisType","_applyScrollToOptions","scrollTop","scrollLeft","LEFT","RIGHT","i2","ViewportRuler","_change","_changeListener","_viewportSize","_updateViewportSize","output","getViewportRect","documentRect","scrollY","scrollX","throttleTime","innerWidth","innerHeight","VIRTUAL_SCROLLABLE","CdkVirtualScrollable","measureViewportSize","orientation","viewportEl","SCROLL_SCHEDULER","CdkVirtualScrollViewport","_orientation","_calculateSpacerSize","appendOnly","_appendOnly","_changeDetectorRef","viewportRuler","inject","Platform","_detachedSubject","_renderedRangeSubject","renderedRangeStream","_totalContentSize","_totalContentWidth","_totalContentHeight","_renderedRange","_dataLength","_renderedContentOffset","_renderedContentOffsetNeedsRewrite","_isChangeDetectionPending","_runAfterChangeDetection","_viewportChanges","checkViewportSize","_measureViewportSize","startWith","_markChangeDetectionNeeded","forOf","_forOf","dataStream","data","newLength","_doChangeDetection","measureBoundingClientRectWithScrollOffset","range","rangesEqual","r1","r2","getOffsetToRenderedContentStart","to","isHorizontal","Number","_renderedContentTransform","measureRenderedContentSize","_from","measureViewportOffset","fromRect","scrollerClientRect","contentEl","_contentWrapper","offsetWidth","offsetHeight","measureRangeSize","runAfter","markForCheck","runAfterChangeDetection","ɵcmp","viewQuery","rf","ctx","_t","first","hostAttrs","hostVars","hostBindings","virtualScrollable","Optional","Inject","ngContentSelectors","decls","vars","consts","template","encapsulation","changeDetection","getOffset","node","rect","CdkVirtualForOf","cdkVirtualForOf","_cdkVirtualForOf","_dataSourceChanges","cdkVirtualForTrackBy","_cdkVirtualForTrackBy","_needsUpdate","item","cdkVirtualForTemplate","_template","cdkVirtualForTemplateCacheSize","_viewRepeater","_differs","viewChange","pairwise","switchMap","prev","cur","_changeDataSource","shareReplay","_differ","_onRenderedDataChange","renderedStartIndex","rangeLen","firstNode","lastNode","ngDoCheck","diff","_renderedItems","_applyChanges","_updateContext","find","oldDs","newDs","count","_updateComputedContextProperties","_adjustedPreviousIndex","_getEmbeddedViewArgs","forEachIdentityChange","last","even","odd","useClass","CdkScrollableModule","SingleBoxSharedResizeObserver","_box","_resizeSubject","_elementObservables","ResizeObserver","_resizeObserver","entries","observe","box","unobserve","entry","bufferSize","refCount","SharedResizeObserver","_observers","NgZone","_c2","_c3","_c4","_c5","MatFormField_ng_template_0_label_0_span_2_Template","MatFormField_ng_template_0_label_0_Template","ctx_r13","_shouldLabelFloat","_hasOutline","_labelId","_control","hideRequiredMarker","required","MatFormField_ng_template_0_Template","ctx_r1","_hasFloatingLabel","MatFormField_div_4_Template","MatFormField_div_6_ng_template_1_ng_template_0_Template","MatFormField_div_6_ng_template_1_Template","_r0","MatFormField_div_6_Template","ctx_r4","_forceDisplayInfixLabel","MatFormField_div_7_Template","MatFormField_div_8_Template","MatFormField_ng_template_10_ng_template_0_Template","MatFormField_ng_template_10_Template","MatFormField_div_12_Template","MatFormField_div_13_Template","MatFormField_div_14_Template","MatFormField_div_16_Template","ctx_r11","_subscriptAnimationState","MatFormField_div_17_mat_hint_1_Template","ctx_r20","_hintLabelId","hintLabel","MatFormField_div_17_Template","ctx_r12","_c6","_c7","MatLabel","nextUniqueId$2","MAT_ERROR","MatError","ariaLive","useExisting","nextUniqueId$1","MatHint","align","MAT_PREFIX","MAT_SUFFIX","MatSuffix","_isText","_isTextSelector","FLOATING_LABEL_PARENT","MatFormFieldFloatingLabel","floating","_floating","monitorResize","_handleResize","_monitorResize","_subscribeToResize","_elementRef","_parent","getWidth","estimateScrollWidth","offsetParent","clone","cloneNode","setProperty","_handleLabelResized","ACTIVATE_CLASS","DEACTIVATING_CLASS","MatFormFieldLineRipple","_handleTransitionEnd","isDeactivating","propertyName","activate","deactivate","MatFormFieldNotchedOutline","ngAfterViewInit","label","querySelector","transitionDuration","_setNotchWidth","labelWidth","_notch","attrs","matFormFieldAnimations","transitionMessages","trigger","opacity","transition","animate","MatFormFieldControl","MAT_FORM_FIELD","MAT_FORM_FIELD_DEFAULT_OPTIONS","DEFAULT_APPEARANCE","DEFAULT_SUBSCRIPT_SIZING","MatFormField","_hideRequiredMarker","floatLabel","_floatLabel","_defaults","appearance","_appearance","oldValue","_needsOutlineLabelOffsetUpdateOnStable","subscriptSizing","_subscriptSizing","_hintLabel","_processHints","_explicitFormFieldControl","_formFieldControl","_animationMode","_unusedDocument","color","_hasIconPrefix","_hasTextPrefix","_hasIconSuffix","_hasTextSuffix","_isFocused","_updateFocusState","ngAfterContentInit","_assertFormFieldControl","_initializeControl","_initializeSubscript","_initializePrefixAndSuffix","_initializeOutlineLabelOffsetSubscriptions","ngAfterContentChecked","getLabelId","getConnectedOverlayOrigin","_textField","_animateAndLockLabel","control","controlType","stateChanges","_syncDescribedByIds","ngControl","valueChanges","_checkPrefixAndSuffixTypes","_prefixChildren","p","_suffixChildren","s","_hintChildren","_errorChildren","_validateHints","focused","_lineRipple","_updateOutlineLabelOffset","_shouldAlwaysFloat","_labelChildNonStatic","_labelChildStatic","shouldLabelFloat","_shouldForward","prop","_getDisplayedMessages","errorState","_refreshOutlineNotchWidth","_floatingLabel","_notchedOutline","ids","userAriaDescribedBy","startHint","hint","endHint","setDescribedByIds","floatingLabel","_iconPrefixContainer","_textPrefixContainer","_isAttachedToDom","iconPrefixContainer","textPrefixContainer","iconPrefixContainerWidth","textPrefixContainerWidth","getRootNode","contentQueries","dirIndex","disabled","autofilled","$event","onContainerClick","dependencies","i3","animation","MatFormFieldModule","MatCommonModule","CommonModule","ObserversModule","listenerOptions","normalizePassiveListenerOptions","passive","AutofillMonitor","_monitoredElements","monitor","elementOrRef","info","subject","animationName","isAutofilled","unlisten","stopMonitoring","_info","TextFieldModule","MAT_INPUT_VALUE_ACCESSOR","MAT_INPUT_INVALID_TYPES","_MatInputBase","mixinErrorState","_defaultErrorStateMatcher","_parentForm","_parentFormGroup","MatInput","_disabled","_id","_uid","_required","hasValidator","Validators","_type","_validateType","_isTextarea","getSupportedInputTypes","_inputValueAccessor","readonly","_readonly","inputValueAccessor","_autofillMonitor","_formField","_neverEmptyInputTypes","_iOSKeyupListener","selectionStart","selectionEnd","setSelectionRange","nodeName","toLowerCase","_previousNativeValue","_isServer","_isNativeSelect","_isInFormField","multiple","updateErrorState","_dirtyCheckNativeValue","_dirtyCheckPlaceholder","focus","_focusChanged","isFocused","_onInput","newValue","placeholder","_getPlaceholder","_previousPlaceholder","removeAttribute","_isNeverEmpty","_isBadInput","validity","badInput","empty","selectElement","firstOption","selectedIndex","join","_isInlineSelect","i4","errorStateMatcher","MatInputModule"],"sourceRoot":"webpack:///","sources":["./node_modules/@angular/cdk/fesm2022/collections.mjs","./node_modules/@angular/cdk/fesm2022/overlay.mjs","./node_modules/rxjs/dist/esm/internal/operators/takeWhile.js","./node_modules/@angular/cdk/fesm2022/portal.mjs","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrameProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrame.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameAction.js","./node_modules/rxjs/dist/esm/internal/util/Immediate.js","./node_modules/rxjs/dist/esm/internal/scheduler/immediateProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/asap.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsapScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsapAction.js","./node_modules/rxjs/dist/esm/internal/operators/auditTime.js","./node_modules/rxjs/dist/esm/internal/operators/audit.js","./node_modules/@angular/cdk/fesm2022/scrolling.mjs","./node_modules/@angular/cdk/fesm2022/observers/private.mjs","./node_modules/@angular/material/fesm2022/form-field.mjs","./node_modules/@angular/cdk/fesm2022/text-field.mjs","./node_modules/@angular/material/fesm2022/input.mjs"],"sourcesContent":["import { ConnectableObservable, isObservable, of, Subject } from 'rxjs';\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken } from '@angular/core';\n\nclass DataSource {\n}\n/** Checks whether an object is a data source. */\nfunction isDataSource(value) {\n // Check if the value is a DataSource by observing if it has a connect function. Cannot\n // be checked as an `instanceof DataSource` since people could create their own sources\n // that match the interface, but don't extend DataSource. We also can't use `isObservable`\n // here, because of some internal apps.\n return value && typeof value.connect === 'function' && !(value instanceof ConnectableObservable);\n}\n\n/** DataSource wrapper for a native array. */\nclass ArrayDataSource extends DataSource {\n constructor(_data) {\n super();\n this._data = _data;\n }\n connect() {\n return isObservable(this._data) ? this._data : of(this._data);\n }\n disconnect() { }\n}\n\n/**\n * A repeater that destroys views when they are removed from a\n * {@link ViewContainerRef}. When new items are inserted into the container,\n * the repeater will always construct a new embedded view for each item.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nclass _DisposeViewRepeaterStrategy {\n applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {\n changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => {\n let view;\n let operation;\n if (record.previousIndex == null) {\n const insertContext = itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = viewContainerRef.createEmbeddedView(insertContext.templateRef, insertContext.context, insertContext.index);\n operation = 1 /* _ViewRepeaterOperation.INSERTED */;\n }\n else if (currentIndex == null) {\n viewContainerRef.remove(adjustedPreviousIndex);\n operation = 3 /* _ViewRepeaterOperation.REMOVED */;\n }\n else {\n view = viewContainerRef.get(adjustedPreviousIndex);\n viewContainerRef.move(view, currentIndex);\n operation = 2 /* _ViewRepeaterOperation.MOVED */;\n }\n if (itemViewChanged) {\n itemViewChanged({\n context: view?.context,\n operation,\n record,\n });\n }\n });\n }\n detach() { }\n}\n\n/**\n * A repeater that caches views when they are removed from a\n * {@link ViewContainerRef}. When new items are inserted into the container,\n * the repeater will reuse one of the cached views instead of creating a new\n * embedded view. Recycling cached views reduces the quantity of expensive DOM\n * inserts.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nclass _RecycleViewRepeaterStrategy {\n constructor() {\n /**\n * The size of the cache used to store unused views.\n * Setting the cache size to `0` will disable caching. Defaults to 20 views.\n */\n this.viewCacheSize = 20;\n /**\n * View cache that stores embedded view instances that have been previously stamped out,\n * but don't are not currently rendered. The view repeater will reuse these views rather than\n * creating brand new ones.\n *\n * TODO(michaeljamesparsons) Investigate whether using a linked list would improve performance.\n */\n this._viewCache = [];\n }\n /** Apply changes to the DOM. */\n applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {\n // Rearrange the views to put them in the right location.\n changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => {\n let view;\n let operation;\n if (record.previousIndex == null) {\n // Item added.\n const viewArgsFactory = () => itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = this._insertView(viewArgsFactory, currentIndex, viewContainerRef, itemValueResolver(record));\n operation = view ? 1 /* _ViewRepeaterOperation.INSERTED */ : 0 /* _ViewRepeaterOperation.REPLACED */;\n }\n else if (currentIndex == null) {\n // Item removed.\n this._detachAndCacheView(adjustedPreviousIndex, viewContainerRef);\n operation = 3 /* _ViewRepeaterOperation.REMOVED */;\n }\n else {\n // Item moved.\n view = this._moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, itemValueResolver(record));\n operation = 2 /* _ViewRepeaterOperation.MOVED */;\n }\n if (itemViewChanged) {\n itemViewChanged({\n context: view?.context,\n operation,\n record,\n });\n }\n });\n }\n detach() {\n for (const view of this._viewCache) {\n view.destroy();\n }\n this._viewCache = [];\n }\n /**\n * Inserts a view for a new item, either from the cache or by creating a new\n * one. Returns `undefined` if the item was inserted into a cached view.\n */\n _insertView(viewArgsFactory, currentIndex, viewContainerRef, value) {\n const cachedView = this._insertViewFromCache(currentIndex, viewContainerRef);\n if (cachedView) {\n cachedView.context.$implicit = value;\n return undefined;\n }\n const viewArgs = viewArgsFactory();\n return viewContainerRef.createEmbeddedView(viewArgs.templateRef, viewArgs.context, viewArgs.index);\n }\n /** Detaches the view at the given index and inserts into the view cache. */\n _detachAndCacheView(index, viewContainerRef) {\n const detachedView = viewContainerRef.detach(index);\n this._maybeCacheView(detachedView, viewContainerRef);\n }\n /** Moves view at the previous index to the current index. */\n _moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, value) {\n const view = viewContainerRef.get(adjustedPreviousIndex);\n viewContainerRef.move(view, currentIndex);\n view.context.$implicit = value;\n return view;\n }\n /**\n * Cache the given detached view. If the cache is full, the view will be\n * destroyed.\n */\n _maybeCacheView(view, viewContainerRef) {\n if (this._viewCache.length < this.viewCacheSize) {\n this._viewCache.push(view);\n }\n else {\n const index = viewContainerRef.indexOf(view);\n // The host component could remove views from the container outside of\n // the view repeater. It's unlikely this will occur, but just in case,\n // destroy the view on its own, otherwise destroy it through the\n // container to ensure that all the references are removed.\n if (index === -1) {\n view.destroy();\n }\n else {\n viewContainerRef.remove(index);\n }\n }\n }\n /** Inserts a recycled view from the cache at the given index. */\n _insertViewFromCache(index, viewContainerRef) {\n const cachedView = this._viewCache.pop();\n if (cachedView) {\n viewContainerRef.insert(cachedView, index);\n }\n return cachedView || null;\n }\n}\n\n/**\n * Class to be used to power selecting one or more options from a list.\n */\nclass SelectionModel {\n /** Selected values. */\n get selected() {\n if (!this._selected) {\n this._selected = Array.from(this._selection.values());\n }\n return this._selected;\n }\n constructor(_multiple = false, initiallySelectedValues, _emitChanges = true, compareWith) {\n this._multiple = _multiple;\n this._emitChanges = _emitChanges;\n this.compareWith = compareWith;\n /** Currently-selected values. */\n this._selection = new Set();\n /** Keeps track of the deselected options that haven't been emitted by the change event. */\n this._deselectedToEmit = [];\n /** Keeps track of the selected options that haven't been emitted by the change event. */\n this._selectedToEmit = [];\n /** Event emitted when the value has changed. */\n this.changed = new Subject();\n if (initiallySelectedValues && initiallySelectedValues.length) {\n if (_multiple) {\n initiallySelectedValues.forEach(value => this._markSelected(value));\n }\n else {\n this._markSelected(initiallySelectedValues[0]);\n }\n // Clear the array in order to avoid firing the change event for preselected values.\n this._selectedToEmit.length = 0;\n }\n }\n /**\n * Selects a value or an array of values.\n * @param values The values to select\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n select(...values) {\n this._verifyValueAssignment(values);\n values.forEach(value => this._markSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n /**\n * Deselects a value or an array of values.\n * @param values The values to deselect\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n deselect(...values) {\n this._verifyValueAssignment(values);\n values.forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n /**\n * Sets the selected values\n * @param values The new selected values\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n setSelection(...values) {\n this._verifyValueAssignment(values);\n const oldValues = this.selected;\n const newSelectedSet = new Set(values);\n values.forEach(value => this._markSelected(value));\n oldValues\n .filter(value => !newSelectedSet.has(value))\n .forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n /**\n * Toggles a value between selected and deselected.\n * @param value The value to toggle\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n toggle(value) {\n return this.isSelected(value) ? this.deselect(value) : this.select(value);\n }\n /**\n * Clears all of the selected values.\n * @param flushEvent Whether to flush the changes in an event.\n * If false, the changes to the selection will be flushed along with the next event.\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n clear(flushEvent = true) {\n this._unmarkAll();\n const changed = this._hasQueuedChanges();\n if (flushEvent) {\n this._emitChangeEvent();\n }\n return changed;\n }\n /**\n * Determines whether a value is selected.\n */\n isSelected(value) {\n return this._selection.has(this._getConcreteValue(value));\n }\n /**\n * Determines whether the model does not have a value.\n */\n isEmpty() {\n return this._selection.size === 0;\n }\n /**\n * Determines whether the model has a value.\n */\n hasValue() {\n return !this.isEmpty();\n }\n /**\n * Sorts the selected values based on a predicate function.\n */\n sort(predicate) {\n if (this._multiple && this.selected) {\n this._selected.sort(predicate);\n }\n }\n /**\n * Gets whether multiple values can be selected.\n */\n isMultipleSelection() {\n return this._multiple;\n }\n /** Emits a change event and clears the records of selected and deselected values. */\n _emitChangeEvent() {\n // Clear the selected values so they can be re-cached.\n this._selected = null;\n if (this._selectedToEmit.length || this._deselectedToEmit.length) {\n this.changed.next({\n source: this,\n added: this._selectedToEmit,\n removed: this._deselectedToEmit,\n });\n this._deselectedToEmit = [];\n this._selectedToEmit = [];\n }\n }\n /** Selects a value. */\n _markSelected(value) {\n value = this._getConcreteValue(value);\n if (!this.isSelected(value)) {\n if (!this._multiple) {\n this._unmarkAll();\n }\n if (!this.isSelected(value)) {\n this._selection.add(value);\n }\n if (this._emitChanges) {\n this._selectedToEmit.push(value);\n }\n }\n }\n /** Deselects a value. */\n _unmarkSelected(value) {\n value = this._getConcreteValue(value);\n if (this.isSelected(value)) {\n this._selection.delete(value);\n if (this._emitChanges) {\n this._deselectedToEmit.push(value);\n }\n }\n }\n /** Clears out the selected values. */\n _unmarkAll() {\n if (!this.isEmpty()) {\n this._selection.forEach(value => this._unmarkSelected(value));\n }\n }\n /**\n * Verifies the value assignment and throws an error if the specified value array is\n * including multiple values while the selection model is not supporting multiple values.\n */\n _verifyValueAssignment(values) {\n if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMultipleValuesInSingleSelectionError();\n }\n }\n /** Whether there are queued up change to be emitted. */\n _hasQueuedChanges() {\n return !!(this._deselectedToEmit.length || this._selectedToEmit.length);\n }\n /** Returns a value that is comparable to inputValue by applying compareWith function, returns the same inputValue otherwise. */\n _getConcreteValue(inputValue) {\n if (!this.compareWith) {\n return inputValue;\n }\n else {\n for (let selectedValue of this._selection) {\n if (this.compareWith(inputValue, selectedValue)) {\n return selectedValue;\n }\n }\n return inputValue;\n }\n }\n}\n/**\n * Returns an error that reports that multiple values are passed into a selection model\n * with a single value.\n * @docs-private\n */\nfunction getMultipleValuesInSingleSelectionError() {\n return Error('Cannot pass multiple values into SelectionModel with single-value mode.');\n}\n\n/**\n * Class to coordinate unique selection based on name.\n * Intended to be consumed as an Angular service.\n * This service is needed because native radio change events are only fired on the item currently\n * being selected, and we still need to uncheck the previous selection.\n *\n * This service does not *store* any IDs and names because they may change at any time, so it is\n * less error-prone if they are simply passed through when the events occur.\n */\nclass UniqueSelectionDispatcher {\n constructor() {\n this._listeners = [];\n }\n /**\n * Notify other items that selection for the given name has been set.\n * @param id ID of the item.\n * @param name Name of the item.\n */\n notify(id, name) {\n for (let listener of this._listeners) {\n listener(id, name);\n }\n }\n /**\n * Listen for future changes to item selection.\n * @return Function used to deregister listener\n */\n listen(listener) {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter((registered) => {\n return listener !== registered;\n });\n };\n }\n ngOnDestroy() {\n this._listeners = [];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: UniqueSelectionDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: UniqueSelectionDispatcher, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: UniqueSelectionDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * Injection token for {@link _ViewRepeater}. This token is for use by Angular Material only.\n * @docs-private\n */\nconst _VIEW_REPEATER_STRATEGY = new InjectionToken('_ViewRepeater');\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ArrayDataSource, DataSource, SelectionModel, UniqueSelectionDispatcher, _DisposeViewRepeaterStrategy, _RecycleViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY, getMultipleValuesInSingleSelectionError, isDataSource };\n","import * as i1 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nexport { CdkScrollable, ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\nimport * as i6 from '@angular/common';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, Optional, ElementRef, ApplicationRef, ANIMATION_MODULE_TYPE, InjectionToken, Directive, EventEmitter, Input, Output, NgModule } from '@angular/core';\nimport { coerceCssPixelValue, coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i1$1 from '@angular/cdk/platform';\nimport { supportsScrollBehavior, _getEventTarget, _isTestEnvironment } from '@angular/cdk/platform';\nimport { filter, take, takeUntil, takeWhile } from 'rxjs/operators';\nimport * as i5 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { DomPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { Subject, Subscription, merge } from 'rxjs';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\n\nconst scrollBehaviorSupported = supportsScrollBehavior();\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nclass BlockScrollStrategy {\n constructor(_viewportRuler, document) {\n this._viewportRuler = _viewportRuler;\n this._previousHTMLStyles = { top: '', left: '' };\n this._isEnabled = false;\n this._document = document;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach() { }\n /** Blocks page-level scroll while the attached overlay is open. */\n enable() {\n if (this._canBeEnabled()) {\n const root = this._document.documentElement;\n this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\n // Cache the previous inline styles in case the user had set them.\n this._previousHTMLStyles.left = root.style.left || '';\n this._previousHTMLStyles.top = root.style.top || '';\n // Note: we're using the `html` node, instead of the `body`, because the `body` may\n // have the user agent margin, whereas the `html` is guaranteed not to have one.\n root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n root.classList.add('cdk-global-scrollblock');\n this._isEnabled = true;\n }\n }\n /** Unblocks page-level scroll while the attached overlay is open. */\n disable() {\n if (this._isEnabled) {\n const html = this._document.documentElement;\n const body = this._document.body;\n const htmlStyle = html.style;\n const bodyStyle = body.style;\n const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';\n this._isEnabled = false;\n htmlStyle.left = this._previousHTMLStyles.left;\n htmlStyle.top = this._previousHTMLStyles.top;\n html.classList.remove('cdk-global-scrollblock');\n // Disable user-defined smooth scrolling temporarily while we restore the scroll position.\n // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior\n // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`,\n // because it can throw off feature detections in `supportsScrollBehavior` which\n // checks for `'scrollBehavior' in documentElement.style`.\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n }\n window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n }\n }\n }\n _canBeEnabled() {\n // Since the scroll strategies can't be singletons, we have to use a global CSS class\n // (`cdk-global-scrollblock`) to make sure that we don't try to disable global\n // scrolling multiple times.\n const html = this._document.documentElement;\n if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n return false;\n }\n const body = this._document.body;\n const viewport = this._viewportRuler.getViewportSize();\n return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\n }\n}\n\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n */\nfunction getMatScrollStrategyAlreadyAttachedError() {\n return Error(`Scroll strategy has already been attached.`);\n}\n\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nclass CloseScrollStrategy {\n constructor(_scrollDispatcher, _ngZone, _viewportRuler, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._config = _config;\n this._scrollSubscription = null;\n /** Detaches the overlay ref and disables the scroll strategy. */\n this._detach = () => {\n this.disable();\n if (this._overlayRef.hasAttached()) {\n this._ngZone.run(() => this._overlayRef.detach());\n }\n };\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n }\n /** Enables the closing of the attached overlay on scroll. */\n enable() {\n if (this._scrollSubscription) {\n return;\n }\n const stream = this._scrollDispatcher.scrolled(0).pipe(filter(scrollable => {\n return (!scrollable ||\n !this._overlayRef.overlayElement.contains(scrollable.getElementRef().nativeElement));\n }));\n if (this._config && this._config.threshold && this._config.threshold > 1) {\n this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n this._scrollSubscription = stream.subscribe(() => {\n const scrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config.threshold) {\n this._detach();\n }\n else {\n this._overlayRef.updatePosition();\n }\n });\n }\n else {\n this._scrollSubscription = stream.subscribe(this._detach);\n }\n }\n /** Disables the closing the attached overlay on scroll. */\n disable() {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n }\n detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/** Scroll strategy that doesn't do anything. */\nclass NoopScrollStrategy {\n /** Does nothing, as this scroll strategy is a no-op. */\n enable() { }\n /** Does nothing, as this scroll strategy is a no-op. */\n disable() { }\n /** Does nothing, as this scroll strategy is a no-op. */\n attach() { }\n}\n\n/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is scrolled out of view\n * @docs-private\n */\nfunction isElementScrolledOutsideView(element, scrollContainers) {\n return scrollContainers.some(containerBounds => {\n const outsideAbove = element.bottom < containerBounds.top;\n const outsideBelow = element.top > containerBounds.bottom;\n const outsideLeft = element.right < containerBounds.left;\n const outsideRight = element.left > containerBounds.right;\n return outsideAbove || outsideBelow || outsideLeft || outsideRight;\n });\n}\n/**\n * Gets whether an element is clipped by any of its scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is clipped\n * @docs-private\n */\nfunction isElementClippedByScrolling(element, scrollContainers) {\n return scrollContainers.some(scrollContainerRect => {\n const clippedAbove = element.top < scrollContainerRect.top;\n const clippedBelow = element.bottom > scrollContainerRect.bottom;\n const clippedLeft = element.left < scrollContainerRect.left;\n const clippedRight = element.right > scrollContainerRect.right;\n return clippedAbove || clippedBelow || clippedLeft || clippedRight;\n });\n}\n\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nclass RepositionScrollStrategy {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n this._config = _config;\n this._scrollSubscription = null;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n }\n /** Enables repositioning of the attached overlay on scroll. */\n enable() {\n if (!this._scrollSubscription) {\n const throttle = this._config ? this._config.scrollThrottle : 0;\n this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => {\n this._overlayRef.updatePosition();\n // TODO(crisbeto): make `close` on by default once all components can handle it.\n if (this._config && this._config.autoClose) {\n const overlayRect = this._overlayRef.overlayElement.getBoundingClientRect();\n const { width, height } = this._viewportRuler.getViewportSize();\n // TODO(crisbeto): include all ancestor scroll containers here once\n // we have a way of exposing the trigger element to the scroll strategy.\n const parentRects = [{ width, height, bottom: height, right: width, top: 0, left: 0 }];\n if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n this.disable();\n this._ngZone.run(() => this._overlayRef.detach());\n }\n }\n });\n }\n }\n /** Disables repositioning of the attached overlay on scroll. */\n disable() {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n }\n detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/**\n * Options for how an overlay will handle scrolling.\n *\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\n */\nclass ScrollStrategyOptions {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, document) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n /** Do nothing on scroll. */\n this.noop = () => new NoopScrollStrategy();\n /**\n * Close the overlay as soon as the user scrolls.\n * @param config Configuration to be used inside the scroll strategy.\n */\n this.close = (config) => new CloseScrollStrategy(this._scrollDispatcher, this._ngZone, this._viewportRuler, config);\n /** Block scrolling. */\n this.block = () => new BlockScrollStrategy(this._viewportRuler, this._document);\n /**\n * Update the overlay's position on scroll.\n * @param config Configuration to be used inside the scroll strategy.\n * Allows debouncing the reposition calls.\n */\n this.reposition = (config) => new RepositionScrollStrategy(this._scrollDispatcher, this._viewportRuler, this._ngZone, config);\n this._document = document;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollStrategyOptions, deps: [{ token: i1.ScrollDispatcher }, { token: i1.ViewportRuler }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollStrategyOptions, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollStrategyOptions, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i1.ScrollDispatcher }, { type: i1.ViewportRuler }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\n\n/** Initial configuration used when creating an overlay. */\nclass OverlayConfig {\n constructor(config) {\n /** Strategy to be used when handling scroll events while the overlay is open. */\n this.scrollStrategy = new NoopScrollStrategy();\n /** Custom class to add to the overlay pane. */\n this.panelClass = '';\n /** Whether the overlay has a backdrop. */\n this.hasBackdrop = false;\n /** Custom class to add to the backdrop */\n this.backdropClass = 'cdk-overlay-dark-backdrop';\n /**\n * Whether the overlay should be disposed of when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n this.disposeOnNavigation = false;\n if (config) {\n // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n const configKeys = Object.keys(config);\n for (const key of configKeys) {\n if (config[key] !== undefined) {\n // TypeScript, as of version 3.5, sees the left-hand-side of this expression\n // as \"I don't know *which* key this is, so the only valid value is the intersection\n // of all the possible values.\" In this case, that happens to be `undefined`. TypeScript\n // is not smart enough to see that the right-hand-side is actually an access of the same\n // exact type with the same exact key, meaning that the value type must be identical.\n // So we use `any` to work around this.\n this[key] = config[key];\n }\n }\n }\n }\n}\n\n/** The points of the origin element and the overlay element to connect. */\nclass ConnectionPositionPair {\n constructor(origin, overlay, \n /** Offset along the X axis. */\n offsetX, \n /** Offset along the Y axis. */\n offsetY, \n /** Class(es) to be applied to the panel while this position is active. */\n panelClass) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.panelClass = panelClass;\n this.originX = origin.originX;\n this.originY = origin.originY;\n this.overlayX = overlay.overlayX;\n this.overlayY = overlay.overlayY;\n }\n}\n/**\n * Set of properties regarding the position of the origin and overlay relative to the viewport\n * with respect to the containing Scrollable elements.\n *\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\n *\n * The overlay and origin are outside view if there is no overlap between their bounding client\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\n *\n * ----------- -----------\n * | outside | | clipped |\n * | view | --------------------------\n * | | | | | |\n * ---------- | ----------- |\n * -------------------------- | |\n * | | | Scrollable |\n * | | | |\n * | | --------------------------\n * | Scrollable |\n * | |\n * --------------------------\n *\n * @docs-private\n */\nclass ScrollingVisibility {\n}\n/** The change event emitted by the strategy when a fallback position is used. */\nclass ConnectedOverlayPositionChange {\n constructor(\n /** The position used as a result of this change. */\n connectionPair, \n /** @docs-private */\n scrollableViewProperties) {\n this.connectionPair = connectionPair;\n this.scrollableViewProperties = scrollableViewProperties;\n }\n}\n/**\n * Validates whether a vertical position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nfunction validateVerticalPosition(property, value) {\n if (value !== 'top' && value !== 'bottom' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n `Expected \"top\", \"bottom\" or \"center\".`);\n }\n}\n/**\n * Validates whether a horizontal position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nfunction validateHorizontalPosition(property, value) {\n if (value !== 'start' && value !== 'end' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n `Expected \"start\", \"end\" or \"center\".`);\n }\n}\n\n/**\n * Service for dispatching events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nclass BaseOverlayDispatcher {\n constructor(document) {\n /** Currently attached overlays in the order they were attached. */\n this._attachedOverlays = [];\n this._document = document;\n }\n ngOnDestroy() {\n this.detach();\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n // Ensure that we don't get the same overlay multiple times.\n this.remove(overlayRef);\n this._attachedOverlays.push(overlayRef);\n }\n /** Remove an overlay from the list of attached overlay refs. */\n remove(overlayRef) {\n const index = this._attachedOverlays.indexOf(overlayRef);\n if (index > -1) {\n this._attachedOverlays.splice(index, 1);\n }\n // Remove the global listener once there are no more overlays.\n if (this._attachedOverlays.length === 0) {\n this.detach();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: BaseOverlayDispatcher, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: BaseOverlayDispatcher, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: BaseOverlayDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\n\n/**\n * Service for dispatching keyboard events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nclass OverlayKeyboardDispatcher extends BaseOverlayDispatcher {\n constructor(document, \n /** @breaking-change 14.0.0 _ngZone will be required. */\n _ngZone) {\n super(document);\n this._ngZone = _ngZone;\n /** Keyboard event listener that will be attached to the body. */\n this._keydownListener = (event) => {\n const overlays = this._attachedOverlays;\n for (let i = overlays.length - 1; i > -1; i--) {\n // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.\n // We want to target the most recent overlay, rather than trying to match where the event came\n // from, because some components might open an overlay, but keep focus on a trigger element\n // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,\n // because we don't want overlays that don't handle keyboard events to block the ones below\n // them that do.\n if (overlays[i]._keydownEvents.observers.length > 0) {\n const keydownEvents = overlays[i]._keydownEvents;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.run(() => keydownEvents.next(event));\n }\n else {\n keydownEvents.next(event);\n }\n break;\n }\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\n // Lazily start dispatcher once first overlay is added\n if (!this._isAttached) {\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.runOutsideAngular(() => this._document.body.addEventListener('keydown', this._keydownListener));\n }\n else {\n this._document.body.addEventListener('keydown', this._keydownListener);\n }\n this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n this._document.body.removeEventListener('keydown', this._keydownListener);\n this._isAttached = false;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayKeyboardDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayKeyboardDispatcher, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayKeyboardDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.NgZone, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Service for dispatching mouse click events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nclass OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {\n constructor(document, _platform, \n /** @breaking-change 14.0.0 _ngZone will be required. */\n _ngZone) {\n super(document);\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._cursorStyleIsSet = false;\n /** Store pointerdown event target to track origin of click. */\n this._pointerDownListener = (event) => {\n this._pointerDownEventTarget = _getEventTarget(event);\n };\n /** Click event listener that will be attached to the body propagate phase. */\n this._clickListener = (event) => {\n const target = _getEventTarget(event);\n // In case of a click event, we want to check the origin of the click\n // (e.g. in case where a user starts a click inside the overlay and\n // releases the click outside of it).\n // This is done by using the event target of the preceding pointerdown event.\n // Every click event caused by a pointer device has a preceding pointerdown\n // event, unless the click was programmatically triggered (e.g. in a unit test).\n const origin = event.type === 'click' && this._pointerDownEventTarget\n ? this._pointerDownEventTarget\n : target;\n // Reset the stored pointerdown event target, to avoid having it interfere\n // in subsequent events.\n this._pointerDownEventTarget = null;\n // We copy the array because the original may be modified asynchronously if the\n // outsidePointerEvents listener decides to detach overlays resulting in index errors inside\n // the for loop.\n const overlays = this._attachedOverlays.slice();\n // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.\n // We want to target all overlays for which the click could be considered as outside click.\n // As soon as we reach an overlay for which the click is not outside click we break off\n // the loop.\n for (let i = overlays.length - 1; i > -1; i--) {\n const overlayRef = overlays[i];\n if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {\n continue;\n }\n // If it's a click inside the overlay, just break - we should do nothing\n // If it's an outside click (both origin and target of the click) dispatch the mouse event,\n // and proceed with the next overlay\n if (overlayRef.overlayElement.contains(target) ||\n overlayRef.overlayElement.contains(origin)) {\n break;\n }\n const outsidePointerEvents = overlayRef._outsidePointerEvents;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.run(() => outsidePointerEvents.next(event));\n }\n else {\n outsidePointerEvents.next(event);\n }\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\n // Safari on iOS does not generate click events for non-interactive\n // elements. However, we want to receive a click for any element outside\n // the overlay. We can force a \"clickable\" state by setting\n // `cursor: pointer` on the document body. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile\n // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n if (!this._isAttached) {\n const body = this._document.body;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.runOutsideAngular(() => this._addEventListeners(body));\n }\n else {\n this._addEventListeners(body);\n }\n // click event is not fired on iOS. To make element \"clickable\" we are\n // setting the cursor to pointer\n if (this._platform.IOS && !this._cursorStyleIsSet) {\n this._cursorOriginalValue = body.style.cursor;\n body.style.cursor = 'pointer';\n this._cursorStyleIsSet = true;\n }\n this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n const body = this._document.body;\n body.removeEventListener('pointerdown', this._pointerDownListener, true);\n body.removeEventListener('click', this._clickListener, true);\n body.removeEventListener('auxclick', this._clickListener, true);\n body.removeEventListener('contextmenu', this._clickListener, true);\n if (this._platform.IOS && this._cursorStyleIsSet) {\n body.style.cursor = this._cursorOriginalValue;\n this._cursorStyleIsSet = false;\n }\n this._isAttached = false;\n }\n }\n _addEventListeners(body) {\n body.addEventListener('pointerdown', this._pointerDownListener, true);\n body.addEventListener('click', this._clickListener, true);\n body.addEventListener('auxclick', this._clickListener, true);\n body.addEventListener('contextmenu', this._clickListener, true);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayOutsideClickDispatcher, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayOutsideClickDispatcher, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayOutsideClickDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }, { type: i0.NgZone, decorators: [{\n type: Optional\n }] }]; } });\n\n/** Container inside which all overlays will render. */\nclass OverlayContainer {\n constructor(document, _platform) {\n this._platform = _platform;\n this._document = document;\n }\n ngOnDestroy() {\n this._containerElement?.remove();\n }\n /**\n * This method returns the overlay container element. It will lazily\n * create the element the first time it is called to facilitate using\n * the container in non-browser environments.\n * @returns the container element\n */\n getContainerElement() {\n if (!this._containerElement) {\n this._createContainer();\n }\n return this._containerElement;\n }\n /**\n * Create the overlay container element, which is simply a div\n * with the 'cdk-overlay-container' class on the document body.\n */\n _createContainer() {\n const containerClass = 'cdk-overlay-container';\n // TODO(crisbeto): remove the testing check once we have an overlay testing\n // module or Angular starts tearing down the testing `NgModule`. See:\n // https://github.com/angular/angular/issues/18831\n if (this._platform.isBrowser || _isTestEnvironment()) {\n const oppositePlatformContainers = this._document.querySelectorAll(`.${containerClass}[platform=\"server\"], ` + `.${containerClass}[platform=\"test\"]`);\n // Remove any old containers from the opposite platform.\n // This can happen when transitioning from the server to the client.\n for (let i = 0; i < oppositePlatformContainers.length; i++) {\n oppositePlatformContainers[i].remove();\n }\n }\n const container = this._document.createElement('div');\n container.classList.add(containerClass);\n // A long time ago we kept adding new overlay containers whenever a new app was instantiated,\n // but at some point we added logic which clears the duplicate ones in order to avoid leaks.\n // The new logic was a little too aggressive since it was breaking some legitimate use cases.\n // To mitigate the problem we made it so that only containers from a different platform are\n // cleared, but the side-effect was that people started depending on the overly-aggressive\n // logic to clean up their tests for them. Until we can introduce an overlay-specific testing\n // module which does the cleanup, we try to detect that we're in a test environment and we\n // always clear the container. See #17006.\n // TODO(crisbeto): remove the test environment check once we have an overlay testing module.\n if (_isTestEnvironment()) {\n container.setAttribute('platform', 'test');\n }\n else if (!this._platform.isBrowser) {\n container.setAttribute('platform', 'server');\n }\n this._document.body.appendChild(container);\n this._containerElement = container;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayContainer, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayContainer, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayContainer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }]; } });\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nclass OverlayRef {\n constructor(_portalOutlet, _host, _pane, _config, _ngZone, _keyboardDispatcher, _document, _location, _outsideClickDispatcher, _animationsDisabled = false) {\n this._portalOutlet = _portalOutlet;\n this._host = _host;\n this._pane = _pane;\n this._config = _config;\n this._ngZone = _ngZone;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._document = _document;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\n this._animationsDisabled = _animationsDisabled;\n this._backdropElement = null;\n this._backdropClick = new Subject();\n this._attachments = new Subject();\n this._detachments = new Subject();\n this._locationChanges = Subscription.EMPTY;\n this._backdropClickHandler = (event) => this._backdropClick.next(event);\n this._backdropTransitionendHandler = (event) => {\n this._disposeBackdrop(event.target);\n };\n /** Stream of keydown events dispatched to this overlay. */\n this._keydownEvents = new Subject();\n /** Stream of mouse outside events dispatched to this overlay. */\n this._outsidePointerEvents = new Subject();\n if (_config.scrollStrategy) {\n this._scrollStrategy = _config.scrollStrategy;\n this._scrollStrategy.attach(this);\n }\n this._positionStrategy = _config.positionStrategy;\n }\n /** The overlay's HTML element */\n get overlayElement() {\n return this._pane;\n }\n /** The overlay's backdrop HTML element. */\n get backdropElement() {\n return this._backdropElement;\n }\n /**\n * Wrapper around the panel element. Can be used for advanced\n * positioning where a wrapper with specific styling is\n * required around the overlay pane.\n */\n get hostElement() {\n return this._host;\n }\n /**\n * Attaches content, given via a Portal, to the overlay.\n * If the overlay is configured to have a backdrop, it will be created.\n *\n * @param portal Portal instance to which to attach the overlay.\n * @returns The portal attachment result.\n */\n attach(portal) {\n // Insert the host into the DOM before attaching the portal, otherwise\n // the animations module will skip animations on repeat attachments.\n if (!this._host.parentElement && this._previousHostParent) {\n this._previousHostParent.appendChild(this._host);\n }\n const attachResult = this._portalOutlet.attach(portal);\n if (this._positionStrategy) {\n this._positionStrategy.attach(this);\n }\n this._updateStackingOrder();\n this._updateElementSize();\n this._updateElementDirection();\n if (this._scrollStrategy) {\n this._scrollStrategy.enable();\n }\n // Update the position once the zone is stable so that the overlay will be fully rendered\n // before attempting to position it, as the position may depend on the size of the rendered\n // content.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n // The overlay could've been detached before the zone has stabilized.\n if (this.hasAttached()) {\n this.updatePosition();\n }\n });\n // Enable pointer events for the overlay pane element.\n this._togglePointerEvents(true);\n if (this._config.hasBackdrop) {\n this._attachBackdrop();\n }\n if (this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, true);\n }\n // Only emit the `attachments` event once all other setup is done.\n this._attachments.next();\n // Track this overlay by the keyboard dispatcher\n this._keyboardDispatcher.add(this);\n if (this._config.disposeOnNavigation) {\n this._locationChanges = this._location.subscribe(() => this.dispose());\n }\n this._outsideClickDispatcher.add(this);\n // TODO(crisbeto): the null check is here, because the portal outlet returns `any`.\n // We should be guaranteed for the result to be `ComponentRef | EmbeddedViewRef`, but\n // `instanceof EmbeddedViewRef` doesn't appear to work at the moment.\n if (typeof attachResult?.onDestroy === 'function') {\n // In most cases we control the portal and we know when it is being detached so that\n // we can finish the disposal process. The exception is if the user passes in a custom\n // `ViewContainerRef` that isn't destroyed through the overlay API. Note that we use\n // `detach` here instead of `dispose`, because we don't know if the user intends to\n // reattach the overlay at a later point. It also has the advantage of waiting for animations.\n attachResult.onDestroy(() => {\n if (this.hasAttached()) {\n // We have to delay the `detach` call, because detaching immediately prevents\n // other destroy hooks from running. This is likely a framework bug similar to\n // https://github.com/angular/angular/issues/46119\n this._ngZone.runOutsideAngular(() => Promise.resolve().then(() => this.detach()));\n }\n });\n }\n return attachResult;\n }\n /**\n * Detaches an overlay from a portal.\n * @returns The portal detachment result.\n */\n detach() {\n if (!this.hasAttached()) {\n return;\n }\n this.detachBackdrop();\n // When the overlay is detached, the pane element should disable pointer events.\n // This is necessary because otherwise the pane element will cover the page and disable\n // pointer events therefore. Depends on the position strategy and the applied pane boundaries.\n this._togglePointerEvents(false);\n if (this._positionStrategy && this._positionStrategy.detach) {\n this._positionStrategy.detach();\n }\n if (this._scrollStrategy) {\n this._scrollStrategy.disable();\n }\n const detachmentResult = this._portalOutlet.detach();\n // Only emit after everything is detached.\n this._detachments.next();\n // Remove this overlay from keyboard dispatcher tracking.\n this._keyboardDispatcher.remove(this);\n // Keeping the host element in the DOM can cause scroll jank, because it still gets\n // rendered, even though it's transparent and unclickable which is why we remove it.\n this._detachContentWhenStable();\n this._locationChanges.unsubscribe();\n this._outsideClickDispatcher.remove(this);\n return detachmentResult;\n }\n /** Cleans up the overlay from the DOM. */\n dispose() {\n const isAttached = this.hasAttached();\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._disposeScrollStrategy();\n this._disposeBackdrop(this._backdropElement);\n this._locationChanges.unsubscribe();\n this._keyboardDispatcher.remove(this);\n this._portalOutlet.dispose();\n this._attachments.complete();\n this._backdropClick.complete();\n this._keydownEvents.complete();\n this._outsidePointerEvents.complete();\n this._outsideClickDispatcher.remove(this);\n this._host?.remove();\n this._previousHostParent = this._pane = this._host = null;\n if (isAttached) {\n this._detachments.next();\n }\n this._detachments.complete();\n }\n /** Whether the overlay has attached content. */\n hasAttached() {\n return this._portalOutlet.hasAttached();\n }\n /** Gets an observable that emits when the backdrop has been clicked. */\n backdropClick() {\n return this._backdropClick;\n }\n /** Gets an observable that emits when the overlay has been attached. */\n attachments() {\n return this._attachments;\n }\n /** Gets an observable that emits when the overlay has been detached. */\n detachments() {\n return this._detachments;\n }\n /** Gets an observable of keydown events targeted to this overlay. */\n keydownEvents() {\n return this._keydownEvents;\n }\n /** Gets an observable of pointer events targeted outside this overlay. */\n outsidePointerEvents() {\n return this._outsidePointerEvents;\n }\n /** Gets the current overlay configuration, which is immutable. */\n getConfig() {\n return this._config;\n }\n /** Updates the position of the overlay based on the position strategy. */\n updatePosition() {\n if (this._positionStrategy) {\n this._positionStrategy.apply();\n }\n }\n /** Switches to a new position strategy and updates the overlay position. */\n updatePositionStrategy(strategy) {\n if (strategy === this._positionStrategy) {\n return;\n }\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._positionStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n this.updatePosition();\n }\n }\n /** Update the size properties of the overlay. */\n updateSize(sizeConfig) {\n this._config = { ...this._config, ...sizeConfig };\n this._updateElementSize();\n }\n /** Sets the LTR/RTL direction for the overlay. */\n setDirection(dir) {\n this._config = { ...this._config, direction: dir };\n this._updateElementDirection();\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, true);\n }\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, false);\n }\n }\n /**\n * Returns the layout direction of the overlay panel.\n */\n getDirection() {\n const direction = this._config.direction;\n if (!direction) {\n return 'ltr';\n }\n return typeof direction === 'string' ? direction : direction.value;\n }\n /** Switches to a new scroll strategy. */\n updateScrollStrategy(strategy) {\n if (strategy === this._scrollStrategy) {\n return;\n }\n this._disposeScrollStrategy();\n this._scrollStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n strategy.enable();\n }\n }\n /** Updates the text direction of the overlay panel. */\n _updateElementDirection() {\n this._host.setAttribute('dir', this.getDirection());\n }\n /** Updates the size of the overlay element based on the overlay config. */\n _updateElementSize() {\n if (!this._pane) {\n return;\n }\n const style = this._pane.style;\n style.width = coerceCssPixelValue(this._config.width);\n style.height = coerceCssPixelValue(this._config.height);\n style.minWidth = coerceCssPixelValue(this._config.minWidth);\n style.minHeight = coerceCssPixelValue(this._config.minHeight);\n style.maxWidth = coerceCssPixelValue(this._config.maxWidth);\n style.maxHeight = coerceCssPixelValue(this._config.maxHeight);\n }\n /** Toggles the pointer events for the overlay pane element. */\n _togglePointerEvents(enablePointer) {\n this._pane.style.pointerEvents = enablePointer ? '' : 'none';\n }\n /** Attaches a backdrop for this overlay. */\n _attachBackdrop() {\n const showingClass = 'cdk-overlay-backdrop-showing';\n this._backdropElement = this._document.createElement('div');\n this._backdropElement.classList.add('cdk-overlay-backdrop');\n if (this._animationsDisabled) {\n this._backdropElement.classList.add('cdk-overlay-backdrop-noop-animation');\n }\n if (this._config.backdropClass) {\n this._toggleClasses(this._backdropElement, this._config.backdropClass, true);\n }\n // Insert the backdrop before the pane in the DOM order,\n // in order to handle stacked overlays properly.\n this._host.parentElement.insertBefore(this._backdropElement, this._host);\n // Forward backdrop clicks such that the consumer of the overlay can perform whatever\n // action desired when such a click occurs (usually closing the overlay).\n this._backdropElement.addEventListener('click', this._backdropClickHandler);\n // Add class to fade-in the backdrop after one frame.\n if (!this._animationsDisabled && typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (this._backdropElement) {\n this._backdropElement.classList.add(showingClass);\n }\n });\n });\n }\n else {\n this._backdropElement.classList.add(showingClass);\n }\n }\n /**\n * Updates the stacking order of the element, moving it to the top if necessary.\n * This is required in cases where one overlay was detached, while another one,\n * that should be behind it, was destroyed. The next time both of them are opened,\n * the stacking will be wrong, because the detached element's pane will still be\n * in its original DOM position.\n */\n _updateStackingOrder() {\n if (this._host.nextSibling) {\n this._host.parentNode.appendChild(this._host);\n }\n }\n /** Detaches the backdrop (if any) associated with the overlay. */\n detachBackdrop() {\n const backdropToDetach = this._backdropElement;\n if (!backdropToDetach) {\n return;\n }\n if (this._animationsDisabled) {\n this._disposeBackdrop(backdropToDetach);\n return;\n }\n backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\n this._ngZone.runOutsideAngular(() => {\n backdropToDetach.addEventListener('transitionend', this._backdropTransitionendHandler);\n });\n // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\n // In this case we make it unclickable and we try to remove it after a delay.\n backdropToDetach.style.pointerEvents = 'none';\n // Run this outside the Angular zone because there's nothing that Angular cares about.\n // If it were to run inside the Angular zone, every test that used Overlay would have to be\n // either async or fakeAsync.\n this._backdropTimeout = this._ngZone.runOutsideAngular(() => setTimeout(() => {\n this._disposeBackdrop(backdropToDetach);\n }, 500));\n }\n /** Toggles a single CSS class or an array of classes on an element. */\n _toggleClasses(element, cssClasses, isAdd) {\n const classes = coerceArray(cssClasses || []).filter(c => !!c);\n if (classes.length) {\n isAdd ? element.classList.add(...classes) : element.classList.remove(...classes);\n }\n }\n /** Detaches the overlay content next time the zone stabilizes. */\n _detachContentWhenStable() {\n // Normally we wouldn't have to explicitly run this outside the `NgZone`, however\n // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will\n // be patched to run inside the zone, which will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => {\n // We can't remove the host here immediately, because the overlay pane's content\n // might still be animating. This stream helps us avoid interrupting the animation\n // by waiting for the pane to become empty.\n const subscription = this._ngZone.onStable\n .pipe(takeUntil(merge(this._attachments, this._detachments)))\n .subscribe(() => {\n // Needs a couple of checks for the pane and host, because\n // they may have been removed by the time the zone stabilizes.\n if (!this._pane || !this._host || this._pane.children.length === 0) {\n if (this._pane && this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, false);\n }\n if (this._host && this._host.parentElement) {\n this._previousHostParent = this._host.parentElement;\n this._host.remove();\n }\n subscription.unsubscribe();\n }\n });\n });\n }\n /** Disposes of a scroll strategy. */\n _disposeScrollStrategy() {\n const scrollStrategy = this._scrollStrategy;\n if (scrollStrategy) {\n scrollStrategy.disable();\n if (scrollStrategy.detach) {\n scrollStrategy.detach();\n }\n }\n }\n /** Removes a backdrop element from the DOM. */\n _disposeBackdrop(backdrop) {\n if (backdrop) {\n backdrop.removeEventListener('click', this._backdropClickHandler);\n backdrop.removeEventListener('transitionend', this._backdropTransitionendHandler);\n backdrop.remove();\n // It is possible that a new portal has been attached to this overlay since we started\n // removing the backdrop. If that is the case, only clear the backdrop reference if it\n // is still the same instance that we started to remove.\n if (this._backdropElement === backdrop) {\n this._backdropElement = null;\n }\n }\n if (this._backdropTimeout) {\n clearTimeout(this._backdropTimeout);\n this._backdropTimeout = undefined;\n }\n }\n}\n\n// TODO: refactor clipping detection into a separate thing (part of scrolling module)\n// TODO: doesn't handle both flexible width and height when it has to scroll along both axis.\n/** Class to be added to the overlay bounding box. */\nconst boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n */\nclass FlexibleConnectedPositionStrategy {\n /** Ordered list of preferred positions, from most to least desirable. */\n get positions() {\n return this._preferredPositions;\n }\n constructor(connectedTo, _viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\n this._lastBoundingBoxSize = { width: 0, height: 0 };\n /** Whether the overlay was pushed in a previous positioning. */\n this._isPushed = false;\n /** Whether the overlay can be pushed on-screen on the initial open. */\n this._canPush = true;\n /** Whether the overlay can grow via flexible width/height after the initial open. */\n this._growAfterOpen = false;\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n this._hasFlexibleDimensions = true;\n /** Whether the overlay position is locked. */\n this._positionLocked = false;\n /** Amount of space that must be maintained between the overlay and the edge of the viewport. */\n this._viewportMargin = 0;\n /** The Scrollable containers used to check scrollable view properties on position change. */\n this._scrollables = [];\n /** Ordered list of preferred positions, from most to least desirable. */\n this._preferredPositions = [];\n /** Subject that emits whenever the position changes. */\n this._positionChanges = new Subject();\n /** Subscription to viewport size changes. */\n this._resizeSubscription = Subscription.EMPTY;\n /** Default offset for the overlay along the x axis. */\n this._offsetX = 0;\n /** Default offset for the overlay along the y axis. */\n this._offsetY = 0;\n /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\n this._appliedPanelClasses = [];\n /** Observable sequence of position changes. */\n this.positionChanges = this._positionChanges;\n this.setOrigin(connectedTo);\n }\n /** Attaches this position strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef &&\n overlayRef !== this._overlayRef &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('This position strategy is already attached to an overlay');\n }\n this._validatePositions();\n overlayRef.hostElement.classList.add(boundingBoxClass);\n this._overlayRef = overlayRef;\n this._boundingBox = overlayRef.hostElement;\n this._pane = overlayRef.overlayElement;\n this._isDisposed = false;\n this._isInitialRender = true;\n this._lastPosition = null;\n this._resizeSubscription.unsubscribe();\n this._resizeSubscription = this._viewportRuler.change().subscribe(() => {\n // When the window is resized, we want to trigger the next reposition as if it\n // was an initial render, in order for the strategy to pick a new optimal position,\n // otherwise position locking will cause it to stay at the old one.\n this._isInitialRender = true;\n this.apply();\n });\n }\n /**\n * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin best fits on-screen.\n *\n * The selection of a position goes as follows:\n * - If any positions fit completely within the viewport as-is,\n * choose the first position that does so.\n * - If flexible dimensions are enabled and at least one satisfies the given minimum width/height,\n * choose the position with the greatest available size modified by the positions' weight.\n * - If pushing is enabled, take the position that went off-screen the least and push it\n * on-screen.\n * - If none of the previous criteria were met, use the position that goes off-screen the least.\n * @docs-private\n */\n apply() {\n // We shouldn't do anything if the strategy was disposed or we're on the server.\n if (this._isDisposed || !this._platform.isBrowser) {\n return;\n }\n // If the position has been applied already (e.g. when the overlay was opened) and the\n // consumer opted into locking in the position, re-use the old position, in order to\n // prevent the overlay from jumping around.\n if (!this._isInitialRender && this._positionLocked && this._lastPosition) {\n this.reapplyLastPosition();\n return;\n }\n this._clearPanelClasses();\n this._resetOverlayElementStyles();\n this._resetBoundingBoxStyles();\n // We need the bounding rects for the origin, the overlay and the container to determine how to position\n // the overlay relative to the origin.\n // We use the viewport rect to determine whether a position would go off-screen.\n this._viewportRect = this._getNarrowedViewportRect();\n this._originRect = this._getOriginRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n this._containerRect = this._overlayContainer.getContainerElement().getBoundingClientRect();\n const originRect = this._originRect;\n const overlayRect = this._overlayRect;\n const viewportRect = this._viewportRect;\n const containerRect = this._containerRect;\n // Positions where the overlay will fit with flexible dimensions.\n const flexibleFits = [];\n // Fallback if none of the preferred positions fit within the viewport.\n let fallback;\n // Go through each of the preferred positions looking for a good fit.\n // If a good fit is found, it will be applied immediately.\n for (let pos of this._preferredPositions) {\n // Get the exact (x, y) coordinate for the point-of-origin on the origin element.\n let originPoint = this._getOriginPoint(originRect, containerRect, pos);\n // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the\n // overlay in this position. We use the top-left corner for calculations and later translate\n // this into an appropriate (top, left, bottom, right) style.\n let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos);\n // Calculate how well the overlay would fit into the viewport with this point.\n let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos);\n // If the overlay, without any further work, fits into the viewport, use this position.\n if (overlayFit.isCompletelyWithinViewport) {\n this._isPushed = false;\n this._applyPosition(pos, originPoint);\n return;\n }\n // If the overlay has flexible dimensions, we can use this position\n // so long as there's enough space for the minimum dimensions.\n if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) {\n // Save positions where the overlay will fit with flexible dimensions. We will use these\n // if none of the positions fit *without* flexible dimensions.\n flexibleFits.push({\n position: pos,\n origin: originPoint,\n overlayRect,\n boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos),\n });\n continue;\n }\n // If the current preferred position does not fit on the screen, remember the position\n // if it has more visible area on-screen than we've seen and move onto the next preferred\n // position.\n if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) {\n fallback = { overlayFit, overlayPoint, originPoint, position: pos, overlayRect };\n }\n }\n // If there are any positions where the overlay would fit with flexible dimensions, choose the\n // one that has the greatest area available modified by the position's weight\n if (flexibleFits.length) {\n let bestFit = null;\n let bestScore = -1;\n for (const fit of flexibleFits) {\n const score = fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);\n if (score > bestScore) {\n bestScore = score;\n bestFit = fit;\n }\n }\n this._isPushed = false;\n this._applyPosition(bestFit.position, bestFit.origin);\n return;\n }\n // When none of the preferred positions fit within the viewport, take the position\n // that went off-screen the least and attempt to push it on-screen.\n if (this._canPush) {\n // TODO(jelbourn): after pushing, the opening \"direction\" of the overlay might not make sense.\n this._isPushed = true;\n this._applyPosition(fallback.position, fallback.originPoint);\n return;\n }\n // All options for getting the overlay within the viewport have been exhausted, so go with the\n // position that went off-screen the least.\n this._applyPosition(fallback.position, fallback.originPoint);\n }\n detach() {\n this._clearPanelClasses();\n this._lastPosition = null;\n this._previousPushAmount = null;\n this._resizeSubscription.unsubscribe();\n }\n /** Cleanup after the element gets destroyed. */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n // We can't use `_resetBoundingBoxStyles` here, because it resets\n // some properties to zero, rather than removing them.\n if (this._boundingBox) {\n extendStyles(this._boundingBox.style, {\n top: '',\n left: '',\n right: '',\n bottom: '',\n height: '',\n width: '',\n alignItems: '',\n justifyContent: '',\n });\n }\n if (this._pane) {\n this._resetOverlayElementStyles();\n }\n if (this._overlayRef) {\n this._overlayRef.hostElement.classList.remove(boundingBoxClass);\n }\n this.detach();\n this._positionChanges.complete();\n this._overlayRef = this._boundingBox = null;\n this._isDisposed = true;\n }\n /**\n * This re-aligns the overlay element with the trigger in its last calculated position,\n * even if a position higher in the \"preferred positions\" list would now fit. This\n * allows one to re-align the panel without changing the orientation of the panel.\n */\n reapplyLastPosition() {\n if (this._isDisposed || !this._platform.isBrowser) {\n return;\n }\n const lastPosition = this._lastPosition;\n if (lastPosition) {\n this._originRect = this._getOriginRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n this._viewportRect = this._getNarrowedViewportRect();\n this._containerRect = this._overlayContainer.getContainerElement().getBoundingClientRect();\n const originPoint = this._getOriginPoint(this._originRect, this._containerRect, lastPosition);\n this._applyPosition(lastPosition, originPoint);\n }\n else {\n this.apply();\n }\n }\n /**\n * Sets the list of Scrollable containers that host the origin element so that\n * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n * Scrollable must be an ancestor element of the strategy's origin element.\n */\n withScrollableContainers(scrollables) {\n this._scrollables = scrollables;\n return this;\n }\n /**\n * Adds new preferred positions.\n * @param positions List of positions options for this overlay.\n */\n withPositions(positions) {\n this._preferredPositions = positions;\n // If the last calculated position object isn't part of the positions anymore, clear\n // it in order to avoid it being picked up if the consumer tries to re-apply.\n if (positions.indexOf(this._lastPosition) === -1) {\n this._lastPosition = null;\n }\n this._validatePositions();\n return this;\n }\n /**\n * Sets a minimum distance the overlay may be positioned to the edge of the viewport.\n * @param margin Required margin between the overlay and the viewport edge in pixels.\n */\n withViewportMargin(margin) {\n this._viewportMargin = margin;\n return this;\n }\n /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\n withFlexibleDimensions(flexibleDimensions = true) {\n this._hasFlexibleDimensions = flexibleDimensions;\n return this;\n }\n /** Sets whether the overlay can grow after the initial open via flexible width/height. */\n withGrowAfterOpen(growAfterOpen = true) {\n this._growAfterOpen = growAfterOpen;\n return this;\n }\n /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\n withPush(canPush = true) {\n this._canPush = canPush;\n return this;\n }\n /**\n * Sets whether the overlay's position should be locked in after it is positioned\n * initially. When an overlay is locked in, it won't attempt to reposition itself\n * when the position is re-applied (e.g. when the user scrolls away).\n * @param isLocked Whether the overlay should locked in.\n */\n withLockedPosition(isLocked = true) {\n this._positionLocked = isLocked;\n return this;\n }\n /**\n * Sets the origin, relative to which to position the overlay.\n * Using an element origin is useful for building components that need to be positioned\n * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be\n * used for cases like contextual menus which open relative to the user's pointer.\n * @param origin Reference to the new origin.\n */\n setOrigin(origin) {\n this._origin = origin;\n return this;\n }\n /**\n * Sets the default offset for the overlay's connection point on the x-axis.\n * @param offset New offset in the X axis.\n */\n withDefaultOffsetX(offset) {\n this._offsetX = offset;\n return this;\n }\n /**\n * Sets the default offset for the overlay's connection point on the y-axis.\n * @param offset New offset in the Y axis.\n */\n withDefaultOffsetY(offset) {\n this._offsetY = offset;\n return this;\n }\n /**\n * Configures that the position strategy should set a `transform-origin` on some elements\n * inside the overlay, depending on the current position that is being applied. This is\n * useful for the cases where the origin of an animation can change depending on the\n * alignment of the overlay.\n * @param selector CSS selector that will be used to find the target\n * elements onto which to set the transform origin.\n */\n withTransformOriginOn(selector) {\n this._transformOriginSelector = selector;\n return this;\n }\n /**\n * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n */\n _getOriginPoint(originRect, containerRect, pos) {\n let x;\n if (pos.originX == 'center') {\n // Note: when centering we should always use the `left`\n // offset, otherwise the position will be wrong in RTL.\n x = originRect.left + originRect.width / 2;\n }\n else {\n const startX = this._isRtl() ? originRect.right : originRect.left;\n const endX = this._isRtl() ? originRect.left : originRect.right;\n x = pos.originX == 'start' ? startX : endX;\n }\n // When zooming in Safari the container rectangle contains negative values for the position\n // and we need to re-add them to the calculated coordinates.\n if (containerRect.left < 0) {\n x -= containerRect.left;\n }\n let y;\n if (pos.originY == 'center') {\n y = originRect.top + originRect.height / 2;\n }\n else {\n y = pos.originY == 'top' ? originRect.top : originRect.bottom;\n }\n // Normally the containerRect's top value would be zero, however when the overlay is attached to an input\n // (e.g. in an autocomplete), mobile browsers will shift everything in order to put the input in the middle\n // of the screen and to make space for the virtual keyboard. We need to account for this offset,\n // otherwise our positioning will be thrown off.\n // Additionally, when zooming in Safari this fixes the vertical position.\n if (containerRect.top < 0) {\n y -= containerRect.top;\n }\n return { x, y };\n }\n /**\n * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\n * origin point to which the overlay should be connected.\n */\n _getOverlayPoint(originPoint, overlayRect, pos) {\n // Calculate the (overlayStartX, overlayStartY), the start of the\n // potential overlay position relative to the origin point.\n let overlayStartX;\n if (pos.overlayX == 'center') {\n overlayStartX = -overlayRect.width / 2;\n }\n else if (pos.overlayX === 'start') {\n overlayStartX = this._isRtl() ? -overlayRect.width : 0;\n }\n else {\n overlayStartX = this._isRtl() ? 0 : -overlayRect.width;\n }\n let overlayStartY;\n if (pos.overlayY == 'center') {\n overlayStartY = -overlayRect.height / 2;\n }\n else {\n overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\n }\n // The (x, y) coordinates of the overlay.\n return {\n x: originPoint.x + overlayStartX,\n y: originPoint.y + overlayStartY,\n };\n }\n /** Gets how well an overlay at the given point will fit within the viewport. */\n _getOverlayFit(point, rawOverlayRect, viewport, position) {\n // Round the overlay rect when comparing against the\n // viewport, because the viewport is always rounded.\n const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n let { x, y } = point;\n let offsetX = this._getOffset(position, 'x');\n let offsetY = this._getOffset(position, 'y');\n // Account for the offsets since they could push the overlay out of the viewport.\n if (offsetX) {\n x += offsetX;\n }\n if (offsetY) {\n y += offsetY;\n }\n // How much the overlay would overflow at this position, on each side.\n let leftOverflow = 0 - x;\n let rightOverflow = x + overlay.width - viewport.width;\n let topOverflow = 0 - y;\n let bottomOverflow = y + overlay.height - viewport.height;\n // Visible parts of the element on each axis.\n let visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);\n let visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);\n let visibleArea = visibleWidth * visibleHeight;\n return {\n visibleArea,\n isCompletelyWithinViewport: overlay.width * overlay.height === visibleArea,\n fitsInViewportVertically: visibleHeight === overlay.height,\n fitsInViewportHorizontally: visibleWidth == overlay.width,\n };\n }\n /**\n * Whether the overlay can fit within the viewport when it may resize either its width or height.\n * @param fit How well the overlay fits in the viewport at some position.\n * @param point The (x, y) coordinates of the overlay at some position.\n * @param viewport The geometry of the viewport.\n */\n _canFitWithFlexibleDimensions(fit, point, viewport) {\n if (this._hasFlexibleDimensions) {\n const availableHeight = viewport.bottom - point.y;\n const availableWidth = viewport.right - point.x;\n const minHeight = getPixelValue(this._overlayRef.getConfig().minHeight);\n const minWidth = getPixelValue(this._overlayRef.getConfig().minWidth);\n const verticalFit = fit.fitsInViewportVertically || (minHeight != null && minHeight <= availableHeight);\n const horizontalFit = fit.fitsInViewportHorizontally || (minWidth != null && minWidth <= availableWidth);\n return verticalFit && horizontalFit;\n }\n return false;\n }\n /**\n * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n * the viewport, the top-left corner will be pushed on-screen (with overflow occurring on the\n * right and bottom).\n *\n * @param start Starting point from which the overlay is pushed.\n * @param rawOverlayRect Dimensions of the overlay.\n * @param scrollPosition Current viewport scroll position.\n * @returns The point at which to position the overlay after pushing. This is effectively a new\n * originPoint.\n */\n _pushOverlayOnScreen(start, rawOverlayRect, scrollPosition) {\n // If the position is locked and we've pushed the overlay already, reuse the previous push\n // amount, rather than pushing it again. If we were to continue pushing, the element would\n // remain in the viewport, which goes against the expectations when position locking is enabled.\n if (this._previousPushAmount && this._positionLocked) {\n return {\n x: start.x + this._previousPushAmount.x,\n y: start.y + this._previousPushAmount.y,\n };\n }\n // Round the overlay rect when comparing against the\n // viewport, because the viewport is always rounded.\n const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n const viewport = this._viewportRect;\n // Determine how much the overlay goes outside the viewport on each\n // side, which we'll use to decide which direction to push it.\n const overflowRight = Math.max(start.x + overlay.width - viewport.width, 0);\n const overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0);\n const overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);\n const overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0);\n // Amount by which to push the overlay in each axis such that it remains on-screen.\n let pushX = 0;\n let pushY = 0;\n // If the overlay fits completely within the bounds of the viewport, push it from whichever\n // direction is goes off-screen. Otherwise, push the top-left corner such that its in the\n // viewport and allow for the trailing end of the overlay to go out of bounds.\n if (overlay.width <= viewport.width) {\n pushX = overflowLeft || -overflowRight;\n }\n else {\n pushX = start.x < this._viewportMargin ? viewport.left - scrollPosition.left - start.x : 0;\n }\n if (overlay.height <= viewport.height) {\n pushY = overflowTop || -overflowBottom;\n }\n else {\n pushY = start.y < this._viewportMargin ? viewport.top - scrollPosition.top - start.y : 0;\n }\n this._previousPushAmount = { x: pushX, y: pushY };\n return {\n x: start.x + pushX,\n y: start.y + pushY,\n };\n }\n /**\n * Applies a computed position to the overlay and emits a position change.\n * @param position The position preference\n * @param originPoint The point on the origin element where the overlay is connected.\n */\n _applyPosition(position, originPoint) {\n this._setTransformOrigin(position);\n this._setOverlayElementStyles(originPoint, position);\n this._setBoundingBoxStyles(originPoint, position);\n if (position.panelClass) {\n this._addPanelClasses(position.panelClass);\n }\n // Save the last connected position in case the position needs to be re-calculated.\n this._lastPosition = position;\n // Notify that the position has been changed along with its change properties.\n // We only emit if we've got any subscriptions, because the scroll visibility\n // calculations can be somewhat expensive.\n if (this._positionChanges.observers.length) {\n const scrollableViewProperties = this._getScrollVisibility();\n const changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties);\n this._positionChanges.next(changeEvent);\n }\n this._isInitialRender = false;\n }\n /** Sets the transform origin based on the configured selector and the passed-in position. */\n _setTransformOrigin(position) {\n if (!this._transformOriginSelector) {\n return;\n }\n const elements = this._boundingBox.querySelectorAll(this._transformOriginSelector);\n let xOrigin;\n let yOrigin = position.overlayY;\n if (position.overlayX === 'center') {\n xOrigin = 'center';\n }\n else if (this._isRtl()) {\n xOrigin = position.overlayX === 'start' ? 'right' : 'left';\n }\n else {\n xOrigin = position.overlayX === 'start' ? 'left' : 'right';\n }\n for (let i = 0; i < elements.length; i++) {\n elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`;\n }\n }\n /**\n * Gets the position and size of the overlay's sizing container.\n *\n * This method does no measuring and applies no styles so that we can cheaply compute the\n * bounds for all positions and choose the best fit based on these results.\n */\n _calculateBoundingBoxRect(origin, position) {\n const viewport = this._viewportRect;\n const isRtl = this._isRtl();\n let height, top, bottom;\n if (position.overlayY === 'top') {\n // Overlay is opening \"downward\" and thus is bound by the bottom viewport edge.\n top = origin.y;\n height = viewport.height - top + this._viewportMargin;\n }\n else if (position.overlayY === 'bottom') {\n // Overlay is opening \"upward\" and thus is bound by the top viewport edge. We need to add\n // the viewport margin back in, because the viewport rect is narrowed down to remove the\n // margin, whereas the `origin` position is calculated based on its `ClientRect`.\n bottom = viewport.height - origin.y + this._viewportMargin * 2;\n height = viewport.height - bottom + this._viewportMargin;\n }\n else {\n // If neither top nor bottom, it means that the overlay is vertically centered on the\n // origin point. Note that we want the position relative to the viewport, rather than\n // the page, which is why we don't use something like `viewport.bottom - origin.y` and\n // `origin.y - viewport.top`.\n const smallestDistanceToViewportEdge = Math.min(viewport.bottom - origin.y + viewport.top, origin.y);\n const previousHeight = this._lastBoundingBoxSize.height;\n height = smallestDistanceToViewportEdge * 2;\n top = origin.y - smallestDistanceToViewportEdge;\n if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {\n top = origin.y - previousHeight / 2;\n }\n }\n // The overlay is opening 'right-ward' (the content flows to the right).\n const isBoundedByRightViewportEdge = (position.overlayX === 'start' && !isRtl) || (position.overlayX === 'end' && isRtl);\n // The overlay is opening 'left-ward' (the content flows to the left).\n const isBoundedByLeftViewportEdge = (position.overlayX === 'end' && !isRtl) || (position.overlayX === 'start' && isRtl);\n let width, left, right;\n if (isBoundedByLeftViewportEdge) {\n right = viewport.width - origin.x + this._viewportMargin;\n width = origin.x - this._viewportMargin;\n }\n else if (isBoundedByRightViewportEdge) {\n left = origin.x;\n width = viewport.right - origin.x;\n }\n else {\n // If neither start nor end, it means that the overlay is horizontally centered on the\n // origin point. Note that we want the position relative to the viewport, rather than\n // the page, which is why we don't use something like `viewport.right - origin.x` and\n // `origin.x - viewport.left`.\n const smallestDistanceToViewportEdge = Math.min(viewport.right - origin.x + viewport.left, origin.x);\n const previousWidth = this._lastBoundingBoxSize.width;\n width = smallestDistanceToViewportEdge * 2;\n left = origin.x - smallestDistanceToViewportEdge;\n if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {\n left = origin.x - previousWidth / 2;\n }\n }\n return { top: top, left: left, bottom: bottom, right: right, width, height };\n }\n /**\n * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\n * origin's connection point and stretches to the bounds of the viewport.\n *\n * @param origin The point on the origin element where the overlay is connected.\n * @param position The position preference\n */\n _setBoundingBoxStyles(origin, position) {\n const boundingBoxRect = this._calculateBoundingBoxRect(origin, position);\n // It's weird if the overlay *grows* while scrolling, so we take the last size into account\n // when applying a new size.\n if (!this._isInitialRender && !this._growAfterOpen) {\n boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height);\n boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width);\n }\n const styles = {};\n if (this._hasExactPosition()) {\n styles.top = styles.left = '0';\n styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = '';\n styles.width = styles.height = '100%';\n }\n else {\n const maxHeight = this._overlayRef.getConfig().maxHeight;\n const maxWidth = this._overlayRef.getConfig().maxWidth;\n styles.height = coerceCssPixelValue(boundingBoxRect.height);\n styles.top = coerceCssPixelValue(boundingBoxRect.top);\n styles.bottom = coerceCssPixelValue(boundingBoxRect.bottom);\n styles.width = coerceCssPixelValue(boundingBoxRect.width);\n styles.left = coerceCssPixelValue(boundingBoxRect.left);\n styles.right = coerceCssPixelValue(boundingBoxRect.right);\n // Push the pane content towards the proper direction.\n if (position.overlayX === 'center') {\n styles.alignItems = 'center';\n }\n else {\n styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';\n }\n if (position.overlayY === 'center') {\n styles.justifyContent = 'center';\n }\n else {\n styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';\n }\n if (maxHeight) {\n styles.maxHeight = coerceCssPixelValue(maxHeight);\n }\n if (maxWidth) {\n styles.maxWidth = coerceCssPixelValue(maxWidth);\n }\n }\n this._lastBoundingBoxSize = boundingBoxRect;\n extendStyles(this._boundingBox.style, styles);\n }\n /** Resets the styles for the bounding box so that a new positioning can be computed. */\n _resetBoundingBoxStyles() {\n extendStyles(this._boundingBox.style, {\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n height: '',\n width: '',\n alignItems: '',\n justifyContent: '',\n });\n }\n /** Resets the styles for the overlay pane so that a new positioning can be computed. */\n _resetOverlayElementStyles() {\n extendStyles(this._pane.style, {\n top: '',\n left: '',\n bottom: '',\n right: '',\n position: '',\n transform: '',\n });\n }\n /** Sets positioning styles to the overlay element. */\n _setOverlayElementStyles(originPoint, position) {\n const styles = {};\n const hasExactPosition = this._hasExactPosition();\n const hasFlexibleDimensions = this._hasFlexibleDimensions;\n const config = this._overlayRef.getConfig();\n if (hasExactPosition) {\n const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition));\n extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition));\n }\n else {\n styles.position = 'static';\n }\n // Use a transform to apply the offsets. We do this because the `center` positions rely on\n // being in the normal flex flow and setting a `top` / `left` at all will completely throw\n // off the position. We also can't use margins, because they won't have an effect in some\n // cases where the element doesn't have anything to \"push off of\". Finally, this works\n // better both with flexible and non-flexible positioning.\n let transformString = '';\n let offsetX = this._getOffset(position, 'x');\n let offsetY = this._getOffset(position, 'y');\n if (offsetX) {\n transformString += `translateX(${offsetX}px) `;\n }\n if (offsetY) {\n transformString += `translateY(${offsetY}px)`;\n }\n styles.transform = transformString.trim();\n // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because\n // we need these values to both be set to \"100%\" for the automatic flexible sizing to work.\n // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint.\n // Note that this doesn't apply when we have an exact position, in which case we do want to\n // apply them because they'll be cleared from the bounding box.\n if (config.maxHeight) {\n if (hasExactPosition) {\n styles.maxHeight = coerceCssPixelValue(config.maxHeight);\n }\n else if (hasFlexibleDimensions) {\n styles.maxHeight = '';\n }\n }\n if (config.maxWidth) {\n if (hasExactPosition) {\n styles.maxWidth = coerceCssPixelValue(config.maxWidth);\n }\n else if (hasFlexibleDimensions) {\n styles.maxWidth = '';\n }\n }\n extendStyles(this._pane.style, styles);\n }\n /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayY(position, originPoint, scrollPosition) {\n // Reset any existing styles. This is necessary in case the\n // preferred position has changed since the last `apply`.\n let styles = { top: '', bottom: '' };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n // We want to set either `top` or `bottom` based on whether the overlay wants to appear\n // above or below the origin and the direction in which the element will expand.\n if (position.overlayY === 'bottom') {\n // When using `bottom`, we adjust the y position such that it is the distance\n // from the bottom of the viewport rather than the top.\n const documentHeight = this._document.documentElement.clientHeight;\n styles.bottom = `${documentHeight - (overlayPoint.y + this._overlayRect.height)}px`;\n }\n else {\n styles.top = coerceCssPixelValue(overlayPoint.y);\n }\n return styles;\n }\n /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayX(position, originPoint, scrollPosition) {\n // Reset any existing styles. This is necessary in case the preferred position has\n // changed since the last `apply`.\n let styles = { left: '', right: '' };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n // We want to set either `left` or `right` based on whether the overlay wants to appear \"before\"\n // or \"after\" the origin, which determines the direction in which the element will expand.\n // For the horizontal axis, the meaning of \"before\" and \"after\" change based on whether the\n // page is in RTL or LTR.\n let horizontalStyleProperty;\n if (this._isRtl()) {\n horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';\n }\n else {\n horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';\n }\n // When we're setting `right`, we adjust the x position such that it is the distance\n // from the right edge of the viewport rather than the left edge.\n if (horizontalStyleProperty === 'right') {\n const documentWidth = this._document.documentElement.clientWidth;\n styles.right = `${documentWidth - (overlayPoint.x + this._overlayRect.width)}px`;\n }\n else {\n styles.left = coerceCssPixelValue(overlayPoint.x);\n }\n return styles;\n }\n /**\n * Gets the view properties of the trigger and overlay, including whether they are clipped\n * or completely outside the view of any of the strategy's scrollables.\n */\n _getScrollVisibility() {\n // Note: needs fresh rects since the position could've changed.\n const originBounds = this._getOriginRect();\n const overlayBounds = this._pane.getBoundingClientRect();\n // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers\n // every time, we should be able to use the scrollTop of the containers if the size of those\n // containers hasn't changed.\n const scrollContainerBounds = this._scrollables.map(scrollable => {\n return scrollable.getElementRef().nativeElement.getBoundingClientRect();\n });\n return {\n isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),\n isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),\n isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),\n isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds),\n };\n }\n /** Subtracts the amount that an element is overflowing on an axis from its length. */\n _subtractOverflows(length, ...overflows) {\n return overflows.reduce((currentValue, currentOverflow) => {\n return currentValue - Math.max(currentOverflow, 0);\n }, length);\n }\n /** Narrows the given viewport rect by the current _viewportMargin. */\n _getNarrowedViewportRect() {\n // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler,\n // because we want to use the `clientWidth` and `clientHeight` as the base. The difference\n // being that the client properties don't include the scrollbar, as opposed to `innerWidth`\n // and `innerHeight` that do. This is necessary, because the overlay container uses\n // 100% `width` and `height` which don't include the scrollbar either.\n const width = this._document.documentElement.clientWidth;\n const height = this._document.documentElement.clientHeight;\n const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n return {\n top: scrollPosition.top + this._viewportMargin,\n left: scrollPosition.left + this._viewportMargin,\n right: scrollPosition.left + width - this._viewportMargin,\n bottom: scrollPosition.top + height - this._viewportMargin,\n width: width - 2 * this._viewportMargin,\n height: height - 2 * this._viewportMargin,\n };\n }\n /** Whether the we're dealing with an RTL context */\n _isRtl() {\n return this._overlayRef.getDirection() === 'rtl';\n }\n /** Determines whether the overlay uses exact or flexible positioning. */\n _hasExactPosition() {\n return !this._hasFlexibleDimensions || this._isPushed;\n }\n /** Retrieves the offset of a position along the x or y axis. */\n _getOffset(position, axis) {\n if (axis === 'x') {\n // We don't do something like `position['offset' + axis]` in\n // order to avoid breaking minifiers that rename properties.\n return position.offsetX == null ? this._offsetX : position.offsetX;\n }\n return position.offsetY == null ? this._offsetY : position.offsetY;\n }\n /** Validates that the current position match the expected values. */\n _validatePositions() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._preferredPositions.length) {\n throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');\n }\n // TODO(crisbeto): remove these once Angular's template type\n // checking is advanced enough to catch these cases.\n this._preferredPositions.forEach(pair => {\n validateHorizontalPosition('originX', pair.originX);\n validateVerticalPosition('originY', pair.originY);\n validateHorizontalPosition('overlayX', pair.overlayX);\n validateVerticalPosition('overlayY', pair.overlayY);\n });\n }\n }\n /** Adds a single CSS class or an array of classes on the overlay panel. */\n _addPanelClasses(cssClasses) {\n if (this._pane) {\n coerceArray(cssClasses).forEach(cssClass => {\n if (cssClass !== '' && this._appliedPanelClasses.indexOf(cssClass) === -1) {\n this._appliedPanelClasses.push(cssClass);\n this._pane.classList.add(cssClass);\n }\n });\n }\n }\n /** Clears the classes that the position strategy has applied from the overlay panel. */\n _clearPanelClasses() {\n if (this._pane) {\n this._appliedPanelClasses.forEach(cssClass => {\n this._pane.classList.remove(cssClass);\n });\n this._appliedPanelClasses = [];\n }\n }\n /** Returns the ClientRect of the current origin. */\n _getOriginRect() {\n const origin = this._origin;\n if (origin instanceof ElementRef) {\n return origin.nativeElement.getBoundingClientRect();\n }\n // Check for Element so SVG elements are also supported.\n if (origin instanceof Element) {\n return origin.getBoundingClientRect();\n }\n const width = origin.width || 0;\n const height = origin.height || 0;\n // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\n return {\n top: origin.y,\n bottom: origin.y + height,\n left: origin.x,\n right: origin.x + width,\n height,\n width,\n };\n }\n}\n/** Shallow-extends a stylesheet object with another stylesheet object. */\nfunction extendStyles(destination, source) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n destination[key] = source[key];\n }\n }\n return destination;\n}\n/**\n * Extracts the pixel value as a number from a value, if it's a number\n * or a CSS pixel string (e.g. `1337px`). Otherwise returns null.\n */\nfunction getPixelValue(input) {\n if (typeof input !== 'number' && input != null) {\n const [value, units] = input.split(cssUnitPattern);\n return !units || units === 'px' ? parseFloat(value) : null;\n }\n return input || null;\n}\n/**\n * Gets a version of an element's bounding `ClientRect` where all the values are rounded down to\n * the nearest pixel. This allows us to account for the cases where there may be sub-pixel\n * deviations in the `ClientRect` returned by the browser (e.g. when zoomed in with a percentage\n * size, see #21350).\n */\nfunction getRoundedBoundingClientRect(clientRect) {\n return {\n top: Math.floor(clientRect.top),\n right: Math.floor(clientRect.right),\n bottom: Math.floor(clientRect.bottom),\n left: Math.floor(clientRect.left),\n width: Math.floor(clientRect.width),\n height: Math.floor(clientRect.height),\n };\n}\nconst STANDARD_DROPDOWN_BELOW_POSITIONS = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\n];\nconst STANDARD_DROPDOWN_ADJACENT_POSITIONS = [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' },\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom' },\n];\n\n/** Class to be added to the overlay pane wrapper. */\nconst wrapperClass = 'cdk-global-overlay-wrapper';\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * explicit position relative to the browser's viewport. We use flexbox, instead of\n * transforms, in order to avoid issues with subpixel rendering which can cause the\n * element to become blurry.\n */\nclass GlobalPositionStrategy {\n constructor() {\n this._cssPosition = 'static';\n this._topOffset = '';\n this._bottomOffset = '';\n this._alignItems = '';\n this._xPosition = '';\n this._xOffset = '';\n this._width = '';\n this._height = '';\n this._isDisposed = false;\n }\n attach(overlayRef) {\n const config = overlayRef.getConfig();\n this._overlayRef = overlayRef;\n if (this._width && !config.width) {\n overlayRef.updateSize({ width: this._width });\n }\n if (this._height && !config.height) {\n overlayRef.updateSize({ height: this._height });\n }\n overlayRef.hostElement.classList.add(wrapperClass);\n this._isDisposed = false;\n }\n /**\n * Sets the top position of the overlay. Clears any previously set vertical position.\n * @param value New top offset.\n */\n top(value = '') {\n this._bottomOffset = '';\n this._topOffset = value;\n this._alignItems = 'flex-start';\n return this;\n }\n /**\n * Sets the left position of the overlay. Clears any previously set horizontal position.\n * @param value New left offset.\n */\n left(value = '') {\n this._xOffset = value;\n this._xPosition = 'left';\n return this;\n }\n /**\n * Sets the bottom position of the overlay. Clears any previously set vertical position.\n * @param value New bottom offset.\n */\n bottom(value = '') {\n this._topOffset = '';\n this._bottomOffset = value;\n this._alignItems = 'flex-end';\n return this;\n }\n /**\n * Sets the right position of the overlay. Clears any previously set horizontal position.\n * @param value New right offset.\n */\n right(value = '') {\n this._xOffset = value;\n this._xPosition = 'right';\n return this;\n }\n /**\n * Sets the overlay to the start of the viewport, depending on the overlay direction.\n * This will be to the left in LTR layouts and to the right in RTL.\n * @param offset Offset from the edge of the screen.\n */\n start(value = '') {\n this._xOffset = value;\n this._xPosition = 'start';\n return this;\n }\n /**\n * Sets the overlay to the end of the viewport, depending on the overlay direction.\n * This will be to the right in LTR layouts and to the left in RTL.\n * @param offset Offset from the edge of the screen.\n */\n end(value = '') {\n this._xOffset = value;\n this._xPosition = 'end';\n return this;\n }\n /**\n * Sets the overlay width and clears any previously set width.\n * @param value New width for the overlay\n * @deprecated Pass the `width` through the `OverlayConfig`.\n * @breaking-change 8.0.0\n */\n width(value = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({ width: value });\n }\n else {\n this._width = value;\n }\n return this;\n }\n /**\n * Sets the overlay height and clears any previously set height.\n * @param value New height for the overlay\n * @deprecated Pass the `height` through the `OverlayConfig`.\n * @breaking-change 8.0.0\n */\n height(value = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({ height: value });\n }\n else {\n this._height = value;\n }\n return this;\n }\n /**\n * Centers the overlay horizontally with an optional offset.\n * Clears any previously set horizontal position.\n *\n * @param offset Overlay offset from the horizontal center.\n */\n centerHorizontally(offset = '') {\n this.left(offset);\n this._xPosition = 'center';\n return this;\n }\n /**\n * Centers the overlay vertically with an optional offset.\n * Clears any previously set vertical position.\n *\n * @param offset Overlay offset from the vertical center.\n */\n centerVertically(offset = '') {\n this.top(offset);\n this._alignItems = 'center';\n return this;\n }\n /**\n * Apply the position to the element.\n * @docs-private\n */\n apply() {\n // Since the overlay ref applies the strategy asynchronously, it could\n // have been disposed before it ends up being applied. If that is the\n // case, we shouldn't do anything.\n if (!this._overlayRef || !this._overlayRef.hasAttached()) {\n return;\n }\n const styles = this._overlayRef.overlayElement.style;\n const parentStyles = this._overlayRef.hostElement.style;\n const config = this._overlayRef.getConfig();\n const { width, height, maxWidth, maxHeight } = config;\n const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') &&\n (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');\n const shouldBeFlushVertically = (height === '100%' || height === '100vh') &&\n (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');\n const xPosition = this._xPosition;\n const xOffset = this._xOffset;\n const isRtl = this._overlayRef.getConfig().direction === 'rtl';\n let marginLeft = '';\n let marginRight = '';\n let justifyContent = '';\n if (shouldBeFlushHorizontally) {\n justifyContent = 'flex-start';\n }\n else if (xPosition === 'center') {\n justifyContent = 'center';\n if (isRtl) {\n marginRight = xOffset;\n }\n else {\n marginLeft = xOffset;\n }\n }\n else if (isRtl) {\n if (xPosition === 'left' || xPosition === 'end') {\n justifyContent = 'flex-end';\n marginLeft = xOffset;\n }\n else if (xPosition === 'right' || xPosition === 'start') {\n justifyContent = 'flex-start';\n marginRight = xOffset;\n }\n }\n else if (xPosition === 'left' || xPosition === 'start') {\n justifyContent = 'flex-start';\n marginLeft = xOffset;\n }\n else if (xPosition === 'right' || xPosition === 'end') {\n justifyContent = 'flex-end';\n marginRight = xOffset;\n }\n styles.position = this._cssPosition;\n styles.marginLeft = shouldBeFlushHorizontally ? '0' : marginLeft;\n styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;\n styles.marginBottom = this._bottomOffset;\n styles.marginRight = shouldBeFlushHorizontally ? '0' : marginRight;\n parentStyles.justifyContent = justifyContent;\n parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;\n }\n /**\n * Cleans up the DOM changes from the position strategy.\n * @docs-private\n */\n dispose() {\n if (this._isDisposed || !this._overlayRef) {\n return;\n }\n const styles = this._overlayRef.overlayElement.style;\n const parent = this._overlayRef.hostElement;\n const parentStyles = parent.style;\n parent.classList.remove(wrapperClass);\n parentStyles.justifyContent =\n parentStyles.alignItems =\n styles.marginTop =\n styles.marginBottom =\n styles.marginLeft =\n styles.marginRight =\n styles.position =\n '';\n this._overlayRef = null;\n this._isDisposed = true;\n }\n}\n\n/** Builder for overlay position strategy. */\nclass OverlayPositionBuilder {\n constructor(_viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n }\n /**\n * Creates a global position strategy.\n */\n global() {\n return new GlobalPositionStrategy();\n }\n /**\n * Creates a flexible position strategy.\n * @param origin Origin relative to which to position the overlay.\n */\n flexibleConnectedTo(origin) {\n return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document, this._platform, this._overlayContainer);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayPositionBuilder, deps: [{ token: i1.ViewportRuler }, { token: DOCUMENT }, { token: i1$1.Platform }, { token: OverlayContainer }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayPositionBuilder, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayPositionBuilder, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }, { type: OverlayContainer }]; } });\n\n/** Next overlay unique ID. */\nlet nextUniqueId = 0;\n// Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver\n// which needs to be different depending on where OverlayModule is imported.\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.\n */\nclass Overlay {\n constructor(\n /** Scrolling strategies that can be used when creating an overlay. */\n scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, _location, _outsideClickDispatcher, _animationsModuleType) {\n this.scrollStrategies = scrollStrategies;\n this._overlayContainer = _overlayContainer;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._positionBuilder = _positionBuilder;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._injector = _injector;\n this._ngZone = _ngZone;\n this._document = _document;\n this._directionality = _directionality;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\n this._animationsModuleType = _animationsModuleType;\n }\n /**\n * Creates an overlay.\n * @param config Configuration applied to the overlay.\n * @returns Reference to the created overlay.\n */\n create(config) {\n const host = this._createHostElement();\n const pane = this._createPaneElement(host);\n const portalOutlet = this._createPortalOutlet(pane);\n const overlayConfig = new OverlayConfig(config);\n overlayConfig.direction = overlayConfig.direction || this._directionality.value;\n return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone, this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher, this._animationsModuleType === 'NoopAnimations');\n }\n /**\n * Gets a position builder that can be used, via fluent API,\n * to construct and configure a position strategy.\n * @returns An overlay position builder.\n */\n position() {\n return this._positionBuilder;\n }\n /**\n * Creates the DOM element for an overlay and appends it to the overlay container.\n * @returns Newly-created pane element\n */\n _createPaneElement(host) {\n const pane = this._document.createElement('div');\n pane.id = `cdk-overlay-${nextUniqueId++}`;\n pane.classList.add('cdk-overlay-pane');\n host.appendChild(pane);\n return pane;\n }\n /**\n * Creates the host element that wraps around an overlay\n * and can be used for advanced positioning.\n * @returns Newly-create host element.\n */\n _createHostElement() {\n const host = this._document.createElement('div');\n this._overlayContainer.getContainerElement().appendChild(host);\n return host;\n }\n /**\n * Create a DomPortalOutlet into which the overlay content can be loaded.\n * @param pane The DOM element to turn into a portal outlet.\n * @returns A portal outlet for the given DOM element.\n */\n _createPortalOutlet(pane) {\n // We have to resolve the ApplicationRef later in order to allow people\n // to use overlay-based providers during app initialization.\n if (!this._appRef) {\n this._appRef = this._injector.get(ApplicationRef);\n }\n return new DomPortalOutlet(pane, this._componentFactoryResolver, this._appRef, this._injector, this._document);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: Overlay, deps: [{ token: ScrollStrategyOptions }, { token: OverlayContainer }, { token: i0.ComponentFactoryResolver }, { token: OverlayPositionBuilder }, { token: OverlayKeyboardDispatcher }, { token: i0.Injector }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i5.Directionality }, { token: i6.Location }, { token: OverlayOutsideClickDispatcher }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: Overlay, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: Overlay, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: ScrollStrategyOptions }, { type: OverlayContainer }, { type: i0.ComponentFactoryResolver }, { type: OverlayPositionBuilder }, { type: OverlayKeyboardDispatcher }, { type: i0.Injector }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i5.Directionality }, { type: i6.Location }, { type: OverlayOutsideClickDispatcher }, { type: undefined, decorators: [{\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }, {\n type: Optional\n }] }]; } });\n\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\nconst defaultPositionList = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n];\n/** Injection token that determines the scroll handling while the connected overlay is open. */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = new InjectionToken('cdk-connected-overlay-scroll-strategy');\n/**\n * Directive applied to an element to make it usable as an origin for an Overlay using a\n * ConnectedPositionStrategy.\n */\nclass CdkOverlayOrigin {\n constructor(\n /** Reference to the element on which the directive is applied. */\n elementRef) {\n this.elementRef = elementRef;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkOverlayOrigin, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkOverlayOrigin, isStandalone: true, selector: \"[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]\", exportAs: [\"cdkOverlayOrigin\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkOverlayOrigin, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\n exportAs: 'cdkOverlayOrigin',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\nclass CdkConnectedOverlay {\n /** The offset in pixels for the overlay connection point on the x-axis */\n get offsetX() {\n return this._offsetX;\n }\n set offsetX(offsetX) {\n this._offsetX = offsetX;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** The offset in pixels for the overlay connection point on the y-axis */\n get offsetY() {\n return this._offsetY;\n }\n set offsetY(offsetY) {\n this._offsetY = offsetY;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** Whether or not the overlay should attach a backdrop. */\n get hasBackdrop() {\n return this._hasBackdrop;\n }\n set hasBackdrop(value) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n /** Whether or not the overlay should be locked when scrolling. */\n get lockPosition() {\n return this._lockPosition;\n }\n set lockPosition(value) {\n this._lockPosition = coerceBooleanProperty(value);\n }\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n get flexibleDimensions() {\n return this._flexibleDimensions;\n }\n set flexibleDimensions(value) {\n this._flexibleDimensions = coerceBooleanProperty(value);\n }\n /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n get growAfterOpen() {\n return this._growAfterOpen;\n }\n set growAfterOpen(value) {\n this._growAfterOpen = coerceBooleanProperty(value);\n }\n /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n get push() {\n return this._push;\n }\n set push(value) {\n this._push = coerceBooleanProperty(value);\n }\n // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n constructor(_overlay, templateRef, viewContainerRef, scrollStrategyFactory, _dir) {\n this._overlay = _overlay;\n this._dir = _dir;\n this._hasBackdrop = false;\n this._lockPosition = false;\n this._growAfterOpen = false;\n this._flexibleDimensions = false;\n this._push = false;\n this._backdropSubscription = Subscription.EMPTY;\n this._attachSubscription = Subscription.EMPTY;\n this._detachSubscription = Subscription.EMPTY;\n this._positionSubscription = Subscription.EMPTY;\n /** Margin between the overlay and the viewport edges. */\n this.viewportMargin = 0;\n /** Whether the overlay is open. */\n this.open = false;\n /** Whether the overlay can be closed by user interaction. */\n this.disableClose = false;\n /** Event emitted when the backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Event emitted when the position has changed. */\n this.positionChange = new EventEmitter();\n /** Event emitted when the overlay has been attached. */\n this.attach = new EventEmitter();\n /** Event emitted when the overlay has been detached. */\n this.detach = new EventEmitter();\n /** Emits when there are keyboard events that are targeted at the overlay. */\n this.overlayKeydown = new EventEmitter();\n /** Emits when there are mouse outside click events that are targeted at the overlay. */\n this.overlayOutsideClick = new EventEmitter();\n this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n this._scrollStrategyFactory = scrollStrategyFactory;\n this.scrollStrategy = this._scrollStrategyFactory();\n }\n /** The associated overlay reference. */\n get overlayRef() {\n return this._overlayRef;\n }\n /** The element's layout direction. */\n get dir() {\n return this._dir ? this._dir.value : 'ltr';\n }\n ngOnDestroy() {\n this._attachSubscription.unsubscribe();\n this._detachSubscription.unsubscribe();\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n }\n }\n ngOnChanges(changes) {\n if (this._position) {\n this._updatePositionStrategy(this._position);\n this._overlayRef.updateSize({\n width: this.width,\n minWidth: this.minWidth,\n height: this.height,\n minHeight: this.minHeight,\n });\n if (changes['origin'] && this.open) {\n this._position.apply();\n }\n }\n if (changes['open']) {\n this.open ? this._attachOverlay() : this._detachOverlay();\n }\n }\n /** Creates an overlay */\n _createOverlay() {\n if (!this.positions || !this.positions.length) {\n this.positions = defaultPositionList;\n }\n const overlayRef = (this._overlayRef = this._overlay.create(this._buildConfig()));\n this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit());\n this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit());\n overlayRef.keydownEvents().subscribe((event) => {\n this.overlayKeydown.next(event);\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this._detachOverlay();\n }\n });\n this._overlayRef.outsidePointerEvents().subscribe((event) => {\n this.overlayOutsideClick.next(event);\n });\n }\n /** Builds the overlay config based on the directive's inputs */\n _buildConfig() {\n const positionStrategy = (this._position =\n this.positionStrategy || this._createPositionStrategy());\n const overlayConfig = new OverlayConfig({\n direction: this._dir,\n positionStrategy,\n scrollStrategy: this.scrollStrategy,\n hasBackdrop: this.hasBackdrop,\n });\n if (this.width || this.width === 0) {\n overlayConfig.width = this.width;\n }\n if (this.height || this.height === 0) {\n overlayConfig.height = this.height;\n }\n if (this.minWidth || this.minWidth === 0) {\n overlayConfig.minWidth = this.minWidth;\n }\n if (this.minHeight || this.minHeight === 0) {\n overlayConfig.minHeight = this.minHeight;\n }\n if (this.backdropClass) {\n overlayConfig.backdropClass = this.backdropClass;\n }\n if (this.panelClass) {\n overlayConfig.panelClass = this.panelClass;\n }\n return overlayConfig;\n }\n /** Updates the state of a position strategy, based on the values of the directive inputs. */\n _updatePositionStrategy(positionStrategy) {\n const positions = this.positions.map(currentPosition => ({\n originX: currentPosition.originX,\n originY: currentPosition.originY,\n overlayX: currentPosition.overlayX,\n overlayY: currentPosition.overlayY,\n offsetX: currentPosition.offsetX || this.offsetX,\n offsetY: currentPosition.offsetY || this.offsetY,\n panelClass: currentPosition.panelClass || undefined,\n }));\n return positionStrategy\n .setOrigin(this._getFlexibleConnectedPositionStrategyOrigin())\n .withPositions(positions)\n .withFlexibleDimensions(this.flexibleDimensions)\n .withPush(this.push)\n .withGrowAfterOpen(this.growAfterOpen)\n .withViewportMargin(this.viewportMargin)\n .withLockedPosition(this.lockPosition)\n .withTransformOriginOn(this.transformOriginSelector);\n }\n /** Returns the position strategy of the overlay to be set on the overlay config */\n _createPositionStrategy() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._getFlexibleConnectedPositionStrategyOrigin());\n this._updatePositionStrategy(strategy);\n return strategy;\n }\n _getFlexibleConnectedPositionStrategyOrigin() {\n if (this.origin instanceof CdkOverlayOrigin) {\n return this.origin.elementRef;\n }\n else {\n return this.origin;\n }\n }\n /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\n _attachOverlay() {\n if (!this._overlayRef) {\n this._createOverlay();\n }\n else {\n // Update the overlay size, in case the directive's inputs have changed\n this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop;\n }\n if (!this._overlayRef.hasAttached()) {\n this._overlayRef.attach(this._templatePortal);\n }\n if (this.hasBackdrop) {\n this._backdropSubscription = this._overlayRef.backdropClick().subscribe(event => {\n this.backdropClick.emit(event);\n });\n }\n else {\n this._backdropSubscription.unsubscribe();\n }\n this._positionSubscription.unsubscribe();\n // Only subscribe to `positionChanges` if requested, because putting\n // together all the information for it can be expensive.\n if (this.positionChange.observers.length > 0) {\n this._positionSubscription = this._position.positionChanges\n .pipe(takeWhile(() => this.positionChange.observers.length > 0))\n .subscribe(position => {\n this.positionChange.emit(position);\n if (this.positionChange.observers.length === 0) {\n this._positionSubscription.unsubscribe();\n }\n });\n }\n }\n /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\n _detachOverlay() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n }\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkConnectedOverlay, deps: [{ token: Overlay }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY }, { token: i5.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkConnectedOverlay, isStandalone: true, selector: \"[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]\", inputs: { origin: [\"cdkConnectedOverlayOrigin\", \"origin\"], positions: [\"cdkConnectedOverlayPositions\", \"positions\"], positionStrategy: [\"cdkConnectedOverlayPositionStrategy\", \"positionStrategy\"], offsetX: [\"cdkConnectedOverlayOffsetX\", \"offsetX\"], offsetY: [\"cdkConnectedOverlayOffsetY\", \"offsetY\"], width: [\"cdkConnectedOverlayWidth\", \"width\"], height: [\"cdkConnectedOverlayHeight\", \"height\"], minWidth: [\"cdkConnectedOverlayMinWidth\", \"minWidth\"], minHeight: [\"cdkConnectedOverlayMinHeight\", \"minHeight\"], backdropClass: [\"cdkConnectedOverlayBackdropClass\", \"backdropClass\"], panelClass: [\"cdkConnectedOverlayPanelClass\", \"panelClass\"], viewportMargin: [\"cdkConnectedOverlayViewportMargin\", \"viewportMargin\"], scrollStrategy: [\"cdkConnectedOverlayScrollStrategy\", \"scrollStrategy\"], open: [\"cdkConnectedOverlayOpen\", \"open\"], disableClose: [\"cdkConnectedOverlayDisableClose\", \"disableClose\"], transformOriginSelector: [\"cdkConnectedOverlayTransformOriginOn\", \"transformOriginSelector\"], hasBackdrop: [\"cdkConnectedOverlayHasBackdrop\", \"hasBackdrop\"], lockPosition: [\"cdkConnectedOverlayLockPosition\", \"lockPosition\"], flexibleDimensions: [\"cdkConnectedOverlayFlexibleDimensions\", \"flexibleDimensions\"], growAfterOpen: [\"cdkConnectedOverlayGrowAfterOpen\", \"growAfterOpen\"], push: [\"cdkConnectedOverlayPush\", \"push\"] }, outputs: { backdropClick: \"backdropClick\", positionChange: \"positionChange\", attach: \"attach\", detach: \"detach\", overlayKeydown: \"overlayKeydown\", overlayOutsideClick: \"overlayOutsideClick\" }, exportAs: [\"cdkConnectedOverlay\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkConnectedOverlay, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\n exportAs: 'cdkConnectedOverlay',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: Overlay }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY]\n }] }, { type: i5.Directionality, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { origin: [{\n type: Input,\n args: ['cdkConnectedOverlayOrigin']\n }], positions: [{\n type: Input,\n args: ['cdkConnectedOverlayPositions']\n }], positionStrategy: [{\n type: Input,\n args: ['cdkConnectedOverlayPositionStrategy']\n }], offsetX: [{\n type: Input,\n args: ['cdkConnectedOverlayOffsetX']\n }], offsetY: [{\n type: Input,\n args: ['cdkConnectedOverlayOffsetY']\n }], width: [{\n type: Input,\n args: ['cdkConnectedOverlayWidth']\n }], height: [{\n type: Input,\n args: ['cdkConnectedOverlayHeight']\n }], minWidth: [{\n type: Input,\n args: ['cdkConnectedOverlayMinWidth']\n }], minHeight: [{\n type: Input,\n args: ['cdkConnectedOverlayMinHeight']\n }], backdropClass: [{\n type: Input,\n args: ['cdkConnectedOverlayBackdropClass']\n }], panelClass: [{\n type: Input,\n args: ['cdkConnectedOverlayPanelClass']\n }], viewportMargin: [{\n type: Input,\n args: ['cdkConnectedOverlayViewportMargin']\n }], scrollStrategy: [{\n type: Input,\n args: ['cdkConnectedOverlayScrollStrategy']\n }], open: [{\n type: Input,\n args: ['cdkConnectedOverlayOpen']\n }], disableClose: [{\n type: Input,\n args: ['cdkConnectedOverlayDisableClose']\n }], transformOriginSelector: [{\n type: Input,\n args: ['cdkConnectedOverlayTransformOriginOn']\n }], hasBackdrop: [{\n type: Input,\n args: ['cdkConnectedOverlayHasBackdrop']\n }], lockPosition: [{\n type: Input,\n args: ['cdkConnectedOverlayLockPosition']\n }], flexibleDimensions: [{\n type: Input,\n args: ['cdkConnectedOverlayFlexibleDimensions']\n }], growAfterOpen: [{\n type: Input,\n args: ['cdkConnectedOverlayGrowAfterOpen']\n }], push: [{\n type: Input,\n args: ['cdkConnectedOverlayPush']\n }], backdropClick: [{\n type: Output\n }], positionChange: [{\n type: Output\n }], attach: [{\n type: Output\n }], detach: [{\n type: Output\n }], overlayKeydown: [{\n type: Output\n }], overlayOutsideClick: [{\n type: Output\n }] } });\n/** @docs-private */\nfunction CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = {\n provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\nclass OverlayModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayModule, imports: [BidiModule, PortalModule, ScrollingModule, CdkConnectedOverlay, CdkOverlayOrigin], exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayModule, providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER], imports: [BidiModule, PortalModule, ScrollingModule, ScrollingModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: OverlayModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [BidiModule, PortalModule, ScrollingModule, CdkConnectedOverlay, CdkOverlayOrigin],\n exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule],\n providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER],\n }]\n }] });\n\n/**\n * Alternative to OverlayContainer that supports correct displaying of overlay elements in\n * Fullscreen mode\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n *\n * Should be provided in the root component.\n */\nclass FullscreenOverlayContainer extends OverlayContainer {\n constructor(_document, platform) {\n super(_document, platform);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._fullScreenEventName && this._fullScreenListener) {\n this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);\n }\n }\n _createContainer() {\n super._createContainer();\n this._adjustParentForFullscreenChange();\n this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange());\n }\n _adjustParentForFullscreenChange() {\n if (!this._containerElement) {\n return;\n }\n const fullscreenElement = this.getFullscreenElement();\n const parent = fullscreenElement || this._document.body;\n parent.appendChild(this._containerElement);\n }\n _addFullscreenChangeListener(fn) {\n const eventName = this._getEventName();\n if (eventName) {\n if (this._fullScreenListener) {\n this._document.removeEventListener(eventName, this._fullScreenListener);\n }\n this._document.addEventListener(eventName, fn);\n this._fullScreenListener = fn;\n }\n }\n _getEventName() {\n if (!this._fullScreenEventName) {\n const _document = this._document;\n if (_document.fullscreenEnabled) {\n this._fullScreenEventName = 'fullscreenchange';\n }\n else if (_document.webkitFullscreenEnabled) {\n this._fullScreenEventName = 'webkitfullscreenchange';\n }\n else if (_document.mozFullScreenEnabled) {\n this._fullScreenEventName = 'mozfullscreenchange';\n }\n else if (_document.msFullscreenEnabled) {\n this._fullScreenEventName = 'MSFullscreenChange';\n }\n }\n return this._fullScreenEventName;\n }\n /**\n * When the page is put into fullscreen mode, a specific element is specified.\n * Only that element and its children are visible when in fullscreen mode.\n */\n getFullscreenElement() {\n const _document = this._document;\n return (_document.fullscreenElement ||\n _document.webkitFullscreenElement ||\n _document.mozFullScreenElement ||\n _document.msFullscreenElement ||\n null);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: FullscreenOverlayContainer, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: FullscreenOverlayContainer, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: FullscreenOverlayContainer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1$1.Platform }]; } });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BlockScrollStrategy, CdkConnectedOverlay, CdkOverlayOrigin, CloseScrollStrategy, ConnectedOverlayPositionChange, ConnectionPositionPair, FlexibleConnectedPositionStrategy, FullscreenOverlayContainer, GlobalPositionStrategy, NoopScrollStrategy, Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayModule, OverlayOutsideClickDispatcher, OverlayPositionBuilder, OverlayRef, RepositionScrollStrategy, STANDARD_DROPDOWN_ADJACENT_POSITIONS, STANDARD_DROPDOWN_BELOW_POSITIONS, ScrollStrategyOptions, ScrollingVisibility, validateHorizontalPosition, validateVerticalPosition };\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeWhile(predicate, inclusive = false) {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n const result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n }));\n });\n}\n","import * as i0 from '@angular/core';\nimport { ElementRef, Injector, Directive, EventEmitter, Inject, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Throws an exception when attempting to attach a null portal to a host.\n * @docs-private\n */\nfunction throwNullPortalError() {\n throw Error('Must provide a portal to attach');\n}\n/**\n * Throws an exception when attempting to attach a portal to a host that is already attached.\n * @docs-private\n */\nfunction throwPortalAlreadyAttachedError() {\n throw Error('Host already has a portal attached');\n}\n/**\n * Throws an exception when attempting to attach a portal to an already-disposed host.\n * @docs-private\n */\nfunction throwPortalOutletAlreadyDisposedError() {\n throw Error('This PortalOutlet has already been disposed');\n}\n/**\n * Throws an exception when attempting to attach an unknown portal type.\n * @docs-private\n */\nfunction throwUnknownPortalTypeError() {\n throw Error('Attempting to attach an unknown Portal type. BasePortalOutlet accepts either ' +\n 'a ComponentPortal or a TemplatePortal.');\n}\n/**\n * Throws an exception when attempting to attach a portal to a null host.\n * @docs-private\n */\nfunction throwNullPortalOutletError() {\n throw Error('Attempting to attach a portal to a null PortalOutlet');\n}\n/**\n * Throws an exception when attempting to detach a portal that is not attached.\n * @docs-private\n */\nfunction throwNoPortalAttachedError() {\n throw Error('Attempting to detach a portal that is not attached to a host');\n}\n\n/**\n * A `Portal` is something that you want to render somewhere else.\n * It can be attach to / detached from a `PortalOutlet`.\n */\nclass Portal {\n /** Attach this portal to a host. */\n attach(host) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (host == null) {\n throwNullPortalOutletError();\n }\n if (host.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n }\n this._attachedHost = host;\n return host.attach(this);\n }\n /** Detach this portal from its host */\n detach() {\n let host = this._attachedHost;\n if (host != null) {\n this._attachedHost = null;\n host.detach();\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwNoPortalAttachedError();\n }\n }\n /** Whether this portal is attached to a host. */\n get isAttached() {\n return this._attachedHost != null;\n }\n /**\n * Sets the PortalOutlet reference without performing `attach()`. This is used directly by\n * the PortalOutlet when it is performing an `attach()` or `detach()`.\n */\n setAttachedHost(host) {\n this._attachedHost = host;\n }\n}\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nclass ComponentPortal extends Portal {\n constructor(component, viewContainerRef, injector, componentFactoryResolver, projectableNodes) {\n super();\n this.component = component;\n this.viewContainerRef = viewContainerRef;\n this.injector = injector;\n this.componentFactoryResolver = componentFactoryResolver;\n this.projectableNodes = projectableNodes;\n }\n}\n/**\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\n */\nclass TemplatePortal extends Portal {\n constructor(\n /** The embedded template that will be used to instantiate an embedded View in the host. */\n templateRef, \n /** Reference to the ViewContainer into which the template will be stamped out. */\n viewContainerRef, \n /** Contextual data to be passed in to the embedded view. */\n context, \n /** The injector to use for the embedded view. */\n injector) {\n super();\n this.templateRef = templateRef;\n this.viewContainerRef = viewContainerRef;\n this.context = context;\n this.injector = injector;\n }\n get origin() {\n return this.templateRef.elementRef;\n }\n /**\n * Attach the portal to the provided `PortalOutlet`.\n * When a context is provided it will override the `context` property of the `TemplatePortal`\n * instance.\n */\n attach(host, context = this.context) {\n this.context = context;\n return super.attach(host);\n }\n detach() {\n this.context = undefined;\n return super.detach();\n }\n}\n/**\n * A `DomPortal` is a portal whose DOM element will be taken from its current position\n * in the DOM and moved into a portal outlet, when it is attached. On detach, the content\n * will be restored to its original position.\n */\nclass DomPortal extends Portal {\n constructor(element) {\n super();\n this.element = element instanceof ElementRef ? element.nativeElement : element;\n }\n}\n/**\n * Partial implementation of PortalOutlet that handles attaching\n * ComponentPortal and TemplatePortal.\n */\nclass BasePortalOutlet {\n constructor() {\n /** Whether this host has already been permanently disposed. */\n this._isDisposed = false;\n // @breaking-change 10.0.0 `attachDomPortal` to become a required abstract method.\n this.attachDomPortal = null;\n }\n /** Whether this host has an attached portal. */\n hasAttached() {\n return !!this._attachedPortal;\n }\n /** Attaches a portal. */\n attach(portal) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!portal) {\n throwNullPortalError();\n }\n if (this.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n if (this._isDisposed) {\n throwPortalOutletAlreadyDisposedError();\n }\n }\n if (portal instanceof ComponentPortal) {\n this._attachedPortal = portal;\n return this.attachComponentPortal(portal);\n }\n else if (portal instanceof TemplatePortal) {\n this._attachedPortal = portal;\n return this.attachTemplatePortal(portal);\n // @breaking-change 10.0.0 remove null check for `this.attachDomPortal`.\n }\n else if (this.attachDomPortal && portal instanceof DomPortal) {\n this._attachedPortal = portal;\n return this.attachDomPortal(portal);\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwUnknownPortalTypeError();\n }\n }\n /** Detaches a previously attached portal. */\n detach() {\n if (this._attachedPortal) {\n this._attachedPortal.setAttachedHost(null);\n this._attachedPortal = null;\n }\n this._invokeDisposeFn();\n }\n /** Permanently dispose of this portal host. */\n dispose() {\n if (this.hasAttached()) {\n this.detach();\n }\n this._invokeDisposeFn();\n this._isDisposed = true;\n }\n /** @docs-private */\n setDisposeFn(fn) {\n this._disposeFn = fn;\n }\n _invokeDisposeFn() {\n if (this._disposeFn) {\n this._disposeFn();\n this._disposeFn = null;\n }\n }\n}\n/**\n * @deprecated Use `BasePortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass BasePortalHost extends BasePortalOutlet {\n}\n\n/**\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n */\nclass DomPortalOutlet extends BasePortalOutlet {\n /**\n * @param outletElement Element into which the content is projected.\n * @param _componentFactoryResolver Used to resolve the component factory.\n * Only required when attaching component portals.\n * @param _appRef Reference to the application. Only used in component portals when there\n * is no `ViewContainerRef` available.\n * @param _defaultInjector Injector to use as a fallback when the portal being attached doesn't\n * have one. Only used for component portals.\n * @param _document Reference to the document. Used when attaching a DOM portal. Will eventually\n * become a required parameter.\n */\n constructor(\n /** Element into which the content is projected. */\n outletElement, _componentFactoryResolver, _appRef, _defaultInjector, \n /**\n * @deprecated `_document` Parameter to be made required.\n * @breaking-change 10.0.0\n */\n _document) {\n super();\n this.outletElement = outletElement;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._appRef = _appRef;\n this._defaultInjector = _defaultInjector;\n /**\n * Attaches a DOM portal by transferring its content into the outlet.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n // @breaking-change 10.0.0 Remove check and error once the\n // `_document` constructor parameter is required.\n if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot attach DOM portal without _document constructor parameter');\n }\n const element = portal.element;\n if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('DOM portal content must be attached to a parent node.');\n }\n // Anchor used to save the element's previous position so\n // that we can restore it when the portal is detached.\n const anchorNode = this._document.createComment('dom-portal');\n element.parentNode.insertBefore(anchorNode, element);\n this.outletElement.appendChild(element);\n this._attachedPortal = portal;\n super.setDisposeFn(() => {\n // We can't use `replaceWith` here because IE doesn't support it.\n if (anchorNode.parentNode) {\n anchorNode.parentNode.replaceChild(element, anchorNode);\n }\n });\n };\n this._document = _document;\n }\n /**\n * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n * @param portal Portal to be attached\n * @returns Reference to the created component.\n */\n attachComponentPortal(portal) {\n const resolver = (portal.componentFactoryResolver || this._componentFactoryResolver);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !resolver) {\n throw Error('Cannot attach component portal to outlet without a ComponentFactoryResolver.');\n }\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n let componentRef;\n // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n // for the component (in terms of Angular's component tree, not rendering).\n // When the ViewContainerRef is missing, we use the factory to create the component directly\n // and then manually attach the view to the application.\n if (portal.viewContainerRef) {\n componentRef = portal.viewContainerRef.createComponent(componentFactory, portal.viewContainerRef.length, portal.injector || portal.viewContainerRef.injector, portal.projectableNodes || undefined);\n this.setDisposeFn(() => componentRef.destroy());\n }\n else {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._appRef) {\n throw Error('Cannot attach component portal to outlet without an ApplicationRef.');\n }\n componentRef = componentFactory.create(portal.injector || this._defaultInjector || Injector.NULL);\n this._appRef.attachView(componentRef.hostView);\n this.setDisposeFn(() => {\n // Verify that the ApplicationRef has registered views before trying to detach a host view.\n // This check also protects the `detachView` from being called on a destroyed ApplicationRef.\n if (this._appRef.viewCount > 0) {\n this._appRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n });\n }\n // At this point the component has been instantiated, so we move it to the location in the DOM\n // where we want it to be rendered.\n this.outletElement.appendChild(this._getComponentRootNode(componentRef));\n this._attachedPortal = portal;\n return componentRef;\n }\n /**\n * Attaches a template portal to the DOM as an embedded view.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n let viewContainer = portal.viewContainerRef;\n let viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context, {\n injector: portal.injector,\n });\n // The method `createEmbeddedView` will add the view as a child of the viewContainer.\n // But for the DomPortalOutlet the view can be added everywhere in the DOM\n // (e.g Overlay Container) To move the view to the specified host element. We just\n // re-append the existing root nodes.\n viewRef.rootNodes.forEach(rootNode => this.outletElement.appendChild(rootNode));\n // Note that we want to detect changes after the nodes have been moved so that\n // any directives inside the portal that are looking at the DOM inside a lifecycle\n // hook won't be invoked too early.\n viewRef.detectChanges();\n this.setDisposeFn(() => {\n let index = viewContainer.indexOf(viewRef);\n if (index !== -1) {\n viewContainer.remove(index);\n }\n });\n this._attachedPortal = portal;\n // TODO(jelbourn): Return locals from view.\n return viewRef;\n }\n /**\n * Clears out a portal from the DOM.\n */\n dispose() {\n super.dispose();\n this.outletElement.remove();\n }\n /** Gets the root HTMLElement for an instantiated component. */\n _getComponentRootNode(componentRef) {\n return componentRef.hostView.rootNodes[0];\n }\n}\n/**\n * @deprecated Use `DomPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass DomPortalHost extends DomPortalOutlet {\n}\n\n/**\n * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,\n * the directive instance itself can be attached to a host, enabling declarative use of portals.\n */\nclass CdkPortal extends TemplatePortal {\n constructor(templateRef, viewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkPortal, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkPortal, selector: \"[cdkPortal]\", exportAs: [\"cdkPortal\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkPortal, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkPortal]',\n exportAs: 'cdkPortal',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });\n/**\n * @deprecated Use `CdkPortal` instead.\n * @breaking-change 9.0.0\n */\nclass TemplatePortalDirective extends CdkPortal {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: TemplatePortalDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: TemplatePortalDirective, selector: \"[cdk-portal], [portal]\", providers: [\n {\n provide: CdkPortal,\n useExisting: TemplatePortalDirective,\n },\n ], exportAs: [\"cdkPortal\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: TemplatePortalDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdk-portal], [portal]',\n exportAs: 'cdkPortal',\n providers: [\n {\n provide: CdkPortal,\n useExisting: TemplatePortalDirective,\n },\n ],\n }]\n }] });\n/**\n * Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be\n * directly attached to it, enabling declarative use.\n *\n * Usage:\n * `<ng-template [cdkPortalOutlet]=\"greeting\"></ng-template>`\n */\nclass CdkPortalOutlet extends BasePortalOutlet {\n constructor(_componentFactoryResolver, _viewContainerRef, \n /**\n * @deprecated `_document` parameter to be made required.\n * @breaking-change 9.0.0\n */\n _document) {\n super();\n this._componentFactoryResolver = _componentFactoryResolver;\n this._viewContainerRef = _viewContainerRef;\n /** Whether the portal component is initialized. */\n this._isInitialized = false;\n /** Emits when a portal is attached to the outlet. */\n this.attached = new EventEmitter();\n /**\n * Attaches the given DomPortal to this PortalHost by moving all of the portal content into it.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n // @breaking-change 9.0.0 Remove check and error once the\n // `_document` constructor parameter is required.\n if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot attach DOM portal without _document constructor parameter');\n }\n const element = portal.element;\n if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('DOM portal content must be attached to a parent node.');\n }\n // Anchor used to save the element's previous position so\n // that we can restore it when the portal is detached.\n const anchorNode = this._document.createComment('dom-portal');\n portal.setAttachedHost(this);\n element.parentNode.insertBefore(anchorNode, element);\n this._getRootNode().appendChild(element);\n this._attachedPortal = portal;\n super.setDisposeFn(() => {\n if (anchorNode.parentNode) {\n anchorNode.parentNode.replaceChild(element, anchorNode);\n }\n });\n };\n this._document = _document;\n }\n /** Portal associated with the Portal outlet. */\n get portal() {\n return this._attachedPortal;\n }\n set portal(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.detach();\n }\n if (portal) {\n super.attach(portal);\n }\n this._attachedPortal = portal || null;\n }\n /** Component or view reference that is attached to the portal. */\n get attachedRef() {\n return this._attachedRef;\n }\n ngOnInit() {\n this._isInitialized = true;\n }\n ngOnDestroy() {\n super.dispose();\n this._attachedRef = this._attachedPortal = 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 attachComponentPortal(portal) {\n portal.setAttachedHost(this);\n // If the portal specifies an origin, use that as the logical location of the component\n // in the application tree. Otherwise use the location of this PortalOutlet.\n const viewContainerRef = portal.viewContainerRef != null ? portal.viewContainerRef : this._viewContainerRef;\n const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n const ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector, portal.projectableNodes || undefined);\n // If we're using a view container that's different from the injected one (e.g. when the portal\n // specifies its own) we need to move the component into the outlet, otherwise it'll be rendered\n // inside of the alternate view container.\n if (viewContainerRef !== this._viewContainerRef) {\n this._getRootNode().appendChild(ref.hostView.rootNodes[0]);\n }\n super.setDisposeFn(() => 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 PortalHost as an embedded View.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n portal.setAttachedHost(this);\n const viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context, {\n injector: portal.injector,\n });\n super.setDisposeFn(() => this._viewContainerRef.clear());\n this._attachedPortal = portal;\n this._attachedRef = viewRef;\n this.attached.emit(viewRef);\n return viewRef;\n }\n /** Gets the root node of the portal outlet. */\n _getRootNode() {\n const nativeElement = this._viewContainerRef.element.nativeElement;\n // The directive could be set on a template which will result in a comment\n // node being the root. Use the comment's parent node if that is the case.\n return (nativeElement.nodeType === nativeElement.ELEMENT_NODE\n ? nativeElement\n : nativeElement.parentNode);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkPortalOutlet, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: { portal: [\"cdkPortalOutlet\", \"portal\"] }, outputs: { attached: \"attached\" }, exportAs: [\"cdkPortalOutlet\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkPortalOutlet, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkPortalOutlet]',\n exportAs: 'cdkPortalOutlet',\n inputs: ['portal: cdkPortalOutlet'],\n }]\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, propDecorators: { attached: [{\n type: Output\n }] } });\n/**\n * @deprecated Use `CdkPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass PortalHostDirective extends CdkPortalOutlet {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: PortalHostDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: PortalHostDirective, selector: \"[cdkPortalHost], [portalHost]\", inputs: { portal: [\"cdkPortalHost\", \"portal\"] }, providers: [\n {\n provide: CdkPortalOutlet,\n useExisting: PortalHostDirective,\n },\n ], exportAs: [\"cdkPortalHost\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: PortalHostDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkPortalHost], [portalHost]',\n exportAs: 'cdkPortalHost',\n inputs: ['portal: cdkPortalHost'],\n providers: [\n {\n provide: CdkPortalOutlet,\n useExisting: PortalHostDirective,\n },\n ],\n }]\n }] });\nclass PortalModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: PortalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: PortalModule, declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective], exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: PortalModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: PortalModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],\n declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],\n }]\n }] });\n\n/**\n * Custom injector to be used when providing custom\n * injection tokens to components inside a portal.\n * @docs-private\n * @deprecated Use `Injector.create` instead.\n * @breaking-change 11.0.0\n */\nclass PortalInjector {\n constructor(_parentInjector, _customTokens) {\n this._parentInjector = _parentInjector;\n this._customTokens = _customTokens;\n }\n get(token, notFoundValue) {\n const value = this._customTokens.get(token);\n if (typeof value !== 'undefined') {\n return value;\n }\n return this._parentInjector.get(token, notFoundValue);\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BasePortalHost, BasePortalOutlet, CdkPortal, CdkPortalOutlet, ComponentPortal, DomPortal, DomPortalHost, DomPortalOutlet, Portal, PortalHostDirective, PortalInjector, PortalModule, TemplatePortal, TemplatePortalDirective };\n","import { Subscription } from '../Subscription';\nexport const animationFrameProvider = {\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel === null || cancel === void 0 ? void 0 : cancel(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n","import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\nexport const animationFrame = animationFrameScheduler;\n","import { AsyncScheduler } from './AsyncScheduler';\nexport class AnimationFrameScheduler extends AsyncScheduler {\n flush(action) {\n this._active = true;\n const flushId = this._scheduled;\n this._scheduled = undefined;\n const { actions } = this;\n let error;\n action = action || actions.shift();\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n this._active = false;\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { animationFrameProvider } from './animationFrameProvider';\nexport class AnimationFrameAction extends AsyncAction {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n }\n requestAsyncId(scheduler, id, delay = 0) {\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n recycleAsyncId(scheduler, id, delay = 0) {\n var _a;\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n const { actions } = scheduler;\n if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n animationFrameProvider.cancelAnimationFrame(id);\n scheduler._scheduled = undefined;\n }\n return undefined;\n }\n}\n","let nextHandle = 1;\nlet resolved;\nconst activeHandles = {};\nfunction findAndClearHandle(handle) {\n if (handle in activeHandles) {\n delete activeHandles[handle];\n return true;\n }\n return false;\n}\nexport const Immediate = {\n setImmediate(cb) {\n const handle = nextHandle++;\n activeHandles[handle] = true;\n if (!resolved) {\n resolved = Promise.resolve();\n }\n resolved.then(() => findAndClearHandle(handle) && cb());\n return handle;\n },\n clearImmediate(handle) {\n findAndClearHandle(handle);\n },\n};\nexport const TestTools = {\n pending() {\n return Object.keys(activeHandles).length;\n }\n};\n","import { Immediate } from '../util/Immediate';\nconst { setImmediate, clearImmediate } = Immediate;\nexport const immediateProvider = {\n setImmediate(...args) {\n const { delegate } = immediateProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate)(...args);\n },\n clearImmediate(handle) {\n const { delegate } = immediateProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle);\n },\n delegate: undefined,\n};\n","import { AsapAction } from './AsapAction';\nimport { AsapScheduler } from './AsapScheduler';\nexport const asapScheduler = new AsapScheduler(AsapAction);\nexport const asap = asapScheduler;\n","import { AsyncScheduler } from './AsyncScheduler';\nexport class AsapScheduler extends AsyncScheduler {\n flush(action) {\n this._active = true;\n const flushId = this._scheduled;\n this._scheduled = undefined;\n const { actions } = this;\n let error;\n action = action || actions.shift();\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n this._active = false;\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { immediateProvider } from './immediateProvider';\nexport class AsapAction extends AsyncAction {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n }\n requestAsyncId(scheduler, id, delay = 0) {\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler._scheduled || (scheduler._scheduled = immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined)));\n }\n recycleAsyncId(scheduler, id, delay = 0) {\n var _a;\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n const { actions } = scheduler;\n if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n immediateProvider.clearImmediate(id);\n if (scheduler._scheduled === id) {\n scheduler._scheduled = undefined;\n }\n }\n return undefined;\n }\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { audit } from './audit';\nimport { timer } from '../observable/timer';\nexport function auditTime(duration, scheduler = asyncScheduler) {\n return audit(() => timer(duration, scheduler));\n}\n","import { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function audit(durationSelector) {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue = null;\n let durationSubscriber = null;\n let isComplete = false;\n const endDuration = () => {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n const value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n isComplete && subscriber.complete();\n };\n const cleanupDuration = () => {\n durationSubscriber = null;\n isComplete && subscriber.complete();\n };\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n hasValue = true;\n lastValue = value;\n if (!durationSubscriber) {\n innerFrom(durationSelector(value)).subscribe((durationSubscriber = createOperatorSubscriber(subscriber, endDuration, cleanupDuration)));\n }\n }, () => {\n isComplete = true;\n (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n }));\n });\n}\n","import { coerceNumberProperty, coerceElement, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, Directive, Input, Injectable, Optional, Inject, inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Output, ViewChild, SkipSelf, ElementRef, NgModule } from '@angular/core';\nimport { Subject, of, Observable, fromEvent, animationFrameScheduler, asapScheduler, Subscription, isObservable } from 'rxjs';\nimport { distinctUntilChanged, auditTime, filter, takeUntil, startWith, pairwise, switchMap, shareReplay } from 'rxjs/operators';\nimport * as i1 from '@angular/cdk/platform';\nimport { getRtlScrollAxisType, supportsScrollBehavior, Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport * as i2 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport * as i2$1 from '@angular/cdk/collections';\nimport { isDataSource, ArrayDataSource, _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy } from '@angular/cdk/collections';\n\n/** The injection token used to specify the virtual scrolling strategy. */\nconst VIRTUAL_SCROLL_STRATEGY = new InjectionToken('VIRTUAL_SCROLL_STRATEGY');\n\n/** Virtual scrolling strategy for lists with items of known fixed size. */\nclass FixedSizeVirtualScrollStrategy {\n /**\n * @param itemSize The size of the items in the virtually scrolling list.\n * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\n * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\n */\n constructor(itemSize, minBufferPx, maxBufferPx) {\n this._scrolledIndexChange = new Subject();\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n this.scrolledIndexChange = this._scrolledIndexChange.pipe(distinctUntilChanged());\n /** The attached viewport. */\n this._viewport = null;\n this._itemSize = itemSize;\n this._minBufferPx = minBufferPx;\n this._maxBufferPx = maxBufferPx;\n }\n /**\n * Attaches this scroll strategy to a viewport.\n * @param viewport The viewport to attach this strategy to.\n */\n attach(viewport) {\n this._viewport = viewport;\n this._updateTotalContentSize();\n this._updateRenderedRange();\n }\n /** Detaches this scroll strategy from the currently attached viewport. */\n detach() {\n this._scrolledIndexChange.complete();\n this._viewport = null;\n }\n /**\n * Update the item size and buffer size.\n * @param itemSize The size of the items in the virtually scrolling list.\n * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\n * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\n */\n updateItemAndBufferSize(itemSize, minBufferPx, maxBufferPx) {\n if (maxBufferPx < minBufferPx && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx');\n }\n this._itemSize = itemSize;\n this._minBufferPx = minBufferPx;\n this._maxBufferPx = maxBufferPx;\n this._updateTotalContentSize();\n this._updateRenderedRange();\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onContentScrolled() {\n this._updateRenderedRange();\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onDataLengthChanged() {\n this._updateTotalContentSize();\n this._updateRenderedRange();\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onContentRendered() {\n /* no-op */\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onRenderedOffsetChanged() {\n /* no-op */\n }\n /**\n * Scroll to the offset for the given index.\n * @param index The index of the element to scroll to.\n * @param behavior The ScrollBehavior to use when scrolling.\n */\n scrollToIndex(index, behavior) {\n if (this._viewport) {\n this._viewport.scrollToOffset(index * this._itemSize, behavior);\n }\n }\n /** Update the viewport's total content size. */\n _updateTotalContentSize() {\n if (!this._viewport) {\n return;\n }\n this._viewport.setTotalContentSize(this._viewport.getDataLength() * this._itemSize);\n }\n /** Update the viewport's rendered range. */\n _updateRenderedRange() {\n if (!this._viewport) {\n return;\n }\n const renderedRange = this._viewport.getRenderedRange();\n const newRange = { start: renderedRange.start, end: renderedRange.end };\n const viewportSize = this._viewport.getViewportSize();\n const dataLength = this._viewport.getDataLength();\n let scrollOffset = this._viewport.measureScrollOffset();\n // Prevent NaN as result when dividing by zero.\n let firstVisibleIndex = this._itemSize > 0 ? scrollOffset / this._itemSize : 0;\n // If user scrolls to the bottom of the list and data changes to a smaller list\n if (newRange.end > dataLength) {\n // We have to recalculate the first visible index based on new data length and viewport size.\n const maxVisibleItems = Math.ceil(viewportSize / this._itemSize);\n const newVisibleIndex = Math.max(0, Math.min(firstVisibleIndex, dataLength - maxVisibleItems));\n // If first visible index changed we must update scroll offset to handle start/end buffers\n // Current range must also be adjusted to cover the new position (bottom of new list).\n if (firstVisibleIndex != newVisibleIndex) {\n firstVisibleIndex = newVisibleIndex;\n scrollOffset = newVisibleIndex * this._itemSize;\n newRange.start = Math.floor(firstVisibleIndex);\n }\n newRange.end = Math.max(0, Math.min(dataLength, newRange.start + maxVisibleItems));\n }\n const startBuffer = scrollOffset - newRange.start * this._itemSize;\n if (startBuffer < this._minBufferPx && newRange.start != 0) {\n const expandStart = Math.ceil((this._maxBufferPx - startBuffer) / this._itemSize);\n newRange.start = Math.max(0, newRange.start - expandStart);\n newRange.end = Math.min(dataLength, Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSize));\n }\n else {\n const endBuffer = newRange.end * this._itemSize - (scrollOffset + viewportSize);\n if (endBuffer < this._minBufferPx && newRange.end != dataLength) {\n const expandEnd = Math.ceil((this._maxBufferPx - endBuffer) / this._itemSize);\n if (expandEnd > 0) {\n newRange.end = Math.min(dataLength, newRange.end + expandEnd);\n newRange.start = Math.max(0, Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSize));\n }\n }\n }\n this._viewport.setRenderedRange(newRange);\n this._viewport.setRenderedContentOffset(this._itemSize * newRange.start);\n this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));\n }\n}\n/**\n * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created\n * `FixedSizeVirtualScrollStrategy` from the given directive.\n * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the\n * `FixedSizeVirtualScrollStrategy` from.\n */\nfunction _fixedSizeVirtualScrollStrategyFactory(fixedSizeDir) {\n return fixedSizeDir._scrollStrategy;\n}\n/** A virtual scroll strategy that supports fixed-size items. */\nclass CdkFixedSizeVirtualScroll {\n constructor() {\n this._itemSize = 20;\n this._minBufferPx = 100;\n this._maxBufferPx = 200;\n /** The scroll strategy used by this directive. */\n this._scrollStrategy = new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n /** The size of the items in the list (in pixels). */\n get itemSize() {\n return this._itemSize;\n }\n set itemSize(value) {\n this._itemSize = coerceNumberProperty(value);\n }\n /**\n * The minimum amount of buffer rendered beyond the viewport (in pixels).\n * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.\n */\n get minBufferPx() {\n return this._minBufferPx;\n }\n set minBufferPx(value) {\n this._minBufferPx = coerceNumberProperty(value);\n }\n /**\n * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.\n */\n get maxBufferPx() {\n return this._maxBufferPx;\n }\n set maxBufferPx(value) {\n this._maxBufferPx = coerceNumberProperty(value);\n }\n ngOnChanges() {\n this._scrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkFixedSizeVirtualScroll, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkFixedSizeVirtualScroll, isStandalone: true, selector: \"cdk-virtual-scroll-viewport[itemSize]\", inputs: { itemSize: \"itemSize\", minBufferPx: \"minBufferPx\", maxBufferPx: \"maxBufferPx\" }, providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: _fixedSizeVirtualScrollStrategyFactory,\n deps: [forwardRef(() => CdkFixedSizeVirtualScroll)],\n },\n ], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkFixedSizeVirtualScroll, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-virtual-scroll-viewport[itemSize]',\n standalone: true,\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: _fixedSizeVirtualScrollStrategyFactory,\n deps: [forwardRef(() => CdkFixedSizeVirtualScroll)],\n },\n ],\n }]\n }], propDecorators: { itemSize: [{\n type: Input\n }], minBufferPx: [{\n type: Input\n }], maxBufferPx: [{\n type: Input\n }] } });\n\n/** Time in ms to throttle the scrolling events by default. */\nconst DEFAULT_SCROLL_TIME = 20;\n/**\n * Service contained all registered Scrollable references and emits an event when any one of the\n * Scrollable references emit a scrolled event.\n */\nclass ScrollDispatcher {\n constructor(_ngZone, _platform, document) {\n this._ngZone = _ngZone;\n this._platform = _platform;\n /** Subject for notifying that a registered scrollable reference element has been scrolled. */\n this._scrolled = new Subject();\n /** Keeps track of the global `scroll` and `resize` subscriptions. */\n this._globalSubscription = null;\n /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */\n this._scrolledCount = 0;\n /**\n * Map of all the scrollable references that are registered with the service and their\n * scroll event subscriptions.\n */\n this.scrollContainers = new Map();\n this._document = document;\n }\n /**\n * Registers a scrollable instance with the service and listens for its scrolled events. When the\n * scrollable is scrolled, the service emits the event to its scrolled observable.\n * @param scrollable Scrollable instance to be registered.\n */\n register(scrollable) {\n if (!this.scrollContainers.has(scrollable)) {\n this.scrollContainers.set(scrollable, scrollable.elementScrolled().subscribe(() => this._scrolled.next(scrollable)));\n }\n }\n /**\n * De-registers a Scrollable reference and unsubscribes from its scroll event observable.\n * @param scrollable Scrollable instance to be deregistered.\n */\n deregister(scrollable) {\n const scrollableReference = this.scrollContainers.get(scrollable);\n if (scrollableReference) {\n scrollableReference.unsubscribe();\n this.scrollContainers.delete(scrollable);\n }\n }\n /**\n * Returns an observable that emits an event whenever any of the registered Scrollable\n * references (or window, document, or body) fire a scrolled event. Can provide a time in ms\n * to override the default \"throttle\" time.\n *\n * **Note:** in order to avoid hitting change detection for every scroll event,\n * all of the events emitted from this stream will be run outside the Angular zone.\n * If you need to update any data bindings as a result of a scroll event, you have\n * to run the callback using `NgZone.run`.\n */\n scrolled(auditTimeInMs = DEFAULT_SCROLL_TIME) {\n if (!this._platform.isBrowser) {\n return of();\n }\n return new Observable((observer) => {\n if (!this._globalSubscription) {\n this._addGlobalListener();\n }\n // In the case of a 0ms delay, use an observable without auditTime\n // since it does add a perceptible delay in processing overhead.\n const subscription = auditTimeInMs > 0\n ? this._scrolled.pipe(auditTime(auditTimeInMs)).subscribe(observer)\n : this._scrolled.subscribe(observer);\n this._scrolledCount++;\n return () => {\n subscription.unsubscribe();\n this._scrolledCount--;\n if (!this._scrolledCount) {\n this._removeGlobalListener();\n }\n };\n });\n }\n ngOnDestroy() {\n this._removeGlobalListener();\n this.scrollContainers.forEach((_, container) => this.deregister(container));\n this._scrolled.complete();\n }\n /**\n * Returns an observable that emits whenever any of the\n * scrollable ancestors of an element are scrolled.\n * @param elementOrElementRef Element whose ancestors to listen for.\n * @param auditTimeInMs Time to throttle the scroll events.\n */\n ancestorScrolled(elementOrElementRef, auditTimeInMs) {\n const ancestors = this.getAncestorScrollContainers(elementOrElementRef);\n return this.scrolled(auditTimeInMs).pipe(filter(target => {\n return !target || ancestors.indexOf(target) > -1;\n }));\n }\n /** Returns all registered Scrollables that contain the provided element. */\n getAncestorScrollContainers(elementOrElementRef) {\n const scrollingContainers = [];\n this.scrollContainers.forEach((_subscription, scrollable) => {\n if (this._scrollableContainsElement(scrollable, elementOrElementRef)) {\n scrollingContainers.push(scrollable);\n }\n });\n return scrollingContainers;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document.defaultView || window;\n }\n /** Returns true if the element is contained within the provided Scrollable. */\n _scrollableContainsElement(scrollable, elementOrElementRef) {\n let element = coerceElement(elementOrElementRef);\n let scrollableElement = scrollable.getElementRef().nativeElement;\n // Traverse through the element parents until we reach null, checking if any of the elements\n // are the scrollable's element.\n do {\n if (element == scrollableElement) {\n return true;\n }\n } while ((element = element.parentElement));\n return false;\n }\n /** Sets up the global scroll listeners. */\n _addGlobalListener() {\n this._globalSubscription = this._ngZone.runOutsideAngular(() => {\n const window = this._getWindow();\n return fromEvent(window.document, 'scroll').subscribe(() => this._scrolled.next());\n });\n }\n /** Cleans up the global scroll listener. */\n _removeGlobalListener() {\n if (this._globalSubscription) {\n this._globalSubscription.unsubscribe();\n this._globalSubscription = null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollDispatcher, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollDispatcher, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\n\n/**\n * Sends an event when the directive's element is scrolled. Registers itself with the\n * ScrollDispatcher service to include itself as part of its collection of scrolling events that it\n * can be listened to through the service.\n */\nclass CdkScrollable {\n constructor(elementRef, scrollDispatcher, ngZone, dir) {\n this.elementRef = elementRef;\n this.scrollDispatcher = scrollDispatcher;\n this.ngZone = ngZone;\n this.dir = dir;\n this._destroyed = new Subject();\n this._elementScrolled = new Observable((observer) => this.ngZone.runOutsideAngular(() => fromEvent(this.elementRef.nativeElement, 'scroll')\n .pipe(takeUntil(this._destroyed))\n .subscribe(observer)));\n }\n ngOnInit() {\n this.scrollDispatcher.register(this);\n }\n ngOnDestroy() {\n this.scrollDispatcher.deregister(this);\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Returns observable that emits when a scroll event is fired on the host element. */\n elementScrolled() {\n return this._elementScrolled;\n }\n /** Gets the ElementRef for the viewport. */\n getElementRef() {\n return this.elementRef;\n }\n /**\n * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo\n * method, since browsers are not consistent about what scrollLeft means in RTL. For this method\n * left and right always refer to the left and right side of the scrolling container irrespective\n * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\n * in an RTL context.\n * @param options specified the offsets to scroll to.\n */\n scrollTo(options) {\n const el = this.elementRef.nativeElement;\n const isRtl = this.dir && this.dir.value == 'rtl';\n // Rewrite start & end offsets as right or left offsets.\n if (options.left == null) {\n options.left = isRtl ? options.end : options.start;\n }\n if (options.right == null) {\n options.right = isRtl ? options.start : options.end;\n }\n // Rewrite the bottom offset as a top offset.\n if (options.bottom != null) {\n options.top =\n el.scrollHeight - el.clientHeight - options.bottom;\n }\n // Rewrite the right offset as a left offset.\n if (isRtl && getRtlScrollAxisType() != 0 /* RtlScrollAxisType.NORMAL */) {\n if (options.left != null) {\n options.right =\n el.scrollWidth - el.clientWidth - options.left;\n }\n if (getRtlScrollAxisType() == 2 /* RtlScrollAxisType.INVERTED */) {\n options.left = options.right;\n }\n else if (getRtlScrollAxisType() == 1 /* RtlScrollAxisType.NEGATED */) {\n options.left = options.right ? -options.right : options.right;\n }\n }\n else {\n if (options.right != null) {\n options.left =\n el.scrollWidth - el.clientWidth - options.right;\n }\n }\n this._applyScrollToOptions(options);\n }\n _applyScrollToOptions(options) {\n const el = this.elementRef.nativeElement;\n if (supportsScrollBehavior()) {\n el.scrollTo(options);\n }\n else {\n if (options.top != null) {\n el.scrollTop = options.top;\n }\n if (options.left != null) {\n el.scrollLeft = options.left;\n }\n }\n }\n /**\n * Measures the scroll offset relative to the specified edge of the viewport. This method can be\n * used instead of directly checking scrollLeft or scrollTop, since browsers are not consistent\n * about what scrollLeft means in RTL. The values returned by this method are normalized such that\n * left and right always refer to the left and right side of the scrolling container irrespective\n * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\n * in an RTL context.\n * @param from The edge to measure from.\n */\n measureScrollOffset(from) {\n const LEFT = 'left';\n const RIGHT = 'right';\n const el = this.elementRef.nativeElement;\n if (from == 'top') {\n return el.scrollTop;\n }\n if (from == 'bottom') {\n return el.scrollHeight - el.clientHeight - el.scrollTop;\n }\n // Rewrite start & end as left or right offsets.\n const isRtl = this.dir && this.dir.value == 'rtl';\n if (from == 'start') {\n from = isRtl ? RIGHT : LEFT;\n }\n else if (from == 'end') {\n from = isRtl ? LEFT : RIGHT;\n }\n if (isRtl && getRtlScrollAxisType() == 2 /* RtlScrollAxisType.INVERTED */) {\n // For INVERTED, scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and\n // 0 when scrolled all the way right.\n if (from == LEFT) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n }\n else {\n return el.scrollLeft;\n }\n }\n else if (isRtl && getRtlScrollAxisType() == 1 /* RtlScrollAxisType.NEGATED */) {\n // For NEGATED, scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and\n // 0 when scrolled all the way right.\n if (from == LEFT) {\n return el.scrollLeft + el.scrollWidth - el.clientWidth;\n }\n else {\n return -el.scrollLeft;\n }\n }\n else {\n // For NORMAL, as well as non-RTL contexts, scrollLeft is 0 when scrolled all the way left and\n // (scrollWidth - clientWidth) when scrolled all the way right.\n if (from == LEFT) {\n return el.scrollLeft;\n }\n else {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkScrollable, deps: [{ token: i0.ElementRef }, { token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkScrollable, isStandalone: true, selector: \"[cdk-scrollable], [cdkScrollable]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkScrollable, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdk-scrollable], [cdkScrollable]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ScrollDispatcher }, { type: i0.NgZone }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }]; } });\n\n/** Time in ms to throttle the resize events by default. */\nconst DEFAULT_RESIZE_TIME = 20;\n/**\n * Simple utility for getting the bounds of the browser viewport.\n * @docs-private\n */\nclass ViewportRuler {\n constructor(_platform, ngZone, document) {\n this._platform = _platform;\n /** Stream of viewport change events. */\n this._change = new Subject();\n /** Event listener that will be used to handle the viewport change events. */\n this._changeListener = (event) => {\n this._change.next(event);\n };\n this._document = document;\n ngZone.runOutsideAngular(() => {\n if (_platform.isBrowser) {\n const window = this._getWindow();\n // Note that bind the events ourselves, rather than going through something like RxJS's\n // `fromEvent` so that we can ensure that they're bound outside of the NgZone.\n window.addEventListener('resize', this._changeListener);\n window.addEventListener('orientationchange', this._changeListener);\n }\n // Clear the cached position so that the viewport is re-measured next time it is required.\n // We don't need to keep track of the subscription, because it is completed on destroy.\n this.change().subscribe(() => (this._viewportSize = null));\n });\n }\n ngOnDestroy() {\n if (this._platform.isBrowser) {\n const window = this._getWindow();\n window.removeEventListener('resize', this._changeListener);\n window.removeEventListener('orientationchange', this._changeListener);\n }\n this._change.complete();\n }\n /** Returns the viewport's width and height. */\n getViewportSize() {\n if (!this._viewportSize) {\n this._updateViewportSize();\n }\n const output = { width: this._viewportSize.width, height: this._viewportSize.height };\n // If we're not on a browser, don't cache the size since it'll be mocked out anyway.\n if (!this._platform.isBrowser) {\n this._viewportSize = null;\n }\n return output;\n }\n /** Gets a ClientRect for the viewport's bounds. */\n getViewportRect() {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = this.getViewportScrollPosition();\n const { width, height } = this.getViewportSize();\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width,\n };\n }\n /** Gets the (top, left) scroll position of the viewport. */\n getViewportScrollPosition() {\n // While we can get a reference to the fake document\n // during SSR, it doesn't have getBoundingClientRect.\n if (!this._platform.isBrowser) {\n return { top: 0, left: 0 };\n }\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const document = this._document;\n const window = this._getWindow();\n const documentElement = document.documentElement;\n const documentRect = documentElement.getBoundingClientRect();\n const top = -documentRect.top ||\n document.body.scrollTop ||\n window.scrollY ||\n documentElement.scrollTop ||\n 0;\n const left = -documentRect.left ||\n document.body.scrollLeft ||\n window.scrollX ||\n documentElement.scrollLeft ||\n 0;\n return { top, left };\n }\n /**\n * Returns a stream that emits whenever the size of the viewport changes.\n * This stream emits outside of the Angular zone.\n * @param throttleTime Time in milliseconds to throttle the stream.\n */\n change(throttleTime = DEFAULT_RESIZE_TIME) {\n return throttleTime > 0 ? this._change.pipe(auditTime(throttleTime)) : this._change;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document.defaultView || window;\n }\n /** Updates the cached viewport size. */\n _updateViewportSize() {\n const window = this._getWindow();\n this._viewportSize = this._platform.isBrowser\n ? { width: window.innerWidth, height: window.innerHeight }\n : { width: 0, height: 0 };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ViewportRuler, deps: [{ token: i1.Platform }, { token: i0.NgZone }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ViewportRuler, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ViewportRuler, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\n\nconst VIRTUAL_SCROLLABLE = new InjectionToken('VIRTUAL_SCROLLABLE');\n/**\n * Extending the {@link CdkScrollable} to be used as scrolling container for virtual scrolling.\n */\nclass CdkVirtualScrollable extends CdkScrollable {\n constructor(elementRef, scrollDispatcher, ngZone, dir) {\n super(elementRef, scrollDispatcher, ngZone, dir);\n }\n /**\n * Measure the viewport size for the provided orientation.\n *\n * @param orientation The orientation to measure the size from.\n */\n measureViewportSize(orientation) {\n const viewportEl = this.elementRef.nativeElement;\n return orientation === 'horizontal' ? viewportEl.clientWidth : viewportEl.clientHeight;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollable, deps: [{ token: i0.ElementRef }, { token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkVirtualScrollable, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollable, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ScrollDispatcher }, { type: i0.NgZone }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }]; } });\n\n/** Checks if the given ranges are equal. */\nfunction rangesEqual(r1, r2) {\n return r1.start == r2.start && r1.end == r2.end;\n}\n/**\n * Scheduler to be used for scroll events. Needs to fall back to\n * something that doesn't rely on requestAnimationFrame on environments\n * that don't support it (e.g. server-side rendering).\n */\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n/** A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`. */\nclass CdkVirtualScrollViewport extends CdkVirtualScrollable {\n /** The direction the viewport scrolls. */\n get orientation() {\n return this._orientation;\n }\n set orientation(orientation) {\n if (this._orientation !== orientation) {\n this._orientation = orientation;\n this._calculateSpacerSize();\n }\n }\n /**\n * Whether rendered items should persist in the DOM after scrolling out of view. By default, items\n * will be removed.\n */\n get appendOnly() {\n return this._appendOnly;\n }\n set appendOnly(value) {\n this._appendOnly = coerceBooleanProperty(value);\n }\n constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler, scrollable) {\n super(elementRef, scrollDispatcher, ngZone, dir);\n this.elementRef = elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._scrollStrategy = _scrollStrategy;\n this.scrollable = scrollable;\n this._platform = inject(Platform);\n /** Emits when the viewport is detached from a CdkVirtualForOf. */\n this._detachedSubject = new Subject();\n /** Emits when the rendered range changes. */\n this._renderedRangeSubject = new Subject();\n this._orientation = 'vertical';\n this._appendOnly = false;\n // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll\n // strategy lazily (i.e. only if the user is actually listening to the events). We do this because\n // depending on how the strategy calculates the scrolled index, it may come at a cost to\n // performance.\n /** Emits when the index of the first element visible in the viewport changes. */\n this.scrolledIndexChange = new Observable((observer) => this._scrollStrategy.scrolledIndexChange.subscribe(index => Promise.resolve().then(() => this.ngZone.run(() => observer.next(index)))));\n /** A stream that emits whenever the rendered range changes. */\n this.renderedRangeStream = this._renderedRangeSubject;\n /**\n * The total size of all content (in pixels), including content that is not currently rendered.\n */\n this._totalContentSize = 0;\n /** A string representing the `style.width` property value to be used for the spacer element. */\n this._totalContentWidth = '';\n /** A string representing the `style.height` property value to be used for the spacer element. */\n this._totalContentHeight = '';\n /** The currently rendered range of indices. */\n this._renderedRange = { start: 0, end: 0 };\n /** The length of the data bound to this viewport (in number of items). */\n this._dataLength = 0;\n /** The size of the viewport (in pixels). */\n this._viewportSize = 0;\n /** The last rendered content offset that was set. */\n this._renderedContentOffset = 0;\n /**\n * Whether the last rendered content offset was to the end of the content (and therefore needs to\n * be rewritten as an offset to the start of the content).\n */\n this._renderedContentOffsetNeedsRewrite = false;\n /** Whether there is a pending change detection cycle. */\n this._isChangeDetectionPending = false;\n /** A list of functions to run after the next change detection cycle. */\n this._runAfterChangeDetection = [];\n /** Subscription to changes in the viewport size. */\n this._viewportChanges = Subscription.EMPTY;\n if (!_scrollStrategy && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Error: cdk-virtual-scroll-viewport requires the \"itemSize\" property to be set.');\n }\n this._viewportChanges = viewportRuler.change().subscribe(() => {\n this.checkViewportSize();\n });\n if (!this.scrollable) {\n // No scrollable is provided, so the virtual-scroll-viewport needs to become a scrollable\n this.elementRef.nativeElement.classList.add('cdk-virtual-scrollable');\n this.scrollable = this;\n }\n }\n ngOnInit() {\n // Scrolling depends on the element dimensions which we can't get during SSR.\n if (!this._platform.isBrowser) {\n return;\n }\n if (this.scrollable === this) {\n super.ngOnInit();\n }\n // It's still too early to measure the viewport at this point. Deferring with a promise allows\n // the Viewport to be rendered with the correct size before we measure. We run this outside the\n // zone to avoid causing more change detection cycles. We handle the change detection loop\n // ourselves instead.\n this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {\n this._measureViewportSize();\n this._scrollStrategy.attach(this);\n this.scrollable\n .elementScrolled()\n .pipe(\n // Start off with a fake scroll event so we properly detect our initial position.\n startWith(null), \n // Collect multiple events into one until the next animation frame. This way if\n // there are multiple scroll events in the same frame we only need to recheck\n // our layout once.\n auditTime(0, SCROLL_SCHEDULER), \n // Usually `elementScrolled` is completed when the scrollable is destroyed, but\n // that may not be the case if a `CdkVirtualScrollableElement` is used so we have\n // to unsubscribe here just in case.\n takeUntil(this._destroyed))\n .subscribe(() => this._scrollStrategy.onContentScrolled());\n this._markChangeDetectionNeeded();\n }));\n }\n ngOnDestroy() {\n this.detach();\n this._scrollStrategy.detach();\n // Complete all subjects\n this._renderedRangeSubject.complete();\n this._detachedSubject.complete();\n this._viewportChanges.unsubscribe();\n super.ngOnDestroy();\n }\n /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */\n attach(forOf) {\n if (this._forOf && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('CdkVirtualScrollViewport is already attached.');\n }\n // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length\n // changes. Run outside the zone to avoid triggering change detection, since we're managing the\n // change detection loop ourselves.\n this.ngZone.runOutsideAngular(() => {\n this._forOf = forOf;\n this._forOf.dataStream.pipe(takeUntil(this._detachedSubject)).subscribe(data => {\n const newLength = data.length;\n if (newLength !== this._dataLength) {\n this._dataLength = newLength;\n this._scrollStrategy.onDataLengthChanged();\n }\n this._doChangeDetection();\n });\n });\n }\n /** Detaches the current `CdkVirtualForOf`. */\n detach() {\n this._forOf = null;\n this._detachedSubject.next();\n }\n /** Gets the length of the data bound to this viewport (in number of items). */\n getDataLength() {\n return this._dataLength;\n }\n /** Gets the size of the viewport (in pixels). */\n getViewportSize() {\n return this._viewportSize;\n }\n // TODO(mmalerba): This is technically out of sync with what's really rendered until a render\n // cycle happens. I'm being careful to only call it after the render cycle is complete and before\n // setting it to something else, but its error prone and should probably be split into\n // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.\n /** Get the current rendered range of items. */\n getRenderedRange() {\n return this._renderedRange;\n }\n measureBoundingClientRectWithScrollOffset(from) {\n return this.getElementRef().nativeElement.getBoundingClientRect()[from];\n }\n /**\n * Sets the total size of all content (in pixels), including content that is not currently\n * rendered.\n */\n setTotalContentSize(size) {\n if (this._totalContentSize !== size) {\n this._totalContentSize = size;\n this._calculateSpacerSize();\n this._markChangeDetectionNeeded();\n }\n }\n /** Sets the currently rendered range of indices. */\n setRenderedRange(range) {\n if (!rangesEqual(this._renderedRange, range)) {\n if (this.appendOnly) {\n range = { start: 0, end: Math.max(this._renderedRange.end, range.end) };\n }\n this._renderedRangeSubject.next((this._renderedRange = range));\n this._markChangeDetectionNeeded(() => this._scrollStrategy.onContentRendered());\n }\n }\n /**\n * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).\n */\n getOffsetToRenderedContentStart() {\n return this._renderedContentOffsetNeedsRewrite ? null : this._renderedContentOffset;\n }\n /**\n * Sets the offset from the start of the viewport to either the start or end of the rendered data\n * (in pixels).\n */\n setRenderedContentOffset(offset, to = 'to-start') {\n // In appendOnly, we always start from the top\n offset = this.appendOnly && to === 'to-start' ? 0 : offset;\n // For a horizontal viewport in a right-to-left language we need to translate along the x-axis\n // in the negative direction.\n const isRtl = this.dir && this.dir.value == 'rtl';\n const isHorizontal = this.orientation == 'horizontal';\n const axis = isHorizontal ? 'X' : 'Y';\n const axisDirection = isHorizontal && isRtl ? -1 : 1;\n let transform = `translate${axis}(${Number(axisDirection * offset)}px)`;\n this._renderedContentOffset = offset;\n if (to === 'to-end') {\n transform += ` translate${axis}(-100%)`;\n // The viewport should rewrite this as a `to-start` offset on the next render cycle. Otherwise\n // elements will appear to expand in the wrong direction (e.g. `mat-expansion-panel` would\n // expand upward).\n this._renderedContentOffsetNeedsRewrite = true;\n }\n if (this._renderedContentTransform != transform) {\n // We know this value is safe because we parse `offset` with `Number()` before passing it\n // into the string.\n this._renderedContentTransform = transform;\n this._markChangeDetectionNeeded(() => {\n if (this._renderedContentOffsetNeedsRewrite) {\n this._renderedContentOffset -= this.measureRenderedContentSize();\n this._renderedContentOffsetNeedsRewrite = false;\n this.setRenderedContentOffset(this._renderedContentOffset);\n }\n else {\n this._scrollStrategy.onRenderedOffsetChanged();\n }\n });\n }\n }\n /**\n * Scrolls to the given offset from the start of the viewport. Please note that this is not always\n * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left\n * direction, this would be the equivalent of setting a fictional `scrollRight` property.\n * @param offset The offset to scroll to.\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\n */\n scrollToOffset(offset, behavior = 'auto') {\n const options = { behavior };\n if (this.orientation === 'horizontal') {\n options.start = offset;\n }\n else {\n options.top = offset;\n }\n this.scrollable.scrollTo(options);\n }\n /**\n * Scrolls to the offset for the given index.\n * @param index The index of the element to scroll to.\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\n */\n scrollToIndex(index, behavior = 'auto') {\n this._scrollStrategy.scrollToIndex(index, behavior);\n }\n /**\n * Gets the current scroll offset from the start of the scrollable (in pixels).\n * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'\n * in horizontal mode.\n */\n measureScrollOffset(from) {\n // This is to break the call cycle\n let measureScrollOffset;\n if (this.scrollable == this) {\n measureScrollOffset = (_from) => super.measureScrollOffset(_from);\n }\n else {\n measureScrollOffset = (_from) => this.scrollable.measureScrollOffset(_from);\n }\n return Math.max(0, measureScrollOffset(from ?? (this.orientation === 'horizontal' ? 'start' : 'top')) -\n this.measureViewportOffset());\n }\n /**\n * Measures the offset of the viewport from the scrolling container\n * @param from The edge to measure from.\n */\n measureViewportOffset(from) {\n let fromRect;\n const LEFT = 'left';\n const RIGHT = 'right';\n const isRtl = this.dir?.value == 'rtl';\n if (from == 'start') {\n fromRect = isRtl ? RIGHT : LEFT;\n }\n else if (from == 'end') {\n fromRect = isRtl ? LEFT : RIGHT;\n }\n else if (from) {\n fromRect = from;\n }\n else {\n fromRect = this.orientation === 'horizontal' ? 'left' : 'top';\n }\n const scrollerClientRect = this.scrollable.measureBoundingClientRectWithScrollOffset(fromRect);\n const viewportClientRect = this.elementRef.nativeElement.getBoundingClientRect()[fromRect];\n return viewportClientRect - scrollerClientRect;\n }\n /** Measure the combined size of all of the rendered items. */\n measureRenderedContentSize() {\n const contentEl = this._contentWrapper.nativeElement;\n return this.orientation === 'horizontal' ? contentEl.offsetWidth : contentEl.offsetHeight;\n }\n /**\n * Measure the total combined size of the given range. Throws if the range includes items that are\n * not rendered.\n */\n measureRangeSize(range) {\n if (!this._forOf) {\n return 0;\n }\n return this._forOf.measureRangeSize(range, this.orientation);\n }\n /** Update the viewport dimensions and re-render. */\n checkViewportSize() {\n // TODO: Cleanup later when add logic for handling content resize\n this._measureViewportSize();\n this._scrollStrategy.onDataLengthChanged();\n }\n /** Measure the viewport size. */\n _measureViewportSize() {\n this._viewportSize = this.scrollable.measureViewportSize(this.orientation);\n }\n /** Queue up change detection to run. */\n _markChangeDetectionNeeded(runAfter) {\n if (runAfter) {\n this._runAfterChangeDetection.push(runAfter);\n }\n // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of\n // properties sequentially we only have to run `_doChangeDetection` once at the end.\n if (!this._isChangeDetectionPending) {\n this._isChangeDetectionPending = true;\n this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {\n this._doChangeDetection();\n }));\n }\n }\n /** Run change detection. */\n _doChangeDetection() {\n this._isChangeDetectionPending = false;\n // Apply the content transform. The transform can't be set via an Angular binding because\n // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of\n // string literals, a variable that can only be 'X' or 'Y', and user input that is run through\n // the `Number` function first to coerce it to a numeric value.\n this._contentWrapper.nativeElement.style.transform = this._renderedContentTransform;\n // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection\n // from the root, since the repeated items are content projected in. Calling `detectChanges`\n // instead does not properly check the projected content.\n this.ngZone.run(() => this._changeDetectorRef.markForCheck());\n const runAfterChangeDetection = this._runAfterChangeDetection;\n this._runAfterChangeDetection = [];\n for (const fn of runAfterChangeDetection) {\n fn();\n }\n }\n /** Calculates the `style.width` and `style.height` for the spacer element. */\n _calculateSpacerSize() {\n this._totalContentHeight =\n this.orientation === 'horizontal' ? '' : `${this._totalContentSize}px`;\n this._totalContentWidth =\n this.orientation === 'horizontal' ? `${this._totalContentSize}px` : '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollViewport, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: VIRTUAL_SCROLL_STRATEGY, optional: true }, { token: i2.Directionality, optional: true }, { token: ScrollDispatcher }, { token: ViewportRuler }, { token: VIRTUAL_SCROLLABLE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkVirtualScrollViewport, isStandalone: true, selector: \"cdk-virtual-scroll-viewport\", inputs: { orientation: \"orientation\", appendOnly: \"appendOnly\" }, outputs: { scrolledIndexChange: \"scrolledIndexChange\" }, host: { properties: { \"class.cdk-virtual-scroll-orientation-horizontal\": \"orientation === \\\"horizontal\\\"\", \"class.cdk-virtual-scroll-orientation-vertical\": \"orientation !== \\\"horizontal\\\"\" }, classAttribute: \"cdk-virtual-scroll-viewport\" }, providers: [\n {\n provide: CdkScrollable,\n useFactory: (virtualScrollable, viewport) => virtualScrollable || viewport,\n deps: [[new Optional(), new Inject(VIRTUAL_SCROLLABLE)], CdkVirtualScrollViewport],\n },\n ], viewQueries: [{ propertyName: \"_contentWrapper\", first: true, predicate: [\"contentWrapper\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<!--\\n Wrap the rendered content in an element that will be used to offset it based on the scroll\\n position.\\n-->\\n<div #contentWrapper class=\\\"cdk-virtual-scroll-content-wrapper\\\">\\n <ng-content></ng-content>\\n</div>\\n<!--\\n Spacer used to force the scrolling container to the correct size for the *total* number of items\\n so that the scrollbar captures the size of the entire data set.\\n-->\\n<div class=\\\"cdk-virtual-scroll-spacer\\\"\\n [style.width]=\\\"_totalContentWidth\\\" [style.height]=\\\"_totalContentHeight\\\"></div>\\n\", styles: [\"cdk-virtual-scroll-viewport{display:block;position:relative;transform:translateZ(0)}.cdk-virtual-scrollable{overflow:auto;will-change:scroll-position;contain:strict;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{height:1px;transform-origin:0 0;flex:0 0 auto}[dir=rtl] .cdk-virtual-scroll-spacer{transform-origin:100% 0}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollViewport, decorators: [{\n type: Component,\n args: [{ selector: 'cdk-virtual-scroll-viewport', host: {\n 'class': 'cdk-virtual-scroll-viewport',\n '[class.cdk-virtual-scroll-orientation-horizontal]': 'orientation === \"horizontal\"',\n '[class.cdk-virtual-scroll-orientation-vertical]': 'orientation !== \"horizontal\"',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, providers: [\n {\n provide: CdkScrollable,\n useFactory: (virtualScrollable, viewport) => virtualScrollable || viewport,\n deps: [[new Optional(), new Inject(VIRTUAL_SCROLLABLE)], CdkVirtualScrollViewport],\n },\n ], template: \"<!--\\n Wrap the rendered content in an element that will be used to offset it based on the scroll\\n position.\\n-->\\n<div #contentWrapper class=\\\"cdk-virtual-scroll-content-wrapper\\\">\\n <ng-content></ng-content>\\n</div>\\n<!--\\n Spacer used to force the scrolling container to the correct size for the *total* number of items\\n so that the scrollbar captures the size of the entire data set.\\n-->\\n<div class=\\\"cdk-virtual-scroll-spacer\\\"\\n [style.width]=\\\"_totalContentWidth\\\" [style.height]=\\\"_totalContentHeight\\\"></div>\\n\", styles: [\"cdk-virtual-scroll-viewport{display:block;position:relative;transform:translateZ(0)}.cdk-virtual-scrollable{overflow:auto;will-change:scroll-position;contain:strict;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{height:1px;transform-origin:0 0;flex:0 0 auto}[dir=rtl] .cdk-virtual-scroll-spacer{transform-origin:100% 0}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [VIRTUAL_SCROLL_STRATEGY]\n }] }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }, { type: ScrollDispatcher }, { type: ViewportRuler }, { type: CdkVirtualScrollable, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [VIRTUAL_SCROLLABLE]\n }] }]; }, propDecorators: { orientation: [{\n type: Input\n }], appendOnly: [{\n type: Input\n }], scrolledIndexChange: [{\n type: Output\n }], _contentWrapper: [{\n type: ViewChild,\n args: ['contentWrapper', { static: true }]\n }] } });\n\n/** Helper to extract the offset of a DOM Node in a certain direction. */\nfunction getOffset(orientation, direction, node) {\n const el = node;\n if (!el.getBoundingClientRect) {\n return 0;\n }\n const rect = el.getBoundingClientRect();\n if (orientation === 'horizontal') {\n return direction === 'start' ? rect.left : rect.right;\n }\n return direction === 'start' ? rect.top : rect.bottom;\n}\n/**\n * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling\n * container.\n */\nclass CdkVirtualForOf {\n /** The DataSource to display. */\n get cdkVirtualForOf() {\n return this._cdkVirtualForOf;\n }\n set cdkVirtualForOf(value) {\n this._cdkVirtualForOf = value;\n if (isDataSource(value)) {\n this._dataSourceChanges.next(value);\n }\n else {\n // If value is an an NgIterable, convert it to an array.\n this._dataSourceChanges.next(new ArrayDataSource(isObservable(value) ? value : Array.from(value || [])));\n }\n }\n /**\n * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and\n * the item and produces a value to be used as the item's identity when tracking changes.\n */\n get cdkVirtualForTrackBy() {\n return this._cdkVirtualForTrackBy;\n }\n set cdkVirtualForTrackBy(fn) {\n this._needsUpdate = true;\n this._cdkVirtualForTrackBy = fn\n ? (index, item) => fn(index + (this._renderedRange ? this._renderedRange.start : 0), item)\n : undefined;\n }\n /** The template used to stamp out new elements. */\n set cdkVirtualForTemplate(value) {\n if (value) {\n this._needsUpdate = true;\n this._template = value;\n }\n }\n /**\n * The size of the cache used to store templates that are not being used for re-use later.\n * Setting the cache size to `0` will disable caching. Defaults to 20 templates.\n */\n get cdkVirtualForTemplateCacheSize() {\n return this._viewRepeater.viewCacheSize;\n }\n set cdkVirtualForTemplateCacheSize(size) {\n this._viewRepeater.viewCacheSize = coerceNumberProperty(size);\n }\n constructor(\n /** The view container to add items to. */\n _viewContainerRef, \n /** The template to use when stamping out new items. */\n _template, \n /** The set of available differs. */\n _differs, \n /** The strategy used to render items in the virtual scroll viewport. */\n _viewRepeater, \n /** The virtual scrolling viewport that these items are being rendered in. */\n _viewport, ngZone) {\n this._viewContainerRef = _viewContainerRef;\n this._template = _template;\n this._differs = _differs;\n this._viewRepeater = _viewRepeater;\n this._viewport = _viewport;\n /** Emits when the rendered view of the data changes. */\n this.viewChange = new Subject();\n /** Subject that emits when a new DataSource instance is given. */\n this._dataSourceChanges = new Subject();\n /** Emits whenever the data in the current DataSource changes. */\n this.dataStream = this._dataSourceChanges.pipe(\n // Start off with null `DataSource`.\n startWith(null), \n // Bundle up the previous and current data sources so we can work with both.\n pairwise(), \n // Use `_changeDataSource` to disconnect from the previous data source and connect to the\n // new one, passing back a stream of data changes which we run through `switchMap` to give\n // us a data stream that emits the latest data from whatever the current `DataSource` is.\n switchMap(([prev, cur]) => this._changeDataSource(prev, cur)), \n // Replay the last emitted data when someone subscribes.\n shareReplay(1));\n /** The differ used to calculate changes to the data. */\n this._differ = null;\n /** Whether the rendered data should be updated during the next ngDoCheck cycle. */\n this._needsUpdate = false;\n this._destroyed = new Subject();\n this.dataStream.subscribe(data => {\n this._data = data;\n this._onRenderedDataChange();\n });\n this._viewport.renderedRangeStream.pipe(takeUntil(this._destroyed)).subscribe(range => {\n this._renderedRange = range;\n if (this.viewChange.observers.length) {\n ngZone.run(() => this.viewChange.next(this._renderedRange));\n }\n this._onRenderedDataChange();\n });\n this._viewport.attach(this);\n }\n /**\n * Measures the combined size (width for horizontal orientation, height for vertical) of all items\n * in the specified range. Throws an error if the range includes items that are not currently\n * rendered.\n */\n measureRangeSize(range, orientation) {\n if (range.start >= range.end) {\n return 0;\n }\n if ((range.start < this._renderedRange.start || range.end > this._renderedRange.end) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Error: attempted to measure an item that isn't rendered.`);\n }\n // The index into the list of rendered views for the first item in the range.\n const renderedStartIndex = range.start - this._renderedRange.start;\n // The length of the range we're measuring.\n const rangeLen = range.end - range.start;\n // Loop over all the views, find the first and land node and compute the size by subtracting\n // the top of the first node from the bottom of the last one.\n let firstNode;\n let lastNode;\n // Find the first node by starting from the beginning and going forwards.\n for (let i = 0; i < rangeLen; i++) {\n const view = this._viewContainerRef.get(i + renderedStartIndex);\n if (view && view.rootNodes.length) {\n firstNode = lastNode = view.rootNodes[0];\n break;\n }\n }\n // Find the last node by starting from the end and going backwards.\n for (let i = rangeLen - 1; i > -1; i--) {\n const view = this._viewContainerRef.get(i + renderedStartIndex);\n if (view && view.rootNodes.length) {\n lastNode = view.rootNodes[view.rootNodes.length - 1];\n break;\n }\n }\n return firstNode && lastNode\n ? getOffset(orientation, 'end', lastNode) - getOffset(orientation, 'start', firstNode)\n : 0;\n }\n ngDoCheck() {\n if (this._differ && this._needsUpdate) {\n // TODO(mmalerba): We should differentiate needs update due to scrolling and a new portion of\n // this list being rendered (can use simpler algorithm) vs needs update due to data actually\n // changing (need to do this diff).\n const changes = this._differ.diff(this._renderedItems);\n if (!changes) {\n this._updateContext();\n }\n else {\n this._applyChanges(changes);\n }\n this._needsUpdate = false;\n }\n }\n ngOnDestroy() {\n this._viewport.detach();\n this._dataSourceChanges.next(undefined);\n this._dataSourceChanges.complete();\n this.viewChange.complete();\n this._destroyed.next();\n this._destroyed.complete();\n this._viewRepeater.detach();\n }\n /** React to scroll state changes in the viewport. */\n _onRenderedDataChange() {\n if (!this._renderedRange) {\n return;\n }\n this._renderedItems = this._data.slice(this._renderedRange.start, this._renderedRange.end);\n if (!this._differ) {\n // Use a wrapper function for the `trackBy` so any new values are\n // picked up automatically without having to recreate the differ.\n this._differ = this._differs.find(this._renderedItems).create((index, item) => {\n return this.cdkVirtualForTrackBy ? this.cdkVirtualForTrackBy(index, item) : item;\n });\n }\n this._needsUpdate = true;\n }\n /** Swap out one `DataSource` for another. */\n _changeDataSource(oldDs, newDs) {\n if (oldDs) {\n oldDs.disconnect(this);\n }\n this._needsUpdate = true;\n return newDs ? newDs.connect(this) : of();\n }\n /** Update the `CdkVirtualForOfContext` for all views. */\n _updateContext() {\n const count = this._data.length;\n let i = this._viewContainerRef.length;\n while (i--) {\n const view = this._viewContainerRef.get(i);\n view.context.index = this._renderedRange.start + i;\n view.context.count = count;\n this._updateComputedContextProperties(view.context);\n view.detectChanges();\n }\n }\n /** Apply changes to the DOM. */\n _applyChanges(changes) {\n this._viewRepeater.applyChanges(changes, this._viewContainerRef, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record, currentIndex), record => record.item);\n // Update $implicit for any items that had an identity change.\n changes.forEachIdentityChange((record) => {\n const view = this._viewContainerRef.get(record.currentIndex);\n view.context.$implicit = record.item;\n });\n // Update the context variables on all items.\n const count = this._data.length;\n let i = this._viewContainerRef.length;\n while (i--) {\n const view = this._viewContainerRef.get(i);\n view.context.index = this._renderedRange.start + i;\n view.context.count = count;\n this._updateComputedContextProperties(view.context);\n }\n }\n /** Update the computed properties on the `CdkVirtualForOfContext`. */\n _updateComputedContextProperties(context) {\n context.first = context.index === 0;\n context.last = context.index === context.count - 1;\n context.even = context.index % 2 === 0;\n context.odd = !context.even;\n }\n _getEmbeddedViewArgs(record, index) {\n // Note that it's important that we insert the item directly at the proper index,\n // rather than inserting it and the moving it in place, because if there's a directive\n // on the same node that injects the `ViewContainerRef`, Angular will insert another\n // comment node which can throw off the move when it's being repeated for all items.\n return {\n templateRef: this._template,\n context: {\n $implicit: record.item,\n // It's guaranteed that the iterable is not \"undefined\" or \"null\" because we only\n // generate views for elements if the \"cdkVirtualForOf\" iterable has elements.\n cdkVirtualForOf: this._cdkVirtualForOf,\n index: -1,\n count: -1,\n first: false,\n last: false,\n odd: false,\n even: false,\n },\n index,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualForOf, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: _VIEW_REPEATER_STRATEGY }, { token: CdkVirtualScrollViewport, skipSelf: true }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkVirtualForOf, isStandalone: true, selector: \"[cdkVirtualFor][cdkVirtualForOf]\", inputs: { cdkVirtualForOf: \"cdkVirtualForOf\", cdkVirtualForTrackBy: \"cdkVirtualForTrackBy\", cdkVirtualForTemplate: \"cdkVirtualForTemplate\", cdkVirtualForTemplateCacheSize: \"cdkVirtualForTemplateCacheSize\" }, providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualForOf, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkVirtualFor][cdkVirtualForOf]',\n providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: i2$1._RecycleViewRepeaterStrategy, decorators: [{\n type: Inject,\n args: [_VIEW_REPEATER_STRATEGY]\n }] }, { type: CdkVirtualScrollViewport, decorators: [{\n type: SkipSelf\n }] }, { type: i0.NgZone }]; }, propDecorators: { cdkVirtualForOf: [{\n type: Input\n }], cdkVirtualForTrackBy: [{\n type: Input\n }], cdkVirtualForTemplate: [{\n type: Input\n }], cdkVirtualForTemplateCacheSize: [{\n type: Input\n }] } });\n\n/**\n * Provides a virtual scrollable for the element it is attached to.\n */\nclass CdkVirtualScrollableElement extends CdkVirtualScrollable {\n constructor(elementRef, scrollDispatcher, ngZone, dir) {\n super(elementRef, scrollDispatcher, ngZone, dir);\n }\n measureBoundingClientRectWithScrollOffset(from) {\n return (this.getElementRef().nativeElement.getBoundingClientRect()[from] -\n this.measureScrollOffset(from));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollableElement, deps: [{ token: i0.ElementRef }, { token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkVirtualScrollableElement, isStandalone: true, selector: \"[cdkVirtualScrollingElement]\", host: { classAttribute: \"cdk-virtual-scrollable\" }, providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableElement }], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollableElement, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkVirtualScrollingElement]',\n providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableElement }],\n standalone: true,\n host: {\n 'class': 'cdk-virtual-scrollable',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ScrollDispatcher }, { type: i0.NgZone }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Provides as virtual scrollable for the global / window scrollbar.\n */\nclass CdkVirtualScrollableWindow extends CdkVirtualScrollable {\n constructor(scrollDispatcher, ngZone, dir) {\n super(new ElementRef(document.documentElement), scrollDispatcher, ngZone, dir);\n this._elementScrolled = new Observable((observer) => this.ngZone.runOutsideAngular(() => fromEvent(document, 'scroll').pipe(takeUntil(this._destroyed)).subscribe(observer)));\n }\n measureBoundingClientRectWithScrollOffset(from) {\n return this.getElementRef().nativeElement.getBoundingClientRect()[from];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollableWindow, deps: [{ token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkVirtualScrollableWindow, isStandalone: true, selector: \"cdk-virtual-scroll-viewport[scrollWindow]\", providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableWindow }], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkVirtualScrollableWindow, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-virtual-scroll-viewport[scrollWindow]',\n providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableWindow }],\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: ScrollDispatcher }, { type: i0.NgZone }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }]; } });\n\nclass CdkScrollableModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkScrollableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkScrollableModule, imports: [CdkScrollable], exports: [CdkScrollable] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkScrollableModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkScrollableModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [CdkScrollable],\n imports: [CdkScrollable],\n }]\n }] });\n/**\n * @docs-primary-export\n */\nclass ScrollingModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollingModule, imports: [BidiModule, CdkScrollableModule, CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollableWindow,\n CdkVirtualScrollableElement], exports: [BidiModule, CdkScrollableModule, CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkVirtualScrollableWindow,\n CdkVirtualScrollableElement] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollingModule, imports: [BidiModule,\n CdkScrollableModule, BidiModule, CdkScrollableModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: ScrollingModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n BidiModule,\n CdkScrollableModule,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollableWindow,\n CdkVirtualScrollableElement,\n ],\n exports: [\n BidiModule,\n CdkScrollableModule,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkVirtualScrollableWindow,\n CdkVirtualScrollableElement,\n ],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkFixedSizeVirtualScroll, CdkScrollable, CdkScrollableModule, CdkVirtualForOf, CdkVirtualScrollViewport, CdkVirtualScrollable, CdkVirtualScrollableElement, CdkVirtualScrollableWindow, DEFAULT_RESIZE_TIME, DEFAULT_SCROLL_TIME, FixedSizeVirtualScrollStrategy, ScrollDispatcher, ScrollingModule, VIRTUAL_SCROLLABLE, VIRTUAL_SCROLL_STRATEGY, ViewportRuler, _fixedSizeVirtualScrollStrategyFactory };\n","import * as i0 from '@angular/core';\nimport { inject, NgZone, Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\n\n/**\n * Handler that logs \"ResizeObserver loop limit exceeded\" errors.\n * These errors are not shown in the Chrome console, so we log them to ensure developers are aware.\n * @param e The error\n */\nconst loopLimitExceededErrorHandler = (e) => {\n if (e instanceof Error && e.message === 'ResizeObserver loop limit exceeded') {\n console.error(`${e.message}. This could indicate a performance issue with your app. See https://github.com/WICG/resize-observer/blob/master/explainer.md#error-handling`);\n }\n};\n/**\n * A shared ResizeObserver to be used for a particular box type (content-box, border-box, or\n * device-pixel-content-box)\n */\nclass SingleBoxSharedResizeObserver {\n constructor(\n /** The box type to observe for resizes. */\n _box) {\n this._box = _box;\n /** Stream that emits when the shared observer is destroyed. */\n this._destroyed = new Subject();\n /** Stream of all events from the ResizeObserver. */\n this._resizeSubject = new Subject();\n /** A map of elements to streams of their resize events. */\n this._elementObservables = new Map();\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(entries => this._resizeSubject.next(entries));\n }\n }\n /**\n * Gets a stream of resize events for the given element.\n * @param target The element to observe.\n * @return The stream of resize events for the element.\n */\n observe(target) {\n if (!this._elementObservables.has(target)) {\n this._elementObservables.set(target, new Observable(observer => {\n const subscription = this._resizeSubject.subscribe(observer);\n this._resizeObserver?.observe(target, { box: this._box });\n return () => {\n this._resizeObserver?.unobserve(target);\n subscription.unsubscribe();\n this._elementObservables.delete(target);\n };\n }).pipe(filter(entries => entries.some(entry => entry.target === target)), \n // Share a replay of the last event so that subsequent calls to observe the same element\n // receive initial sizing info like the first one. Also enable ref counting so the\n // element will be automatically unobserved when there are no more subscriptions.\n shareReplay({ bufferSize: 1, refCount: true }), takeUntil(this._destroyed)));\n }\n return this._elementObservables.get(target);\n }\n /** Destroys this instance. */\n destroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._resizeSubject.complete();\n this._elementObservables.clear();\n }\n}\n/**\n * Allows observing resize events on multiple elements using a shared set of ResizeObserver.\n * Sharing a ResizeObserver instance is recommended for better performance (see\n * https://github.com/WICG/resize-observer/issues/59).\n *\n * Rather than share a single `ResizeObserver`, this class creates one `ResizeObserver` per type\n * of observed box ('content-box', 'border-box', and 'device-pixel-content-box'). This avoids\n * later calls to `observe` with a different box type from influencing the events dispatched to\n * earlier calls.\n */\nclass SharedResizeObserver {\n constructor() {\n /** Map of box type to shared resize observer. */\n this._observers = new Map();\n /** The Angular zone. */\n this._ngZone = inject(NgZone);\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n this._ngZone.runOutsideAngular(() => {\n window.addEventListener('error', loopLimitExceededErrorHandler);\n });\n }\n }\n ngOnDestroy() {\n for (const [, observer] of this._observers) {\n observer.destroy();\n }\n this._observers.clear();\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n window.removeEventListener('error', loopLimitExceededErrorHandler);\n }\n }\n /**\n * Gets a stream of resize events for the given target element and box type.\n * @param target The element to observe for resizes.\n * @param options Options to pass to the `ResizeObserver`\n * @return The stream of resize events for the element.\n */\n observe(target, options) {\n const box = options?.box || 'content-box';\n if (!this._observers.has(box)) {\n this._observers.set(box, new SingleBoxSharedResizeObserver(box));\n }\n return this._observers.get(box).observe(target);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: SharedResizeObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: SharedResizeObserver, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: SharedResizeObserver, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: function () { return []; } });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { SharedResizeObserver };\n","import * as i0 from '@angular/core';\nimport { Directive, InjectionToken, Attribute, Input, inject, NgZone, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, Optional, Inject, ContentChild, ContentChildren, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/bidi';\nimport * as i2 from '@angular/cdk/platform';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subscription, Subject, merge } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i3 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** The floating label for a `mat-form-field`. */\nclass MatLabel {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatLabel, selector: \"mat-label\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatLabel, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-label',\n }]\n }] });\n\nlet nextUniqueId$2 = 0;\n/**\n * Injection token that can be used to reference instances of `MatError`. It serves as\n * alternative token to the actual `MatError` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_ERROR = new InjectionToken('MatError');\n/** Single error message to be shown underneath the form-field. */\nclass MatError {\n constructor(ariaLive, elementRef) {\n this.id = `mat-mdc-error-${nextUniqueId$2++}`;\n // If no aria-live value is set add 'polite' as a default. This is preferred over setting\n // role='alert' so that screen readers do not interrupt the current task to read this aloud.\n if (!ariaLive) {\n elementRef.nativeElement.setAttribute('aria-live', 'polite');\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatError, deps: [{ token: 'aria-live', attribute: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatError, selector: \"mat-error, [matError]\", inputs: { id: \"id\" }, host: { attributes: { \"aria-atomic\": \"true\" }, properties: { \"id\": \"id\" }, classAttribute: \"mat-mdc-form-field-error mat-mdc-form-field-bottom-align\" }, providers: [{ provide: MAT_ERROR, useExisting: MatError }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatError, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-error, [matError]',\n host: {\n 'class': 'mat-mdc-form-field-error mat-mdc-form-field-bottom-align',\n 'aria-atomic': 'true',\n '[id]': 'id',\n },\n providers: [{ provide: MAT_ERROR, useExisting: MatError }],\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['aria-live']\n }] }, { type: i0.ElementRef }]; }, propDecorators: { id: [{\n type: Input\n }] } });\n\nlet nextUniqueId$1 = 0;\n/** Hint text to be shown underneath the form field control. */\nclass MatHint {\n constructor() {\n /** Whether to align the hint label at the start or end of the line. */\n this.align = 'start';\n /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n this.id = `mat-mdc-hint-${nextUniqueId$1++}`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatHint, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatHint, selector: \"mat-hint\", inputs: { align: \"align\", id: \"id\" }, host: { properties: { \"class.mat-mdc-form-field-hint-end\": \"align === \\\"end\\\"\", \"id\": \"id\", \"attr.align\": \"null\" }, classAttribute: \"mat-mdc-form-field-hint mat-mdc-form-field-bottom-align\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatHint, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-hint',\n host: {\n 'class': 'mat-mdc-form-field-hint mat-mdc-form-field-bottom-align',\n '[class.mat-mdc-form-field-hint-end]': 'align === \"end\"',\n '[id]': 'id',\n // Remove align attribute to prevent it from interfering with layout.\n '[attr.align]': 'null',\n },\n }]\n }], propDecorators: { align: [{\n type: Input\n }], id: [{\n type: Input\n }] } });\n\n/**\n * Injection token that can be used to reference instances of `MatPrefix`. It serves as\n * alternative token to the actual `MatPrefix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_PREFIX = new InjectionToken('MatPrefix');\n/** Prefix to be placed in front of the form field. */\nclass MatPrefix {\n constructor() {\n this._isText = false;\n }\n set _isTextSelector(value) {\n this._isText = true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatPrefix, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatPrefix, selector: \"[matPrefix], [matIconPrefix], [matTextPrefix]\", inputs: { _isTextSelector: [\"matTextPrefix\", \"_isTextSelector\"] }, providers: [{ provide: MAT_PREFIX, useExisting: MatPrefix }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatPrefix, decorators: [{\n type: Directive,\n args: [{\n selector: '[matPrefix], [matIconPrefix], [matTextPrefix]',\n providers: [{ provide: MAT_PREFIX, useExisting: MatPrefix }],\n }]\n }], propDecorators: { _isTextSelector: [{\n type: Input,\n args: ['matTextPrefix']\n }] } });\n\n/**\n * Injection token that can be used to reference instances of `MatSuffix`. It serves as\n * alternative token to the actual `MatSuffix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SUFFIX = new InjectionToken('MatSuffix');\n/** Suffix to be placed at the end of the form field. */\nclass MatSuffix {\n constructor() {\n this._isText = false;\n }\n set _isTextSelector(value) {\n this._isText = true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSuffix, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatSuffix, selector: \"[matSuffix], [matIconSuffix], [matTextSuffix]\", inputs: { _isTextSelector: [\"matTextSuffix\", \"_isTextSelector\"] }, providers: [{ provide: MAT_SUFFIX, useExisting: MatSuffix }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSuffix, decorators: [{\n type: Directive,\n args: [{\n selector: '[matSuffix], [matIconSuffix], [matTextSuffix]',\n providers: [{ provide: MAT_SUFFIX, useExisting: MatSuffix }],\n }]\n }], propDecorators: { _isTextSelector: [{\n type: Input,\n args: ['matTextSuffix']\n }] } });\n\n/** An injion token for the parent form-field. */\nconst FLOATING_LABEL_PARENT = new InjectionToken('FloatingLabelParent');\n/**\n * Internal directive that maintains a MDC floating label. This directive does not\n * use the `MDCFloatingLabelFoundation` class, as it is not worth the size cost of\n * including it just to measure the label width and toggle some classes.\n *\n * The use of a directive allows us to conditionally render a floating label in the\n * template without having to manually manage instantiation and destruction of the\n * floating label component based on.\n *\n * The component is responsible for setting up the floating label styles, measuring label\n * width for the outline notch, and providing inputs that can be used to toggle the\n * label's floating or required state.\n */\nclass MatFormFieldFloatingLabel {\n /** Whether the label is floating. */\n get floating() {\n return this._floating;\n }\n set floating(value) {\n this._floating = value;\n if (this.monitorResize) {\n this._handleResize();\n }\n }\n /** Whether to monitor for resize events on the floating label. */\n get monitorResize() {\n return this._monitorResize;\n }\n set monitorResize(value) {\n this._monitorResize = value;\n if (this._monitorResize) {\n this._subscribeToResize();\n }\n else {\n this._resizeSubscription.unsubscribe();\n }\n }\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n this._floating = false;\n this._monitorResize = false;\n /** The shared ResizeObserver. */\n this._resizeObserver = inject(SharedResizeObserver);\n /** The Angular zone. */\n this._ngZone = inject(NgZone);\n /** The parent form-field. */\n this._parent = inject(FLOATING_LABEL_PARENT);\n /** The current resize event subscription. */\n this._resizeSubscription = new Subscription();\n }\n ngOnDestroy() {\n this._resizeSubscription.unsubscribe();\n }\n /** Gets the width of the label. Used for the outline notch. */\n getWidth() {\n return estimateScrollWidth(this._elementRef.nativeElement);\n }\n /** Gets the HTML element for the floating label. */\n get element() {\n return this._elementRef.nativeElement;\n }\n /** Handles resize events from the ResizeObserver. */\n _handleResize() {\n // In the case where the label grows in size, the following sequence of events occurs:\n // 1. The label grows by 1px triggering the ResizeObserver\n // 2. The notch is expanded to accommodate the entire label\n // 3. The label expands to its full width, triggering the ResizeObserver again\n //\n // This is expected, but If we allow this to all happen within the same macro task it causes an\n // error: `ResizeObserver loop limit exceeded`. Therefore we push the notch resize out until\n // the next macro task.\n setTimeout(() => this._parent._handleLabelResized());\n }\n /** Subscribes to resize events. */\n _subscribeToResize() {\n this._resizeSubscription.unsubscribe();\n this._ngZone.runOutsideAngular(() => {\n this._resizeSubscription = this._resizeObserver\n .observe(this._elementRef.nativeElement, { box: 'border-box' })\n .subscribe(() => this._handleResize());\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldFloatingLabel, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatFormFieldFloatingLabel, selector: \"label[matFormFieldFloatingLabel]\", inputs: { floating: \"floating\", monitorResize: \"monitorResize\" }, host: { properties: { \"class.mdc-floating-label--float-above\": \"floating\" }, classAttribute: \"mdc-floating-label mat-mdc-floating-label\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldFloatingLabel, decorators: [{\n type: Directive,\n args: [{\n selector: 'label[matFormFieldFloatingLabel]',\n host: {\n 'class': 'mdc-floating-label mat-mdc-floating-label',\n '[class.mdc-floating-label--float-above]': 'floating',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { floating: [{\n type: Input\n }], monitorResize: [{\n type: Input\n }] } });\n/**\n * Estimates the scroll width of an element.\n * via https://github.com/material-components/material-components-web/blob/c0a11ef0d000a098fd0c372be8f12d6a99302855/packages/mdc-dom/ponyfill.ts\n */\nfunction estimateScrollWidth(element) {\n // Check the offsetParent. If the element inherits display: none from any\n // parent, the offsetParent property will be null (see\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent).\n // This check ensures we only clone the node when necessary.\n const htmlEl = element;\n if (htmlEl.offsetParent !== null) {\n return htmlEl.scrollWidth;\n }\n const clone = htmlEl.cloneNode(true);\n clone.style.setProperty('position', 'absolute');\n clone.style.setProperty('transform', 'translate(-9999px, -9999px)');\n document.documentElement.appendChild(clone);\n const scrollWidth = clone.scrollWidth;\n clone.remove();\n return scrollWidth;\n}\n\n/** Class added when the line ripple is active. */\nconst ACTIVATE_CLASS = 'mdc-line-ripple--active';\n/** Class added when the line ripple is being deactivated. */\nconst DEACTIVATING_CLASS = 'mdc-line-ripple--deactivating';\n/**\n * Internal directive that creates an instance of the MDC line-ripple component. Using a\n * directive allows us to conditionally render a line-ripple in the template without having\n * to manually create and destroy the `MDCLineRipple` component whenever the condition changes.\n *\n * The directive sets up the styles for the line-ripple and provides an API for activating\n * and deactivating the line-ripple.\n */\nclass MatFormFieldLineRipple {\n constructor(_elementRef, ngZone) {\n this._elementRef = _elementRef;\n this._handleTransitionEnd = (event) => {\n const classList = this._elementRef.nativeElement.classList;\n const isDeactivating = classList.contains(DEACTIVATING_CLASS);\n if (event.propertyName === 'opacity' && isDeactivating) {\n classList.remove(ACTIVATE_CLASS, DEACTIVATING_CLASS);\n }\n };\n ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('transitionend', this._handleTransitionEnd);\n });\n }\n activate() {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(DEACTIVATING_CLASS);\n classList.add(ACTIVATE_CLASS);\n }\n deactivate() {\n this._elementRef.nativeElement.classList.add(DEACTIVATING_CLASS);\n }\n ngOnDestroy() {\n this._elementRef.nativeElement.removeEventListener('transitionend', this._handleTransitionEnd);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldLineRipple, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatFormFieldLineRipple, selector: \"div[matFormFieldLineRipple]\", host: { classAttribute: \"mdc-line-ripple\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldLineRipple, decorators: [{\n type: Directive,\n args: [{\n selector: 'div[matFormFieldLineRipple]',\n host: {\n 'class': 'mdc-line-ripple',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });\n\n/**\n * Internal component that creates an instance of the MDC notched-outline component.\n *\n * The component sets up the HTML structure and styles for the notched-outline. It provides\n * inputs to toggle the notch state and width.\n */\nclass MatFormFieldNotchedOutline {\n constructor(_elementRef, _ngZone) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n /** Whether the notch should be opened. */\n this.open = false;\n }\n ngAfterViewInit() {\n const label = this._elementRef.nativeElement.querySelector('.mdc-floating-label');\n if (label) {\n this._elementRef.nativeElement.classList.add('mdc-notched-outline--upgraded');\n if (typeof requestAnimationFrame === 'function') {\n label.style.transitionDuration = '0s';\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => (label.style.transitionDuration = ''));\n });\n }\n }\n else {\n this._elementRef.nativeElement.classList.add('mdc-notched-outline--no-label');\n }\n }\n _setNotchWidth(labelWidth) {\n if (!this.open || !labelWidth) {\n this._notch.nativeElement.style.width = '';\n }\n else {\n const NOTCH_ELEMENT_PADDING = 8;\n const NOTCH_ELEMENT_BORDER = 1;\n this._notch.nativeElement.style.width = `calc(${labelWidth}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + ${NOTCH_ELEMENT_PADDING + NOTCH_ELEMENT_BORDER}px)`;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldNotchedOutline, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatFormFieldNotchedOutline, selector: \"div[matFormFieldNotchedOutline]\", inputs: { open: [\"matFormFieldNotchedOutlineOpen\", \"open\"] }, host: { properties: { \"class.mdc-notched-outline--notched\": \"open\" }, classAttribute: \"mdc-notched-outline\" }, viewQueries: [{ propertyName: \"_notch\", first: true, predicate: [\"notch\"], descendants: true }], ngImport: i0, template: \"<div class=\\\"mdc-notched-outline__leading\\\"></div>\\n<div class=\\\"mdc-notched-outline__notch\\\" #notch>\\n <ng-content></ng-content>\\n</div>\\n<div class=\\\"mdc-notched-outline__trailing\\\"></div>\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldNotchedOutline, decorators: [{\n type: Component,\n args: [{ selector: 'div[matFormFieldNotchedOutline]', host: {\n 'class': 'mdc-notched-outline',\n // Besides updating the notch state through the MDC component, we toggle this class through\n // a host binding in order to ensure that the notched-outline renders correctly on the server.\n '[class.mdc-notched-outline--notched]': 'open',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"<div class=\\\"mdc-notched-outline__leading\\\"></div>\\n<div class=\\\"mdc-notched-outline__notch\\\" #notch>\\n <ng-content></ng-content>\\n</div>\\n<div class=\\\"mdc-notched-outline__trailing\\\"></div>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { open: [{\n type: Input,\n args: ['matFormFieldNotchedOutlineOpen']\n }], _notch: [{\n type: ViewChild,\n args: ['notch']\n }] } });\n\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nconst matFormFieldAnimations = {\n /** Animation that transitions the form field's error and hint messages. */\n transitionMessages: trigger('transitionMessages', [\n // TODO(mmalerba): Use angular animations for label animation as well.\n state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),\n transition('void => enter', [\n style({ opacity: 0, transform: 'translateY(-5px)' }),\n animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\n ]),\n ]),\n};\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\nclass MatFormFieldControl {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatFormFieldControl, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldControl, decorators: [{\n type: Directive\n }] });\n\n/** @docs-private */\nfunction getMatFormFieldPlaceholderConflictError() {\n return Error('Placeholder attribute and child element were both specified.');\n}\n/** @docs-private */\nfunction getMatFormFieldDuplicatedHintError(align) {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n/** @docs-private */\nfunction getMatFormFieldMissingControlError() {\n return Error('mat-form-field must contain a MatFormFieldControl.');\n}\n\n/**\n * Injection token that can be used to inject an instances of `MatFormField`. It serves\n * as alternative token to the actual `MatFormField` class which would cause unnecessary\n * retention of the `MatFormField` class and its component metadata.\n */\nconst MAT_FORM_FIELD = new InjectionToken('MatFormField');\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nconst MAT_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken('MAT_FORM_FIELD_DEFAULT_OPTIONS');\nlet nextUniqueId = 0;\n/** Default appearance used by the form field. */\nconst DEFAULT_APPEARANCE = 'fill';\n/**\n * Whether the label for form fields should by default float `always`,\n * `never`, or `auto`.\n */\nconst DEFAULT_FLOAT_LABEL = 'auto';\n/** Default way that the subscript element height is set. */\nconst DEFAULT_SUBSCRIPT_SIZING = 'fixed';\n/**\n * Default transform for docked floating labels in a MDC text-field. This value has been\n * extracted from the MDC text-field styles because we programmatically modify the docked\n * label transform, but do not want to accidentally discard the default label transform.\n */\nconst FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM = `translateY(-50%)`;\n/** Container for form controls that applies Material Design styling and behavior. */\nclass MatFormField {\n /** Whether the required marker should be hidden. */\n get hideRequiredMarker() {\n return this._hideRequiredMarker;\n }\n set hideRequiredMarker(value) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\n /** Whether the label should always float or float as the user types. */\n get floatLabel() {\n return this._floatLabel || this._defaults?.floatLabel || DEFAULT_FLOAT_LABEL;\n }\n set floatLabel(value) {\n if (value !== this._floatLabel) {\n this._floatLabel = value;\n // For backwards compatibility. Custom form field controls or directives might set\n // the \"floatLabel\" input and expect the form field view to be updated automatically.\n // e.g. autocomplete trigger. Ideally we'd get rid of this and the consumers would just\n // emit the \"stateChanges\" observable. TODO(devversion): consider removing.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** The form field appearance style. */\n get appearance() {\n return this._appearance;\n }\n set appearance(value) {\n const oldValue = this._appearance;\n const newAppearance = value || this._defaults?.appearance || DEFAULT_APPEARANCE;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (newAppearance !== 'fill' && newAppearance !== 'outline') {\n throw new Error(`MatFormField: Invalid appearance \"${newAppearance}\", valid values are \"fill\" or \"outline\".`);\n }\n }\n this._appearance = newAppearance;\n if (this._appearance === 'outline' && this._appearance !== oldValue) {\n // If the appearance has been switched to `outline`, the label offset needs to be updated.\n // The update can happen once the view has been re-checked, but not immediately because\n // the view has not been updated and the notched-outline floating label is not present.\n this._needsOutlineLabelOffsetUpdateOnStable = true;\n }\n }\n /**\n * Whether the form field should reserve space for one line of hint/error text (default)\n * or to have the spacing grow from 0px as needed based on the size of the hint/error content.\n * Note that when using dynamic sizing, layout shifts will occur when hint/error text changes.\n */\n get subscriptSizing() {\n return this._subscriptSizing || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n }\n set subscriptSizing(value) {\n this._subscriptSizing = value || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n }\n /** Text for the form field hint. */\n get hintLabel() {\n return this._hintLabel;\n }\n set hintLabel(value) {\n this._hintLabel = value;\n this._processHints();\n }\n /** Gets the current form field control */\n get _control() {\n return this._explicitFormFieldControl || this._formFieldControl;\n }\n set _control(value) {\n this._explicitFormFieldControl = value;\n }\n constructor(_elementRef, _changeDetectorRef, _ngZone, _dir, _platform, _defaults, _animationMode, \n /**\n * @deprecated not needed, to be removed.\n * @breaking-change 17.0.0 remove this param\n */\n _unusedDocument) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._ngZone = _ngZone;\n this._dir = _dir;\n this._platform = _platform;\n this._defaults = _defaults;\n this._animationMode = _animationMode;\n this._hideRequiredMarker = false;\n /** The color palette for the form field. */\n this.color = 'primary';\n this._appearance = DEFAULT_APPEARANCE;\n this._subscriptSizing = null;\n this._hintLabel = '';\n this._hasIconPrefix = false;\n this._hasTextPrefix = false;\n this._hasIconSuffix = false;\n this._hasTextSuffix = false;\n // Unique id for the internal form field label.\n this._labelId = `mat-mdc-form-field-label-${nextUniqueId++}`;\n // Unique id for the hint label.\n this._hintLabelId = `mat-mdc-hint-${nextUniqueId++}`;\n /** State of the mat-hint and mat-error animations. */\n this._subscriptAnimationState = '';\n this._destroyed = new Subject();\n this._isFocused = null;\n this._needsOutlineLabelOffsetUpdateOnStable = false;\n if (_defaults) {\n if (_defaults.appearance) {\n this.appearance = _defaults.appearance;\n }\n this._hideRequiredMarker = Boolean(_defaults?.hideRequiredMarker);\n if (_defaults.color) {\n this.color = _defaults.color;\n }\n }\n }\n ngAfterViewInit() {\n // Initial focus state sync. This happens rarely, but we want to account for\n // it in case the form field control has \"focused\" set to true on init.\n this._updateFocusState();\n // Enable animations now. This ensures we don't animate on initial render.\n this._subscriptAnimationState = 'enter';\n // Because the above changes a value used in the template after it was checked, we need\n // to trigger CD or the change might not be reflected if there is no other CD scheduled.\n this._changeDetectorRef.detectChanges();\n }\n ngAfterContentInit() {\n this._assertFormFieldControl();\n this._initializeControl();\n this._initializeSubscript();\n this._initializePrefixAndSuffix();\n this._initializeOutlineLabelOffsetSubscriptions();\n }\n ngAfterContentChecked() {\n this._assertFormFieldControl();\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Gets the id of the label element. If no label is present, returns `null`.\n */\n getLabelId() {\n return this._hasFloatingLabel() ? this._labelId : null;\n }\n /**\n * Gets an ElementRef for the element that a overlay attached to the form field\n * should be positioned relative to.\n */\n getConnectedOverlayOrigin() {\n return this._textField || this._elementRef;\n }\n /** Animates the placeholder up and locks it in position. */\n _animateAndLockLabel() {\n // This is for backwards compatibility only. Consumers of the form field might use\n // this method. e.g. the autocomplete trigger. This method has been added to the non-MDC\n // form field because setting \"floatLabel\" to \"always\" caused the label to float without\n // animation. This is different in MDC where the label always animates, so this method\n // is no longer necessary. There doesn't seem any benefit in adding logic to allow changing\n // the floating label state without animations. The non-MDC implementation was inconsistent\n // because it always animates if \"floatLabel\" is set away from \"always\".\n // TODO(devversion): consider removing this method when releasing the MDC form field.\n if (this._hasFloatingLabel()) {\n this.floatLabel = 'always';\n }\n }\n /** Initializes the registered form field control. */\n _initializeControl() {\n const control = this._control;\n if (control.controlType) {\n this._elementRef.nativeElement.classList.add(`mat-mdc-form-field-type-${control.controlType}`);\n }\n // Subscribe to changes in the child control state in order to update the form field UI.\n control.stateChanges.subscribe(() => {\n this._updateFocusState();\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n // Run change detection if the value changes.\n if (control.ngControl && control.ngControl.valueChanges) {\n control.ngControl.valueChanges\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n }\n }\n _checkPrefixAndSuffixTypes() {\n this._hasIconPrefix = !!this._prefixChildren.find(p => !p._isText);\n this._hasTextPrefix = !!this._prefixChildren.find(p => p._isText);\n this._hasIconSuffix = !!this._suffixChildren.find(s => !s._isText);\n this._hasTextSuffix = !!this._suffixChildren.find(s => s._isText);\n }\n /** Initializes the prefix and suffix containers. */\n _initializePrefixAndSuffix() {\n this._checkPrefixAndSuffixTypes();\n // Mark the form field as dirty whenever the prefix or suffix children change. This\n // is necessary because we conditionally display the prefix/suffix containers based\n // on whether there is projected content.\n merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n this._checkPrefixAndSuffixTypes();\n this._changeDetectorRef.markForCheck();\n });\n }\n /**\n * Initializes the subscript by validating hints and synchronizing \"aria-describedby\" ids\n * with the custom form field control. Also subscribes to hint and error changes in order\n * to be able to validate and synchronize ids on change.\n */\n _initializeSubscript() {\n // Re-validate when the number of hints changes.\n this._hintChildren.changes.subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n // Update the aria-described by when the number of errors changes.\n this._errorChildren.changes.subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n // Initial mat-hint validation and subscript describedByIds sync.\n this._validateHints();\n this._syncDescribedByIds();\n }\n /** Throws an error if the form field's control is missing. */\n _assertFormFieldControl() {\n if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatFormFieldMissingControlError();\n }\n }\n _updateFocusState() {\n // Usually the MDC foundation would call \"activateFocus\" and \"deactivateFocus\" whenever\n // certain DOM events are emitted. This is not possible in our implementation of the\n // form field because we support abstract form field controls which are not necessarily\n // of type input, nor do we have a reference to a native form field control element. Instead\n // we handle the focus by checking if the abstract form field control focused state changes.\n if (this._control.focused && !this._isFocused) {\n this._isFocused = true;\n this._lineRipple?.activate();\n }\n else if (!this._control.focused && (this._isFocused || this._isFocused === null)) {\n this._isFocused = false;\n this._lineRipple?.deactivate();\n }\n this._textField?.nativeElement.classList.toggle('mdc-text-field--focused', this._control.focused);\n }\n /**\n * The floating label in the docked state needs to account for prefixes. The horizontal offset\n * is calculated whenever the appearance changes to `outline`, the prefixes change, or when the\n * form field is added to the DOM. This method sets up all subscriptions which are needed to\n * trigger the label offset update. In general, we want to avoid performing measurements often,\n * so we rely on the `NgZone` as indicator when the offset should be recalculated, instead of\n * checking every change detection cycle.\n */\n _initializeOutlineLabelOffsetSubscriptions() {\n // Whenever the prefix changes, schedule an update of the label offset.\n this._prefixChildren.changes.subscribe(() => (this._needsOutlineLabelOffsetUpdateOnStable = true));\n // Note that we have to run outside of the `NgZone` explicitly, in order to avoid\n // throwing users into an infinite loop if `zone-patch-rxjs` is included.\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._needsOutlineLabelOffsetUpdateOnStable) {\n this._needsOutlineLabelOffsetUpdateOnStable = false;\n this._updateOutlineLabelOffset();\n }\n });\n });\n this._dir.change\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => (this._needsOutlineLabelOffsetUpdateOnStable = true));\n }\n /** Whether the floating label should always float or not. */\n _shouldAlwaysFloat() {\n return this.floatLabel === 'always';\n }\n _hasOutline() {\n return this.appearance === 'outline';\n }\n /**\n * Whether the label should display in the infix. Labels in the outline appearance are\n * displayed as part of the notched-outline and are horizontally offset to account for\n * form field prefix content. This won't work in server side rendering since we cannot\n * measure the width of the prefix container. To make the docked label appear as if the\n * right offset has been calculated, we forcibly render the label inside the infix. Since\n * the label is part of the infix, the label cannot overflow the prefix content.\n */\n _forceDisplayInfixLabel() {\n return !this._platform.isBrowser && this._prefixChildren.length && !this._shouldLabelFloat();\n }\n _hasFloatingLabel() {\n return !!this._labelChildNonStatic || !!this._labelChildStatic;\n }\n _shouldLabelFloat() {\n return this._control.shouldLabelFloat || this._shouldAlwaysFloat();\n }\n /**\n * Determines whether a class from the AbstractControlDirective\n * should be forwarded to the host element.\n */\n _shouldForward(prop) {\n const control = this._control ? this._control.ngControl : null;\n return control && control[prop];\n }\n /** Determines whether to display hints or errors. */\n _getDisplayedMessages() {\n return this._errorChildren && this._errorChildren.length > 0 && this._control.errorState\n ? 'error'\n : 'hint';\n }\n /** Handle label resize events. */\n _handleLabelResized() {\n this._refreshOutlineNotchWidth();\n }\n /** Refreshes the width of the outline-notch, if present. */\n _refreshOutlineNotchWidth() {\n if (!this._hasOutline() || !this._floatingLabel || !this._shouldLabelFloat()) {\n this._notchedOutline?._setNotchWidth(0);\n }\n else {\n this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth());\n }\n }\n /** Does any extra processing that is required when handling the hints. */\n _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n /**\n * Ensure that there is a maximum of one of each \"mat-hint\" alignment specified. The hint\n * label specified set through the input is being considered as \"start\" aligned.\n *\n * This method is a noop if Angular runs in production mode.\n */\n _validateHints() {\n if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n let startHint;\n let endHint;\n this._hintChildren.forEach((hint) => {\n if (hint.align === 'start') {\n if (startHint || this.hintLabel) {\n throw getMatFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n }\n else if (hint.align === 'end') {\n if (endHint) {\n throw getMatFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\n }\n });\n }\n }\n /**\n * Sets the list of element IDs that describe the child control. This allows the control to update\n * its `aria-describedby` attribute accordingly.\n */\n _syncDescribedByIds() {\n if (this._control) {\n let ids = [];\n // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.\n if (this._control.userAriaDescribedBy &&\n typeof this._control.userAriaDescribedBy === 'string') {\n ids.push(...this._control.userAriaDescribedBy.split(' '));\n }\n if (this._getDisplayedMessages() === 'hint') {\n const startHint = this._hintChildren\n ? this._hintChildren.find(hint => hint.align === 'start')\n : null;\n const endHint = this._hintChildren\n ? this._hintChildren.find(hint => hint.align === 'end')\n : null;\n if (startHint) {\n ids.push(startHint.id);\n }\n else if (this._hintLabel) {\n ids.push(this._hintLabelId);\n }\n if (endHint) {\n ids.push(endHint.id);\n }\n }\n else if (this._errorChildren) {\n ids.push(...this._errorChildren.map(error => error.id));\n }\n this._control.setDescribedByIds(ids);\n }\n }\n /**\n * Updates the horizontal offset of the label in the outline appearance. In the outline\n * appearance, the notched-outline and label are not relative to the infix container because\n * the outline intends to surround prefixes, suffixes and the infix. This means that the\n * floating label by default overlaps prefixes in the docked state. To avoid this, we need to\n * horizontally offset the label by the width of the prefix container. The MDC text-field does\n * not need to do this because they use a fixed width for prefixes. Hence, they can simply\n * incorporate the horizontal offset into their default text-field styles.\n */\n _updateOutlineLabelOffset() {\n if (!this._platform.isBrowser || !this._hasOutline() || !this._floatingLabel) {\n return;\n }\n const floatingLabel = this._floatingLabel.element;\n // If no prefix is displayed, reset the outline label offset from potential\n // previous label offset updates.\n if (!(this._iconPrefixContainer || this._textPrefixContainer)) {\n floatingLabel.style.transform = '';\n return;\n }\n // If the form field is not attached to the DOM yet (e.g. in a tab), we defer\n // the label offset update until the zone stabilizes.\n if (!this._isAttachedToDom()) {\n this._needsOutlineLabelOffsetUpdateOnStable = true;\n return;\n }\n const iconPrefixContainer = this._iconPrefixContainer?.nativeElement;\n const textPrefixContainer = this._textPrefixContainer?.nativeElement;\n const iconPrefixContainerWidth = iconPrefixContainer?.getBoundingClientRect().width ?? 0;\n const textPrefixContainerWidth = textPrefixContainer?.getBoundingClientRect().width ?? 0;\n // If the directionality is RTL, the x-axis transform needs to be inverted. This\n // is because `transformX` does not change based on the page directionality.\n const negate = this._dir.value === 'rtl' ? '-1' : '1';\n const prefixWidth = `${iconPrefixContainerWidth + textPrefixContainerWidth}px`;\n const labelOffset = `var(--mat-mdc-form-field-label-offset-x, 0px)`;\n const labelHorizontalOffset = `calc(${negate} * (${prefixWidth} + ${labelOffset}))`;\n // Update the translateX of the floating label to account for the prefix container,\n // but allow the CSS to override this setting via a CSS variable when the label is\n // floating.\n floatingLabel.style.transform = `var(\n --mat-mdc-form-field-label-transform,\n ${FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM} translateX(${labelHorizontalOffset})\n )`;\n }\n /** Checks whether the form field is attached to the DOM. */\n _isAttachedToDom() {\n const element = this._elementRef.nativeElement;\n if (element.getRootNode) {\n const rootNode = element.getRootNode();\n // If the element is inside the DOM the root node will be either the document\n // or the closest shadow root, otherwise it'll be the element itself.\n return rootNode && rootNode !== element;\n }\n // Otherwise fall back to checking if it's in the document. This doesn't account for\n // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.\n return document.documentElement.contains(element);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormField, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.Directionality }, { token: i2.Platform }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatFormField, selector: \"mat-form-field\", inputs: { hideRequiredMarker: \"hideRequiredMarker\", color: \"color\", floatLabel: \"floatLabel\", appearance: \"appearance\", subscriptSizing: \"subscriptSizing\", hintLabel: \"hintLabel\" }, host: { properties: { \"class.mat-mdc-form-field-label-always-float\": \"_shouldAlwaysFloat()\", \"class.mat-mdc-form-field-has-icon-prefix\": \"_hasIconPrefix\", \"class.mat-mdc-form-field-has-icon-suffix\": \"_hasIconSuffix\", \"class.mat-form-field-invalid\": \"_control.errorState\", \"class.mat-form-field-disabled\": \"_control.disabled\", \"class.mat-form-field-autofilled\": \"_control.autofilled\", \"class.mat-form-field-no-animations\": \"_animationMode === \\\"NoopAnimations\\\"\", \"class.mat-form-field-appearance-fill\": \"appearance == \\\"fill\\\"\", \"class.mat-form-field-appearance-outline\": \"appearance == \\\"outline\\\"\", \"class.mat-form-field-hide-placeholder\": \"_hasFloatingLabel() && !_shouldLabelFloat()\", \"class.mat-focused\": \"_control.focused\", \"class.mat-primary\": \"color !== \\\"accent\\\" && color !== \\\"warn\\\"\", \"class.mat-accent\": \"color === \\\"accent\\\"\", \"class.mat-warn\": \"color === \\\"warn\\\"\", \"class.ng-untouched\": \"_shouldForward(\\\"untouched\\\")\", \"class.ng-touched\": \"_shouldForward(\\\"touched\\\")\", \"class.ng-pristine\": \"_shouldForward(\\\"pristine\\\")\", \"class.ng-dirty\": \"_shouldForward(\\\"dirty\\\")\", \"class.ng-valid\": \"_shouldForward(\\\"valid\\\")\", \"class.ng-invalid\": \"_shouldForward(\\\"invalid\\\")\", \"class.ng-pending\": \"_shouldForward(\\\"pending\\\")\" }, classAttribute: \"mat-mdc-form-field\" }, providers: [\n { provide: MAT_FORM_FIELD, useExisting: MatFormField },\n { provide: FLOATING_LABEL_PARENT, useExisting: MatFormField },\n ], queries: [{ propertyName: \"_labelChildNonStatic\", first: true, predicate: MatLabel, descendants: true }, { propertyName: \"_labelChildStatic\", first: true, predicate: MatLabel, descendants: true, static: true }, { propertyName: \"_formFieldControl\", first: true, predicate: MatFormFieldControl, descendants: true }, { propertyName: \"_prefixChildren\", predicate: MAT_PREFIX, descendants: true }, { propertyName: \"_suffixChildren\", predicate: MAT_SUFFIX, descendants: true }, { propertyName: \"_errorChildren\", predicate: MAT_ERROR, descendants: true }, { propertyName: \"_hintChildren\", predicate: MatHint, descendants: true }], viewQueries: [{ propertyName: \"_textField\", first: true, predicate: [\"textField\"], descendants: true }, { propertyName: \"_iconPrefixContainer\", first: true, predicate: [\"iconPrefixContainer\"], descendants: true }, { propertyName: \"_textPrefixContainer\", first: true, predicate: [\"textPrefixContainer\"], descendants: true }, { propertyName: \"_floatingLabel\", first: true, predicate: MatFormFieldFloatingLabel, descendants: true }, { propertyName: \"_notchedOutline\", first: true, predicate: MatFormFieldNotchedOutline, descendants: true }, { propertyName: \"_lineRipple\", first: true, predicate: MatFormFieldLineRipple, descendants: true }], exportAs: [\"matFormField\"], ngImport: i0, template: \"<ng-template #labelTemplate>\\n <!--\\n MDC recommends that the text-field is a `<label>` element. This rather complicates the\\n setup because it would require every form-field control to explicitly set `aria-labelledby`.\\n This is because the `<label>` itself contains more than the actual label (e.g. prefix, suffix\\n or other projected content), and screen readers could potentially read out undesired content.\\n Excluding elements from being printed out requires them to be marked with `aria-hidden`, or\\n the form control is set to a scoped element for the label (using `aria-labelledby`). Both of\\n these options seem to complicate the setup because we know exactly what content is rendered\\n as part of the label, and we don't want to spend resources on walking through projected content\\n to set `aria-hidden`. Nor do we want to set `aria-labelledby` on every form control if we could\\n simply link the label to the control using the label `for` attribute.\\n -->\\n <label matFormFieldFloatingLabel\\n [floating]=\\\"_shouldLabelFloat()\\\"\\n [monitorResize]=\\\"_hasOutline()\\\"\\n *ngIf=\\\"_hasFloatingLabel()\\\"\\n [id]=\\\"_labelId\\\"\\n [attr.for]=\\\"_control.id\\\">\\n <ng-content select=\\\"mat-label\\\"></ng-content>\\n <!--\\n We set the required marker as a separate element, in order to make it easier to target if\\n apps want to override it and to be able to set `aria-hidden` so that screen readers don't\\n pick it up.\\n -->\\n <span\\n *ngIf=\\\"!hideRequiredMarker && _control.required\\\"\\n aria-hidden=\\\"true\\\"\\n class=\\\"mat-mdc-form-field-required-marker mdc-floating-label--required\\\"></span>\\n </label>\\n</ng-template>\\n\\n<div class=\\\"mat-mdc-text-field-wrapper mdc-text-field\\\" #textField\\n [class.mdc-text-field--filled]=\\\"!_hasOutline()\\\"\\n [class.mdc-text-field--outlined]=\\\"_hasOutline()\\\"\\n [class.mdc-text-field--no-label]=\\\"!_hasFloatingLabel()\\\"\\n [class.mdc-text-field--disabled]=\\\"_control.disabled\\\"\\n [class.mdc-text-field--invalid]=\\\"_control.errorState\\\"\\n (click)=\\\"_control.onContainerClick($event)\\\">\\n <div class=\\\"mat-mdc-form-field-focus-overlay\\\" *ngIf=\\\"!_hasOutline() && !_control.disabled\\\"></div>\\n <div class=\\\"mat-mdc-form-field-flex\\\">\\n <div *ngIf=\\\"_hasOutline()\\\" matFormFieldNotchedOutline\\n [matFormFieldNotchedOutlineOpen]=\\\"_shouldLabelFloat()\\\">\\n <ng-template [ngIf]=\\\"!_forceDisplayInfixLabel()\\\">\\n <ng-template [ngTemplateOutlet]=\\\"labelTemplate\\\"></ng-template>\\n </ng-template>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-icon-prefix\\\" *ngIf=\\\"_hasIconPrefix\\\" #iconPrefixContainer>\\n <ng-content select=\\\"[matPrefix], [matIconPrefix]\\\"></ng-content>\\n </div>\\n <div class=\\\"mat-mdc-form-field-text-prefix\\\" *ngIf=\\\"_hasTextPrefix\\\" #textPrefixContainer>\\n <ng-content select=\\\"[matTextPrefix]\\\"></ng-content>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-infix\\\">\\n <ng-template [ngIf]=\\\"!_hasOutline() || _forceDisplayInfixLabel()\\\">\\n <ng-template [ngTemplateOutlet]=\\\"labelTemplate\\\"></ng-template>\\n </ng-template>\\n\\n <ng-content></ng-content>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-text-suffix\\\" *ngIf=\\\"_hasTextSuffix\\\">\\n <ng-content select=\\\"[matTextSuffix]\\\"></ng-content>\\n </div>\\n <div class=\\\"mat-mdc-form-field-icon-suffix\\\" *ngIf=\\\"_hasIconSuffix\\\">\\n <ng-content select=\\\"[matSuffix], [matIconSuffix]\\\"></ng-content>\\n </div>\\n </div>\\n\\n <div matFormFieldLineRipple *ngIf=\\\"!_hasOutline()\\\"></div>\\n</div>\\n\\n<div class=\\\"mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align\\\"\\n [class.mat-mdc-form-field-subscript-dynamic-size]=\\\"subscriptSizing === 'dynamic'\\\"\\n [ngSwitch]=\\\"_getDisplayedMessages()\\\">\\n <div class=\\\"mat-mdc-form-field-error-wrapper\\\" *ngSwitchCase=\\\"'error'\\\"\\n [@transitionMessages]=\\\"_subscriptAnimationState\\\">\\n <ng-content select=\\\"mat-error, [matError]\\\"></ng-content>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-hint-wrapper\\\" *ngSwitchCase=\\\"'hint'\\\"\\n [@transitionMessages]=\\\"_subscriptAnimationState\\\">\\n <mat-hint *ngIf=\\\"hintLabel\\\" [id]=\\\"_hintLabelId\\\">{{hintLabel}}</mat-hint>\\n <ng-content select=\\\"mat-hint:not([align='end'])\\\"></ng-content>\\n <div class=\\\"mat-mdc-form-field-hint-spacer\\\"></div>\\n <ng-content select=\\\"mat-hint[align='end']\\\"></ng-content>\\n </div>\\n</div>\\n\", styles: [\".mdc-text-field{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-text-field__input{height:28px;width:100%;min-width:0;border:none;border-radius:0;background:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}@media all{.mdc-text-field__input::placeholder{opacity:0}}@media all{.mdc-text-field__input:-ms-input-placeholder{opacity:0}}@media all{.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}}@media all{.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}}.mdc-text-field__affix{height:28px;opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}@supports(-webkit-hyphens: none){.mdc-text-field--outlined .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px}.mdc-text-field--filled{height:56px}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:\\\"\\\";vertical-align:0}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none}@supports(-webkit-hyphens: none){.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1)}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px))*2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-shape-small, 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0}.mdc-text-field--textarea .mdc-floating-label{top:19px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){transform:none}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-10.25px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1)}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:\\\"\\\";vertical-align:-16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:fit-content;min-width:-moz-available;min-width:-webkit-fill-available;overflow:hidden;resize:both}.mdc-text-field--filled .mdc-text-field__resizer{transform:translateY(-1px)}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer{transform:translateX(-1px) translateY(-1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{transform:translateX(1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateX(1px) translateY(1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{transform:translateX(-1px) translateY(1px)}.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}[dir=rtl] .mdc-text-field--with-leading-icon,.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}[dir=rtl] .mdc-text-field--with-trailing-icon,.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}@media screen and (forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px}.mdc-floating-label{position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0px;content:\\\"*\\\"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after,.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)[dir=rtl]::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;pointer-events:none}.mdc-notched-outline__trailing{flex-grow:1}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\\\"\\\"}.mdc-line-ripple::before{z-index:1}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{border-top:1px solid;border-bottom:1px solid}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{max-width:calc(100% - 12px * 2)}.mdc-line-ripple::before{border-bottom-width:1px}.mdc-line-ripple::after{border-bottom-width:2px}.mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height:1px;--mdc-filled-text-field-focus-active-indicator-height:2px;--mdc-filled-text-field-container-shape:4px;border-top-left-radius:var(--mdc-filled-text-field-container-shape);border-top-right-radius:var(--mdc-filled-text-field-container-shape);border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-caret-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-error-caret-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-filled-text-field-input-text-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-filled-text-field-disabled-input-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-focus-label-text-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label,.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-disabled-label-text-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-error-label-text-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-error-focus-label-text-color)}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mdc-filled-text-field-label-text-font);font-size:var(--mdc-filled-text-field-label-text-size);font-weight:var(--mdc-filled-text-field-label-text-weight);letter-spacing:var(--mdc-filled-text-field-label-text-tracking)}@media all{.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}}@media all{.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mdc-filled-text-field-container-color)}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mdc-filled-text-field-disabled-container-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-hover-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-focus-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-disabled-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-hover-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-error-focus-active-indicator-color)}.mdc-text-field--filled .mdc-line-ripple::before{border-bottom-width:var(--mdc-filled-text-field-active-indicator-height)}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mdc-filled-text-field-focus-active-indicator-height)}.mdc-text-field--outlined{--mdc-outlined-text-field-outline-width:1px;--mdc-outlined-text-field-focus-outline-width:2px;--mdc-outlined-text-field-container-shape:4px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-caret-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-error-caret-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-outlined-text-field-input-text-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-outlined-text-field-disabled-input-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-focus-label-text-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label,.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-disabled-label-text-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-error-label-text-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-error-focus-label-text-color)}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mdc-outlined-text-field-label-text-font);font-size:var(--mdc-outlined-text-field-label-text-size);font-weight:var(--mdc-outlined-text-field-label-text-weight);letter-spacing:var(--mdc-outlined-text-field-label-text-tracking)}@media all{.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}}@media all{.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:var(--mdc-outlined-text-field-container-shape);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-outlined-text-field-container-shape))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-outlined-text-field-container-shape))*2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:var(--mdc-outlined-text-field-container-shape);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-outlined-text-field-container-shape))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-outlined-text-field-container-shape))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-outlined-text-field-container-shape))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-outlined-text-field-container-shape))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-hover-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-focus-outline-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-disabled-outline-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-error-outline-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-error-hover-outline-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-error-focus-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-width:var(--mdc-outlined-text-field-outline-width)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:var(--mdc-outlined-text-field-focus-outline-width)}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-text-field-wrapper::before{content:none}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:\\\"\\\";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:\\\"\\\";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}.cdk-high-contrast-active .mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font);line-height:var(--mat-form-field-container-text-line-height);font-size:var(--mat-form-field-container-text-size);letter-spacing:var(--mat-form-field-container-text-tracking);font-weight:var(--mat-form-field-container-text-weight)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size) * var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:12px;box-sizing:content-box}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__affix{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea{transition:none}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{transform:translateX(calc(0% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}100%{transform:translateX(calc(0% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}}[dir=rtl] .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{transform:translateX(calc(0% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}100%{transform:translateX(calc(0% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-standard 250ms 1}@keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)}\"], dependencies: [{ kind: \"directive\", type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i3.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i3.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: MatHint, selector: \"mat-hint\", inputs: [\"align\", \"id\"] }, { kind: \"directive\", type: MatFormFieldFloatingLabel, selector: \"label[matFormFieldFloatingLabel]\", inputs: [\"floating\", \"monitorResize\"] }, { kind: \"component\", type: MatFormFieldNotchedOutline, selector: \"div[matFormFieldNotchedOutline]\", inputs: [\"matFormFieldNotchedOutlineOpen\"] }, { kind: \"directive\", type: MatFormFieldLineRipple, selector: \"div[matFormFieldLineRipple]\" }], animations: [matFormFieldAnimations.transitionMessages], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormField, decorators: [{\n type: Component,\n args: [{ selector: 'mat-form-field', exportAs: 'matFormField', animations: [matFormFieldAnimations.transitionMessages], host: {\n 'class': 'mat-mdc-form-field',\n '[class.mat-mdc-form-field-label-always-float]': '_shouldAlwaysFloat()',\n '[class.mat-mdc-form-field-has-icon-prefix]': '_hasIconPrefix',\n '[class.mat-mdc-form-field-has-icon-suffix]': '_hasIconSuffix',\n // Note that these classes reuse the same names as the non-MDC version, because they can be\n // considered a public API since custom form controls may use them to style themselves.\n // See https://github.com/angular/components/pull/20502#discussion_r486124901.\n '[class.mat-form-field-invalid]': '_control.errorState',\n '[class.mat-form-field-disabled]': '_control.disabled',\n '[class.mat-form-field-autofilled]': '_control.autofilled',\n '[class.mat-form-field-no-animations]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n '[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n '[class.mat-form-field-hide-placeholder]': '_hasFloatingLabel() && !_shouldLabelFloat()',\n '[class.mat-focused]': '_control.focused',\n '[class.mat-primary]': 'color !== \"accent\" && color !== \"warn\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[class.ng-untouched]': '_shouldForward(\"untouched\")',\n '[class.ng-touched]': '_shouldForward(\"touched\")',\n '[class.ng-pristine]': '_shouldForward(\"pristine\")',\n '[class.ng-dirty]': '_shouldForward(\"dirty\")',\n '[class.ng-valid]': '_shouldForward(\"valid\")',\n '[class.ng-invalid]': '_shouldForward(\"invalid\")',\n '[class.ng-pending]': '_shouldForward(\"pending\")',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [\n { provide: MAT_FORM_FIELD, useExisting: MatFormField },\n { provide: FLOATING_LABEL_PARENT, useExisting: MatFormField },\n ], template: \"<ng-template #labelTemplate>\\n <!--\\n MDC recommends that the text-field is a `<label>` element. This rather complicates the\\n setup because it would require every form-field control to explicitly set `aria-labelledby`.\\n This is because the `<label>` itself contains more than the actual label (e.g. prefix, suffix\\n or other projected content), and screen readers could potentially read out undesired content.\\n Excluding elements from being printed out requires them to be marked with `aria-hidden`, or\\n the form control is set to a scoped element for the label (using `aria-labelledby`). Both of\\n these options seem to complicate the setup because we know exactly what content is rendered\\n as part of the label, and we don't want to spend resources on walking through projected content\\n to set `aria-hidden`. Nor do we want to set `aria-labelledby` on every form control if we could\\n simply link the label to the control using the label `for` attribute.\\n -->\\n <label matFormFieldFloatingLabel\\n [floating]=\\\"_shouldLabelFloat()\\\"\\n [monitorResize]=\\\"_hasOutline()\\\"\\n *ngIf=\\\"_hasFloatingLabel()\\\"\\n [id]=\\\"_labelId\\\"\\n [attr.for]=\\\"_control.id\\\">\\n <ng-content select=\\\"mat-label\\\"></ng-content>\\n <!--\\n We set the required marker as a separate element, in order to make it easier to target if\\n apps want to override it and to be able to set `aria-hidden` so that screen readers don't\\n pick it up.\\n -->\\n <span\\n *ngIf=\\\"!hideRequiredMarker && _control.required\\\"\\n aria-hidden=\\\"true\\\"\\n class=\\\"mat-mdc-form-field-required-marker mdc-floating-label--required\\\"></span>\\n </label>\\n</ng-template>\\n\\n<div class=\\\"mat-mdc-text-field-wrapper mdc-text-field\\\" #textField\\n [class.mdc-text-field--filled]=\\\"!_hasOutline()\\\"\\n [class.mdc-text-field--outlined]=\\\"_hasOutline()\\\"\\n [class.mdc-text-field--no-label]=\\\"!_hasFloatingLabel()\\\"\\n [class.mdc-text-field--disabled]=\\\"_control.disabled\\\"\\n [class.mdc-text-field--invalid]=\\\"_control.errorState\\\"\\n (click)=\\\"_control.onContainerClick($event)\\\">\\n <div class=\\\"mat-mdc-form-field-focus-overlay\\\" *ngIf=\\\"!_hasOutline() && !_control.disabled\\\"></div>\\n <div class=\\\"mat-mdc-form-field-flex\\\">\\n <div *ngIf=\\\"_hasOutline()\\\" matFormFieldNotchedOutline\\n [matFormFieldNotchedOutlineOpen]=\\\"_shouldLabelFloat()\\\">\\n <ng-template [ngIf]=\\\"!_forceDisplayInfixLabel()\\\">\\n <ng-template [ngTemplateOutlet]=\\\"labelTemplate\\\"></ng-template>\\n </ng-template>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-icon-prefix\\\" *ngIf=\\\"_hasIconPrefix\\\" #iconPrefixContainer>\\n <ng-content select=\\\"[matPrefix], [matIconPrefix]\\\"></ng-content>\\n </div>\\n <div class=\\\"mat-mdc-form-field-text-prefix\\\" *ngIf=\\\"_hasTextPrefix\\\" #textPrefixContainer>\\n <ng-content select=\\\"[matTextPrefix]\\\"></ng-content>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-infix\\\">\\n <ng-template [ngIf]=\\\"!_hasOutline() || _forceDisplayInfixLabel()\\\">\\n <ng-template [ngTemplateOutlet]=\\\"labelTemplate\\\"></ng-template>\\n </ng-template>\\n\\n <ng-content></ng-content>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-text-suffix\\\" *ngIf=\\\"_hasTextSuffix\\\">\\n <ng-content select=\\\"[matTextSuffix]\\\"></ng-content>\\n </div>\\n <div class=\\\"mat-mdc-form-field-icon-suffix\\\" *ngIf=\\\"_hasIconSuffix\\\">\\n <ng-content select=\\\"[matSuffix], [matIconSuffix]\\\"></ng-content>\\n </div>\\n </div>\\n\\n <div matFormFieldLineRipple *ngIf=\\\"!_hasOutline()\\\"></div>\\n</div>\\n\\n<div class=\\\"mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align\\\"\\n [class.mat-mdc-form-field-subscript-dynamic-size]=\\\"subscriptSizing === 'dynamic'\\\"\\n [ngSwitch]=\\\"_getDisplayedMessages()\\\">\\n <div class=\\\"mat-mdc-form-field-error-wrapper\\\" *ngSwitchCase=\\\"'error'\\\"\\n [@transitionMessages]=\\\"_subscriptAnimationState\\\">\\n <ng-content select=\\\"mat-error, [matError]\\\"></ng-content>\\n </div>\\n\\n <div class=\\\"mat-mdc-form-field-hint-wrapper\\\" *ngSwitchCase=\\\"'hint'\\\"\\n [@transitionMessages]=\\\"_subscriptAnimationState\\\">\\n <mat-hint *ngIf=\\\"hintLabel\\\" [id]=\\\"_hintLabelId\\\">{{hintLabel}}</mat-hint>\\n <ng-content select=\\\"mat-hint:not([align='end'])\\\"></ng-content>\\n <div class=\\\"mat-mdc-form-field-hint-spacer\\\"></div>\\n <ng-content select=\\\"mat-hint[align='end']\\\"></ng-content>\\n </div>\\n</div>\\n\", styles: [\".mdc-text-field{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-text-field__input{height:28px;width:100%;min-width:0;border:none;border-radius:0;background:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}@media all{.mdc-text-field__input::placeholder{opacity:0}}@media all{.mdc-text-field__input:-ms-input-placeholder{opacity:0}}@media all{.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}}@media all{.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}}.mdc-text-field__affix{height:28px;opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}@supports(-webkit-hyphens: none){.mdc-text-field--outlined .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px}.mdc-text-field--filled{height:56px}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:\\\"\\\";vertical-align:0}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none}@supports(-webkit-hyphens: none){.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1)}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px))*2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-shape-small, 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0}.mdc-text-field--textarea .mdc-floating-label{top:19px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){transform:none}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-10.25px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1)}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:\\\"\\\";vertical-align:-16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:fit-content;min-width:-moz-available;min-width:-webkit-fill-available;overflow:hidden;resize:both}.mdc-text-field--filled .mdc-text-field__resizer{transform:translateY(-1px)}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer{transform:translateX(-1px) translateY(-1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{transform:translateX(1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateX(1px) translateY(1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{transform:translateX(-1px) translateY(1px)}.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}[dir=rtl] .mdc-text-field--with-leading-icon,.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}[dir=rtl] .mdc-text-field--with-trailing-icon,.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}@media screen and (forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px}.mdc-floating-label{position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0px;content:\\\"*\\\"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after,.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)[dir=rtl]::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;pointer-events:none}.mdc-notched-outline__trailing{flex-grow:1}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\\\"\\\"}.mdc-line-ripple::before{z-index:1}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{border-top:1px solid;border-bottom:1px solid}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{max-width:calc(100% - 12px * 2)}.mdc-line-ripple::before{border-bottom-width:1px}.mdc-line-ripple::after{border-bottom-width:2px}.mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height:1px;--mdc-filled-text-field-focus-active-indicator-height:2px;--mdc-filled-text-field-container-shape:4px;border-top-left-radius:var(--mdc-filled-text-field-container-shape);border-top-right-radius:var(--mdc-filled-text-field-container-shape);border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-caret-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-error-caret-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-filled-text-field-input-text-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-filled-text-field-disabled-input-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-focus-label-text-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label,.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-disabled-label-text-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-error-label-text-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-filled-text-field-error-focus-label-text-color)}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mdc-filled-text-field-label-text-font);font-size:var(--mdc-filled-text-field-label-text-size);font-weight:var(--mdc-filled-text-field-label-text-weight);letter-spacing:var(--mdc-filled-text-field-label-text-tracking)}@media all{.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}}@media all{.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mdc-filled-text-field-container-color)}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mdc-filled-text-field-disabled-container-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-hover-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-focus-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-disabled-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-hover-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-error-focus-active-indicator-color)}.mdc-text-field--filled .mdc-line-ripple::before{border-bottom-width:var(--mdc-filled-text-field-active-indicator-height)}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mdc-filled-text-field-focus-active-indicator-height)}.mdc-text-field--outlined{--mdc-outlined-text-field-outline-width:1px;--mdc-outlined-text-field-focus-outline-width:2px;--mdc-outlined-text-field-container-shape:4px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-caret-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-error-caret-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-outlined-text-field-input-text-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-outlined-text-field-disabled-input-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-focus-label-text-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label,.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-disabled-label-text-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-error-label-text-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label--float-above{color:var(--mdc-outlined-text-field-error-focus-label-text-color)}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mdc-outlined-text-field-label-text-font);font-size:var(--mdc-outlined-text-field-label-text-size);font-weight:var(--mdc-outlined-text-field-label-text-weight);letter-spacing:var(--mdc-outlined-text-field-label-text-tracking)}@media all{.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}}@media all{.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:var(--mdc-outlined-text-field-container-shape);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-outlined-text-field-container-shape))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-outlined-text-field-container-shape))*2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:var(--mdc-outlined-text-field-container-shape);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-outlined-text-field-container-shape))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-outlined-text-field-container-shape))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-outlined-text-field-container-shape))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-outlined-text-field-container-shape))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-outlined-text-field-container-shape) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-hover-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-focus-outline-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-disabled-outline-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-error-outline-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-error-hover-outline-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-outlined-text-field-error-focus-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-width:var(--mdc-outlined-text-field-outline-width)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:var(--mdc-outlined-text-field-focus-outline-width)}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-text-field-wrapper::before{content:none}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:\\\"\\\";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:\\\"\\\";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}.cdk-high-contrast-active .mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font);line-height:var(--mat-form-field-container-text-line-height);font-size:var(--mat-form-field-container-text-size);letter-spacing:var(--mat-form-field-container-text-tracking);font-weight:var(--mat-form-field-container-text-weight)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size) * var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:12px;box-sizing:content-box}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__affix{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 34.75px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea{transition:none}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 10.25px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 24.75px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{transform:translateX(calc(0% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}100%{transform:translateX(calc(0% - 32px)) translateY(calc(0% - 34.75px)) scale(0.75)}}[dir=rtl] .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{transform:translateX(calc(0% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}100%{transform:translateX(calc(0% - -32px)) translateY(calc(0% - 34.75px)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-standard 250ms 1}@keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}100%{transform:translateX(calc(0% - 0%)) translateY(calc(0% - 106%)) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.Directionality }, { type: i2.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, propDecorators: { _textField: [{\n type: ViewChild,\n args: ['textField']\n }], _iconPrefixContainer: [{\n type: ViewChild,\n args: ['iconPrefixContainer']\n }], _textPrefixContainer: [{\n type: ViewChild,\n args: ['textPrefixContainer']\n }], _floatingLabel: [{\n type: ViewChild,\n args: [MatFormFieldFloatingLabel]\n }], _notchedOutline: [{\n type: ViewChild,\n args: [MatFormFieldNotchedOutline]\n }], _lineRipple: [{\n type: ViewChild,\n args: [MatFormFieldLineRipple]\n }], _labelChildNonStatic: [{\n type: ContentChild,\n args: [MatLabel]\n }], _labelChildStatic: [{\n type: ContentChild,\n args: [MatLabel, { static: true }]\n }], _formFieldControl: [{\n type: ContentChild,\n args: [MatFormFieldControl]\n }], _prefixChildren: [{\n type: ContentChildren,\n args: [MAT_PREFIX, { descendants: true }]\n }], _suffixChildren: [{\n type: ContentChildren,\n args: [MAT_SUFFIX, { descendants: true }]\n }], _errorChildren: [{\n type: ContentChildren,\n args: [MAT_ERROR, { descendants: true }]\n }], _hintChildren: [{\n type: ContentChildren,\n args: [MatHint, { descendants: true }]\n }], hideRequiredMarker: [{\n type: Input\n }], color: [{\n type: Input\n }], floatLabel: [{\n type: Input\n }], appearance: [{\n type: Input\n }], subscriptSizing: [{\n type: Input\n }], hintLabel: [{\n type: Input\n }] } });\n\nclass MatFormFieldModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldModule, declarations: [MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatPrefix,\n MatSuffix,\n MatFormFieldFloatingLabel,\n MatFormFieldNotchedOutline,\n MatFormFieldLineRipple], imports: [MatCommonModule, CommonModule, ObserversModule], exports: [MatFormField, MatLabel, MatHint, MatError, MatPrefix, MatSuffix, MatCommonModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldModule, imports: [MatCommonModule, CommonModule, ObserversModule, MatCommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatFormFieldModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, CommonModule, ObserversModule],\n exports: [MatFormField, MatLabel, MatHint, MatError, MatPrefix, MatSuffix, MatCommonModule],\n declarations: [\n MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatPrefix,\n MatSuffix,\n MatFormFieldFloatingLabel,\n MatFormFieldNotchedOutline,\n MatFormFieldLineRipple,\n ],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_ERROR, MAT_FORM_FIELD, MAT_FORM_FIELD_DEFAULT_OPTIONS, MAT_PREFIX, MAT_SUFFIX, MatError, MatFormField, MatFormFieldControl, MatFormFieldModule, MatHint, MatLabel, MatPrefix, MatSuffix, getMatFormFieldDuplicatedHintError, getMatFormFieldMissingControlError, getMatFormFieldPlaceholderConflictError, matFormFieldAnimations };\n","import * as i1 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Directive, Output, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { coerceElement, coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { EMPTY, Subject, fromEvent } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\n\n/** Options to pass to the animationstart listener. */\nconst listenerOptions = normalizePassiveListenerOptions({ passive: true });\n/**\n * An injectable service that can be used to monitor the autofill state of an input.\n * Based on the following blog post:\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n */\nclass AutofillMonitor {\n constructor(_platform, _ngZone) {\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._monitoredElements = new Map();\n }\n monitor(elementOrRef) {\n if (!this._platform.isBrowser) {\n return EMPTY;\n }\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n return info.subject;\n }\n const result = new Subject();\n const cssClass = 'cdk-text-field-autofilled';\n const listener = ((event) => {\n // Animation events fire on initial element render, we check for the presence of the autofill\n // CSS class to make sure this is a real change in state, not just the initial render before\n // we fire off events.\n if (event.animationName === 'cdk-text-field-autofill-start' &&\n !element.classList.contains(cssClass)) {\n element.classList.add(cssClass);\n this._ngZone.run(() => result.next({ target: event.target, isAutofilled: true }));\n }\n else if (event.animationName === 'cdk-text-field-autofill-end' &&\n element.classList.contains(cssClass)) {\n element.classList.remove(cssClass);\n this._ngZone.run(() => result.next({ target: event.target, isAutofilled: false }));\n }\n });\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('animationstart', listener, listenerOptions);\n element.classList.add('cdk-text-field-autofill-monitored');\n });\n this._monitoredElements.set(element, {\n subject: result,\n unlisten: () => {\n element.removeEventListener('animationstart', listener, listenerOptions);\n },\n });\n return result;\n }\n stopMonitoring(elementOrRef) {\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n info.unlisten();\n info.subject.complete();\n element.classList.remove('cdk-text-field-autofill-monitored');\n element.classList.remove('cdk-text-field-autofilled');\n this._monitoredElements.delete(element);\n }\n }\n ngOnDestroy() {\n this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: AutofillMonitor, deps: [{ token: i1.Platform }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: AutofillMonitor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: AutofillMonitor, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i0.NgZone }]; } });\n/** A directive that can be used to monitor the autofill state of an input. */\nclass CdkAutofill {\n constructor(_elementRef, _autofillMonitor) {\n this._elementRef = _elementRef;\n this._autofillMonitor = _autofillMonitor;\n /** Emits when the autofill state of the element changes. */\n this.cdkAutofill = new EventEmitter();\n }\n ngOnInit() {\n this._autofillMonitor\n .monitor(this._elementRef)\n .subscribe(event => this.cdkAutofill.emit(event));\n }\n ngOnDestroy() {\n this._autofillMonitor.stopMonitoring(this._elementRef);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkAutofill, deps: [{ token: i0.ElementRef }, { token: AutofillMonitor }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkAutofill, selector: \"[cdkAutofill]\", outputs: { cdkAutofill: \"cdkAutofill\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkAutofill, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkAutofill]',\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: AutofillMonitor }]; }, propDecorators: { cdkAutofill: [{\n type: Output\n }] } });\n\n/** Directive to automatically resize a textarea to fit its content. */\nclass CdkTextareaAutosize {\n /** Minimum amount of rows in the textarea. */\n get minRows() {\n return this._minRows;\n }\n set minRows(value) {\n this._minRows = coerceNumberProperty(value);\n this._setMinHeight();\n }\n /** Maximum amount of rows in the textarea. */\n get maxRows() {\n return this._maxRows;\n }\n set maxRows(value) {\n this._maxRows = coerceNumberProperty(value);\n this._setMaxHeight();\n }\n /** Whether autosizing is enabled or not */\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n value = coerceBooleanProperty(value);\n // Only act if the actual value changed. This specifically helps to not run\n // resizeToFitContent too early (i.e. before ngAfterViewInit)\n if (this._enabled !== value) {\n (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n }\n }\n get placeholder() {\n return this._textareaElement.placeholder;\n }\n set placeholder(value) {\n this._cachedPlaceholderHeight = undefined;\n if (value) {\n this._textareaElement.setAttribute('placeholder', value);\n }\n else {\n this._textareaElement.removeAttribute('placeholder');\n }\n this._cacheTextareaPlaceholderHeight();\n }\n constructor(_elementRef, _platform, _ngZone, \n /** @breaking-change 11.0.0 make document required */\n document) {\n this._elementRef = _elementRef;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._destroyed = new Subject();\n this._enabled = true;\n /**\n * Value of minRows as of last resize. If the minRows has decreased, the\n * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\n * does not have the same problem because it does not affect the textarea's scrollHeight.\n */\n this._previousMinRows = -1;\n this._isViewInited = false;\n /** Handles `focus` and `blur` events. */\n this._handleFocusEvent = (event) => {\n this._hasFocus = event.type === 'focus';\n };\n this._document = document;\n this._textareaElement = this._elementRef.nativeElement;\n }\n /** Sets the minimum height of the textarea as determined by minRows. */\n _setMinHeight() {\n const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null;\n if (minHeight) {\n this._textareaElement.style.minHeight = minHeight;\n }\n }\n /** Sets the maximum height of the textarea as determined by maxRows. */\n _setMaxHeight() {\n const maxHeight = this.maxRows && this._cachedLineHeight ? `${this.maxRows * this._cachedLineHeight}px` : null;\n if (maxHeight) {\n this._textareaElement.style.maxHeight = maxHeight;\n }\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n // Remember the height which we started with in case autosizing is disabled\n this._initialHeight = this._textareaElement.style.height;\n this.resizeToFitContent();\n this._ngZone.runOutsideAngular(() => {\n const window = this._getWindow();\n fromEvent(window, 'resize')\n .pipe(auditTime(16), takeUntil(this._destroyed))\n .subscribe(() => this.resizeToFitContent(true));\n this._textareaElement.addEventListener('focus', this._handleFocusEvent);\n this._textareaElement.addEventListener('blur', this._handleFocusEvent);\n });\n this._isViewInited = true;\n this.resizeToFitContent(true);\n }\n }\n ngOnDestroy() {\n this._textareaElement.removeEventListener('focus', this._handleFocusEvent);\n this._textareaElement.removeEventListener('blur', this._handleFocusEvent);\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Cache the height of a single-row textarea if it has not already been cached.\n *\n * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n * maxRows. For the initial version, we will assume that the height of a single line in the\n * textarea does not ever change.\n */\n _cacheTextareaLineHeight() {\n if (this._cachedLineHeight) {\n return;\n }\n // Use a clone element because we have to override some styles.\n let textareaClone = this._textareaElement.cloneNode(false);\n textareaClone.rows = 1;\n // Use `position: absolute` so that this doesn't cause a browser layout and use\n // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n // would affect the height.\n textareaClone.style.position = 'absolute';\n textareaClone.style.visibility = 'hidden';\n textareaClone.style.border = 'none';\n textareaClone.style.padding = '0';\n textareaClone.style.height = '';\n textareaClone.style.minHeight = '';\n textareaClone.style.maxHeight = '';\n // In Firefox it happens that textarea elements are always bigger than the specified amount\n // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n // to hidden. This ensures that there is no invalid calculation of the line height.\n // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n textareaClone.style.overflow = 'hidden';\n this._textareaElement.parentNode.appendChild(textareaClone);\n this._cachedLineHeight = textareaClone.clientHeight;\n textareaClone.remove();\n // Min and max heights have to be re-calculated if the cached line height changes\n this._setMinHeight();\n this._setMaxHeight();\n }\n _measureScrollHeight() {\n const element = this._textareaElement;\n const previousMargin = element.style.marginBottom || '';\n const isFirefox = this._platform.FIREFOX;\n const needsMarginFiller = isFirefox && this._hasFocus;\n const measuringClass = isFirefox\n ? 'cdk-textarea-autosize-measuring-firefox'\n : 'cdk-textarea-autosize-measuring';\n // In some cases the page might move around while we're measuring the `textarea` on Firefox. We\n // work around it by assigning a temporary margin with the same height as the `textarea` so that\n // it occupies the same amount of space. See #23233.\n if (needsMarginFiller) {\n element.style.marginBottom = `${element.clientHeight}px`;\n }\n // Reset the textarea height to auto in order to shrink back to its default size.\n // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n element.classList.add(measuringClass);\n // The measuring class includes a 2px padding to workaround an issue with Chrome,\n // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n const scrollHeight = element.scrollHeight - 4;\n element.classList.remove(measuringClass);\n if (needsMarginFiller) {\n element.style.marginBottom = previousMargin;\n }\n return scrollHeight;\n }\n _cacheTextareaPlaceholderHeight() {\n if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n return;\n }\n if (!this.placeholder) {\n this._cachedPlaceholderHeight = 0;\n return;\n }\n const value = this._textareaElement.value;\n this._textareaElement.value = this._textareaElement.placeholder;\n this._cachedPlaceholderHeight = this._measureScrollHeight();\n this._textareaElement.value = value;\n }\n ngDoCheck() {\n if (this._platform.isBrowser) {\n this.resizeToFitContent();\n }\n }\n /**\n * Resize the textarea to fit its content.\n * @param force Whether to force a height recalculation. By default the height will be\n * recalculated only if the value changed since the last call.\n */\n resizeToFitContent(force = false) {\n // If autosizing is disabled, just skip everything else\n if (!this._enabled) {\n return;\n }\n this._cacheTextareaLineHeight();\n this._cacheTextareaPlaceholderHeight();\n // If we haven't determined the line-height yet, we know we're still hidden and there's no point\n // in checking the height of the textarea.\n if (!this._cachedLineHeight) {\n return;\n }\n const textarea = this._elementRef.nativeElement;\n const value = textarea.value;\n // Only resize if the value or minRows have changed since these calculations can be expensive.\n if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n return;\n }\n const scrollHeight = this._measureScrollHeight();\n const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0);\n // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n textarea.style.height = `${height}px`;\n this._ngZone.runOutsideAngular(() => {\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n }\n else {\n setTimeout(() => this._scrollToCaretPosition(textarea));\n }\n });\n this._previousValue = value;\n this._previousMinRows = this._minRows;\n }\n /**\n * Resets the textarea to its original size\n */\n reset() {\n // Do not try to change the textarea, if the initialHeight has not been determined yet\n // This might potentially remove styles when reset() is called before ngAfterViewInit\n if (this._initialHeight !== undefined) {\n this._textareaElement.style.height = this._initialHeight;\n }\n }\n _noopInputHandler() {\n // no-op handler that ensures we're running change detection on input events.\n }\n /** Access injected document if available or fallback to global document reference */\n _getDocument() {\n return this._document || document;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n const doc = this._getDocument();\n return doc.defaultView || window;\n }\n /**\n * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\n * prevent it from scrolling to the caret position. We need to re-set the selection\n * in order for it to scroll to the proper position.\n */\n _scrollToCaretPosition(textarea) {\n const { selectionStart, selectionEnd } = textarea;\n // IE will throw an \"Unspecified error\" if we try to set the selection range after the\n // element has been removed from the DOM. Assert that the directive hasn't been destroyed\n // between the time we requested the animation frame and when it was executed.\n // Also note that we have to assert that the textarea is focused before we set the\n // selection range. Setting the selection range on a non-focused textarea will cause\n // it to receive focus on IE and Edge.\n if (!this._destroyed.isStopped && this._hasFocus) {\n textarea.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkTextareaAutosize, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: i0.NgZone }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: CdkTextareaAutosize, selector: \"textarea[cdkTextareaAutosize]\", inputs: { minRows: [\"cdkAutosizeMinRows\", \"minRows\"], maxRows: [\"cdkAutosizeMaxRows\", \"maxRows\"], enabled: [\"cdkTextareaAutosize\", \"enabled\"], placeholder: \"placeholder\" }, host: { attributes: { \"rows\": \"1\" }, listeners: { \"input\": \"_noopInputHandler()\" }, classAttribute: \"cdk-textarea-autosize\" }, exportAs: [\"cdkTextareaAutosize\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: CdkTextareaAutosize, decorators: [{\n type: Directive,\n args: [{\n selector: 'textarea[cdkTextareaAutosize]',\n exportAs: 'cdkTextareaAutosize',\n host: {\n 'class': 'cdk-textarea-autosize',\n // Textarea elements that have the directive applied should have a single row by default.\n // Browsers normally show two rows by default and therefore this limits the minRows binding.\n 'rows': '1',\n '(input)': '_noopInputHandler()',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, propDecorators: { minRows: [{\n type: Input,\n args: ['cdkAutosizeMinRows']\n }], maxRows: [{\n type: Input,\n args: ['cdkAutosizeMaxRows']\n }], enabled: [{\n type: Input,\n args: ['cdkTextareaAutosize']\n }], placeholder: [{\n type: Input\n }] } });\n\nclass TextFieldModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: TextFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: TextFieldModule, declarations: [CdkAutofill, CdkTextareaAutosize], exports: [CdkAutofill, CdkTextareaAutosize] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: TextFieldModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: TextFieldModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [CdkAutofill, CdkTextareaAutosize],\n exports: [CdkAutofill, CdkTextareaAutosize],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { getSupportedInputTypes } from '@angular/cdk/platform';\nimport * as i4 from '@angular/cdk/text-field';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Optional, Self, Inject, Input, NgModule } from '@angular/core';\nimport * as i2 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport * as i3 from '@angular/material/core';\nimport { mixinErrorState, MatCommonModule } from '@angular/material/core';\nimport * as i5 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\n/** @docs-private */\nfunction getMatInputUnsupportedTypeError(type) {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\n}\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nconst MAT_INPUT_VALUE_ACCESSOR = new InjectionToken('MAT_INPUT_VALUE_ACCESSOR');\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit',\n];\nlet nextUniqueId = 0;\n// Boilerplate for applying mixins to MatInput.\n/** @docs-private */\nconst _MatInputBase = mixinErrorState(class {\n constructor(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, \n /**\n * Form control bound to the component.\n * Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n ngControl) {\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this.ngControl = ngControl;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n this.stateChanges = new Subject();\n }\n});\nclass MatInput extends _MatInputBase {\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get id() {\n return this._id;\n }\n set id(value) {\n this._id = value || this._uid;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n /** Input type of the element. */\n get type() {\n return this._type;\n }\n set type(value) {\n this._type = value || 'text';\n this._validateType();\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n this._elementRef.nativeElement.type = this._type;\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get value() {\n return this._inputValueAccessor.value;\n }\n set value(value) {\n if (value !== this.value) {\n this._inputValueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n /** Whether the element is readonly. */\n get readonly() {\n return this._readonly;\n }\n set readonly(value) {\n this._readonly = coerceBooleanProperty(value);\n }\n constructor(_elementRef, _platform, ngControl, _parentForm, _parentFormGroup, _defaultErrorStateMatcher, inputValueAccessor, _autofillMonitor, ngZone, \n // TODO: Remove this once the legacy appearance has been removed. We only need\n // to inject the form field for determining whether the placeholder has been promoted.\n _formField) {\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n this._elementRef = _elementRef;\n this._platform = _platform;\n this._autofillMonitor = _autofillMonitor;\n this._formField = _formField;\n this._uid = `mat-input-${nextUniqueId++}`;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.focused = false;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.stateChanges = new Subject();\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.controlType = 'mat-input';\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.autofilled = false;\n this._disabled = false;\n this._type = 'text';\n this._readonly = false;\n this._neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week',\n ].filter(t => getSupportedInputTypes().has(t));\n this._iOSKeyupListener = (event) => {\n const el = event.target;\n // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n // indicate different things. If the value is 0, it means that the caret is at the start\n // of the input, whereas a value of `null` means that the input doesn't support\n // manipulating the selection range. Inputs that don't support setting the selection range\n // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n };\n const element = this._elementRef.nativeElement;\n const nodeName = element.nodeName.toLowerCase();\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = inputValueAccessor || element;\n this._previousNativeValue = this.value;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('keyup', this._iOSKeyupListener);\n });\n }\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = nodeName === 'select';\n this._isTextarea = nodeName === 'textarea';\n this._isInFormField = !!_formField;\n if (this._isNativeSelect) {\n this.controlType = element.multiple\n ? 'mat-native-select-multiple'\n : 'mat-native-select';\n }\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n ngOnChanges() {\n this.stateChanges.next();\n }\n ngOnDestroy() {\n this.stateChanges.complete();\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n if (this._platform.IOS) {\n this._elementRef.nativeElement.removeEventListener('keyup', this._iOSKeyupListener);\n }\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when\n // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it\n // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming\n // disabled.\n if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\n this.disabled = this.ngControl.disabled;\n this.stateChanges.next();\n }\n }\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n // present or not depends on a query which is prone to \"changed after checked\" errors.\n this._dirtyCheckPlaceholder();\n }\n /** Focuses the input. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Callback for the cases where the focused state of the input changes. */\n _focusChanged(isFocused) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n /** Does some manual dirty checking on the native input `value` property. */\n _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n /** Does some manual dirty checking on the native input `placeholder` attribute. */\n _dirtyCheckPlaceholder() {\n const placeholder = this._getPlaceholder();\n if (placeholder !== this._previousPlaceholder) {\n const element = this._elementRef.nativeElement;\n this._previousPlaceholder = placeholder;\n placeholder\n ? element.setAttribute('placeholder', placeholder)\n : element.removeAttribute('placeholder');\n }\n }\n /** Gets the current placeholder of the form field. */\n _getPlaceholder() {\n return this.placeholder || null;\n }\n /** Make sure the input is a supported type. */\n _validateType() {\n if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n /** Checks whether the input type is one of the types that are never empty. */\n _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n /** Checks whether the input is invalid based on the native validation. */\n _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = this._elementRef.nativeElement.validity;\n return validity && validity.badInput;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty() {\n return (!this._isNeverEmpty() &&\n !this._elementRef.nativeElement.value &&\n !this._isBadInput() &&\n !this.autofilled);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n if (this._isNativeSelect) {\n // For a single-selection `<select>`, the label should float when the selected option has\n // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement;\n const firstOption = selectElement.options[0];\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return (this.focused ||\n selectElement.multiple ||\n !this.empty ||\n !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label));\n }\n else {\n return this.focused || !this.empty;\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n }\n else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n /** Whether the form control is a native select that is displayed inline. */\n _isInlineSelect() {\n const element = this._elementRef.nativeElement;\n return this._isNativeSelect && (element.multiple || element.size > 1);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatInput, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: i2.NgControl, optional: true, self: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i3.ErrorStateMatcher }, { token: MAT_INPUT_VALUE_ACCESSOR, optional: true, self: true }, { token: i4.AutofillMonitor }, { token: i0.NgZone }, { token: MAT_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatInput, selector: \"input[matInput], textarea[matInput], select[matNativeControl],\\n input[matNativeControl], textarea[matNativeControl]\", inputs: { disabled: \"disabled\", id: \"id\", placeholder: \"placeholder\", name: \"name\", required: \"required\", type: \"type\", errorStateMatcher: \"errorStateMatcher\", userAriaDescribedBy: [\"aria-describedby\", \"userAriaDescribedBy\"], value: \"value\", readonly: \"readonly\" }, host: { listeners: { \"focus\": \"_focusChanged(true)\", \"blur\": \"_focusChanged(false)\", \"input\": \"_onInput()\" }, properties: { \"class.mat-input-server\": \"_isServer\", \"class.mat-mdc-form-field-textarea-control\": \"_isInFormField && _isTextarea\", \"class.mat-mdc-form-field-input-control\": \"_isInFormField\", \"class.mdc-text-field__input\": \"_isInFormField\", \"class.mat-mdc-native-select-inline\": \"_isInlineSelect()\", \"id\": \"id\", \"disabled\": \"disabled\", \"required\": \"required\", \"attr.name\": \"name || null\", \"attr.readonly\": \"readonly && !_isNativeSelect || null\", \"attr.aria-invalid\": \"(empty && required) ? null : errorState\", \"attr.aria-required\": \"required\", \"attr.id\": \"id\" }, classAttribute: \"mat-mdc-input-element\" }, providers: [{ provide: MatFormFieldControl, useExisting: MatInput }], exportAs: [\"matInput\"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatInput, decorators: [{\n type: Directive,\n args: [{\n selector: `input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]`,\n exportAs: 'matInput',\n host: {\n 'class': 'mat-mdc-input-element',\n // The BaseMatInput parent class adds `mat-input-element`, `mat-form-field-control` and\n // `mat-form-field-autofill-control` to the CSS class list, but this should not be added for\n // this MDC equivalent input.\n '[class.mat-input-server]': '_isServer',\n '[class.mat-mdc-form-field-textarea-control]': '_isInFormField && _isTextarea',\n '[class.mat-mdc-form-field-input-control]': '_isInFormField',\n '[class.mdc-text-field__input]': '_isInFormField',\n '[class.mat-mdc-native-select-inline]': '_isInlineSelect()',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[id]': 'id',\n '[disabled]': 'disabled',\n '[required]': 'required',\n '[attr.name]': 'name || null',\n '[attr.readonly]': 'readonly && !_isNativeSelect || null',\n // Only mark the input as invalid for assistive technology if it has a value since the\n // state usually overlaps with `aria-required` when the input is empty and can be redundant.\n '[attr.aria-invalid]': '(empty && required) ? null : errorState',\n '[attr.aria-required]': 'required',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n '(focus)': '_focusChanged(true)',\n '(blur)': '_focusChanged(false)',\n '(input)': '_onInput()',\n },\n providers: [{ provide: MatFormFieldControl, useExisting: MatInput }],\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: i2.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i2.NgForm, decorators: [{\n type: Optional\n }] }, { type: i2.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: i3.ErrorStateMatcher }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [MAT_INPUT_VALUE_ACCESSOR]\n }] }, { type: i4.AutofillMonitor }, { type: i0.NgZone }, { type: i5.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }] }]; }, propDecorators: { disabled: [{\n type: Input\n }], id: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], name: [{\n type: Input\n }], required: [{\n type: Input\n }], type: [{\n type: Input\n }], errorStateMatcher: [{\n type: Input\n }], userAriaDescribedBy: [{\n type: Input,\n args: ['aria-describedby']\n }], value: [{\n type: Input\n }], readonly: [{\n type: Input\n }] } });\n\nclass MatInputModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: MatInputModule, declarations: [MatInput], imports: [MatCommonModule, MatFormFieldModule], exports: [MatInput, MatFormFieldModule, TextFieldModule, MatCommonModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatInputModule, imports: [MatCommonModule, MatFormFieldModule, MatFormFieldModule, TextFieldModule, MatCommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatInputModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, MatFormFieldModule],\n exports: [MatInput, MatFormFieldModule, TextFieldModule, MatCommonModule],\n declarations: [MatInput],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_INPUT_VALUE_ACCESSOR, MatInput, MatInputModule, getMatInputUnsupportedTypeError };\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}