{"version":3,"file":"tabs.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-content.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-label.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/ink-bar.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-label-wrapper.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/paginated-tab-header.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-header.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-header.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-config.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-body.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-body.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-group.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-group.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-nav-bar/tab-nav-bar.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-nav-bar/tab-nav-bar.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tab-nav-bar/tab-link.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/tabs-module.ts"],"sourcesContent":["/**\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.dev/license\n */\n\nimport {Directive, InjectionToken, TemplateRef, inject} from '@angular/core';\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 */\nexport const MAT_TAB_CONTENT = new InjectionToken('MatTabContent');\n\n/** Decorates the `ng-template` tags and reads out the template from it. */\n@Directive({\n selector: '[matTabContent]',\n providers: [{provide: MAT_TAB_CONTENT, useExisting: MatTabContent}],\n})\nexport class MatTabContent {\n template = inject>(TemplateRef);\n\n constructor(...args: unknown[]);\n constructor() {}\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.dev/license\n */\n\nimport {Directive, InjectionToken, inject} from '@angular/core';\nimport {CdkPortal} from '@angular/cdk/portal';\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 */\nexport const MAT_TAB_LABEL = new InjectionToken('MatTabLabel');\n\n/**\n * Used to provide a tab label to a tab without causing a circular dependency.\n * @docs-private\n */\nexport const MAT_TAB = new InjectionToken('MAT_TAB');\n\n/** Used to flag tab labels for use with the portal directive */\n@Directive({\n selector: '[mat-tab-label], [matTabLabel]',\n providers: [{provide: MAT_TAB_LABEL, useExisting: MatTabLabel}],\n})\nexport class MatTabLabel extends CdkPortal {\n _closestTab = inject(MAT_TAB, {optional: true});\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.dev/license\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n InjectionToken,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {MatTabContent} from './tab-content';\nimport {MAT_TAB, MatTabLabel} from './tab-label';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {Subject} from 'rxjs';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\nimport {_StructuralStylesLoader} from '../core';\n\n/**\n * Used to provide a tab group to a tab without causing a circular dependency.\n * @docs-private\n */\nexport const MAT_TAB_GROUP = new InjectionToken('MAT_TAB_GROUP');\n\n@Component({\n selector: 'mat-tab',\n // Note that usually we'd go through a bit more trouble and set up another class so that\n // the inlined template of `MatTab` isn't duplicated, however the template is small enough\n // that creating the extra class will generate more code than just duplicating the template.\n templateUrl: 'tab.html',\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matTab',\n providers: [{provide: MAT_TAB, useExisting: MatTab}],\n host: {\n // This element will be rendered on the server in order to support hydration.\n // Hide it so it doesn't cause a layout shift when it's removed on the client.\n 'hidden': '',\n\n // Clear any custom IDs from the tab since they'll be forwarded to the actual tab.\n '[attr.id]': 'null',\n },\n})\nexport class MatTab implements OnInit, OnChanges, OnDestroy {\n private _viewContainerRef = inject(ViewContainerRef);\n _closestTabGroup = inject(MAT_TAB_GROUP, {optional: true});\n\n /** whether the tab is disabled. */\n @Input({transform: booleanAttribute})\n disabled: boolean = false;\n\n /** Content for the tab label given by ``. */\n @ContentChild(MatTabLabel)\n get templateLabel(): MatTabLabel {\n return this._templateLabel;\n }\n set templateLabel(value: MatTabLabel) {\n this._setTemplateLabelInput(value);\n }\n private _templateLabel!: MatTabLabel;\n\n /**\n * Template provided in the tab content that will be used if present, used to enable lazy-loading\n */\n @ContentChild(MatTabContent, {read: TemplateRef, static: true})\n // We need an initializer here to avoid a TS error. The value will be set in `ngAfterViewInit`.\n private _explicitContent: TemplateRef = undefined!;\n\n /** Template inside the MatTab view that contains an ``. */\n @ViewChild(TemplateRef, {static: true}) _implicitContent!: TemplateRef;\n\n /** Plain text label for the tab, used when there is no template label. */\n @Input('label') textLabel: string = '';\n\n /** Aria label for the tab. */\n @Input('aria-label') ariaLabel!: string;\n\n /**\n * Reference to the element that the tab is labelled by.\n * Will be cleared if `aria-label` is set at the same time.\n */\n @Input('aria-labelledby') ariaLabelledby!: string;\n\n /** Classes to be passed to the tab label inside the mat-tab-header container. */\n @Input() labelClass!: string | string[];\n\n /** Classes to be passed to the tab mat-tab-body container. */\n @Input() bodyClass!: string | string[];\n\n /**\n * Custom ID for the tab, overriding the auto-generated one by Material.\n * Note that when using this input, it's your responsibility to ensure that the ID is unique.\n */\n @Input() id: string | null = null;\n\n /** Portal that will be the hosted content of the tab */\n private _contentPortal: TemplatePortal | null = null;\n\n /** @docs-private */\n get content(): TemplatePortal | null {\n return this._contentPortal;\n }\n\n /** Emits whenever the internal state of the tab changes. */\n readonly _stateChanges = new Subject();\n\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n position: number | null = null;\n\n // TODO(crisbeto): we no longer use this, but some internal apps appear to rely on it.\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 origin: number | null = null;\n\n /**\n * Whether the tab is currently active.\n */\n isActive = false;\n\n constructor(...args: unknown[]);\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\n this._stateChanges.next();\n }\n }\n\n ngOnDestroy(): void {\n this._stateChanges.complete();\n }\n\n ngOnInit(): void {\n this._contentPortal = new TemplatePortal(\n this._explicitContent || this._implicitContent,\n this._viewContainerRef,\n );\n }\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 private _setTemplateLabelInput(value: MatTabLabel | undefined) {\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}\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.dev/license\n */\n\nimport {\n Directive,\n ElementRef,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n booleanAttribute,\n inject,\n} from '@angular/core';\n\n/**\n * Item inside a tab header relative to which the ink bar can be aligned.\n * @docs-private\n */\nexport interface MatInkBarItem extends OnInit, OnDestroy {\n elementRef: ElementRef;\n activateInkBar(previousIndicatorClientRect?: DOMRect): void;\n deactivateInkBar(): void;\n fitInkBarToContent: boolean;\n}\n\n/** Class that is applied when a tab indicator is active. */\nconst ACTIVE_CLASS = 'mdc-tab-indicator--active';\n\n/** Class that is applied when the tab indicator should not transition. */\nconst NO_TRANSITION_CLASS = 'mdc-tab-indicator--no-transition';\n\n/**\n * Abstraction around the MDC tab indicator that acts as the tab header's ink bar.\n * @docs-private\n */\nexport class MatInkBar {\n /** Item to which the ink bar is aligned currently. */\n private _currentItem: MatInkBarItem | undefined;\n\n constructor(private _items: QueryList) {}\n\n /** Hides the ink bar. */\n hide() {\n this._items.forEach(item => item.deactivateInkBar());\n this._currentItem = undefined;\n }\n\n /** Aligns the ink bar to a DOM node. */\n alignToElement(element: HTMLElement) {\n const correspondingItem = this._items.find(item => item.elementRef.nativeElement === element);\n const currentItem = this._currentItem;\n\n if (correspondingItem === currentItem) {\n return;\n }\n\n currentItem?.deactivateInkBar();\n\n if (correspondingItem) {\n const domRect = currentItem?.elementRef.nativeElement.getBoundingClientRect?.();\n\n // The ink bar won't animate unless we give it the `DOMRect` of the previous item.\n correspondingItem.activateInkBar(domRect);\n this._currentItem = correspondingItem;\n }\n }\n}\n\n@Directive()\nexport abstract class InkBarItem implements OnInit, OnDestroy {\n private _elementRef = inject>(ElementRef);\n private _inkBarElement: HTMLElement | null = null;\n private _inkBarContentElement: HTMLElement | null = null;\n private _fitToContent = false;\n\n /** Whether the ink bar should fit to the entire tab or just its content. */\n @Input({transform: booleanAttribute})\n get fitInkBarToContent(): boolean {\n return this._fitToContent;\n }\n set fitInkBarToContent(newValue: boolean) {\n if (this._fitToContent !== newValue) {\n this._fitToContent = newValue;\n\n if (this._inkBarElement) {\n this._appendInkBarElement();\n }\n }\n }\n\n /** Aligns the ink bar to the current item. */\n activateInkBar(previousIndicatorClientRect?: DOMRect) {\n const element = this._elementRef.nativeElement;\n\n // Early exit if no indicator is present to handle cases where an indicator\n // may be activated without a prior indicator state\n if (\n !previousIndicatorClientRect ||\n !element.getBoundingClientRect ||\n !this._inkBarContentElement\n ) {\n element.classList.add(ACTIVE_CLASS);\n return;\n }\n\n // This animation uses the FLIP approach. You can read more about it at the link below:\n // https://aerotwist.com/blog/flip-your-animations/\n\n // Calculate the dimensions based on the dimensions of the previous indicator\n const currentClientRect = element.getBoundingClientRect();\n const widthDelta = previousIndicatorClientRect.width / currentClientRect.width;\n const xPosition = previousIndicatorClientRect.left - currentClientRect.left;\n element.classList.add(NO_TRANSITION_CLASS);\n this._inkBarContentElement.style.setProperty(\n 'transform',\n `translateX(${xPosition}px) scaleX(${widthDelta})`,\n );\n\n // Force repaint before updating classes and transform to ensure the transform properly takes effect\n element.getBoundingClientRect();\n\n element.classList.remove(NO_TRANSITION_CLASS);\n element.classList.add(ACTIVE_CLASS);\n this._inkBarContentElement.style.setProperty('transform', '');\n }\n\n /** Removes the ink bar from the current item. */\n deactivateInkBar() {\n this._elementRef.nativeElement.classList.remove(ACTIVE_CLASS);\n }\n\n /** Initializes the foundation. */\n ngOnInit() {\n this._createInkBarElement();\n }\n\n /** Destroys the foundation. */\n ngOnDestroy() {\n this._inkBarElement?.remove();\n this._inkBarElement = this._inkBarContentElement = null!;\n }\n\n /** Creates and appends the ink bar element. */\n private _createInkBarElement() {\n const documentNode = this._elementRef.nativeElement.ownerDocument || document;\n const inkBarElement = (this._inkBarElement = documentNode.createElement('span'));\n const inkBarContentElement = (this._inkBarContentElement = documentNode.createElement('span'));\n\n inkBarElement.className = 'mdc-tab-indicator';\n inkBarContentElement.className =\n 'mdc-tab-indicator__content mdc-tab-indicator__content--underline';\n\n inkBarElement.appendChild(this._inkBarContentElement);\n this._appendInkBarElement();\n }\n\n /**\n * Appends the ink bar to the tab host element or content, depending on whether\n * the ink bar should fit to content.\n */\n private _appendInkBarElement() {\n if (!this._inkBarElement && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Ink bar element has not been created and cannot be appended');\n }\n\n const parentElement = this._fitToContent\n ? this._elementRef.nativeElement.querySelector('.mdc-tab__content')\n : this._elementRef.nativeElement;\n\n if (!parentElement && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Missing element to host the ink bar');\n }\n\n parentElement!.appendChild(this._inkBarElement!);\n }\n}\n\n/**\n * Interface for a MatInkBar positioner method, defining the positioning and width of the ink\n * bar in a set of tabs.\n */\nexport interface _MatInkBarPositioner {\n (element: HTMLElement): {left: string; width: string};\n}\n\n/** Injection token for the MatInkBar's Positioner. */\nexport const _MAT_INK_BAR_POSITIONER = new InjectionToken<_MatInkBarPositioner>(\n 'MatInkBarPositioner',\n {\n providedIn: 'root',\n factory: () => {\n const method = (element: HTMLElement) => ({\n left: element ? (element.offsetLeft || 0) + 'px' : '0',\n width: element ? (element.offsetWidth || 0) + 'px' : '0',\n });\n\n return method;\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.dev/license\n */\n\nimport {Directive, ElementRef, Input, booleanAttribute, inject} from '@angular/core';\nimport {InkBarItem} from './ink-bar';\n\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * @docs-private\n */\n@Directive({\n selector: '[matTabLabelWrapper]',\n host: {\n '[class.mat-mdc-tab-disabled]': 'disabled',\n '[attr.aria-disabled]': '!!disabled',\n },\n})\nexport class MatTabLabelWrapper extends InkBarItem {\n elementRef = inject(ElementRef);\n\n /** Whether the tab is disabled. */\n @Input({transform: booleanAttribute})\n disabled: boolean = false;\n\n /** Sets focus on the wrapper element */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n getOffsetLeft(): number {\n return this.elementRef.nativeElement.offsetLeft;\n }\n\n getOffsetWidth(): number {\n return this.elementRef.nativeElement.offsetWidth;\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.dev/license\n */\n\nimport {FocusKeyManager, FocusableOption} from '@angular/cdk/a11y';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {SharedResizeObserver} from '@angular/cdk/observers/private';\nimport {Platform} from '@angular/cdk/platform';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n afterNextRender,\n booleanAttribute,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport {EMPTY, Observable, Observer, Subject, merge, of as observableOf, timer} from 'rxjs';\nimport {debounceTime, filter, skip, startWith, switchMap, takeUntil} from 'rxjs/operators';\nimport {_animationsDisabled} from '../core';\n\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = {\n passive: true,\n};\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\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/**\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/** Item inside a paginated tab header. */\nexport type MatPaginatedTabHeaderItem = FocusableOption & {elementRef: ElementRef};\n\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\n@Directive()\nexport abstract class MatPaginatedTabHeader\n implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy\n{\n protected _elementRef = inject>(ElementRef);\n protected _changeDetectorRef = inject(ChangeDetectorRef);\n private _viewportRuler = inject(ViewportRuler);\n private _dir = inject(Directionality, {optional: true});\n private _ngZone = inject(NgZone);\n private _platform = inject(Platform);\n private _sharedResizeObserver = inject(SharedResizeObserver);\n private _injector = inject(Injector);\n private _renderer = inject(Renderer2);\n _animationsDisabled = _animationsDisabled();\n private _eventCleanups: (() => void)[];\n\n abstract _items: QueryList;\n abstract _inkBar: {hide: () => void; alignToElement: (element: HTMLElement) => void};\n abstract _tabListContainer: ElementRef;\n abstract _tabList: ElementRef;\n abstract _tabListInner: ElementRef;\n abstract _nextPaginator: ElementRef;\n abstract _previousPaginator: ElementRef;\n\n /** The distance in pixels that the tab labels should be translated to the left. */\n private _scrollDistance = 0;\n\n /** Whether the header should scroll to the selected index after the view has been checked. */\n private _selectedIndexChanged = false;\n\n /** Emits when the component is destroyed. */\n protected readonly _destroyed = new Subject();\n\n /** Whether the controls for pagination should be displayed */\n _showPaginationControls = false;\n\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n _disableScrollAfter = true;\n\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n _disableScrollBefore = true;\n\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n private _tabLabelCount!: number;\n\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n private _scrollDistanceChanged = false;\n\n /** Used to manage focus between the tabs. */\n protected _keyManager: FocusKeyManager | undefined;\n\n /** Cached text content of the header. */\n private _currentTextContent!: string;\n\n /** Stream that will stop the automated scrolling. */\n private _stopScrolling = new Subject();\n\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 @Input({transform: booleanAttribute})\n disablePagination: boolean = false;\n\n /** The index of the active tab. */\n @Input({transform: numberAttribute})\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n set selectedIndex(v: number) {\n const value = isNaN(v) ? 0 : v;\n\n if (this._selectedIndex != value) {\n this._selectedIndexChanged = true;\n this._selectedIndex = value;\n\n if (this._keyManager) {\n this._keyManager.updateActiveItem(value);\n }\n }\n }\n private _selectedIndex: number = 0;\n\n /** Event emitted when the option is selected. */\n @Output() readonly selectFocusedIndex: EventEmitter = new EventEmitter();\n\n /** Event emitted when a label is focused. */\n @Output() readonly indexFocused: EventEmitter = new EventEmitter();\n\n constructor(...args: unknown[]);\n\n constructor() {\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n this._eventCleanups = this._ngZone.runOutsideAngular(() => [\n this._renderer.listen(this._elementRef.nativeElement, 'mouseleave', () =>\n this._stopInterval(),\n ),\n ]);\n }\n\n /** Called when the user has selected an item via the keyboard. */\n protected abstract _itemSelected(event: KeyboardEvent): void;\n\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n\n this._eventCleanups.push(\n this._renderer.listen(\n this._previousPaginator.nativeElement,\n 'touchstart',\n () => this._handlePaginatorPress('before'),\n passiveEventListenerOptions,\n ),\n this._renderer.listen(\n this._nextPaginator.nativeElement,\n 'touchstart',\n () => this._handlePaginatorPress('after'),\n passiveEventListenerOptions,\n ),\n );\n }\n\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : observableOf('ltr');\n // We need to debounce resize events because the alignment logic is expensive.\n // If someone animates the width of tabs, we don't want to realign on every animation frame.\n // Once we haven't seen any more resize events in the last 32ms (~2 animaion frames) we can\n // re-align.\n const resize = this._sharedResizeObserver\n .observe(this._elementRef.nativeElement)\n .pipe(debounceTime(32), takeUntil(this._destroyed));\n // Note: We do not actually need to watch these events for proper functioning of the tabs,\n // the resize events above should capture any viewport resize that we care about. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n const viewportResize = this._viewportRuler.change(150).pipe(takeUntil(this._destroyed));\n\n const realign = () => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n };\n\n this._keyManager = new FocusKeyManager(this._items)\n .withHorizontalOrientation(this._getLayoutDirection())\n .withHomeAndEnd()\n .withWrap()\n // Allow focus to land on disabled tabs, as per https://w3c.github.io/aria-practices/#kbd_disabled_controls\n .skipPredicate(() => false);\n\n // Fall back to the first link as being active if there isn't a selected one.\n // This is relevant primarily for the tab nav bar.\n this._keyManager.updateActiveItem(Math.max(this._selectedIndex, 0));\n\n // Note: We do not need to realign after the first render for proper functioning of the tabs\n // the resize events above should fire when we first start observing the element. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n afterNextRender(realign, {injector: this._injector});\n\n // On dir change or resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, viewportResize, 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(\n 0,\n Math.min(this._getMaxScrollDistance(), this._scrollDistance),\n );\n realign();\n });\n });\n this._keyManager?.withHorizontalOrientation(this._getLayoutDirection());\n });\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.subscribe(newFocusIndex => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n\n /** Sends any changes that could affect the layout of the items. */\n private _itemsResized(): Observable {\n if (typeof ResizeObserver !== 'function') {\n return EMPTY;\n }\n\n return this._items.changes.pipe(\n startWith(this._items),\n switchMap(\n (tabItems: QueryList) =>\n new Observable((observer: Observer) =>\n this._ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver(entries => observer.next(entries));\n tabItems.forEach(item => resizeObserver.observe(item.elementRef.nativeElement));\n return () => {\n resizeObserver.disconnect();\n };\n }),\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 // Skip emissions where all the elements are invisible since we don't want\n // the header to try and re-render with invalid measurements. See #25574.\n filter(entries => entries.some(e => e.contentRect.width > 0 && e.contentRect.height > 0)),\n );\n }\n\n ngAfterContentChecked(): void {\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\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\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\n ngOnDestroy() {\n this._eventCleanups.forEach(cleanup => cleanup());\n this._keyManager?.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n\n /** Handles keyboard events on the header. */\n _handleKeydown(event: KeyboardEvent) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n if (this.focusIndex !== this.selectedIndex) {\n const item = this._items.get(this.focusIndex);\n\n if (item && !item.disabled) {\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n }\n }\n break;\n default:\n this._keyManager?.onKeydown(event);\n }\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\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\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 /**\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\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex(): number {\n return this._keyManager ? this._keyManager.activeItemIndex! : 0;\n }\n\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value: number) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n\n this._keyManager.setActiveItem(value);\n }\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: number): boolean {\n return this._items ? !!this._items.toArray()[index] : true;\n }\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: number) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n\n if (this._items && this._items.length) {\n this._items.toArray()[tabIndex].focus();\n\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\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n } else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n\n /** The layout direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\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\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\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\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\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance(): number {\n return this._scrollDistance;\n }\n set scrollDistance(value: number) {\n this._scrollTo(value);\n }\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: ScrollDirection) {\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\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\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction: ScrollDirection) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\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: number) {\n if (this.disablePagination) {\n return;\n }\n\n const selectedLabel = this._items ? this._items.toArray()[labelIndex] : null;\n\n if (!selectedLabel) {\n return;\n }\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\n let labelBeforePos: number, labelAfterPos: number;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n } else {\n labelAfterPos = this._tabListInner.nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos;\n } else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += Math.min(\n labelAfterPos - afterVisiblePos,\n labelBeforePos - beforeVisiblePos,\n );\n }\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 } else {\n const scrollWidth = this._tabListInner.nativeElement.scrollWidth;\n const containerWidth = this._elementRef.nativeElement.offsetWidth;\n\n // Usually checking that the scroll width is greater than the container width should be\n // enough, but on Safari at specific widths the browser ends up rounding up when there's\n // no pagination and rounding down once the pagination is added. This can throw the component\n // into an infinite loop where the pagination shows up and disappears constantly. We work\n // around it by adding a threshold to the calculation. From manual testing the threshold\n // can be lowered to 2px and still resolve the issue, but we set a higher one to be safe.\n // This shouldn't cause any content to be clipped, because tabs have a 24px horizontal\n // padding. See b/316395154 for more information.\n const isEnabled = scrollWidth - containerWidth >= 5;\n\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n\n if (isEnabled !== this._showPaginationControls) {\n this._showPaginationControls = isEnabled;\n this._changeDetectorRef.markForCheck();\n }\n }\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 } 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 /**\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(): number {\n const lengthOfTabList = this._tabListInner.nativeElement.scrollWidth;\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return lengthOfTabList - viewLength || 0;\n }\n\n /** Tells the ink-bar to align itself to the current label wrapper */\n _alignInkBarToSelectedTab(): void {\n const selectedItem =\n this._items && this._items.length ? this._items.toArray()[this.selectedIndex] : null;\n const selectedLabelWrapper = selectedItem ? selectedItem.elementRef.nativeElement : null;\n\n if (selectedLabelWrapper) {\n this._inkBar.alignToElement(selectedLabelWrapper);\n } else {\n this._inkBar.hide();\n }\n }\n\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\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: ScrollDirection, mouseEvent?: 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\n // Avoid overlapping timers.\n this._stopInterval();\n\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\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 /**\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 private _scrollTo(position: number) {\n if (this.disablePagination) {\n return {maxScrollDistance: 0, distance: 0};\n }\n\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n\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\n return {maxScrollDistance, distance: this._scrollDistance};\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.dev/license\n */\n\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n} from '@angular/core';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {MatInkBar} from './ink-bar';\nimport {MatPaginatedTabHeader} from './paginated-tab-header';\nimport {CdkObserveContent} from '@angular/cdk/observers';\nimport {MatRipple} from '../core';\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 */\n@Component({\n selector: 'mat-tab-header',\n templateUrl: 'tab-header.html',\n styleUrl: 'tab-header.css',\n encapsulation: ViewEncapsulation.None,\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n host: {\n 'class': 'mat-mdc-tab-header',\n '[class.mat-mdc-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-mdc-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n },\n imports: [MatRipple, CdkObserveContent],\n})\nexport class MatTabHeader\n extends MatPaginatedTabHeader\n implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy\n{\n @ContentChildren(MatTabLabelWrapper, {descendants: false}) _items!: QueryList;\n @ViewChild('tabListContainer', {static: true}) _tabListContainer!: ElementRef;\n @ViewChild('tabList', {static: true}) _tabList!: ElementRef;\n @ViewChild('tabListInner', {static: true}) _tabListInner!: ElementRef;\n @ViewChild('nextPaginator') _nextPaginator!: ElementRef;\n @ViewChild('previousPaginator') _previousPaginator!: ElementRef;\n _inkBar!: MatInkBar;\n\n /** Aria label of the header. */\n @Input('aria-label') ariaLabel!: string;\n\n /** Sets the `aria-labelledby` of the header. */\n @Input('aria-labelledby') ariaLabelledby!: string;\n\n /** Whether the ripple effect is disabled or not. */\n @Input({transform: booleanAttribute})\n disableRipple: boolean = false;\n\n override ngAfterContentInit() {\n this._inkBar = new MatInkBar(this._items);\n super.ngAfterContentInit();\n }\n\n protected _itemSelected(event: KeyboardEvent) {\n event.preventDefault();\n }\n}\n","\n
\n
\n
\n\n\n \n
\n \n
\n \n\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.dev/license\n */\nimport {InjectionToken} from '@angular/core';\n\n/** Object that can be used to configure the default options for the tabs module. */\nexport interface MatTabsConfig {\n /** Duration for the tab animation. Must be a valid CSS value (e.g. 600ms). */\n animationDuration?: string;\n\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 disablePagination?: boolean;\n\n /**\n * Whether the ink bar should fit its width to the size of the tab label content.\n * This only applies to the MDC-based tabs.\n */\n fitInkBarToContent?: boolean;\n\n /** Whether the tab group should grow to the size of the active tab. */\n dynamicHeight?: boolean;\n\n /** `tabindex` to be set on the inner element that wraps the tab content. */\n contentTabIndex?: number;\n\n /**\n * By default tabs remove their content from the DOM while it's off-screen.\n * Setting this to `true` will keep it in the DOM which will prevent elements\n * like iframes and videos from reloading next time it comes back into the view.\n */\n preserveContent?: boolean;\n\n /** Whether tabs should be stretched to fill the header. */\n stretchTabs?: boolean;\n\n /** Alignment for the tabs label. */\n alignTabs?: 'start' | 'center' | 'end';\n}\n\n/** Injection token that can be used to provide the default options the tabs module. */\nexport const MAT_TABS_CONFIG = new InjectionToken('MAT_TABS_CONFIG');\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.dev/license\n */\n\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {CdkPortalOutlet, TemplatePortal} from '@angular/cdk/portal';\nimport {CdkScrollable} from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n afterNextRender,\n inject,\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {_animationsDisabled} from '../core';\n\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\n@Directive({selector: '[matTabBodyHost]'})\nexport class MatTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\n private _host = inject(MatTabBody);\n private _ngZone = inject(NgZone);\n\n /** Subscription to events for when the tab body begins centering. */\n private _centeringSub = Subscription.EMPTY;\n /** Subscription to events for when the tab body finishes leaving from center position. */\n private _leavingSub = Subscription.EMPTY;\n\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n }\n\n /** Set initial visibility or set up subscription for changing visibility. */\n override ngOnInit(): void {\n super.ngOnInit();\n\n this._centeringSub = this._host._beforeCentering\n .pipe(startWith(this._host._isCenterPosition()))\n .subscribe((isCentering: boolean) => {\n if (this._host._content && isCentering && !this.hasAttached()) {\n // Attach in the zone since the events from the tab body may be happening outside.\n // See: https://github.com/angular/components/issues/31867\n this._ngZone.run(() => {\n // `Promise.resolve` is necessary to destabilize the zone.\n // Otherwise some apps throw a `ApplicationRef.tick is called recursively` error.\n Promise.resolve().then();\n this.attach(this._host._content);\n });\n }\n });\n\n this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\n if (!this._host.preserveContent) {\n this._ngZone.run(() => this.detach());\n }\n });\n }\n\n /** Clean up centering subscription. */\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._centeringSub.unsubscribe();\n this._leavingSub.unsubscribe();\n }\n}\n\n/**\n * These position states are used internally as animation states for the tab body. Setting the\n * position state to left, right, or center will transition the tab body from its current\n * position to its respective state. If there is not current position (void, in the case of a new\n * tab body), then there will be no transition animation to its state.\n *\n * In the case of a new tab body that should immediately be centered with an animating transition,\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\n * pseudo-prior state.\n *\n * @deprecated Will stop being exported.\n * @breaking-change 21.0.0\n */\nexport type MatTabBodyPositionState = 'left' | 'center' | 'right';\n\n/**\n * The origin state is an internally used state that is set on a new tab body indicating if it\n * began to the left or right of the prior selected index. For example, if the selected index was\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\n * origin of right because its index was greater than the prior selected index.\n *\n * @deprecated No longer being used. Will be removed.\n * @breaking-change 21.0.0\n */\nexport type MatTabBodyOriginState = 'left' | 'right';\n\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\n@Component({\n selector: 'mat-tab-body',\n templateUrl: 'tab-body.html',\n styleUrl: 'tab-body.css',\n encapsulation: ViewEncapsulation.None,\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n host: {\n 'class': 'mat-mdc-tab-body',\n // In most cases the `hidden` that we set on the off-screen content is enough\n // to stop interactions with it, but if a child element sets its own `visibility`, it'll\n // override the one from the parent. This ensures that even those elements will be removed\n // from the accessibility tree.\n '[attr.inert]': '_position === \"center\" ? null : \"\"',\n },\n imports: [MatTabBodyPortal, CdkScrollable],\n})\nexport class MatTabBody implements OnInit, OnDestroy {\n private _elementRef = inject>(ElementRef);\n private _dir = inject(Directionality, {optional: true});\n private _ngZone = inject(NgZone);\n private _injector = inject(Injector);\n private _renderer = inject(Renderer2);\n private _diAnimationsDisabled = _animationsDisabled();\n private _eventCleanups?: (() => void)[];\n private _initialized = false;\n private _fallbackTimer: ReturnType | undefined;\n\n /** Current position of the tab-body in the tab-group. Zero means that the tab is visible. */\n private _positionIndex!: number;\n\n /** Subscription to the directionality change observable. */\n private _dirChangeSubscription = Subscription.EMPTY;\n\n /** Current position of the body within the tab group. */\n _position!: MatTabBodyPositionState;\n\n /** Previous position of the body. */\n protected _previousPosition: MatTabBodyPositionState | undefined;\n\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n @Output() readonly _onCentering: EventEmitter = new EventEmitter();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly _beforeCentering: EventEmitter = new EventEmitter();\n\n /** Event emitted before the centering of the tab begins. */\n readonly _afterLeavingCenter: EventEmitter = new EventEmitter();\n\n /** Event emitted when the tab completes its animation towards the center. */\n @Output() readonly _onCentered: EventEmitter = new EventEmitter(true);\n\n /** The portal host inside of this container into which the tab body content will be loaded. */\n @ViewChild(MatTabBodyPortal) _portalHost!: MatTabBodyPortal;\n\n /** Element in which the content is rendered. */\n @ViewChild('content') _contentElement: ElementRef | undefined;\n\n /** The tab body content to display. */\n @Input('content') _content!: TemplatePortal;\n\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 @Input() animationDuration: string = '500ms';\n\n /** Whether the tab's content should be kept in the DOM while it's off-screen. */\n @Input() preserveContent: boolean = false;\n\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n @Input()\n set position(position: number) {\n this._positionIndex = position;\n this._computePositionAnimationState();\n }\n\n constructor(...args: unknown[]);\n\n constructor() {\n if (this._dir) {\n const changeDetectorRef = inject(ChangeDetectorRef);\n this._dirChangeSubscription = this._dir.change.subscribe((dir: Direction) => {\n this._computePositionAnimationState(dir);\n changeDetectorRef.markForCheck();\n });\n }\n }\n\n ngOnInit() {\n this._bindTransitionEvents();\n\n if (this._position === 'center') {\n this._setActiveClass(true);\n\n // Allows for the dynamic height to animate properly on the initial run.\n afterNextRender(() => this._onCentering.emit(this._elementRef.nativeElement.clientHeight), {\n injector: this._injector,\n });\n }\n\n this._initialized = true;\n }\n\n ngOnDestroy() {\n clearTimeout(this._fallbackTimer);\n this._eventCleanups?.forEach(cleanup => cleanup());\n this._dirChangeSubscription.unsubscribe();\n }\n\n /** Sets up the transition events. */\n private _bindTransitionEvents() {\n this._ngZone.runOutsideAngular(() => {\n const element = this._elementRef.nativeElement;\n const transitionDone = (event: TransitionEvent) => {\n if (event.target === this._contentElement?.nativeElement) {\n this._elementRef.nativeElement.classList.remove('mat-tab-body-animating');\n\n // Only fire the actual callback when a transition is fully finished,\n // otherwise the content can jump around when the next transition starts.\n if (event.type === 'transitionend') {\n this._transitionDone();\n }\n }\n };\n\n this._eventCleanups = [\n this._renderer.listen(element, 'transitionstart', (event: TransitionEvent) => {\n if (event.target === this._contentElement?.nativeElement) {\n this._elementRef.nativeElement.classList.add('mat-tab-body-animating');\n this._transitionStarted();\n }\n }),\n this._renderer.listen(element, 'transitionend', transitionDone),\n this._renderer.listen(element, 'transitioncancel', transitionDone),\n ];\n });\n }\n\n /** Called when a transition has started. */\n private _transitionStarted() {\n clearTimeout(this._fallbackTimer);\n const isCentering = this._position === 'center';\n this._beforeCentering.emit(isCentering);\n if (isCentering) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n\n /** Called when a transition is done. */\n private _transitionDone() {\n if (this._position === 'center') {\n this._onCentered.emit();\n } else if (this._previousPosition === 'center') {\n this._afterLeavingCenter.emit();\n }\n }\n\n /** Sets the active styling on the tab body based on its current position. */\n _setActiveClass(isActive: boolean) {\n this._elementRef.nativeElement.classList.toggle('mat-mdc-tab-body-active', isActive);\n }\n\n /** The text direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Whether the provided position state is considered center, regardless of origin. */\n _isCenterPosition(): boolean {\n return this._positionIndex === 0;\n }\n\n /** Computes the position state that will be used for the tab-body animation trigger. */\n private _computePositionAnimationState(dir: Direction = this._getLayoutDirection()) {\n this._previousPosition = this._position;\n\n if (this._positionIndex < 0) {\n this._position = dir == 'ltr' ? 'left' : 'right';\n } else if (this._positionIndex > 0) {\n this._position = dir == 'ltr' ? 'right' : 'left';\n } else {\n this._position = 'center';\n }\n\n if (this._animationsDisabled()) {\n this._simulateTransitionEvents();\n } else if (\n this._initialized &&\n (this._position === 'center' || this._previousPosition === 'center')\n ) {\n // The transition events are load-bearing and in some cases they might not fire (e.g.\n // tests setting `* {transition: none}` to disable animations). This timeout will simulate\n // them if a transition doesn't start within a certain amount of time.\n clearTimeout(this._fallbackTimer);\n this._fallbackTimer = this._ngZone.runOutsideAngular(() =>\n setTimeout(() => this._simulateTransitionEvents(), 100),\n );\n }\n }\n\n /** Simulates the body's transition events in an environment where they might not fire. */\n private _simulateTransitionEvents() {\n this._transitionStarted();\n afterNextRender(() => this._transitionDone(), {injector: this._injector});\n }\n\n /** Whether animations are disabled for the tab group. */\n private _animationsDisabled() {\n return (\n this._diAnimationsDisabled ||\n this.animationDuration === '0ms' ||\n this.animationDuration === '0s'\n );\n }\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.dev/license\n */\n\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n numberAttribute,\n ViewChildren,\n AfterViewInit,\n NgZone,\n} from '@angular/core';\nimport {MAT_TAB_GROUP, MatTab} from './tab';\nimport {MatTabHeader} from './tab-header';\nimport {ThemePalette, MatRipple, _animationsDisabled} from '../core';\nimport {merge, Subscription} from 'rxjs';\nimport {MAT_TABS_CONFIG, MatTabsConfig} from './tab-config';\nimport {startWith} from 'rxjs/operators';\nimport {_IdGenerator, CdkMonitorFocus, FocusOrigin} from '@angular/cdk/a11y';\nimport {MatTabBody} from './tab-body';\nimport {CdkPortalOutlet} from '@angular/cdk/portal';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {Platform} from '@angular/cdk/platform';\n\n/** @docs-private */\nexport interface MatTabGroupBaseHeader {\n _alignInkBarToSelectedTab(): void;\n updatePagination(): void;\n focusIndex: number;\n}\n\n/** Possible positions for the tab header. */\nexport type MatTabHeaderPosition = 'above' | 'below';\n\n/** Boolean constant that determines whether the tab group supports the `backgroundColor` input */\nconst ENABLE_BACKGROUND_INPUT = true;\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 */\n@Component({\n selector: 'mat-tab-group',\n exportAs: 'matTabGroup',\n templateUrl: 'tab-group.html',\n styleUrl: 'tab-group.css',\n encapsulation: ViewEncapsulation.None,\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [\n {\n provide: MAT_TAB_GROUP,\n useExisting: MatTabGroup,\n },\n ],\n host: {\n 'class': 'mat-mdc-tab-group',\n '[class]': '\"mat-\" + (color || \"primary\")',\n '[class.mat-mdc-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-mdc-tab-group-inverted-header]': 'headerPosition === \"below\"',\n '[class.mat-mdc-tab-group-stretch-tabs]': 'stretchTabs',\n '[attr.mat-align-tabs]': 'alignTabs',\n '[style.--mat-tab-animation-duration]': 'animationDuration',\n },\n imports: [\n MatTabHeader,\n MatTabLabelWrapper,\n CdkMonitorFocus,\n MatRipple,\n CdkPortalOutlet,\n MatTabBody,\n ],\n})\nexport class MatTabGroup\n implements AfterViewInit, AfterContentInit, AfterContentChecked, OnDestroy\n{\n readonly _elementRef = inject(ElementRef);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _ngZone = inject(NgZone);\n private _tabsSubscription = Subscription.EMPTY;\n private _tabLabelSubscription = Subscription.EMPTY;\n private _tabBodySubscription = Subscription.EMPTY;\n private _diAnimationsDisabled = _animationsDisabled();\n\n /**\n * All tabs inside the tab group. This includes tabs that belong to groups that are nested\n * inside the current one. We filter out only the tabs that belong to this group in `_tabs`.\n */\n @ContentChildren(MatTab, {descendants: true}) _allTabs!: QueryList;\n @ViewChildren(MatTabBody) _tabBodies: QueryList | undefined;\n @ViewChild('tabBodyWrapper') _tabBodyWrapper!: ElementRef;\n @ViewChild('tabHeader') _tabHeader!: MatTabHeader;\n\n /** All of the tabs that belong to the group. */\n _tabs: QueryList = new QueryList();\n\n /** The tab index that should be selected after the content has been checked. */\n private _indexToSelect: number | null = 0;\n\n /** Index of the tab that was focused last. */\n private _lastFocusedTabIndex: number | null = null;\n\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n private _tabBodyWrapperHeight: number = 0;\n\n /**\n * Theme color of the tab group. This API is supported in M2 themes only, it\n * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/tabs/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n @Input()\n color: ThemePalette;\n\n /** Whether the ink bar should fit its width to the size of the tab label content. */\n @Input({transform: booleanAttribute})\n get fitInkBarToContent(): boolean {\n return this._fitInkBarToContent;\n }\n set fitInkBarToContent(value: boolean) {\n this._fitInkBarToContent = value;\n this._changeDetectorRef.markForCheck();\n }\n private _fitInkBarToContent = false;\n\n /** Whether tabs should be stretched to fill the header. */\n @Input({alias: 'mat-stretch-tabs', transform: booleanAttribute})\n stretchTabs: boolean = true;\n\n /** Alignment for tabs label. */\n @Input({alias: 'mat-align-tabs'})\n alignTabs: string | null = null;\n\n /** Whether the tab group should grow to the size of the active tab. */\n @Input({transform: booleanAttribute})\n dynamicHeight: boolean = false;\n\n /** The index of the active tab. */\n @Input({transform: numberAttribute})\n get selectedIndex(): number | null {\n return this._selectedIndex;\n }\n set selectedIndex(value: number) {\n this._indexToSelect = isNaN(value) ? null : value;\n }\n private _selectedIndex: number | null = null;\n\n /** Position of the tab header. */\n @Input() headerPosition: MatTabHeaderPosition = 'above';\n\n /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\n @Input()\n get animationDuration(): string {\n return this._animationDuration;\n }\n set animationDuration(value: string | number) {\n const stringValue = value + '';\n this._animationDuration = /^\\d+$/.test(stringValue) ? value + 'ms' : stringValue;\n }\n private _animationDuration!: string;\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 @Input({transform: numberAttribute})\n get contentTabIndex(): number | null {\n return this._contentTabIndex;\n }\n\n set contentTabIndex(value: number) {\n this._contentTabIndex = isNaN(value) ? null : value;\n }\n\n private _contentTabIndex: number | null = null;\n\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 @Input({transform: booleanAttribute})\n disablePagination: boolean = false;\n\n /** Whether ripples in the tab group are disabled. */\n @Input({transform: booleanAttribute})\n disableRipple: boolean = false;\n\n /**\n * By default tabs remove their content from the DOM while it's off-screen.\n * Setting this to `true` will keep it in the DOM which will prevent elements\n * like iframes and videos from reloading next time it comes back into the view.\n */\n @Input({transform: booleanAttribute})\n preserveContent: boolean = false;\n\n /**\n * Theme color of the background of the tab group. This API is supported in M2 themes only, it\n * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/tabs/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n *\n * @deprecated The background color should be customized through Sass theming APIs.\n * @breaking-change 20.0.0 Remove this input\n */\n @Input()\n get backgroundColor(): ThemePalette {\n return this._backgroundColor;\n }\n\n set backgroundColor(value: ThemePalette) {\n if (!ENABLE_BACKGROUND_INPUT) {\n throw new Error(`mat-tab-group background color must be set through the Sass theming API`);\n }\n\n const classList: DOMTokenList = this._elementRef.nativeElement.classList;\n\n classList.remove('mat-tabs-with-background', `mat-background-${this.backgroundColor}`);\n\n if (value) {\n classList.add('mat-tabs-with-background', `mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n\n private _backgroundColor!: ThemePalette;\n\n /** Aria label of the inner `tablist` of the group. */\n @Input('aria-label') ariaLabel!: string;\n\n /** Sets the `aria-labelledby` of the inner `tablist` of the group. */\n @Input('aria-labelledby') ariaLabelledby!: string;\n\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n @Output() readonly selectedIndexChange: EventEmitter = new EventEmitter();\n\n /** Event emitted when focus has changed within a tab group. */\n @Output() readonly focusChange: EventEmitter =\n new EventEmitter();\n\n /** Event emitted when the body animation has completed */\n @Output() readonly animationDone: EventEmitter = new EventEmitter();\n\n /** Event emitted when the tab selection has changed. */\n @Output() readonly selectedTabChange: EventEmitter =\n new EventEmitter(true);\n\n private _groupId: string;\n\n /** Whether the tab group is rendered on the server. */\n protected _isServer: boolean = !inject(Platform).isBrowser;\n\n constructor(...args: unknown[]);\n\n constructor() {\n const defaultConfig = inject(MAT_TABS_CONFIG, {optional: true});\n\n this._groupId = inject(_IdGenerator).getId('mat-tab-group-');\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 if (defaultConfig?.contentTabIndex != null) {\n this.contentTabIndex = defaultConfig.contentTabIndex;\n }\n this.preserveContent = !!defaultConfig?.preserveContent;\n this.fitInkBarToContent =\n defaultConfig && defaultConfig.fitInkBarToContent != null\n ? defaultConfig.fitInkBarToContent\n : false;\n this.stretchTabs =\n defaultConfig && defaultConfig.stretchTabs != null ? defaultConfig.stretchTabs : true;\n this.alignTabs =\n defaultConfig && defaultConfig.alignTabs != null ? defaultConfig.alignTabs : null;\n }\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\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\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\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\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\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab: MatTab, index: number) => {\n tab.position = index - indexToSelect;\n\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\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._lastFocusedTabIndex = null;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngAfterContentInit() {\n this._subscribeToAllTabChanges();\n this._subscribeToTabLabels();\n\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\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: MatTab | undefined;\n\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\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\n this._changeDetectorRef.markForCheck();\n });\n }\n\n ngAfterViewInit() {\n this._tabBodySubscription = this._tabBodies!.changes.subscribe(() => this._bodyCentered(true));\n }\n\n /** Listens to changes in all of the tabs. */\n private _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: QueryList) => {\n this._tabs.reset(\n tabs.filter(tab => {\n return tab._closestTabGroup === this || !tab._closestTabGroup;\n }),\n );\n this._tabs.notifyOnChanges();\n });\n }\n\n ngOnDestroy() {\n this._tabs.destroy();\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n this._tabBodySubscription.unsubscribe();\n }\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 /**\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 /**\n * Sets focus to a particular tab.\n * @param index Index of the tab to be focused.\n */\n focusTab(index: number) {\n const header = this._tabHeader;\n\n if (header) {\n header.focusIndex = index;\n }\n }\n\n _focusChanged(index: number) {\n this._lastFocusedTabIndex = index;\n this.focusChange.emit(this._createChangeEvent(index));\n }\n\n private _createChangeEvent(index: number): MatTabChangeEvent {\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 /**\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 private _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n\n this._tabLabelSubscription = merge(...this._tabs.map(tab => tab._stateChanges)).subscribe(() =>\n this._changeDetectorRef.markForCheck(),\n );\n }\n\n /** Clamps the given index to the bounds of 0 and the tabs length. */\n private _clampTabIndex(index: number | null): number {\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\n /** Returns a unique id for each tab label element */\n _getTabLabelId(tab: MatTab, index: number): string {\n return tab.id || `${this._groupId}-label-${index}`;\n }\n\n /** Returns a unique id for each tab content element */\n _getTabContentId(index: number): string {\n return `${this._groupId}-content-${index}`;\n }\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: number): void {\n if (!this.dynamicHeight || !this._tabBodyWrapperHeight) {\n this._tabBodyWrapperHeight = tabHeight;\n return;\n }\n\n const wrapper: HTMLElement = this._tabBodyWrapper.nativeElement;\n\n wrapper.style.height = this._tabBodyWrapperHeight + 'px';\n\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\n /** Removes the height of the tab body wrapper. */\n _removeTabBodyWrapperHeight(): void {\n const wrapper = this._tabBodyWrapper.nativeElement;\n this._tabBodyWrapperHeight = wrapper.clientHeight;\n wrapper.style.height = '';\n this._ngZone.run(() => this.animationDone.emit());\n }\n\n /** Handle click events, setting new selected index if appropriate. */\n _handleClick(tab: MatTab, tabHeader: MatTabGroupBaseHeader, index: number) {\n tabHeader.focusIndex = index;\n\n if (!tab.disabled) {\n this.selectedIndex = index;\n }\n }\n\n /** Retrieves the tabindex for the tab. */\n _getTabIndex(index: number): number {\n const targetIndex = this._lastFocusedTabIndex ?? this.selectedIndex;\n return index === targetIndex ? 0 : -1;\n }\n\n /** Callback for when the focused state of a tab has changed. */\n _tabFocusChanged(focusOrigin: FocusOrigin, index: number) {\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 /**\n * Callback invoked when the centered state of a tab body changes.\n * @param isCenter Whether the tab will be in the center.\n */\n protected _bodyCentered(isCenter: boolean) {\n // Marks all the existing tabs as inactive and the center tab as active. Note that this can\n // be achieved much easier by using a class binding on each body. The problem with\n // doing so is that we can't control the timing of when the class is removed from the\n // previously-active element and added to the newly-active one. If there's a tick between\n // removing the class and adding the new one, the content will jump in a very jarring way.\n // We go through the trouble of setting the classes ourselves to guarantee that they're\n // swapped out at the same time.\n if (isCenter) {\n this._tabBodies?.forEach((body, i) => body._setActiveClass(i === this._selectedIndex));\n }\n }\n\n protected _animationsDisabled(): boolean {\n return (\n this._diAnimationsDisabled ||\n this.animationDuration === '0' ||\n this.animationDuration === '0ms'\n );\n }\n}\n\n/** A simple change event emitted on focus or selection changes. */\nexport class MatTabChangeEvent {\n /** Index of the currently-selected tab. */\n index!: number;\n /** Reference to the currently-selected tab. */\n tab!: MatTab;\n}\n","\n\n @for (tab of _tabs; track tab) {\n
\n \n\n \n
\n\n \n \n \n @if (tab.templateLabel) {\n \n } @else {{{tab.textLabel}}}\n \n \n \n }\n
\n\n\n@if (_isServer) {\n \n}\n\n\n @for (tab of _tabs; track tab;) {\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.dev/license\n */\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n forwardRef,\n Input,\n numberAttribute,\n OnDestroy,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n inject,\n HostAttributeToken,\n signal,\n computed,\n} from '@angular/core';\nimport {\n MAT_RIPPLE_GLOBAL_OPTIONS,\n MatRipple,\n RippleConfig,\n RippleGlobalOptions,\n RippleTarget,\n ThemePalette,\n _StructuralStylesLoader,\n _animationsDisabled,\n} from '../../core';\nimport {_IdGenerator, FocusableOption, FocusMonitor} from '@angular/cdk/a11y';\nimport {MatInkBar, InkBarItem} from '../ink-bar';\nimport {BehaviorSubject, Subject} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {MAT_TABS_CONFIG, MatTabsConfig} from '../tab-config';\nimport {MatPaginatedTabHeader, MatPaginatedTabHeaderItem} from '../paginated-tab-header';\nimport {CdkObserveContent} from '@angular/cdk/observers';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\n\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\n@Component({\n selector: '[mat-tab-nav-bar]',\n exportAs: 'matTabNavBar, matTabNav',\n templateUrl: 'tab-nav-bar.html',\n styleUrl: 'tab-nav-bar.css',\n host: {\n '[attr.role]': '_getRole()',\n 'class': 'mat-mdc-tab-nav-bar mat-mdc-tab-header',\n '[class.mat-mdc-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-mdc-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n '[class.mat-mdc-tab-nav-bar-stretch-tabs]': 'stretchTabs',\n '[class.mat-primary]': 'color !== \"warn\" && color !== \"accent\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[class._mat-animation-noopable]': '_animationsDisabled',\n '[style.--mat-tab-animation-duration]': 'animationDuration',\n },\n encapsulation: ViewEncapsulation.None,\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n imports: [MatRipple, CdkObserveContent],\n})\nexport class MatTabNav extends MatPaginatedTabHeader implements AfterContentInit, AfterViewInit {\n _focusedItem = signal(null);\n\n /** Whether the ink bar should fit its width to the size of the tab label content. */\n @Input({transform: booleanAttribute})\n get fitInkBarToContent(): boolean {\n return this._fitInkBarToContent.value;\n }\n set fitInkBarToContent(value: boolean) {\n this._fitInkBarToContent.next(value);\n this._changeDetectorRef.markForCheck();\n }\n _fitInkBarToContent = new BehaviorSubject(false);\n\n /** Whether tabs should be stretched to fill the header. */\n @Input({alias: 'mat-stretch-tabs', transform: booleanAttribute})\n stretchTabs: boolean = true;\n\n @Input()\n get animationDuration(): string {\n return this._animationDuration;\n }\n\n set animationDuration(value: string | number) {\n const stringValue = value + '';\n this._animationDuration = /^\\d+$/.test(stringValue) ? value + 'ms' : stringValue;\n }\n\n private _animationDuration!: string;\n\n /** Query list of all tab links of the tab navigation. */\n @ContentChildren(forwardRef(() => MatTabLink), {descendants: true})\n _items!: QueryList;\n\n /**\n * Theme color of the background of the tab nav. This API is supported in M2 themes only, it\n * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/tabs/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n @Input()\n get backgroundColor(): ThemePalette {\n return this._backgroundColor;\n }\n\n set backgroundColor(value: ThemePalette) {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove('mat-tabs-with-background', `mat-background-${this.backgroundColor}`);\n\n if (value) {\n classList.add('mat-tabs-with-background', `mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n\n private _backgroundColor: ThemePalette;\n\n /** Whether the ripple effect is disabled or not. */\n @Input({transform: booleanAttribute})\n get disableRipple() {\n return this._disableRipple();\n }\n set disableRipple(value: boolean) {\n this._disableRipple.set(value);\n }\n private _disableRipple = signal(false);\n\n /**\n * Theme color of the nav bar. This API is supported in M2 themes only, it has\n * no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/tabs/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n @Input() color: ThemePalette = 'primary';\n\n /**\n * Associated tab panel controlled by the nav bar. If not provided, then the nav bar\n * follows the ARIA link / navigation landmark pattern. If provided, it follows the\n * ARIA tabs design pattern.\n */\n @Input() tabPanel?: MatTabNavPanel;\n\n @ViewChild('tabListContainer', {static: true}) _tabListContainer!: ElementRef;\n @ViewChild('tabList', {static: true}) _tabList!: ElementRef;\n @ViewChild('tabListInner', {static: true}) _tabListInner!: ElementRef;\n @ViewChild('nextPaginator') _nextPaginator!: ElementRef;\n @ViewChild('previousPaginator') _previousPaginator!: ElementRef;\n _inkBar!: MatInkBar;\n\n constructor(...args: unknown[]);\n\n constructor() {\n const defaultConfig = inject(MAT_TABS_CONFIG, {optional: true});\n\n super();\n this.disablePagination =\n defaultConfig && defaultConfig.disablePagination != null\n ? defaultConfig.disablePagination\n : false;\n this.fitInkBarToContent =\n defaultConfig && defaultConfig.fitInkBarToContent != null\n ? defaultConfig.fitInkBarToContent\n : false;\n this.stretchTabs =\n defaultConfig && defaultConfig.stretchTabs != null ? defaultConfig.stretchTabs : true;\n }\n\n protected _itemSelected() {\n // noop\n }\n\n override ngAfterContentInit() {\n this._inkBar = new MatInkBar(this._items);\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\n .pipe(startWith(null), takeUntil(this._destroyed))\n .subscribe(() => this.updateActiveLink());\n\n super.ngAfterContentInit();\n\n // Turn the `change` stream into a signal to try and avoid \"changed after checked\" errors.\n this._keyManager!.change.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() =>\n this._focusedItem.set(this._keyManager?.activeItem || null),\n );\n }\n\n override ngAfterViewInit() {\n if (!this.tabPanel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error('A mat-tab-nav-panel must be specified via [tabPanel].');\n }\n super.ngAfterViewInit();\n }\n\n /** Notifies the component that the active link has been changed. */\n updateActiveLink() {\n if (!this._items) {\n return;\n }\n\n const items = this._items.toArray();\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].active) {\n this.selectedIndex = i;\n if (this.tabPanel) {\n this.tabPanel._activeTabId = items[i].id;\n }\n // Updating the `selectedIndex` won't trigger the `change` event on\n // the key manager so we need to set the signal from here.\n this._focusedItem.set(items[i]);\n this._changeDetectorRef.markForCheck();\n return;\n }\n }\n\n this.selectedIndex = -1;\n }\n\n _getRole(): string | null {\n return this.tabPanel ? 'tablist' : this._elementRef.nativeElement.getAttribute('role');\n }\n\n _hasFocus(link: MatTabLink): boolean {\n return this._keyManager?.activeItem === link;\n }\n}\n\n/**\n * Link inside a `mat-tab-nav-bar`.\n */\n@Component({\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: 'tab-link.html',\n styleUrl: 'tab-link.css',\n host: {\n 'class': 'mdc-tab mat-mdc-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]': '_tabIndex()',\n '[attr.role]': '_getRole()',\n '[class.mat-mdc-tab-disabled]': 'disabled',\n '[class.mdc-tab--active]': 'active',\n '(focus)': '_handleFocus()',\n '(keydown)': '_handleKeydown($event)',\n },\n imports: [MatRipple],\n})\nexport class MatTabLink\n extends InkBarItem\n implements AfterViewInit, OnDestroy, RippleTarget, FocusableOption\n{\n private _tabNavBar = inject(MatTabNav);\n elementRef = inject(ElementRef);\n private _focusMonitor = inject(FocusMonitor);\n\n private readonly _destroyed = new Subject();\n\n /** Whether the tab link is active or not. */\n protected _isActive: boolean = false;\n\n protected _tabIndex = computed(() =>\n this._tabNavBar._focusedItem() === this ? this.tabIndex : -1,\n );\n\n /** Whether the link is active. */\n @Input({transform: booleanAttribute})\n get active(): boolean {\n return this._isActive;\n }\n\n set active(value: boolean) {\n if (value !== this._isActive) {\n this._isActive = value;\n this._tabNavBar.updateActiveLink();\n }\n }\n\n /** Whether the tab link is disabled. */\n @Input({transform: booleanAttribute})\n disabled: boolean = false;\n\n /** Whether ripples are disabled on the tab link. */\n @Input({transform: booleanAttribute})\n get disableRipple() {\n return this._disableRipple();\n }\n set disableRipple(value: boolean) {\n this._disableRipple.set(value);\n }\n private _disableRipple = signal(false);\n\n @Input({\n transform: (value: unknown) => (value == null ? 0 : numberAttribute(value)),\n })\n tabIndex: number = 0;\n\n /**\n * Ripple configuration for ripples that are launched on pointer down. The ripple config\n * is set to the global ripple options since we don't have any configurable options for\n * the tab link ripples.\n * @docs-private\n */\n rippleConfig: RippleConfig & RippleGlobalOptions;\n\n /**\n * Whether ripples are disabled on interaction.\n * @docs-private\n */\n get rippleDisabled(): boolean {\n return (\n this.disabled ||\n this.disableRipple ||\n this._tabNavBar.disableRipple ||\n !!this.rippleConfig.disabled\n );\n }\n\n /** Unique id for the tab. */\n @Input() id: string = inject(_IdGenerator).getId('mat-tab-link-');\n\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n const globalRippleOptions = inject(MAT_RIPPLE_GLOBAL_OPTIONS, {\n optional: true,\n });\n const tabIndex = inject(new HostAttributeToken('tabindex'), {optional: true});\n this.rippleConfig = globalRippleOptions || {};\n this.tabIndex = tabIndex == null ? 0 : parseInt(tabIndex) || 0;\n\n if (_animationsDisabled()) {\n this.rippleConfig.animation = {enterDuration: 0, exitDuration: 0};\n }\n\n this._tabNavBar._fitInkBarToContent\n .pipe(takeUntil(this._destroyed))\n .subscribe(fitInkBarToContent => {\n this.fitInkBarToContent = fitInkBarToContent;\n });\n }\n\n /** Focuses the tab link. */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n\n ngAfterViewInit() {\n this._focusMonitor.monitor(this.elementRef);\n }\n\n override ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n super.ngOnDestroy();\n this._focusMonitor.stopMonitoring(this.elementRef);\n }\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\n _handleKeydown(event: KeyboardEvent) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n if (this.disabled) {\n event.preventDefault();\n } else if (this._tabNavBar.tabPanel) {\n // Only prevent the default action on space since it can scroll the page.\n // Don't prevent enter since it can break link navigation.\n if (event.keyCode === SPACE) {\n event.preventDefault();\n }\n\n this.elementRef.nativeElement.click();\n }\n }\n }\n\n _getAriaControls(): string | null {\n return this._tabNavBar.tabPanel\n ? this._tabNavBar.tabPanel?.id\n : this.elementRef.nativeElement.getAttribute('aria-controls');\n }\n\n _getAriaSelected(): string | null {\n if (this._tabNavBar.tabPanel) {\n return this.active ? 'true' : 'false';\n } else {\n return this.elementRef.nativeElement.getAttribute('aria-selected');\n }\n }\n\n _getAriaCurrent(): string | null {\n return this.active && !this._tabNavBar.tabPanel ? 'page' : null;\n }\n\n _getRole(): string | null {\n return this._tabNavBar.tabPanel ? 'tab' : this.elementRef.nativeElement.getAttribute('role');\n }\n}\n\n/**\n * Tab panel component associated with MatTabNav.\n */\n@Component({\n selector: 'mat-tab-nav-panel',\n exportAs: 'matTabNavPanel',\n template: '',\n host: {\n '[attr.aria-labelledby]': '_activeTabId',\n '[attr.id]': 'id',\n 'class': 'mat-mdc-tab-nav-panel',\n 'role': 'tabpanel',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatTabNavPanel {\n /** Unique id for the tab panel. */\n @Input() id: string = inject(_IdGenerator).getId('mat-tab-nav-panel-');\n\n /** Id of the active tab in the nav bar. */\n _activeTabId?: string;\n}\n","\n
\n
\n
\n\n\n\n
\n
\n
\n","\n\n\n\n\n \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.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {MatTabContent} from './tab-content';\nimport {MatTabLabel} from './tab-label';\nimport {MatTab} from './tab';\nimport {MatTabGroup} from './tab-group';\nimport {MatTabNav, MatTabNavPanel, MatTabLink} from './tab-nav-bar/tab-nav-bar';\n\n@NgModule({\n imports: [MatTabContent, MatTabLabel, MatTab, MatTabGroup, MatTabNav, MatTabNavPanel, MatTabLink],\n exports: [\n BidiModule,\n MatTabContent,\n MatTabLabel,\n MatTab,\n MatTabGroup,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n ],\n})\nexport class MatTabsModule {}\n"],"names":["MAT_TAB_CONTENT","InjectionToken","MatTabContent","template","inject","TemplateRef","constructor","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","providers","provide","useExisting","ngImport","decorators","args","MAT_TAB_LABEL","MAT_TAB","MatTabLabel","CdkPortal","_closestTab","optional","usesInheritance","MAT_TAB_GROUP","MatTab","_viewContainerRef","ViewContainerRef","_closestTabGroup","disabled","templateLabel","_templateLabel","value","_setTemplateLabelInput","_explicitContent","undefined","_implicitContent","textLabel","ariaLabel","ariaLabelledby","labelClass","bodyClass","id","_contentPortal","content","_stateChanges","Subject","position","origin","isActive","_CdkPrivateStyleLoader","load","_StructuralStylesLoader","ngOnChanges","changes","hasOwnProperty","next","ngOnDestroy","complete","ngOnInit","TemplatePortal","Component","inputs","booleanAttribute","host","attributes","properties","queries","propertyName","first","predicate","descendants","static","viewQueries","exportAs","usesOnChanges","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","Input","transform","ContentChild","read","ViewChild","ACTIVE_CLASS","NO_TRANSITION_CLASS","MatInkBar","_items","_currentItem","hide","forEach","item","deactivateInkBar","alignToElement","element","correspondingItem","find","elementRef","nativeElement","currentItem","domRect","getBoundingClientRect","activateInkBar","InkBarItem","_elementRef","ElementRef","_inkBarElement","_inkBarContentElement","_fitToContent","fitInkBarToContent","newValue","_appendInkBarElement","previousIndicatorClientRect","classList","add","currentClientRect","widthDelta","width","xPosition","left","style","setProperty","remove","_createInkBarElement","documentNode","ownerDocument","document","inkBarElement","createElement","inkBarContentElement","className","appendChild","ngDevMode","Error","parentElement","querySelector","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","_MAT_INK_BAR_POSITIONER","providedIn","factory","method","offsetLeft","offsetWidth","MatTabLabelWrapper","focus","getOffsetLeft","getOffsetWidth","passiveEventListenerOptions","passive","HEADER_SCROLL_DELAY","HEADER_SCROLL_INTERVAL","MatPaginatedTabHeader","_changeDetectorRef","ChangeDetectorRef","_viewportRuler","ViewportRuler","_dir","Directionality","_ngZone","NgZone","_platform","Platform","_sharedResizeObserver","SharedResizeObserver","_injector","Injector","_renderer","Renderer2","_animationsDisabled","_eventCleanups","_scrollDistance","_selectedIndexChanged","_destroyed","_showPaginationControls","_disableScrollAfter","_disableScrollBefore","_tabLabelCount","_scrollDistanceChanged","_keyManager","_currentTextContent","_stopScrolling","disablePagination","selectedIndex","_selectedIndex","v","isNaN","updateActiveItem","selectFocusedIndex","EventEmitter","indexFocused","runOutsideAngular","listen","_stopInterval","ngAfterViewInit","push","_previousPaginator","_handlePaginatorPress","_nextPaginator","ngAfterContentInit","dirChange","change","observableOf","resize","observe","pipe","debounceTime","takeUntil","viewportResize","realign","updatePagination","_alignInkBarToSelectedTab","FocusKeyManager","withHorizontalOrientation","_getLayoutDirection","withHomeAndEnd","withWrap","skipPredicate","Math","max","afterNextRender","injector","merge","_itemsResized","subscribe","run","Promise","resolve","then","min","_getMaxScrollDistance","newFocusIndex","emit","_setTabFocus","ResizeObserver","EMPTY","startWith","switchMap","tabItems","Observable","observer","resizeObserver","entries","disconnect","skip","filter","some","e","contentRect","height","ngAfterContentChecked","length","markForCheck","_scrollToLabel","_checkScrollingControls","_updateTabScrollPosition","cleanup","destroy","_handleKeydown","event","hasModifierKey","keyCode","ENTER","SPACE","focusIndex","get","_itemSelected","onKeydown","_onContentChanges","textContent","_checkPaginationEnabled","activeItemIndex","_isValidIndex","setActiveItem","index","toArray","tabIndex","containerEl","_tabListContainer","dir","scrollLeft","scrollWidth","scrollDistance","translateX","_tabList","round","TRIDENT","EDGE","_scrollTo","_scrollHeader","direction","viewLength","scrollAmount","_handlePaginatorClick","labelIndex","selectedLabel","labelBeforePos","labelAfterPos","_tabListInner","beforeVisiblePos","afterVisiblePos","containerWidth","isEnabled","lengthOfTabList","selectedItem","selectedLabelWrapper","_inkBar","mouseEvent","button","timer","maxScrollDistance","distance","numberAttribute","outputs","Output","MatTabHeader","disableRipple","preventDefault","classAttribute","styles","dependencies","kind","MatRipple","CdkObserveContent","imports","ContentChildren","MAT_TABS_CONFIG","MatTabBodyPortal","CdkPortalOutlet","_host","MatTabBody","_centeringSub","Subscription","_leavingSub","_beforeCentering","_isCenterPosition","isCentering","_content","hasAttached","attach","_afterLeavingCenter","preserveContent","detach","unsubscribe","_diAnimationsDisabled","_initialized","_fallbackTimer","_positionIndex","_dirChangeSubscription","_position","_previousPosition","_onCentering","_onCentered","_portalHost","_contentElement","animationDuration","_computePositionAnimationState","changeDetectorRef","_bindTransitionEvents","_setActiveClass","clientHeight","clearTimeout","transitionDone","_transitionDone","_transitionStarted","toggle","_simulateTransitionEvents","setTimeout","ɵcmp","ɵɵngDeclareComponent","CdkScrollable","MatTabGroup","_tabsSubscription","_tabLabelSubscription","_tabBodySubscription","_allTabs","_tabBodies","_tabBodyWrapper","_tabHeader","_tabs","QueryList","_indexToSelect","_lastFocusedTabIndex","_tabBodyWrapperHeight","color","_fitInkBarToContent","stretchTabs","alignTabs","dynamicHeight","headerPosition","_animationDuration","stringValue","test","contentTabIndex","_contentTabIndex","backgroundColor","_backgroundColor","selectedIndexChange","focusChange","animationDone","selectedTabChange","_groupId","_isServer","isBrowser","defaultConfig","_IdGenerator","getId","indexToSelect","_clampTabIndex","isFirstRun","_createChangeEvent","wrapper","minHeight","tab","_subscribeToAllTabChanges","_subscribeToTabLabels","tabs","selectedTab","i","_bodyCentered","reset","notifyOnChanges","realignInkBar","focusTab","header","_focusChanged","MatTabChangeEvent","map","_getTabLabelId","_getTabContentId","_setTabBodyWrapperHeight","tabHeight","offsetHeight","_removeTabBodyWrapperHeight","_handleClick","tabHeader","_getTabIndex","targetIndex","_tabFocusChanged","focusOrigin","isCenter","body","CdkMonitorFocus","ViewChildren","alias","MatTabNav","_focusedItem","signal","BehaviorSubject","_disableRipple","set","tabPanel","updateActiveLink","activeItem","items","active","_activeTabId","_getRole","getAttribute","_hasFocus","link","forwardRef","MatTabLink","_tabNavBar","_focusMonitor","FocusMonitor","_isActive","_tabIndex","computed","debugName","rippleConfig","rippleDisabled","globalRippleOptions","MAT_RIPPLE_GLOBAL_OPTIONS","HostAttributeToken","parseInt","animation","enterDuration","exitDuration","monitor","stopMonitoring","_handleFocus","indexOf","click","_getAriaControls","_getAriaSelected","_getAriaCurrent","listeners","OnPush","MatTabNavPanel","isInline","MatTabsModule","NgModule","ɵmod","ɵɵngDeclareNgModule","BidiModule","ɵinj","ɵɵngDeclareInjector","exports"],"mappings":"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"}