{"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 * ``\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 `
`\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
\\n \\n
\\n\\n
\\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
\\n \\n
\\n\\n
\\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: \"
\\n
\\n \\n
\\n
\\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: \"
\\n
\\n \\n
\\n
\\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: \"\\n \\n \\n\\n\\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n\\n
\\n \\n
\\n
\\n \\n
\\n\\n
\\n \\n \\n \\n\\n \\n
\\n\\n
\\n \\n
\\n
\\n \\n
\\n
\\n\\n
\\n
\\n\\n
\\n
\\n \\n
\\n\\n
\\n {{hintLabel}}\\n \\n
\\n \\n
\\n
\\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: \"\\n \\n \\n\\n\\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n\\n
\\n \\n
\\n
\\n \\n
\\n\\n
\\n \\n \\n \\n\\n \\n
\\n\\n
\\n \\n
\\n
\\n \\n
\\n
\\n\\n
\\n
\\n\\n
\\n
\\n \\n
\\n\\n
\\n {{hintLabel}}\\n \\n
\\n \\n
\\n
\\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 ``, 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]}