{"version":3,"file":"189.b7028f4a0cf53853.js","mappings":"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","names":["footerData","ScreenService","constructor","observer","this","observe","i0","factory","FooterComponent","screenService","cd","lang","homeService","env","currentLanguage","currentYear","Date","getFullYear","isBelowMd","subscribe","res","isSmScreen$","matches","markForCheck","getCurrentYear","getFooterInfo","next","response","SiteInfo","complete","selectors","HomeService","http","get","api","sid","responseType","pipe","map","s","req","post","base","formInputs","of","ConfigInfo","success","FacebookUrl","data","company","facebook","TwitterUrl","twitter","InstagramUrl","instagram","CustomerServiceNumber","customerServicePhone","Email","email","YoutubeUrl","WhatsAppNumber","AndroidAppUrl","storeInfo","appUrl","IOsAppUrl","iosAppUrl","t","g","p","a","_tabFocusChanged","_removeTabBodyWrapperHeight","_setTabBodyWrapperHeight","_MAT_INK_BAR_POSITIONER","InjectionToken","providedIn","element","left","offsetLeft","width","offsetWidth","MatInkBar","_elementRef","_ngZone","_inkBarPositioner","_animationMode","alignToElement","show","onStable","take","positions","inkBar","nativeElement","style","visibility","hide","ɵfac","ANIMATION_MODULE_TYPE","ɵdir","MAT_TAB_CONTENT","MAT_TAB_LABEL","MAT_TAB","MatTabLabel","CdkPortal","templateRef","viewContainerRef","_closestTab","super","provide","useExisting","_MatTabBase","mixinDisabled","MAT_TAB_GROUP","MatTab","_viewContainerRef","_closestTabGroup","textLabel","_contentPortal","_stateChanges","Subject","position","origin","isActive","templateLabel","_templateLabel","value","_setTemplateLabelInput","content","ngOnChanges","changes","hasOwnProperty","ngOnDestroy","ngOnInit","TemplatePortal","_explicitContent","_implicitContent","ɵcmp","n","TemplateRef","i","ngContentSelectors","encapsulation","matTabsAnimations","translateTab","trigger","state","transform","minHeight","transition","animate","MatTabBodyPortal","CdkPortalOutlet","componentFactoryResolver","_host","_document","_centeringSub","Subscription","_leavingSub","_beforeCentering","startWith","_isCenterPosition","_position","isCentering","hasAttached","attach","_content","_afterLeavingCenter","detach","unsubscribe","forwardRef","MatTabBody","DOCUMENT","_MatTabBodyBase","_dir","changeDetectorRef","_dirChangeSubscription","_translateTabComplete","_onCentering","EventEmitter","_onCentered","animationDuration","change","dir","_computePositionAnimationState","distinctUntilChanged","x","y","fromState","toState","event","emit","_positionIndex","_computePositionFromOrigin","_onTranslateTabStarted","clientHeight","_getLayoutDirection","i1","inputs","elementRef","decls","directives","styles","MAT_TABS_CONFIG","_MatTabLabelWrapperBase","MatTabLabelWrapper","focus","getOffsetLeft","getOffsetWidth","passiveEventListenerOptions","normalizePassiveListenerOptions","passive","MatPaginatedTabHeader","_changeDetectorRef","_viewportRuler","_platform","_scrollDistance","_selectedIndexChanged","_destroyed","_showPaginationControls","_disableScrollAfter","_disableScrollBefore","_stopScrolling","disablePagination","_selectedIndex","selectFocusedIndex","indexFocused","runOutsideAngular","fromEvent","takeUntil","_stopInterval","selectedIndex","coerceNumberProperty","_keyManager","updateActiveItem","ngAfterViewInit","_previousPaginator","_handlePaginatorPress","_nextPaginator","ngAfterContentInit","dirChange","resize","realign","updatePagination","_alignInkBarToSelectedTab","FocusKeyManager","_items","withHorizontalOrientation","withHomeAndEnd","withWrap","merge","_itemsResized","run","Promise","resolve","then","Math","max","min","_getMaxScrollDistance","newFocusIndex","_setTabFocus","ResizeObserver","EMPTY","switchMap","tabItems","Observable","resizeObserver","forEach","item","disconnect","skip","ngAfterContentChecked","_tabLabelCount","length","_scrollToLabel","_checkScrollingControls","_scrollDistanceChanged","_updateTabScrollPosition","_handleKeydown","hasModifierKey","keyCode","ENTER","SPACE","focusIndex","_itemSelected","onKeydown","_onContentChanges","textContent","_currentTextContent","_checkPaginationEnabled","activeItemIndex","_isValidIndex","setActiveItem","index","tab","toArray","disabled","tabIndex","containerEl","_tabListContainer","scrollLeft","scrollWidth","scrollDistance","translateX","_tabList","round","TRIDENT","EDGE","_scrollTo","_scrollHeader","direction","scrollAmount","_handlePaginatorClick","labelIndex","selectedLabel","viewLength","labelBeforePos","labelAfterPos","_tabListInner","beforeVisiblePos","afterVisiblePos","EXAGGERATED_OVERSCROLL","isEnabled","selectedItem","selectedLabelWrapper","_inkBar","mouseEvent","button","timer","maxScrollDistance","distance","i1$1","i3","_MatTabHeaderBase","viewportRuler","ngZone","platform","animationMode","_disableRipple","disableRipple","coerceBooleanProperty","preventDefault","MatTabHeader","at","it","nt","ot","st","i4","i5","nextId","_MatTabGroupMixinBase","mixinColor","mixinDisableRipple","_MatTabGroupBase","defaultConfig","_a","_tabs","QueryList","_indexToSelect","_lastFocusedTabIndex","_tabBodyWrapperHeight","_tabsSubscription","_tabLabelSubscription","headerPosition","selectedIndexChange","focusChange","animationDone","selectedTabChange","_groupId","dynamicHeight","contentTabIndex","_dynamicHeight","_animationDuration","test","_contentTabIndex","backgroundColor","_backgroundColor","classList","remove","add","indexToSelect","_clampTabIndex","isFirstRun","_createChangeEvent","wrapper","_tabBodyWrapper","_subscribeToAllTabChanges","_subscribeToTabLabels","tabs","selectedTab","_allTabs","reset","filter","notifyOnChanges","destroy","realignInkBar","_tabHeader","focusTab","header","_focusChanged","MatTabChangeEvent","_getTabLabelId","_getTabContentId","tabHeight","height","offsetHeight","_handleClick","tabHeader","_getTabIndex","focusOrigin","MatTabGroup","rt","lt","i3$1","i7","i7$1","MatTabsModule","ɵmod","ɵinj","CommonModule","MatCommonModule","PortalModule","MatRippleModule","ObserversModule","A11yModule"],"sourceRoot":"webpack:///","sources":["./src/app/pages/__footer/Footer.ts","./src/app/__core/services/screen.service.ts","./src/app/pages/__footer/footer.component.html","./src/app/pages/__footer/footer.component.ts","./src/app/pages/home/home.service.ts","./node_modules/@angular/material/fesm2015/tabs.mjs"],"sourcesContent":["export interface Footer { \r\n title: string;\r\n SubTitles : Name[]\r\n}\r\n\r\nexport interface Name {\r\n name: string,\r\n route?: string[]\r\n} \r\n\r\nexport const footerData: Footer[] = [\r\n\r\n]\r\n ","import { Injectable } from '@angular/core';\r\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { Observable } from 'rxjs'; \r\n \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScreenService {\r\n\r\n constructor(private observer: BreakpointObserver) {}\r\n\r\n isBelowSm = (): Observable<BreakpointState> => this.observer.observe(['(max-width: 575px)']);\r\n \r\n\r\n isBelowMd = (): Observable<BreakpointState> => this.observer.observe(['(max-width: 767px)']);\r\n \r\n\r\n isBelowLg = (): Observable<BreakpointState> => this.observer.observe(['(max-width: 991px)']);\r\n \r\n\r\n isBelowXl = (): Observable<BreakpointState> => this.observer.observe(['(max-width: 1199px)']);\r\n}\r\n","<footer>\r\n <div class=\"container\">\r\n <div class=\"row text-center\">\r\n <div class=\"col-xs-12 logo mb-4\" [ngClass]=\"(isSmScreen$) ? 'col-sm-12' : 'col-sm-2 '\" >\r\n <img *ngIf=\"currentLanguage == 'ar'\" [src]=\"logoPath + 'logoArBlack.svg'\" [alt]=\"appName\">\r\n <img *ngIf=\"currentLanguage == 'en'\" [src]=\"logoPath + 'logoEnBlack.svg'\" [alt]=\"appName\">\r\n </div>\r\n <div [ngClass]=\"(isSmScreen$) ? 'col-sm-6' : 'col-sm-2 '\">\r\n <h5 class=\"title\">\r\n {{ 'products' | translate }}\r\n </h5>\r\n <ul class=\"list-unstyled\">\r\n <li >\r\n {{ 'insureCar' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div [ngClass]=\"(isSmScreen$) ? 'col-sm-6' : 'col-sm-2 '\">\r\n <h5 class=\"title\">\r\n {{ 'aboutCompany' | translate }}\r\n </h5>\r\n <ul class=\"list-unstyled\">\r\n <li >\r\n {{ 'informationAboutUs' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div [ngClass]=\"(isSmScreen$) ? 'col-sm-6' : 'col-sm-2 '\">\r\n <h5 class=\"title\">\r\n {{ 'support' | translate }}\r\n </h5>\r\n <ul class=\"list-unstyled\">\r\n <li >\r\n <a [owlRouterLink]=\"['/', 'faqs']\">\r\n {{ 'help' | translate }}\r\n </a>\r\n </li>\r\n <li >\r\n {{ 'instantChat' | translate }}\r\n </li>\r\n <li >\r\n <a [owlRouterLink]=\"['/', 'contact-us']\">\r\n {{ 'contactUs' | translate }}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div [ngClass]=\"(isSmScreen$) ? 'col-sm-6' : 'col-sm-2 '\" *ngIf=\"!!SiteInfo\">\r\n <h5 class=\"title\">\r\n {{ 'getSocial' | translate }}\r\n </h5>\r\n <ul class=\"list-unstyled\" >\r\n <li >\r\n <a href=\"{{ SiteInfo.FacebookUrl }}\" target=\"_blank\">\r\n {{ 'facebook' | translate }}\r\n </a>\r\n </li>\r\n <li >\r\n <a href=\"{{ SiteInfo.TwitterUrl }}\" target=\"_blank\">\r\n {{ 'twitter' | translate }}\r\n </a>\r\n </li>\r\n <li >\r\n <a href=\"{{ SiteInfo.YoutubeUrl }}\" target=\"_blank\">\r\n {{ 'youtube' | translate }}\r\n </a>\r\n </li>\r\n <li >\r\n <a href=\"{{ SiteInfo.InstagramUrl }}\" target=\"_blank\">\r\n {{ 'instagram' | translate }}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n\r\n <div *ngFor=\"let data of footer\" [ngClass]=\"(isSmScreen$) ? 'col-sm-6' : 'col-sm-2 '\">\r\n <h5 class=\"title\">\r\n {{ data.title | translate }}\r\n </h5>\r\n <ul class=\"list-unstyled\">\r\n <ng-container *ngFor=\"let subTitle of data.SubTitles\">\r\n <li > \r\n <a *ngIf=\"!!subTitle.route\" [owlRouterLink]=\"subTitle.route\">\r\n {{ subTitle.name | translate }} \r\n </a>\r\n <ng-container *ngIf=\"!subTitle.route\" >\r\n {{ subTitle.name | translate }} \r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div> \r\n <div [ngClass]=\"(isSmScreen$) ? 'col-sm-12' : 'col-sm-2 '\" *ngIf=\"!!SiteInfo\" >\r\n <h5 class=\"title\">\r\n {{ \"downloadOurApp\" | translate }}\r\n </h5> \r\n <span class=\"w-100 overflow-hidden\">\r\n <a target=\"_blank\" href=\"{{ SiteInfo.IOsAppUrl }}\">\r\n <img class=\"my-1\" [src]=\"baseImages + 'iosApp.svg'\" width=\"190px\" [alt]=\"appName\">\r\n </a>\r\n <a target=\"_blank\" href=\"{{ SiteInfo.AndroidAppUrl }}\">\r\n <img class=\"my-1\" [src]=\"baseImages + 'androidApp.svg'\" width=\"190px\" [alt]=\"appName\">\r\n </a>\r\n </span>\r\n </div>\r\n </div>\r\n <p class=\"text-center m-auto w-75\" style=\"display: flex; justify-content: space-around;\">\r\n <a [owlRouterLink]=\"['/', 'privacy-policy']\">\r\n <span> {{ 'privacyPolicy' | translate }} </span>\r\n </a>\r\n <a [owlRouterLink]=\"['/', 'terms-and-conditions']\">\r\n <span> {{ 'termsOfUse' | translate }} </span>\r\n </a>\r\n <span> Ammni.com {{ currentYear }} {{ \"allRightsReserved\" | translate }} </span>\r\n </p>\r\n </div>\r\n</footer>\r\n","import { TranslationService } from './../../__core/services/translation.service';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; \r\nimport { environment as env } from 'src/environments/environment';\r\nimport { ScreenService } from '../../__core/services/screen.service';\r\nimport { Footer, footerData } from './Footer';\r\nimport { HomeService } from '../home/home.service';\r\nimport { ISiteInfo } from 'src/app/__core/interfaces/ISiteInfo';\r\n\r\n@Component({\r\n selector: 'ess-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss'],\r\n /*changeDetection: ChangeDetectionStrategy.OnPush*/\r\n})\r\nexport class FooterComponent {\r\n\r\n footer: Footer[] = footerData;\r\n appName: string = env.appName;\r\n isSmScreen$: boolean = false;\r\n baseImages: string = \"assets/images/_footer/\";\r\n logoPath: string = \"assets/images/_header/\";\r\n currentYear: any\r\n currentLanguage: any = this.lang.currentLanguage;\r\n\r\n public SiteInfo!: ISiteInfo;\r\n\r\n constructor(private screenService: ScreenService, private cd: ChangeDetectorRef, private lang: TranslationService, private homeService: HomeService) {\r\n this.screenService.isBelowMd().subscribe((res: any) => {\r\n this.isSmScreen$ = (res.matches);\r\n this.cd.markForCheck();\r\n this.getCurrentYear();\r\n });\r\n this.homeService.getFooterInfo().subscribe({\r\n next: (response: ISiteInfo) => {\r\n this.SiteInfo = response;\r\n // cd.markForCheck();\r\n\r\n }, complete: () => {\r\n // cd.detectChanges();\r\n }\r\n });\r\n }\r\n \r\n getCurrentYear = () => this.currentYear = new Date().getFullYear(); \r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { map, Subscription, of, Observable, switchMap } from 'rxjs';\r\nimport { endPoints as api, base } from 'src/app/__api/endPoints';\r\nimport { Copmany } from 'src/app/__core/interfaces/Company';\r\nimport { IFaqList } from 'src/app/__core/interfaces/IFaqs';\r\nimport { ISiteInfo } from 'src/app/__core/interfaces/ISiteInfo';\r\nimport { baseResponse as res } from './../../__core/interfaces/baseResponse';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HomeService {\r\n\r\n sid: string = \"\";\r\n private SiteInfo!: ISiteInfo;\r\n constructor(private http: HttpClient) { }\r\n\r\n getCompanies = () => this.http.get<res<Copmany>>(api.home);\r\n \r\n getRegisteredIds = () => this.http.get<res<any>>(api.homeIds);\r\n\r\n getCapchaImage = () => this.http.get(api.getCapchaImage + this.sid, { responseType: 'text' }).pipe(map(s=>s));\r\n\r\n PurchaseOrders = (req: FormData) => this.http.post<res<any>>(api.PurchaseOrders, req);\r\n\r\n // Motors/Orders/Create\r\n\r\n motorSubmit = (req: FormData) => this.http.post<any>(base + \"Motors/Orders/Create\", req )\r\n\r\n PrivacyPolicy = () => this.http.get<res<any>>(api.PrivacyPolicy);\r\n \r\n Terms = () => this.http.get<res<any>>(api.Terms);\r\n \r\n ConfigInfo = () => this.http.get<res<ISiteInfo>>(api.ConfigurationUrl);\r\n \r\n ContactUs = (formInputs: FormData) => this.http.post<res<IFaqList>>(api.ContactUs, formInputs);\r\n \r\n FAQs = () => this.http.get<res<Array<IFaqList>>>(api.FAQs);\r\n\r\n getFooterInfo(): Observable<ISiteInfo> {\r\n if(!!this.SiteInfo) {\r\n return of(this.SiteInfo);\r\n }\r\n return this.ConfigInfo().pipe(map( (response:any) => {\r\n if(!!response.success) {\r\n this.SiteInfo = {\r\n FacebookUrl: response.data.company.facebook,\r\n TwitterUrl: response.data.company.twitter,\r\n InstagramUrl: response.data.company.instagram,\r\n CustomerServiceNumber: response.data.company.customerServicePhone,\r\n Email: response.data.company.email,\r\n YoutubeUrl: response.data.company.facebook,\r\n WhatsAppNumber: response.data.company.facebook,\r\n AndroidAppUrl: response.data.storeInfo.appUrl,\r\n IOsAppUrl: response.data.storeInfo.iosAppUrl\r\n };\r\n return this.SiteInfo;\r\n }\r\n return {\r\n FacebookUrl: '',\r\n TwitterUrl: '',\r\n InstagramUrl: '',\r\n CustomerServiceNumber: '',\r\n Email: '',\r\n YoutubeUrl: '',\r\n WhatsAppNumber: '',\r\n AndroidAppUrl: '',\r\n IOsAppUrl: ''\r\n }\r\n }));\r\n }\r\n\r\n}\r\n","import * as i7 from '@angular/cdk/a11y';\nimport { FocusKeyManager, A11yModule } from '@angular/cdk/a11y';\nimport * as i5 from '@angular/cdk/observers';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport * as i7$1 from '@angular/cdk/portal';\nimport { CdkPortal, TemplatePortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport * as i3$1 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, TemplateRef, Component, ChangeDetectionStrategy, ViewEncapsulation, ContentChild, ViewChild, Input, forwardRef, EventEmitter, Output, ContentChildren, QueryList, Attribute, NgModule } from '@angular/core';\nimport * as i4 from '@angular/material/core';\nimport { mixinDisabled, mixinColor, mixinDisableRipple, mixinTabIndex, MAT_RIPPLE_GLOBAL_OPTIONS, RippleRenderer, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { take, startWith, distinctUntilChanged, takeUntil, switchMap, skip } from 'rxjs/operators';\nimport { Subject, Subscription, fromEvent, of, merge, EMPTY, Observable, timer } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i1 from '@angular/cdk/bidi';\nimport { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport * as i1$1 from '@angular/cdk/scrolling';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token for the MatInkBar's Positioner. */\nconst _MAT_INK_BAR_POSITIONER = new InjectionToken('MatInkBarPositioner', {\n providedIn: 'root',\n factory: _MAT_INK_BAR_POSITIONER_FACTORY,\n});\n/**\n * The default positioner function for the MatInkBar.\n * @docs-private\n */\nfunction _MAT_INK_BAR_POSITIONER_FACTORY() {\n const method = (element) => ({\n left: element ? (element.offsetLeft || 0) + 'px' : '0',\n width: element ? (element.offsetWidth || 0) + 'px' : '0',\n });\n return method;\n}\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * @docs-private\n */\nclass MatInkBar {\n constructor(_elementRef, _ngZone, _inkBarPositioner, _animationMode) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._inkBarPositioner = _inkBarPositioner;\n this._animationMode = _animationMode;\n }\n /**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param element\n */\n alignToElement(element) {\n this.show();\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n const positions = this._inkBarPositioner(element);\n const inkBar = this._elementRef.nativeElement;\n inkBar.style.left = positions.left;\n inkBar.style.width = positions.width;\n });\n }\n /** Shows the ink bar. */\n show() {\n this._elementRef.nativeElement.style.visibility = 'visible';\n }\n /** Hides the ink bar. */\n hide() {\n this._elementRef.nativeElement.style.visibility = 'hidden';\n }\n}\nMatInkBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatInkBar, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: _MAT_INK_BAR_POSITIONER }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatInkBar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatInkBar, selector: \"mat-ink-bar\", host: { properties: { \"class._mat-animation-noopable\": \"_animationMode === 'NoopAnimations'\" }, classAttribute: \"mat-ink-bar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatInkBar, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n '[class._mat-animation-noopable]': `_animationMode === 'NoopAnimations'`,\n },\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [_MAT_INK_BAR_POSITIONER]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `MatTabContent`. It serves as\n * alternative token to the actual `MatTabContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_TAB_CONTENT = new InjectionToken('MatTabContent');\n/** Decorates the `ng-template` tags and reads out the template from it. */\nclass MatTabContent {\n constructor(/** Content for the tab. */ template) {\n this.template = template;\n }\n}\nMatTabContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabContent, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabContent, selector: \"[matTabContent]\", providers: [{ provide: MAT_TAB_CONTENT, useExisting: MatTabContent }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabContent, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabContent]',\n providers: [{ provide: MAT_TAB_CONTENT, useExisting: MatTabContent }],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `MatTabLabel`. It serves as\n * alternative token to the actual `MatTabLabel` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_TAB_LABEL = new InjectionToken('MatTabLabel');\n/**\n * Used to provide a tab label to a tab without causing a circular dependency.\n * @docs-private\n */\nconst MAT_TAB = new InjectionToken('MAT_TAB');\n/** Used to flag tab labels for use with the portal directive */\nclass MatTabLabel extends CdkPortal {\n constructor(templateRef, viewContainerRef, _closestTab) {\n super(templateRef, viewContainerRef);\n this._closestTab = _closestTab;\n }\n}\nMatTabLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabLabel, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: MAT_TAB, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabLabel, selector: \"[mat-tab-label], [matTabLabel]\", providers: [{ provide: MAT_TAB_LABEL, useExisting: MatTabLabel }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-tab-label], [matTabLabel]',\n providers: [{ provide: MAT_TAB_LABEL, useExisting: MatTabLabel }],\n }]\n }], ctorParameters: function () {\n return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TAB]\n }, {\n type: Optional\n }] }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatTab.\n/** @docs-private */\nconst _MatTabBase = mixinDisabled(class {\n});\n/**\n * Used to provide a tab group to a tab without causing a circular dependency.\n * @docs-private\n */\nconst MAT_TAB_GROUP = new InjectionToken('MAT_TAB_GROUP');\nclass MatTab extends _MatTabBase {\n constructor(_viewContainerRef, _closestTabGroup) {\n super();\n this._viewContainerRef = _viewContainerRef;\n this._closestTabGroup = _closestTabGroup;\n /** Plain text label for the tab, used when there is no template label. */\n this.textLabel = '';\n /** Portal that will be the hosted content of the tab */\n this._contentPortal = null;\n /** Emits whenever the internal state of the tab changes. */\n this._stateChanges = new Subject();\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n this.position = null;\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n this.origin = null;\n /**\n * Whether the tab is currently active.\n */\n this.isActive = false;\n }\n /** Content for the tab label given by `<ng-template mat-tab-label>`. */\n get templateLabel() {\n return this._templateLabel;\n }\n set templateLabel(value) {\n this._setTemplateLabelInput(value);\n }\n /** @docs-private */\n get content() {\n return this._contentPortal;\n }\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\n this._stateChanges.next();\n }\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n ngOnInit() {\n this._contentPortal = new TemplatePortal(this._explicitContent || this._implicitContent, this._viewContainerRef);\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setTemplateLabelInput(value) {\n // Only update the label if the query managed to find one. This works around an issue where a\n // user may have manually set `templateLabel` during creation mode, which would then get\n // clobbered by `undefined` when the query resolves. Also note that we check that the closest\n // tab matches the current one so that we don't pick up labels from nested tabs.\n if (value && value._closestTab === this) {\n this._templateLabel = value;\n }\n }\n}\nMatTab.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTab, deps: [{ token: i0.ViewContainerRef }, { token: MAT_TAB_GROUP, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTab.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTab, selector: \"mat-tab\", inputs: { disabled: \"disabled\", textLabel: [\"label\", \"textLabel\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], labelClass: \"labelClass\", bodyClass: \"bodyClass\" }, providers: [{ provide: MAT_TAB, useExisting: MatTab }], queries: [{ propertyName: \"templateLabel\", first: true, predicate: MAT_TAB_LABEL, descendants: true }, { propertyName: \"_explicitContent\", first: true, predicate: MAT_TAB_CONTENT, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: \"_implicitContent\", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: [\"matTab\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"<!-- Create a template for the content of the <mat-tab> so that we can grab a reference to this\\n TemplateRef and use it in a Portal to render the tab content in the appropriate place in the\\n tab-group. -->\\n<ng-template><ng-content></ng-content></ng-template>\\n\", changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTab, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab', inputs: ['disabled'], changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, exportAs: 'matTab', providers: [{ provide: MAT_TAB, useExisting: MatTab }], template: \"<!-- Create a template for the content of the <mat-tab> so that we can grab a reference to this\\n TemplateRef and use it in a Portal to render the tab content in the appropriate place in the\\n tab-group. -->\\n<ng-template><ng-content></ng-content></ng-template>\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TAB_GROUP]\n }, {\n type: Optional\n }] }];\n }, propDecorators: { templateLabel: [{\n type: ContentChild,\n args: [MAT_TAB_LABEL]\n }], _explicitContent: [{\n type: ContentChild,\n args: [MAT_TAB_CONTENT, { read: TemplateRef, static: true }]\n }], _implicitContent: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], textLabel: [{\n type: Input,\n args: ['label']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], labelClass: [{\n type: Input\n }], bodyClass: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material tabs.\n * @docs-private\n */\nconst matTabsAnimations = {\n /** Animation translates a tab along the X axis. */\n translateTab: trigger('translateTab', [\n // Note: transitions to `none` instead of 0, because some browsers might blur the content.\n state('center, void, left-origin-center, right-origin-center', style({ transform: 'none' })),\n // If the tab is either on the left or right, we additionally add a `min-height` of 1px\n // in order to ensure that the element has a height before its state changes. This is\n // necessary because Chrome does seem to skip the transition in RTL mode if the element does\n // not have a static height and is not rendered. See related issue: #9465\n state('left', style({ transform: 'translate3d(-100%, 0, 0)', minHeight: '1px' })),\n state('right', style({ transform: 'translate3d(100%, 0, 0)', minHeight: '1px' })),\n transition('* => left, * => right, left => center, right => center', animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({ transform: 'translate3d(-100%, 0, 0)' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'),\n ]),\n transition('void => right-origin-center', [\n style({ transform: 'translate3d(100%, 0, 0)' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'),\n ]),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\nclass MatTabBodyPortal extends CdkPortalOutlet {\n constructor(componentFactoryResolver, viewContainerRef, _host, _document) {\n super(componentFactoryResolver, viewContainerRef, _document);\n this._host = _host;\n /** Subscription to events for when the tab body begins centering. */\n this._centeringSub = Subscription.EMPTY;\n /** Subscription to events for when the tab body finishes leaving from center position. */\n this._leavingSub = Subscription.EMPTY;\n }\n /** Set initial visibility or set up subscription for changing visibility. */\n ngOnInit() {\n super.ngOnInit();\n this._centeringSub = this._host._beforeCentering\n .pipe(startWith(this._host._isCenterPosition(this._host._position)))\n .subscribe((isCentering) => {\n if (isCentering && !this.hasAttached()) {\n this.attach(this._host._content);\n }\n });\n this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\n this.detach();\n });\n }\n /** Clean up centering subscription. */\n ngOnDestroy() {\n super.ngOnDestroy();\n this._centeringSub.unsubscribe();\n this._leavingSub.unsubscribe();\n }\n}\nMatTabBodyPortal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabBodyPortal, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: forwardRef(() => MatTabBody) }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabBodyPortal.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabBodyPortal, selector: \"[matTabBodyHost]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabBodyPortal, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabBodyHost]',\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: MatTabBody, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatTabBody)]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n } });\n/**\n * Base class with all of the `MatTabBody` functionality.\n * @docs-private\n */\nclass _MatTabBodyBase {\n constructor(_elementRef, _dir, changeDetectorRef) {\n this._elementRef = _elementRef;\n this._dir = _dir;\n /** Subscription to the directionality change observable. */\n this._dirChangeSubscription = Subscription.EMPTY;\n /** Emits when an animation on the tab is complete. */\n this._translateTabComplete = new Subject();\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n this._onCentering = new EventEmitter();\n /** Event emitted before the centering of the tab begins. */\n this._beforeCentering = new EventEmitter();\n /** Event emitted before the centering of the tab begins. */\n this._afterLeavingCenter = new EventEmitter();\n /** Event emitted when the tab completes its animation towards the center. */\n this._onCentered = new EventEmitter(true);\n // Note that the default value will always be overwritten by `MatTabBody`, but we need one\n // anyway to prevent the animations module from throwing an error if the body is used on its own.\n /** Duration for the tab's animation. */\n this.animationDuration = '500ms';\n if (_dir) {\n this._dirChangeSubscription = _dir.change.subscribe((dir) => {\n this._computePositionAnimationState(dir);\n changeDetectorRef.markForCheck();\n });\n }\n // Ensure that we get unique animation events, because the `.done` callback can get\n // invoked twice in some browsers. See https://github.com/angular/angular/issues/24084.\n this._translateTabComplete\n .pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n }))\n .subscribe(event => {\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(event.toState) && this._isCenterPosition(this._position)) {\n this._onCentered.emit();\n }\n if (this._isCenterPosition(event.fromState) && !this._isCenterPosition(this._position)) {\n this._afterLeavingCenter.emit();\n }\n });\n }\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n set position(position) {\n this._positionIndex = position;\n this._computePositionAnimationState();\n }\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n */\n ngOnInit() {\n if (this._position == 'center' && this.origin != null) {\n this._position = this._computePositionFromOrigin(this.origin);\n }\n }\n ngOnDestroy() {\n this._dirChangeSubscription.unsubscribe();\n this._translateTabComplete.complete();\n }\n _onTranslateTabStarted(event) {\n const isCentering = this._isCenterPosition(event.toState);\n this._beforeCentering.emit(isCentering);\n if (isCentering) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n /** The text direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Whether the provided position state is considered center, regardless of origin. */\n _isCenterPosition(position) {\n return (position == 'center' || position == 'left-origin-center' || position == 'right-origin-center');\n }\n /** Computes the position state that will be used for the tab-body animation trigger. */\n _computePositionAnimationState(dir = this._getLayoutDirection()) {\n if (this._positionIndex < 0) {\n this._position = dir == 'ltr' ? 'left' : 'right';\n }\n else if (this._positionIndex > 0) {\n this._position = dir == 'ltr' ? 'right' : 'left';\n }\n else {\n this._position = 'center';\n }\n }\n /**\n * Computes the position state based on the specified origin position. This is used if the\n * tab is becoming visible immediately after creation.\n */\n _computePositionFromOrigin(origin) {\n const dir = this._getLayoutDirection();\n if ((dir == 'ltr' && origin <= 0) || (dir == 'rtl' && origin > 0)) {\n return 'left-origin-center';\n }\n return 'right-origin-center';\n }\n}\n_MatTabBodyBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabBodyBase, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabBodyBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: _MatTabBodyBase, inputs: { _content: [\"content\", \"_content\"], origin: \"origin\", animationDuration: \"animationDuration\", position: \"position\" }, outputs: { _onCentering: \"_onCentering\", _beforeCentering: \"_beforeCentering\", _afterLeavingCenter: \"_afterLeavingCenter\", _onCentered: \"_onCentered\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabBodyBase, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { _onCentering: [{\n type: Output\n }], _beforeCentering: [{\n type: Output\n }], _afterLeavingCenter: [{\n type: Output\n }], _onCentered: [{\n type: Output\n }], _content: [{\n type: Input,\n args: ['content']\n }], origin: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], position: [{\n type: Input\n }] } });\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\nclass MatTabBody extends _MatTabBodyBase {\n constructor(elementRef, dir, changeDetectorRef) {\n super(elementRef, dir, changeDetectorRef);\n }\n}\nMatTabBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabBody, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatTabBody.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabBody, selector: \"mat-tab-body\", host: { classAttribute: \"mat-tab-body\" }, viewQueries: [{ propertyName: \"_portalHost\", first: true, predicate: CdkPortalOutlet, descendants: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"mat-tab-body-content\\\" #content\\n [@translateTab]=\\\"{\\n value: _position,\\n params: {animationDuration: animationDuration}\\n }\\\"\\n (@translateTab.start)=\\\"_onTranslateTabStarted($event)\\\"\\n (@translateTab.done)=\\\"_translateTabComplete.next($event)\\\"\\n cdkScrollable>\\n <ng-template matTabBodyHost></ng-template>\\n</div>\\n\", styles: [\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}.mat-tab-body-content[style*=\\\"visibility: hidden\\\"]{display:none}\\n\"], directives: [{ type: MatTabBodyPortal, selector: \"[matTabBodyHost]\" }], animations: [matTabsAnimations.translateTab], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabBody, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-body', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, animations: [matTabsAnimations.translateTab], host: {\n 'class': 'mat-tab-body',\n }, template: \"<div class=\\\"mat-tab-body-content\\\" #content\\n [@translateTab]=\\\"{\\n value: _position,\\n params: {animationDuration: animationDuration}\\n }\\\"\\n (@translateTab.start)=\\\"_onTranslateTabStarted($event)\\\"\\n (@translateTab.done)=\\\"_translateTabComplete.next($event)\\\"\\n cdkScrollable>\\n <ng-template matTabBodyHost></ng-template>\\n</div>\\n\", styles: [\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}.mat-tab-body-content[style*=\\\"visibility: hidden\\\"]{display:none}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { _portalHost: [{\n type: ViewChild,\n args: [CdkPortalOutlet]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that can be used to provide the default options the tabs module. */\nconst MAT_TABS_CONFIG = new InjectionToken('MAT_TABS_CONFIG');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatTabLabelWrapper.\n/** @docs-private */\nconst _MatTabLabelWrapperBase = mixinDisabled(class {\n});\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * @docs-private\n */\nclass MatTabLabelWrapper extends _MatTabLabelWrapperBase {\n constructor(elementRef) {\n super();\n this.elementRef = elementRef;\n }\n /** Sets focus on the wrapper element */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n getOffsetLeft() {\n return this.elementRef.nativeElement.offsetLeft;\n }\n getOffsetWidth() {\n return this.elementRef.nativeElement.offsetWidth;\n }\n}\nMatTabLabelWrapper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabLabelWrapper, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLabelWrapper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabLabelWrapper, selector: \"[matTabLabelWrapper]\", inputs: { disabled: \"disabled\" }, host: { properties: { \"class.mat-tab-disabled\": \"disabled\", \"attr.aria-disabled\": \"!!disabled\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabLabelWrapper, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled',\n '[attr.aria-disabled]': '!!disabled',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\nclass MatPaginatedTabHeader {\n constructor(_elementRef, _changeDetectorRef, _viewportRuler, _dir, _ngZone, _platform, _animationMode) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._viewportRuler = _viewportRuler;\n this._dir = _dir;\n this._ngZone = _ngZone;\n this._platform = _platform;\n this._animationMode = _animationMode;\n /** The distance in pixels that the tab labels should be translated to the left. */\n this._scrollDistance = 0;\n /** Whether the header should scroll to the selected index after the view has been checked. */\n this._selectedIndexChanged = false;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Whether the controls for pagination should be displayed */\n this._showPaginationControls = false;\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n this._disableScrollAfter = true;\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n this._disableScrollBefore = true;\n /** Stream that will stop the automated scrolling. */\n this._stopScrolling = new Subject();\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n this.disablePagination = false;\n this._selectedIndex = 0;\n /** Event emitted when the option is selected. */\n this.selectFocusedIndex = new EventEmitter();\n /** Event emitted when a label is focused. */\n this.indexFocused = new EventEmitter();\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n _ngZone.runOutsideAngular(() => {\n fromEvent(_elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._stopInterval();\n });\n });\n }\n /** The index of the active tab. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n value = coerceNumberProperty(value);\n if (this._selectedIndex != value) {\n this._selectedIndexChanged = true;\n this._selectedIndex = value;\n if (this._keyManager) {\n this._keyManager.updateActiveItem(value);\n }\n }\n }\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this._previousPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('before');\n });\n fromEvent(this._nextPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('after');\n });\n }\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : of('ltr');\n const resize = this._viewportRuler.change(150);\n const realign = () => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n };\n this._keyManager = new FocusKeyManager(this._items)\n .withHorizontalOrientation(this._getLayoutDirection())\n .withHomeAndEnd()\n .withWrap();\n this._keyManager.updateActiveItem(this._selectedIndex);\n // Defer the first call in order to allow for slower browsers to lay out the elements.\n // This helps in cases where the user lands directly on a page with paginated tabs.\n // Note that we use `onStable` instead of `requestAnimationFrame`, because the latter\n // can hold up tests that are in a background tab.\n this._ngZone.onStable.pipe(take(1)).subscribe(realign);\n // On dir change or window resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, resize, this._items.changes, this._itemsResized())\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n // We need to defer this to give the browser some time to recalculate\n // the element dimensions. The call has to be wrapped in `NgZone.run`,\n // because the viewport change handler runs outside of Angular.\n this._ngZone.run(() => {\n Promise.resolve().then(() => {\n // Clamp the scroll distance, because it can change with the number of tabs.\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance));\n realign();\n });\n });\n this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n });\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this._keyManager.change.pipe(takeUntil(this._destroyed)).subscribe(newFocusIndex => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n /** Sends any changes that could affect the layout of the items. */\n _itemsResized() {\n if (typeof ResizeObserver !== 'function') {\n return EMPTY;\n }\n return this._items.changes.pipe(startWith(this._items), switchMap((tabItems) => new Observable((observer) => this._ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver(() => {\n observer.next();\n });\n tabItems.forEach(item => {\n resizeObserver.observe(item.elementRef.nativeElement);\n });\n return () => {\n resizeObserver.disconnect();\n };\n }))), \n // Skip the first emit since the resize observer emits when an item\n // is observed for new items when the tab is already inserted\n skip(1));\n }\n ngAfterContentChecked() {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._items.length) {\n this.updatePagination();\n this._tabLabelCount = this._items.length;\n this._changeDetectorRef.markForCheck();\n }\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n /** Handles keyboard events on the header. */\n _handleKeydown(event) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n if (this.focusIndex !== this.selectedIndex) {\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n }\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n const textContent = this._elementRef.nativeElement.textContent;\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this._currentTextContent) {\n this._currentTextContent = textContent || '';\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this._ngZone.run(() => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : 0;\n }\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n this._keyManager.setActiveItem(value);\n }\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index) {\n if (!this._items) {\n return true;\n }\n const tab = this._items ? this._items.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n if (this._items && this._items.length) {\n this._items.toArray()[tabIndex].focus();\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this._tabListContainer.nativeElement;\n const dir = this._getLayoutDirection();\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n }\n else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n /** The layout direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n if (this.disablePagination) {\n return;\n }\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this._tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n if (this._platform.TRIDENT || this._platform.EDGE) {\n this._tabListContainer.nativeElement.scrollLeft = 0;\n }\n }\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance() {\n return this._scrollDistance;\n }\n set scrollDistance(value) {\n this._scrollTo(value);\n }\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(direction) {\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = ((direction == 'before' ? -1 : 1) * viewLength) / 3;\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex) {\n if (this.disablePagination) {\n return;\n }\n const selectedLabel = this._items ? this._items.toArray()[labelIndex] : null;\n if (!selectedLabel) {\n return;\n }\n // The view length is the visible width of the tab labels.\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n let labelBeforePos, labelAfterPos;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n }\n else {\n labelAfterPos = this._tabListInner.nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n }\n else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n if (this.disablePagination) {\n this._showPaginationControls = false;\n }\n else {\n const isEnabled = this._tabListInner.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n this._showPaginationControls = isEnabled;\n }\n }\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n if (this.disablePagination) {\n this._disableScrollAfter = this._disableScrollBefore = true;\n }\n else {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance() {\n const lengthOfTabList = this._tabListInner.nativeElement.scrollWidth;\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return lengthOfTabList - viewLength || 0;\n }\n /** Tells the ink-bar to align itself to the current label wrapper */\n _alignInkBarToSelectedTab() {\n const selectedItem = this._items && this._items.length ? this._items.toArray()[this.selectedIndex] : null;\n const selectedLabelWrapper = selectedItem ? selectedItem.elementRef.nativeElement : null;\n if (selectedLabelWrapper) {\n this._inkBar.alignToElement(selectedLabelWrapper);\n }\n else {\n this._inkBar.hide();\n }\n }\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n _handlePaginatorPress(direction, mouseEvent) {\n // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n // null check the `button`, but we do it so we don't break tests that use fake events.\n if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) {\n return;\n }\n // Avoid overlapping timers.\n this._stopInterval();\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n .subscribe(() => {\n const { maxScrollDistance, distance } = this._scrollHeader(direction);\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this._stopInterval();\n }\n });\n }\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n _scrollTo(position) {\n if (this.disablePagination) {\n return { maxScrollDistance: 0, distance: 0 };\n }\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n return { maxScrollDistance, distance: this._scrollDistance };\n }\n}\nMatPaginatedTabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatPaginatedTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatPaginatedTabHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatPaginatedTabHeader, inputs: { disablePagination: \"disablePagination\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatPaginatedTabHeader, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { disablePagination: [{\n type: Input\n }] } });\n\n/**\n * Base class with all of the `MatTabHeader` functionality.\n * @docs-private\n */\nclass _MatTabHeaderBase extends MatPaginatedTabHeader {\n constructor(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n this._disableRipple = false;\n }\n /** Whether the ripple effect is disabled or not. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _itemSelected(event) {\n event.preventDefault();\n }\n}\n_MatTabHeaderBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabHeaderBase, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabHeaderBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: _MatTabHeaderBase, inputs: { disableRipple: \"disableRipple\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabHeaderBase, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { disableRipple: [{\n type: Input\n }] } });\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\nclass MatTabHeader extends _MatTabHeaderBase {\n constructor(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n }\n}\nMatTabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabHeader, selector: \"mat-tab-header\", inputs: { selectedIndex: \"selectedIndex\" }, outputs: { selectFocusedIndex: \"selectFocusedIndex\", indexFocused: \"indexFocused\" }, host: { properties: { \"class.mat-tab-header-pagination-controls-enabled\": \"_showPaginationControls\", \"class.mat-tab-header-rtl\": \"_getLayoutDirection() == 'rtl'\" }, classAttribute: \"mat-tab-header\" }, queries: [{ propertyName: \"_items\", predicate: MatTabLabelWrapper }], viewQueries: [{ propertyName: \"_inkBar\", first: true, predicate: MatInkBar, descendants: true, static: true }, { propertyName: \"_tabListContainer\", first: true, predicate: [\"tabListContainer\"], descendants: true, static: true }, { propertyName: \"_tabList\", first: true, predicate: [\"tabList\"], descendants: true, static: true }, { propertyName: \"_tabListInner\", first: true, predicate: [\"tabListInner\"], descendants: true, static: true }, { propertyName: \"_nextPaginator\", first: true, predicate: [\"nextPaginator\"], descendants: true }, { propertyName: \"_previousPaginator\", first: true, predicate: [\"previousPaginator\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4\\\"\\n #previousPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n tabindex=\\\"-1\\\"\\n [matRippleDisabled]=\\\"_disableScrollBefore || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollBefore\\\"\\n [disabled]=\\\"_disableScrollBefore || null\\\"\\n (click)=\\\"_handlePaginatorClick('before')\\\"\\n (mousedown)=\\\"_handlePaginatorPress('before', $event)\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\\n<div class=\\\"mat-tab-label-container\\\" #tabListContainer (keydown)=\\\"_handleKeydown($event)\\\">\\n <div\\n #tabList\\n class=\\\"mat-tab-list\\\"\\n [class._mat-animation-noopable]=\\\"_animationMode === 'NoopAnimations'\\\"\\n role=\\\"tablist\\\"\\n (cdkObserveContent)=\\\"_onContentChanges()\\\">\\n <div class=\\\"mat-tab-labels\\\" #tabListInner>\\n <ng-content></ng-content>\\n </div>\\n <mat-ink-bar></mat-ink-bar>\\n </div>\\n</div>\\n\\n<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4\\\"\\n #nextPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n [matRippleDisabled]=\\\"_disableScrollAfter || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollAfter\\\"\\n [disabled]=\\\"_disableScrollAfter || null\\\"\\n tabindex=\\\"-1\\\"\\n (mousedown)=\\\"_handlePaginatorPress('after', $event)\\\"\\n (click)=\\\"_handlePaginatorClick('after')\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-ink-bar{transition:none;animation:none}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-labels{display:flex}[mat-align-tabs=center]>.mat-tab-header .mat-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-tab-header .mat-tab-labels{justify-content:flex-end}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}._mat-animation-noopable.mat-tab-list{transition:none;animation:none}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.cdk-high-contrast-active .mat-tab-label:focus{outline:dotted 2px;outline-offset:-2px}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{min-width:72px}}\\n\"], directives: [{ type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { type: i5.CdkObserveContent, selector: \"[cdkObserveContent]\", inputs: [\"cdkObserveContentDisabled\", \"debounce\"], outputs: [\"cdkObserveContent\"], exportAs: [\"cdkObserveContent\"] }, { type: MatInkBar, selector: \"mat-ink-bar\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-header', inputs: ['selectedIndex'], outputs: ['selectFocusedIndex', 'indexFocused'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n }, template: \"<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4\\\"\\n #previousPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n tabindex=\\\"-1\\\"\\n [matRippleDisabled]=\\\"_disableScrollBefore || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollBefore\\\"\\n [disabled]=\\\"_disableScrollBefore || null\\\"\\n (click)=\\\"_handlePaginatorClick('before')\\\"\\n (mousedown)=\\\"_handlePaginatorPress('before', $event)\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\\n<div class=\\\"mat-tab-label-container\\\" #tabListContainer (keydown)=\\\"_handleKeydown($event)\\\">\\n <div\\n #tabList\\n class=\\\"mat-tab-list\\\"\\n [class._mat-animation-noopable]=\\\"_animationMode === 'NoopAnimations'\\\"\\n role=\\\"tablist\\\"\\n (cdkObserveContent)=\\\"_onContentChanges()\\\">\\n <div class=\\\"mat-tab-labels\\\" #tabListInner>\\n <ng-content></ng-content>\\n </div>\\n <mat-ink-bar></mat-ink-bar>\\n </div>\\n</div>\\n\\n<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4\\\"\\n #nextPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n [matRippleDisabled]=\\\"_disableScrollAfter || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollAfter\\\"\\n [disabled]=\\\"_disableScrollAfter || null\\\"\\n tabindex=\\\"-1\\\"\\n (mousedown)=\\\"_handlePaginatorPress('after', $event)\\\"\\n (click)=\\\"_handlePaginatorClick('after')\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-ink-bar{transition:none;animation:none}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-labels{display:flex}[mat-align-tabs=center]>.mat-tab-header .mat-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-tab-header .mat-tab-labels{justify-content:flex-end}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}._mat-animation-noopable.mat-tab-list{transition:none;animation:none}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.cdk-high-contrast-active .mat-tab-label:focus{outline:dotted 2px;outline-offset:-2px}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{min-width:72px}}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { _items: [{\n type: ContentChildren,\n args: [MatTabLabelWrapper, { descendants: false }]\n }], _inkBar: [{\n type: ViewChild,\n args: [MatInkBar, { static: true }]\n }], _tabListContainer: [{\n type: ViewChild,\n args: ['tabListContainer', { static: true }]\n }], _tabList: [{\n type: ViewChild,\n args: ['tabList', { static: true }]\n }], _tabListInner: [{\n type: ViewChild,\n args: ['tabListInner', { static: true }]\n }], _nextPaginator: [{\n type: ViewChild,\n args: ['nextPaginator']\n }], _previousPaginator: [{\n type: ViewChild,\n args: ['previousPaginator']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n/** A simple change event emitted on focus or selection changes. */\nclass MatTabChangeEvent {\n}\n// Boilerplate for applying mixins to MatTabGroup.\n/** @docs-private */\nconst _MatTabGroupMixinBase = mixinColor(mixinDisableRipple(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}), 'primary');\n/**\n * Base class with all of the `MatTabGroupBase` functionality.\n * @docs-private\n */\nclass _MatTabGroupBase extends _MatTabGroupMixinBase {\n constructor(elementRef, _changeDetectorRef, defaultConfig, _animationMode) {\n var _a;\n super(elementRef);\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** All of the tabs that belong to the group. */\n this._tabs = new QueryList();\n /** The tab index that should be selected after the content has been checked. */\n this._indexToSelect = 0;\n /** Index of the tab that was focused last. */\n this._lastFocusedTabIndex = null;\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n this._tabBodyWrapperHeight = 0;\n /** Subscription to tabs being added/removed. */\n this._tabsSubscription = Subscription.EMPTY;\n /** Subscription to changes in the tab labels. */\n this._tabLabelSubscription = Subscription.EMPTY;\n this._selectedIndex = null;\n /** Position of the tab header. */\n this.headerPosition = 'above';\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n this.selectedIndexChange = new EventEmitter();\n /** Event emitted when focus has changed within a tab group. */\n this.focusChange = new EventEmitter();\n /** Event emitted when the body animation has completed */\n this.animationDone = new EventEmitter();\n /** Event emitted when the tab selection has changed. */\n this.selectedTabChange = new EventEmitter(true);\n this._groupId = nextId++;\n this.animationDuration =\n defaultConfig && defaultConfig.animationDuration ? defaultConfig.animationDuration : '500ms';\n this.disablePagination =\n defaultConfig && defaultConfig.disablePagination != null\n ? defaultConfig.disablePagination\n : false;\n this.dynamicHeight =\n defaultConfig && defaultConfig.dynamicHeight != null ? defaultConfig.dynamicHeight : false;\n this.contentTabIndex = (_a = defaultConfig === null || defaultConfig === void 0 ? void 0 : defaultConfig.contentTabIndex) !== null && _a !== void 0 ? _a : null;\n }\n /** Whether the tab group should grow to the size of the active tab. */\n get dynamicHeight() {\n return this._dynamicHeight;\n }\n set dynamicHeight(value) {\n this._dynamicHeight = coerceBooleanProperty(value);\n }\n /** The index of the active tab. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n this._indexToSelect = coerceNumberProperty(value, null);\n }\n /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\n get animationDuration() {\n return this._animationDuration;\n }\n set animationDuration(value) {\n this._animationDuration = /^\\d+$/.test(value + '') ? value + 'ms' : value;\n }\n /**\n * `tabindex` to be set on the inner element that wraps the tab content. Can be used for improved\n * accessibility when the tab does not have focusable elements or if it has scrollable content.\n * The `tabindex` will be removed automatically for inactive tabs.\n * Read more at https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-2/tabs.html\n */\n get contentTabIndex() {\n return this._contentTabIndex;\n }\n set contentTabIndex(value) {\n this._contentTabIndex = coerceNumberProperty(value, null);\n }\n /** Background color of the tab group. */\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(value) {\n const nativeElement = this._elementRef.nativeElement;\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n */\n ngAfterContentChecked() {\n // Don't clamp the `indexToSelect` immediately in the setter because it can happen that\n // the amount of tabs changes before the actual change detection runs.\n const indexToSelect = (this._indexToSelect = this._clampTabIndex(this._indexToSelect));\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect) {\n const isFirstRun = this._selectedIndex == null;\n if (!isFirstRun) {\n this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\n // Preserve the height so page doesn't scroll up during tab change.\n // Fixes https://stackblitz.com/edit/mat-tabs-scroll-page-top-on-tab-change\n const wrapper = this._tabBodyWrapper.nativeElement;\n wrapper.style.minHeight = wrapper.clientHeight + 'px';\n }\n // Changing these values after change detection has run\n // since the checked content may contain references to them.\n Promise.resolve().then(() => {\n this._tabs.forEach((tab, index) => (tab.isActive = index === indexToSelect));\n if (!isFirstRun) {\n this.selectedIndexChange.emit(indexToSelect);\n // Clear the min-height, this was needed during tab change to avoid\n // unnecessary scrolling.\n this._tabBodyWrapper.nativeElement.style.minHeight = '';\n }\n });\n }\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab, index) => {\n tab.position = index - indexToSelect;\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._lastFocusedTabIndex = null;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngAfterContentInit() {\n this._subscribeToAllTabChanges();\n this._subscribeToTabLabels();\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n const indexToSelect = this._clampTabIndex(this._indexToSelect);\n // Maintain the previously-selected tab if a new tab is added or removed and there is no\n // explicit change that selects a different tab.\n if (indexToSelect === this._selectedIndex) {\n const tabs = this._tabs.toArray();\n let selectedTab;\n for (let i = 0; i < tabs.length; i++) {\n if (tabs[i].isActive) {\n // Assign both to the `_indexToSelect` and `_selectedIndex` so we don't fire a changed\n // event, otherwise the consumer may end up in an infinite loop in some edge cases like\n // adding a tab within the `selectedIndexChange` event.\n this._indexToSelect = this._selectedIndex = i;\n this._lastFocusedTabIndex = null;\n selectedTab = tabs[i];\n break;\n }\n }\n // If we haven't found an active tab and a tab exists at the selected index, it means\n // that the active tab was swapped out. Since this won't be picked up by the rendering\n // loop in `ngAfterContentChecked`, we need to sync it up manually.\n if (!selectedTab && tabs[indexToSelect]) {\n Promise.resolve().then(() => {\n tabs[indexToSelect].isActive = true;\n this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\n });\n }\n }\n this._changeDetectorRef.markForCheck();\n });\n }\n /** Listens to changes in all of the tabs. */\n _subscribeToAllTabChanges() {\n // Since we use a query with `descendants: true` to pick up the tabs, we may end up catching\n // some that are inside of nested tab groups. We filter them out manually by checking that\n // the closest group to the tab is the current one.\n this._allTabs.changes.pipe(startWith(this._allTabs)).subscribe((tabs) => {\n this._tabs.reset(tabs.filter(tab => {\n return tab._closestTabGroup === this || !tab._closestTabGroup;\n }));\n this._tabs.notifyOnChanges();\n });\n }\n ngOnDestroy() {\n this._tabs.destroy();\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n /** Re-aligns the ink bar to the selected tab element. */\n realignInkBar() {\n if (this._tabHeader) {\n this._tabHeader._alignInkBarToSelectedTab();\n }\n }\n /**\n * Recalculates the tab group's pagination dimensions.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n if (this._tabHeader) {\n this._tabHeader.updatePagination();\n }\n }\n /**\n * Sets focus to a particular tab.\n * @param index Index of the tab to be focused.\n */\n focusTab(index) {\n const header = this._tabHeader;\n if (header) {\n header.focusIndex = index;\n }\n }\n _focusChanged(index) {\n this._lastFocusedTabIndex = index;\n this.focusChange.emit(this._createChangeEvent(index));\n }\n _createChangeEvent(index) {\n const event = new MatTabChangeEvent();\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n /**\n * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n */\n _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n this._tabLabelSubscription = merge(...this._tabs.map(tab => tab._stateChanges)).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n /** Clamps the given index to the bounds of 0 and the tabs length. */\n _clampTabIndex(index) {\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n return Math.min(this._tabs.length - 1, Math.max(index || 0, 0));\n }\n /** Returns a unique id for each tab label element */\n _getTabLabelId(i) {\n return `mat-tab-label-${this._groupId}-${i}`;\n }\n /** Returns a unique id for each tab content element */\n _getTabContentId(i) {\n return `mat-tab-content-${this._groupId}-${i}`;\n }\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n */\n _setTabBodyWrapperHeight(tabHeight) {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) {\n return;\n }\n const wrapper = this._tabBodyWrapper.nativeElement;\n wrapper.style.height = this._tabBodyWrapperHeight + 'px';\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n wrapper.style.height = tabHeight + 'px';\n }\n }\n /** Removes the height of the tab body wrapper. */\n _removeTabBodyWrapperHeight() {\n const wrapper = this._tabBodyWrapper.nativeElement;\n this._tabBodyWrapperHeight = wrapper.clientHeight;\n wrapper.style.height = '';\n this.animationDone.emit();\n }\n /** Handle click events, setting new selected index if appropriate. */\n _handleClick(tab, tabHeader, index) {\n if (!tab.disabled) {\n this.selectedIndex = tabHeader.focusIndex = index;\n }\n }\n /** Retrieves the tabindex for the tab. */\n _getTabIndex(tab, index) {\n var _a;\n if (tab.disabled) {\n return null;\n }\n const targetIndex = (_a = this._lastFocusedTabIndex) !== null && _a !== void 0 ? _a : this.selectedIndex;\n return index === targetIndex ? 0 : -1;\n }\n /** Callback for when the focused state of a tab has changed. */\n _tabFocusChanged(focusOrigin, index) {\n // Mouse/touch focus happens during the `mousedown`/`touchstart` phase which\n // can cause the tab to be moved out from under the pointer, interrupting the\n // click sequence (see #21898). We don't need to scroll the tab into view for\n // such cases anyway, because it will be done when the tab becomes selected.\n if (focusOrigin && focusOrigin !== 'mouse' && focusOrigin !== 'touch') {\n this._tabHeader.focusIndex = index;\n }\n }\n}\n_MatTabGroupBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabGroupBase, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_TABS_CONFIG, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabGroupBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: _MatTabGroupBase, inputs: { dynamicHeight: \"dynamicHeight\", selectedIndex: \"selectedIndex\", headerPosition: \"headerPosition\", animationDuration: \"animationDuration\", contentTabIndex: \"contentTabIndex\", disablePagination: \"disablePagination\", backgroundColor: \"backgroundColor\" }, outputs: { selectedIndexChange: \"selectedIndexChange\", focusChange: \"focusChange\", animationDone: \"animationDone\", selectedTabChange: \"selectedTabChange\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabGroupBase, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TABS_CONFIG]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { dynamicHeight: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], headerPosition: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], contentTabIndex: [{\n type: Input\n }], disablePagination: [{\n type: Input\n }], backgroundColor: [{\n type: Input\n }], selectedIndexChange: [{\n type: Output\n }], focusChange: [{\n type: Output\n }], animationDone: [{\n type: Output\n }], selectedTabChange: [{\n type: Output\n }] } });\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://material.io/design/components/tabs.html\n */\nclass MatTabGroup extends _MatTabGroupBase {\n constructor(elementRef, changeDetectorRef, defaultConfig, animationMode) {\n super(elementRef, changeDetectorRef, defaultConfig, animationMode);\n }\n}\nMatTabGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabGroup, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_TABS_CONFIG, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabGroup, selector: \"mat-tab-group\", inputs: { color: \"color\", disableRipple: \"disableRipple\" }, host: { properties: { \"class.mat-tab-group-dynamic-height\": \"dynamicHeight\", \"class.mat-tab-group-inverted-header\": \"headerPosition === \\\"below\\\"\" }, classAttribute: \"mat-tab-group\" }, providers: [\n {\n provide: MAT_TAB_GROUP,\n useExisting: MatTabGroup,\n },\n ], queries: [{ propertyName: \"_allTabs\", predicate: MatTab, descendants: true }], viewQueries: [{ propertyName: \"_tabBodyWrapper\", first: true, predicate: [\"tabBodyWrapper\"], descendants: true }, { propertyName: \"_tabHeader\", first: true, predicate: [\"tabHeader\"], descendants: true }], exportAs: [\"matTabGroup\"], usesInheritance: true, ngImport: i0, template: \"<mat-tab-header #tabHeader\\n [selectedIndex]=\\\"selectedIndex || 0\\\"\\n [disableRipple]=\\\"disableRipple\\\"\\n [disablePagination]=\\\"disablePagination\\\"\\n (indexFocused)=\\\"_focusChanged($event)\\\"\\n (selectFocusedIndex)=\\\"selectedIndex = $event\\\">\\n <div class=\\\"mat-tab-label mat-focus-indicator\\\" role=\\\"tab\\\" matTabLabelWrapper mat-ripple\\n cdkMonitorElementFocus\\n *ngFor=\\\"let tab of _tabs; let i = index\\\"\\n [id]=\\\"_getTabLabelId(i)\\\"\\n [attr.tabIndex]=\\\"_getTabIndex(tab, i)\\\"\\n [attr.aria-posinset]=\\\"i + 1\\\"\\n [attr.aria-setsize]=\\\"_tabs.length\\\"\\n [attr.aria-controls]=\\\"_getTabContentId(i)\\\"\\n [attr.aria-selected]=\\\"selectedIndex === i\\\"\\n [attr.aria-label]=\\\"tab.ariaLabel || null\\\"\\n [attr.aria-labelledby]=\\\"(!tab.ariaLabel && tab.ariaLabelledby) ? tab.ariaLabelledby : null\\\"\\n [class.mat-tab-label-active]=\\\"selectedIndex === i\\\"\\n [ngClass]=\\\"tab.labelClass\\\"\\n [disabled]=\\\"tab.disabled\\\"\\n [matRippleDisabled]=\\\"tab.disabled || disableRipple\\\"\\n (click)=\\\"_handleClick(tab, tabHeader, i)\\\"\\n (cdkFocusChange)=\\\"_tabFocusChanged($event, i)\\\">\\n\\n\\n <div class=\\\"mat-tab-label-content\\\">\\n <!-- If there is a label template, use it. -->\\n <ng-template [ngIf]=\\\"tab.templateLabel\\\" [ngIfElse]=\\\"tabTextLabel\\\">\\n <ng-template [cdkPortalOutlet]=\\\"tab.templateLabel\\\"></ng-template>\\n </ng-template>\\n\\n <!-- If there is not a label template, fall back to the text label. -->\\n <ng-template #tabTextLabel>{{tab.textLabel}}</ng-template>\\n </div>\\n </div>\\n</mat-tab-header>\\n\\n<div\\n class=\\\"mat-tab-body-wrapper\\\"\\n [class._mat-animation-noopable]=\\\"_animationMode === 'NoopAnimations'\\\"\\n #tabBodyWrapper>\\n <mat-tab-body role=\\\"tabpanel\\\"\\n *ngFor=\\\"let tab of _tabs; let i = index\\\"\\n [id]=\\\"_getTabContentId(i)\\\"\\n [attr.tabindex]=\\\"(contentTabIndex != null && selectedIndex === i) ? contentTabIndex : null\\\"\\n [attr.aria-labelledby]=\\\"_getTabLabelId(i)\\\"\\n [class.mat-tab-body-active]=\\\"selectedIndex === i\\\"\\n [ngClass]=\\\"tab.bodyClass\\\"\\n [content]=\\\"tab.content!\\\"\\n [position]=\\\"tab.position!\\\"\\n [origin]=\\\"tab.origin\\\"\\n [animationDuration]=\\\"animationDuration\\\"\\n (_onCentered)=\\\"_removeTabBodyWrapperHeight()\\\"\\n (_onCentering)=\\\"_setTabBodyWrapperHeight($event)\\\">\\n </mat-tab-body>\\n</div>\\n\", styles: [\".mat-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.cdk-high-contrast-active .mat-tab-label:focus{outline:dotted 2px;outline-offset:-2px}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{padding:0 12px}}@media(max-width: 959px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs]>.mat-tab-header .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-tab-body-wrapper{transition:none;animation:none}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}\\n\"], components: [{ type: MatTabHeader, selector: \"mat-tab-header\", inputs: [\"selectedIndex\"], outputs: [\"selectFocusedIndex\", \"indexFocused\"] }, { type: MatTabBody, selector: \"mat-tab-body\" }], directives: [{ type: i3$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: MatTabLabelWrapper, selector: \"[matTabLabelWrapper]\", inputs: [\"disabled\"] }, { type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { type: i7.CdkMonitorFocus, selector: \"[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]\", outputs: [\"cdkFocusChange\"] }, { type: i3$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i3$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i7$1.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabGroup, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-group', exportAs: 'matTabGroup', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, inputs: ['color', 'disableRipple'], providers: [\n {\n provide: MAT_TAB_GROUP,\n useExisting: MatTabGroup,\n },\n ], host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n }, template: \"<mat-tab-header #tabHeader\\n [selectedIndex]=\\\"selectedIndex || 0\\\"\\n [disableRipple]=\\\"disableRipple\\\"\\n [disablePagination]=\\\"disablePagination\\\"\\n (indexFocused)=\\\"_focusChanged($event)\\\"\\n (selectFocusedIndex)=\\\"selectedIndex = $event\\\">\\n <div class=\\\"mat-tab-label mat-focus-indicator\\\" role=\\\"tab\\\" matTabLabelWrapper mat-ripple\\n cdkMonitorElementFocus\\n *ngFor=\\\"let tab of _tabs; let i = index\\\"\\n [id]=\\\"_getTabLabelId(i)\\\"\\n [attr.tabIndex]=\\\"_getTabIndex(tab, i)\\\"\\n [attr.aria-posinset]=\\\"i + 1\\\"\\n [attr.aria-setsize]=\\\"_tabs.length\\\"\\n [attr.aria-controls]=\\\"_getTabContentId(i)\\\"\\n [attr.aria-selected]=\\\"selectedIndex === i\\\"\\n [attr.aria-label]=\\\"tab.ariaLabel || null\\\"\\n [attr.aria-labelledby]=\\\"(!tab.ariaLabel && tab.ariaLabelledby) ? tab.ariaLabelledby : null\\\"\\n [class.mat-tab-label-active]=\\\"selectedIndex === i\\\"\\n [ngClass]=\\\"tab.labelClass\\\"\\n [disabled]=\\\"tab.disabled\\\"\\n [matRippleDisabled]=\\\"tab.disabled || disableRipple\\\"\\n (click)=\\\"_handleClick(tab, tabHeader, i)\\\"\\n (cdkFocusChange)=\\\"_tabFocusChanged($event, i)\\\">\\n\\n\\n <div class=\\\"mat-tab-label-content\\\">\\n <!-- If there is a label template, use it. -->\\n <ng-template [ngIf]=\\\"tab.templateLabel\\\" [ngIfElse]=\\\"tabTextLabel\\\">\\n <ng-template [cdkPortalOutlet]=\\\"tab.templateLabel\\\"></ng-template>\\n </ng-template>\\n\\n <!-- If there is not a label template, fall back to the text label. -->\\n <ng-template #tabTextLabel>{{tab.textLabel}}</ng-template>\\n </div>\\n </div>\\n</mat-tab-header>\\n\\n<div\\n class=\\\"mat-tab-body-wrapper\\\"\\n [class._mat-animation-noopable]=\\\"_animationMode === 'NoopAnimations'\\\"\\n #tabBodyWrapper>\\n <mat-tab-body role=\\\"tabpanel\\\"\\n *ngFor=\\\"let tab of _tabs; let i = index\\\"\\n [id]=\\\"_getTabContentId(i)\\\"\\n [attr.tabindex]=\\\"(contentTabIndex != null && selectedIndex === i) ? contentTabIndex : null\\\"\\n [attr.aria-labelledby]=\\\"_getTabLabelId(i)\\\"\\n [class.mat-tab-body-active]=\\\"selectedIndex === i\\\"\\n [ngClass]=\\\"tab.bodyClass\\\"\\n [content]=\\\"tab.content!\\\"\\n [position]=\\\"tab.position!\\\"\\n [origin]=\\\"tab.origin\\\"\\n [animationDuration]=\\\"animationDuration\\\"\\n (_onCentered)=\\\"_removeTabBodyWrapperHeight()\\\"\\n (_onCentering)=\\\"_setTabBodyWrapperHeight($event)\\\">\\n </mat-tab-body>\\n</div>\\n\", styles: [\".mat-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.cdk-high-contrast-active .mat-tab-label:focus{outline:dotted 2px;outline-offset:-2px}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{padding:0 12px}}@media(max-width: 959px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs]>.mat-tab-header .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-tab-body-wrapper{transition:none;animation:none}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TABS_CONFIG]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { _allTabs: [{\n type: ContentChildren,\n args: [MatTab, { descendants: true }]\n }], _tabBodyWrapper: [{\n type: ViewChild,\n args: ['tabBodyWrapper']\n }], _tabHeader: [{\n type: ViewChild,\n args: ['tabHeader']\n }] } });\n\n// Increasing integer for generating unique ids for tab nav components.\nlet nextUniqueId = 0;\n/**\n * Base class with all of the `MatTabNav` functionality.\n * @docs-private\n */\nclass _MatTabNavBase extends MatPaginatedTabHeader {\n constructor(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n this._disableRipple = false;\n /** Theme color of the nav bar. */\n this.color = 'primary';\n }\n /** Background color of the tab nav. */\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(value) {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(`mat-background-${this.backgroundColor}`);\n if (value) {\n classList.add(`mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /** Whether the ripple effect is disabled or not. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _itemSelected() {\n // noop\n }\n ngAfterContentInit() {\n // We need this to run before the `changes` subscription in parent to ensure that the\n // selectedIndex is up-to-date by the time the super class starts looking for it.\n this._items.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n this.updateActiveLink();\n });\n super.ngAfterContentInit();\n }\n /** Notifies the component that the active link has been changed. */\n updateActiveLink() {\n if (!this._items) {\n return;\n }\n const items = this._items.toArray();\n for (let i = 0; i < items.length; i++) {\n if (items[i].active) {\n this.selectedIndex = i;\n this._changeDetectorRef.markForCheck();\n if (this.tabPanel) {\n this.tabPanel._activeTabId = items[i].id;\n }\n return;\n }\n }\n // The ink bar should hide itself if no items are active.\n this.selectedIndex = -1;\n this._inkBar.hide();\n }\n _getRole() {\n return this.tabPanel ? 'tablist' : this._elementRef.nativeElement.getAttribute('role');\n }\n}\n_MatTabNavBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabNavBase, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabNavBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: _MatTabNavBase, inputs: { backgroundColor: \"backgroundColor\", disableRipple: \"disableRipple\", color: \"color\", tabPanel: \"tabPanel\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabNavBase, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { backgroundColor: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }], color: [{\n type: Input\n }], tabPanel: [{\n type: Input\n }] } });\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\nclass MatTabNav extends _MatTabNavBase {\n constructor(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode) {\n super(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode);\n }\n}\nMatTabNav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabNav, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabNav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabNav, selector: \"[mat-tab-nav-bar]\", inputs: { color: \"color\" }, host: { properties: { \"attr.role\": \"_getRole()\", \"class.mat-tab-header-pagination-controls-enabled\": \"_showPaginationControls\", \"class.mat-tab-header-rtl\": \"_getLayoutDirection() == 'rtl'\", \"class.mat-primary\": \"color !== \\\"warn\\\" && color !== \\\"accent\\\"\", \"class.mat-accent\": \"color === \\\"accent\\\"\", \"class.mat-warn\": \"color === \\\"warn\\\"\" }, classAttribute: \"mat-tab-nav-bar mat-tab-header\" }, queries: [{ propertyName: \"_items\", predicate: i0.forwardRef(function () { return MatTabLink; }), descendants: true }], viewQueries: [{ propertyName: \"_inkBar\", first: true, predicate: MatInkBar, descendants: true, static: true }, { propertyName: \"_tabListContainer\", first: true, predicate: [\"tabListContainer\"], descendants: true, static: true }, { propertyName: \"_tabList\", first: true, predicate: [\"tabList\"], descendants: true, static: true }, { propertyName: \"_tabListInner\", first: true, predicate: [\"tabListInner\"], descendants: true, static: true }, { propertyName: \"_nextPaginator\", first: true, predicate: [\"nextPaginator\"], descendants: true }, { propertyName: \"_previousPaginator\", first: true, predicate: [\"previousPaginator\"], descendants: true }], exportAs: [\"matTabNavBar\", \"matTabNav\"], usesInheritance: true, ngImport: i0, template: \"<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4\\\"\\n #previousPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n tabindex=\\\"-1\\\"\\n [matRippleDisabled]=\\\"_disableScrollBefore || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollBefore\\\"\\n [disabled]=\\\"_disableScrollBefore || null\\\"\\n (click)=\\\"_handlePaginatorClick('before')\\\"\\n (mousedown)=\\\"_handlePaginatorPress('before', $event)\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\\n<div class=\\\"mat-tab-link-container\\\" #tabListContainer (keydown)=\\\"_handleKeydown($event)\\\">\\n <div\\n class=\\\"mat-tab-list\\\"\\n [class._mat-animation-noopable]=\\\"_animationMode === 'NoopAnimations'\\\"\\n #tabList\\n (cdkObserveContent)=\\\"_onContentChanges()\\\">\\n <div class=\\\"mat-tab-links\\\" #tabListInner>\\n <ng-content></ng-content>\\n </div>\\n <mat-ink-bar></mat-ink-bar>\\n </div>\\n</div>\\n\\n<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4\\\"\\n #nextPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n [matRippleDisabled]=\\\"_disableScrollAfter || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollAfter\\\"\\n [disabled]=\\\"_disableScrollAfter || null\\\"\\n tabindex=\\\"-1\\\"\\n (mousedown)=\\\"_handlePaginatorPress('after', $event)\\\"\\n (click)=\\\"_handlePaginatorClick('after')\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-links{display:flex}[mat-align-tabs=center]>.mat-tab-link-container .mat-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-tab-link-container .mat-tab-links{justify-content:flex-end}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-ink-bar{transition:none;animation:none}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden;-webkit-tap-highlight-color:transparent}.mat-tab-link:focus{outline:none}.mat-tab-link:focus:not(.mat-tab-disabled){opacity:1}.cdk-high-contrast-active .mat-tab-link:focus{outline:dotted 2px;outline-offset:-2px}.mat-tab-link.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-link.mat-tab-disabled{opacity:.5}.mat-tab-link .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-link{opacity:1}[mat-stretch-tabs] .mat-tab-link{flex-basis:0;flex-grow:1}.mat-tab-link.mat-tab-disabled{pointer-events:none}@media(max-width: 599px){.mat-tab-link{min-width:72px}}\\n\"], directives: [{ type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { type: i5.CdkObserveContent, selector: \"[cdkObserveContent]\", inputs: [\"cdkObserveContentDisabled\", \"debounce\"], outputs: [\"cdkObserveContent\"], exportAs: [\"cdkObserveContent\"] }, { type: MatInkBar, selector: \"mat-ink-bar\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabNav, decorators: [{\n type: Component,\n args: [{ selector: '[mat-tab-nav-bar]', exportAs: 'matTabNavBar, matTabNav', inputs: ['color'], host: {\n '[attr.role]': '_getRole()',\n 'class': 'mat-tab-nav-bar mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n '[class.mat-primary]': 'color !== \"warn\" && color !== \"accent\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: \"<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4\\\"\\n #previousPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n tabindex=\\\"-1\\\"\\n [matRippleDisabled]=\\\"_disableScrollBefore || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollBefore\\\"\\n [disabled]=\\\"_disableScrollBefore || null\\\"\\n (click)=\\\"_handlePaginatorClick('before')\\\"\\n (mousedown)=\\\"_handlePaginatorPress('before', $event)\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\\n<div class=\\\"mat-tab-link-container\\\" #tabListContainer (keydown)=\\\"_handleKeydown($event)\\\">\\n <div\\n class=\\\"mat-tab-list\\\"\\n [class._mat-animation-noopable]=\\\"_animationMode === 'NoopAnimations'\\\"\\n #tabList\\n (cdkObserveContent)=\\\"_onContentChanges()\\\">\\n <div class=\\\"mat-tab-links\\\" #tabListInner>\\n <ng-content></ng-content>\\n </div>\\n <mat-ink-bar></mat-ink-bar>\\n </div>\\n</div>\\n\\n<button class=\\\"mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4\\\"\\n #nextPaginator\\n aria-hidden=\\\"true\\\"\\n type=\\\"button\\\"\\n mat-ripple\\n [matRippleDisabled]=\\\"_disableScrollAfter || disableRipple\\\"\\n [class.mat-tab-header-pagination-disabled]=\\\"_disableScrollAfter\\\"\\n [disabled]=\\\"_disableScrollAfter || null\\\"\\n tabindex=\\\"-1\\\"\\n (mousedown)=\\\"_handlePaginatorPress('after', $event)\\\"\\n (click)=\\\"_handlePaginatorClick('after')\\\"\\n (touchend)=\\\"_stopInterval()\\\">\\n <div class=\\\"mat-tab-header-pagination-chevron\\\"></div>\\n</button>\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-links{display:flex}[mat-align-tabs=center]>.mat-tab-link-container .mat-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-tab-link-container .mat-tab-links{justify-content:flex-end}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-ink-bar{transition:none;animation:none}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden;-webkit-tap-highlight-color:transparent}.mat-tab-link:focus{outline:none}.mat-tab-link:focus:not(.mat-tab-disabled){opacity:1}.cdk-high-contrast-active .mat-tab-link:focus{outline:dotted 2px;outline-offset:-2px}.mat-tab-link.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-link.mat-tab-disabled{opacity:.5}.mat-tab-link .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-link{opacity:1}[mat-stretch-tabs] .mat-tab-link{flex-basis:0;flex-grow:1}.mat-tab-link.mat-tab-disabled{pointer-events:none}@media(max-width: 599px){.mat-tab-link{min-width:72px}}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { _items: [{\n type: ContentChildren,\n args: [forwardRef(() => MatTabLink), { descendants: true }]\n }], _inkBar: [{\n type: ViewChild,\n args: [MatInkBar, { static: true }]\n }], _tabListContainer: [{\n type: ViewChild,\n args: ['tabListContainer', { static: true }]\n }], _tabList: [{\n type: ViewChild,\n args: ['tabList', { static: true }]\n }], _tabListInner: [{\n type: ViewChild,\n args: ['tabListInner', { static: true }]\n }], _nextPaginator: [{\n type: ViewChild,\n args: ['nextPaginator']\n }], _previousPaginator: [{\n type: ViewChild,\n args: ['previousPaginator']\n }] } });\n// Boilerplate for applying mixins to MatTabLink.\nconst _MatTabLinkMixinBase = mixinTabIndex(mixinDisableRipple(mixinDisabled(class {\n})));\n/** Base class with all of the `MatTabLink` functionality. */\nclass _MatTabLinkBase extends _MatTabLinkMixinBase {\n constructor(_tabNavBar, \n /** @docs-private */ elementRef, globalRippleOptions, tabIndex, _focusMonitor, animationMode) {\n super();\n this._tabNavBar = _tabNavBar;\n this.elementRef = elementRef;\n this._focusMonitor = _focusMonitor;\n /** Whether the tab link is active or not. */\n this._isActive = false;\n /** Unique id for the tab. */\n this.id = `mat-tab-link-${nextUniqueId++}`;\n this.rippleConfig = globalRippleOptions || {};\n this.tabIndex = parseInt(tabIndex) || 0;\n if (animationMode === 'NoopAnimations') {\n this.rippleConfig.animation = { enterDuration: 0, exitDuration: 0 };\n }\n }\n /** Whether the link is active. */\n get active() {\n return this._isActive;\n }\n set active(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._isActive) {\n this._isActive = newValue;\n this._tabNavBar.updateActiveLink();\n }\n }\n /**\n * Whether ripples are disabled on interaction.\n * @docs-private\n */\n get rippleDisabled() {\n return (this.disabled ||\n this.disableRipple ||\n this._tabNavBar.disableRipple ||\n !!this.rippleConfig.disabled);\n }\n /** Focuses the tab link. */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this.elementRef);\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this.elementRef);\n }\n _handleFocus() {\n // Since we allow navigation through tabbing in the nav bar, we\n // have to update the focused index whenever the link receives focus.\n this._tabNavBar.focusIndex = this._tabNavBar._items.toArray().indexOf(this);\n }\n _handleKeydown(event) {\n if (this._tabNavBar.tabPanel && event.keyCode === SPACE) {\n this.elementRef.nativeElement.click();\n }\n }\n _getAriaControls() {\n var _a;\n return this._tabNavBar.tabPanel\n ? (_a = this._tabNavBar.tabPanel) === null || _a === void 0 ? void 0 : _a.id\n : this.elementRef.nativeElement.getAttribute('aria-controls');\n }\n _getAriaSelected() {\n if (this._tabNavBar.tabPanel) {\n return this.active ? 'true' : 'false';\n }\n else {\n return this.elementRef.nativeElement.getAttribute('aria-selected');\n }\n }\n _getAriaCurrent() {\n return this.active && !this._tabNavBar.tabPanel ? 'page' : null;\n }\n _getRole() {\n return this._tabNavBar.tabPanel ? 'tab' : this.elementRef.nativeElement.getAttribute('role');\n }\n _getTabIndex() {\n if (this._tabNavBar.tabPanel) {\n return this._isActive ? 0 : -1;\n }\n else {\n return this.tabIndex;\n }\n }\n}\n_MatTabLinkBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabLinkBase, deps: [{ token: _MatTabNavBase }, { token: i0.ElementRef }, { token: MAT_RIPPLE_GLOBAL_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }, { token: i7.FocusMonitor }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabLinkBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: _MatTabLinkBase, inputs: { active: \"active\", id: \"id\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatTabLinkBase, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: _MatTabNavBase }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: i7.FocusMonitor }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { active: [{\n type: Input\n }], id: [{\n type: Input\n }] } });\n/**\n * Link inside of a `mat-tab-nav-bar`.\n */\nclass MatTabLink extends _MatTabLinkBase {\n constructor(tabNavBar, elementRef, ngZone, platform, globalRippleOptions, tabIndex, focusMonitor, animationMode) {\n super(tabNavBar, elementRef, globalRippleOptions, tabIndex, focusMonitor, animationMode);\n this._tabLinkRipple = new RippleRenderer(this, ngZone, elementRef, platform);\n this._tabLinkRipple.setupTriggerEvents(elementRef.nativeElement);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._tabLinkRipple._removeTriggerEvents();\n }\n}\nMatTabLink.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabLink, deps: [{ token: MatTabNav }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i3.Platform }, { token: MAT_RIPPLE_GLOBAL_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }, { token: i7.FocusMonitor }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabLink, selector: \"[mat-tab-link], [matTabLink]\", inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, host: { listeners: { \"focus\": \"_handleFocus()\", \"keydown\": \"_handleKeydown($event)\" }, properties: { \"attr.aria-controls\": \"_getAriaControls()\", \"attr.aria-current\": \"_getAriaCurrent()\", \"attr.aria-disabled\": \"disabled\", \"attr.aria-selected\": \"_getAriaSelected()\", \"attr.id\": \"id\", \"attr.tabIndex\": \"_getTabIndex()\", \"attr.role\": \"_getRole()\", \"class.mat-tab-disabled\": \"disabled\", \"class.mat-tab-label-active\": \"active\" }, classAttribute: \"mat-tab-link mat-focus-indicator\" }, exportAs: [\"matTabLink\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabLink, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n host: {\n 'class': 'mat-tab-link mat-focus-indicator',\n '[attr.aria-controls]': '_getAriaControls()',\n '[attr.aria-current]': '_getAriaCurrent()',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-selected]': '_getAriaSelected()',\n '[attr.id]': 'id',\n '[attr.tabIndex]': '_getTabIndex()',\n '[attr.role]': '_getRole()',\n '[class.mat-tab-disabled]': 'disabled',\n '[class.mat-tab-label-active]': 'active',\n '(focus)': '_handleFocus()',\n '(keydown)': '_handleKeydown($event)',\n },\n }]\n }], ctorParameters: function () {\n return [{ type: MatTabNav }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: i7.FocusMonitor }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n } });\n/**\n * Tab panel component associated with MatTabNav.\n */\nclass MatTabNavPanel {\n constructor() {\n /** Unique id for the tab panel. */\n this.id = `mat-tab-nav-panel-${nextUniqueId++}`;\n }\n}\nMatTabNavPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabNavPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });\nMatTabNavPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatTabNavPanel, selector: \"mat-tab-nav-panel\", inputs: { id: \"id\" }, host: { attributes: { \"role\": \"tabpanel\" }, properties: { \"attr.aria-labelledby\": \"_activeTabId\", \"attr.id\": \"id\" }, classAttribute: \"mat-tab-nav-panel\" }, exportAs: [\"matTabNavPanel\"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabNavPanel, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-tab-nav-panel',\n exportAs: 'matTabNavPanel',\n template: '<ng-content></ng-content>',\n host: {\n '[attr.aria-labelledby]': '_activeTabId',\n '[attr.id]': 'id',\n 'class': 'mat-tab-nav-panel',\n 'role': 'tabpanel',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], propDecorators: { id: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatTabsModule {\n}\nMatTabsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatTabsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabsModule, declarations: [MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader,\n MatTabContent], imports: [CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule], exports: [MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabContent] });\nMatTabsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabsModule, imports: [[\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule,\n ], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatTabsModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabContent,\n ],\n declarations: [\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader,\n MatTabContent,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_TAB, MAT_TABS_CONFIG, MAT_TAB_GROUP, MatInkBar, MatTab, MatTabBody, MatTabBodyPortal, MatTabChangeEvent, MatTabContent, MatTabGroup, MatTabHeader, MatTabLabel, MatTabLabelWrapper, MatTabLink, MatTabNav, MatTabNavPanel, MatTabsModule, _MAT_INK_BAR_POSITIONER, _MatTabBodyBase, _MatTabGroupBase, _MatTabHeaderBase, _MatTabLinkBase, _MatTabNavBase, matTabsAnimations };\n"]}