{"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"]}