1import { 2 CdkPortal, 3 CdkPortalOutlet, 4 CdkScrollable, 5 TemplatePortal, 6 ViewportRuler 7} from "./chunk-G6J67MIL.js"; 8import { 9 ANIMATION_MODULE_TYPE, 10 Attribute, 11 BehaviorSubject, 12 CdkMonitorFocus, 13 CdkObserveContent, 14 ChangeDetectionStrategy, 15 ChangeDetectorRef, 16 Component, 17 ComponentFactoryResolver$1, 18 ContentChild, 19 ContentChildren, 20 DOCUMENT, 21 Directionality, 22 Directive, 23 EMPTY, 24 ENTER, 25 ElementRef, 26 EventEmitter, 27 FocusKeyManager, 28 FocusMonitor, 29 Inject, 30 InjectionToken, 31 Injector, 32 Input, 33 MAT_RIPPLE_GLOBAL_OPTIONS, 34 MatCommonModule, 35 MatRipple, 36 NgModule, 37 NgZone, 38 Observable, 39 Optional, 40 Output, 41 Platform, 42 QueryList, 43 SPACE, 44 SharedResizeObserver, 45 Subject, 46 Subscription, 47 TemplateRef, 48 ViewChild, 49 ViewContainerRef, 50 ViewEncapsulation$1, 51 afterNextRender, 52 animate, 53 booleanAttribute, 54 debounceTime, 55 filter, 56 forwardRef, 57 fromEvent, 58 hasModifierKey, 59 init_common, 60 init_core, 61 init_esm2015, 62 init_operators, 63 inject, 64 merge, 65 normalizePassiveListenerOptions, 66 numberAttribute, 67 of, 68 setClassMetadata, 69 skip, 70 startWith, 71 state, 72 style, 73 switchMap, 74 takeUntil, 75 timer, 76 transition, 77 trigger, 78 ɵɵInheritDefinitionFeature, 79 ɵɵInputTransformsFeature, 80 ɵɵNgOnChangesFeature, 81 ɵɵProvidersFeature, 82 ɵɵStandaloneFeature, 83 ɵɵadvance, 84 ɵɵattribute, 85 ɵɵclassMap, 86 ɵɵclassProp, 87 ɵɵconditional, 88 ɵɵcontentQuery, 89 ɵɵdefineComponent, 90 ɵɵdefineDirective, 91 ɵɵdefineInjector, 92 ɵɵdefineNgModule, 93 ɵɵdirectiveInject, 94 ɵɵelement, 95 ɵɵelementEnd, 96 ɵɵelementStart, 97 ɵɵgetCurrentView, 98 ɵɵinjectAttribute, 99 ɵɵlistener, 100 ɵɵloadQuery, 101 ɵɵnextContext, 102 ɵɵprojection, 103 ɵɵprojectionDef, 104 ɵɵproperty, 105 ɵɵpureFunction1, 106 ɵɵpureFunction2, 107 ɵɵqueryRefresh, 108 ɵɵreference, 109 ɵɵrepeater, 110 ɵɵrepeaterCreate, 111 ɵɵrepeaterTrackByIdentity, 112 ɵɵresetView, 113 ɵɵrestoreView, 114 ɵɵstyleProp, 115 ɵɵtemplate, 116 ɵɵtext, 117 ɵɵtextInterpolate, 118 ɵɵviewQuery 119} from "./chunk-5TV4NZRK.js"; 120 121// node_modules/@angular/material/fesm2022/tabs.mjs 122init_core(); 123init_core(); 124init_esm2015(); 125init_operators(); 126init_common(); 127var _c0 = ["*"]; 128function MatTab_ng_template_0_Template(rf, ctx) { 129 if (rf & 1) { 130 \u0275\u0275projection(0); 131 } 132} 133var _c1 = ["tabListContainer"]; 134var _c2 = ["tabList"]; 135var _c3 = ["tabListInner"]; 136var _c4 = ["nextPaginator"]; 137var _c5 = ["previousPaginator"]; 138var _c6 = (a0) => ({ 139 animationDuration: a0 140}); 141var _c7 = (a0, a1) => ({ 142 value: a0, 143 params: a1 144}); 145function MatTabBody_ng_template_2_Template(rf, ctx) { 146} 147var _c8 = ["tabBodyWrapper"]; 148var _c9 = ["tabHeader"]; 149function MatTabGroup_For_3_Conditional_6_ng_template_0_Template(rf, ctx) { 150} 151function MatTabGroup_For_3_Conditional_6_Template(rf, ctx) { 152 if (rf & 1) { 153 \u0275\u0275template(0, MatTabGroup_For_3_Conditional_6_ng_template_0_Template, 0, 0, "ng-template", 12); 154 } 155 if (rf & 2) { 156 const tab_r4 = \u0275\u0275nextContext().$implicit; 157 \u0275\u0275property("cdkPortalOutlet", tab_r4.templateLabel); 158 } 159} 160function MatTabGroup_For_3_Conditional_7_Template(rf, ctx) { 161 if (rf & 1) { 162 \u0275\u0275text(0); 163 } 164 if (rf & 2) { 165 const tab_r4 = \u0275\u0275nextContext().$implicit; 166 \u0275\u0275textInterpolate(tab_r4.textLabel); 167 } 168} 169function MatTabGroup_For_3_Template(rf, ctx) { 170 if (rf & 1) { 171 const _r2 = \u0275\u0275getCurrentView(); 172 \u0275\u0275elementStart(0, "div", 7, 2); 173 \u0275\u0275listener("click", function MatTabGroup_For_3_Template_div_click_0_listener() { 174 const ctx_r2 = \u0275\u0275restoreView(_r2); 175 const tab_r4 = ctx_r2.$implicit; 176 const \u0275$index_3_r5 = ctx_r2.$index; 177 const ctx_r5 = \u0275\u0275nextContext(); 178 const tabHeader_r7 = \u0275\u0275reference(1); 179 return \u0275\u0275resetView(ctx_r5._handleClick(tab_r4, tabHeader_r7, \u0275$index_3_r5)); 180 })("cdkFocusChange", function MatTabGroup_For_3_Template_div_cdkFocusChange_0_listener($event) { 181 const \u0275$index_3_r5 = \u0275\u0275restoreView(_r2).$index; 182 const ctx_r5 = \u0275\u0275nextContext();
183 return \u0275\u0275resetView(ctx_r5._tabFocusChanged($event, \u0275$index_3_r5)); 184 }); 185 \u0275\u0275element(2, "span", 8)(3, "div", 9); 186 \u0275\u0275elementStart(4, "span", 10)(5, "span", 11); 187 \u0275\u0275template(6, MatTabGroup_For_3_Conditional_6_Template, 1, 1, null, 12)(7, MatTabGroup_For_3_Conditional_7_Template, 1, 1); 188 \u0275\u0275elementEnd()()(); 189 } 190 if (rf & 2) { 191 const tab_r4 = ctx.$implicit; 192 const \u0275$index_3_r5 = ctx.$index; 193 const tabNode_r8 = \u0275\u0275reference(1); 194 const ctx_r5 = \u0275\u0275nextContext(); 195 \u0275\u0275classMap(tab_r4.labelClass); 196 \u0275\u0275classProp("mdc-tab--active", ctx_r5.selectedIndex === \u0275$index_3_r5); 197 \u0275\u0275property("id", ctx_r5._getTabLabelId(\u0275$index_3_r5))("disabled", tab_r4.disabled)("fitInkBarToContent", ctx_r5.fitInkBarToContent); 198 \u0275\u0275attribute("tabIndex", ctx_r5._getTabIndex(\u0275$index_3_r5))("aria-posinset", \u0275$index_3_r5 + 1)("aria-setsize", ctx_r5._tabs.length)("aria-controls", ctx_r5._getTabContentId(\u0275$index_3_r5))("aria-selected", ctx_r5.selectedIndex === \u0275$index_3_r5)("aria-label", tab_r4.ariaLabel || null)("aria-labelledby", !tab_r4.ariaLabel && tab_r4.ariaLabelledby ? tab_r4.ariaLabelledby : null); 199 \u0275\u0275advance(3); 200 \u0275\u0275property("matRippleTrigger", tabNode_r8)("matRippleDisabled", tab_r4.disabled || ctx_r5.disableRipple); 201 \u0275\u0275advance(3); 202 \u0275\u0275conditional(tab_r4.templateLabel ? 6 : 7); 203 } 204} 205function MatTabGroup_Conditional_4_Template(rf, ctx) { 206 if (rf & 1) { 207 \u0275\u0275projection(0); 208 } 209} 210function MatTabGroup_For_8_Template(rf, ctx) { 211 if (rf & 1) { 212 const _r9 = \u0275\u0275getCurrentView(); 213 \u0275\u0275elementStart(0, "mat-tab-body", 13); 214 \u0275\u0275listener("_onCentered", function MatTabGroup_For_8_Template_mat_tab_body__onCentered_0_listener() { 215 \u0275\u0275restoreView(_r9); 216 const ctx_r5 = \u0275\u0275nextContext(); 217 return \u0275\u0275resetView(ctx_r5._removeTabBodyWrapperHeight()); 218 })("_onCentering", function MatTabGroup_For_8_Template_mat_tab_body__onCentering_0_listener($event) { 219 \u0275\u0275restoreView(_r9); 220 const ctx_r5 = \u0275\u0275nextContext(); 221 return \u0275\u0275resetView(ctx_r5._setTabBodyWrapperHeight($event)); 222 }); 223 \u0275\u0275elementEnd(); 224 } 225 if (rf & 2) { 226 const tab_r10 = ctx.$implicit; 227 const \u0275$index_23_r11 = ctx.$index; 228 const ctx_r5 = \u0275\u0275nextContext(); 229 \u0275\u0275classMap(tab_r10.bodyClass); 230 \u0275\u0275classProp("mat-mdc-tab-body-active", ctx_r5.selectedIndex === \u0275$index_23_r11); 231 \u0275\u0275property("id", ctx_r5._getTabContentId(\u0275$index_23_r11))("content", tab_r10.content)("position", tab_r10.position)("origin", tab_r10.origin)("animationDuration", ctx_r5.animationDuration)("preserveContent", ctx_r5.preserveContent); 232 \u0275\u0275attribute("tabindex", ctx_r5.contentTabIndex != null && ctx_r5.selectedIndex === \u0275$index_23_r11 ? ctx_r5.contentTabIndex : null)("aria-labelledby", ctx_r5._getTabLabelId(\u0275$index_23_r11))("aria-hidden", ctx_r5.selectedIndex !== \u0275$index_23_r11); 233 } 234} 235var _c10 = ["mat-tab-nav-bar", ""]; 236var _c11 = ["mat-tab-link", ""]; 237var MAT_TAB_CONTENT = new InjectionToken("MatTabContent"); 238var MatTabContent = class _MatTabContent { 239 constructor(template) { 240 this.template = template; 241 } 242 static { 243 this.\u0275fac = function MatTabContent_Factory(__ngFactoryType__) { 244 return new (__ngFactoryType__ || _MatTabContent)(\u0275\u0275directiveInject(TemplateRef)); 245 }; 246 } 247 static { 248 this.\u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({ 249 type: _MatTabContent, 250 selectors: [["", "matTabContent", ""]], 251 standalone: true, 252 features: [\u0275\u0275ProvidersFeature([{ 253 provide: MAT_TAB_CONTENT, 254 useExisting: _MatTabContent 255 }])] 256 }); 257 } 258}; 259(() => { 260 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabContent, [{ 261 type: Directive, 262 args: [{ 263 selector: "[matTabContent]", 264 providers: [{ 265 provide: MAT_TAB_CONTENT, 266 useExisting: MatTabContent 267 }], 268 standalone: true 269 }] 270 }], () => [{ 271 type: TemplateRef 272 }], null); 273})(); 274var MAT_TAB_LABEL = new InjectionToken("MatTabLabel"); 275var MAT_TAB = new InjectionToken("MAT_TAB"); 276var MatTabLabel = class _MatTabLabel extends CdkPortal { 277 constructor(templateRef, viewContainerRef, _closestTab) { 278 super(templateRef, viewContainerRef); 279 this._closestTab = _closestTab; 280 } 281 static { 282 this.\u0275fac = function MatTabLabel_Factory(__ngFactoryType__) { 283 return new (__ngFactoryType__ || _MatTabLabel)(\u0275\u0275directiveInject(TemplateRef), \u0275\u0275directiveInject(ViewContainerRef), \u0275\u0275directiveInject(MAT_TAB, 8)); 284 }; 285 } 286 static { 287 this.\u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({ 288 type: _MatTabLabel, 289 selectors: [["", "mat-tab-label", ""], ["", "matTabLabel", ""]], 290 standalone: true, 291 features: [\u0275\u0275ProvidersFeature([{ 292 provide: MAT_TAB_LABEL, 293 useExisting: _MatTabLabel 294 }]), \u0275\u0275InheritDefinitionFeature] 295 }); 296 } 297}; 298(() => { 299 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabLabel, [{ 300 type: Directive, 301 args: [{ 302 selector: "[mat-tab-label], [matTabLabel]", 303 providers: [{ 304 provide: MAT_TAB_LABEL, 305 useExisting: MatTabLabel 306 }], 307 standalone: true 308 }] 309 }], () => [{ 310 type: TemplateRef 311 }, { 312 type: ViewContainerRef 313 }, { 314 type: void 0, 315 decorators: [{ 316 type: Inject, 317 args: [MAT_TAB] 318 }, {
319 type: Optional 320 }] 321 }], null); 322})(); 323var MAT_TAB_GROUP = new InjectionToken("MAT_TAB_GROUP"); 324var MatTab = class _MatTab { 325 /** Content for the tab label given by `<ng-template mat-tab-label>`. */ 326 get templateLabel() { 327 return this._templateLabel; 328 } 329 set templateLabel(value) { 330 this._setTemplateLabelInput(value); 331 } 332 /** @docs-private */ 333 get content() { 334 return this._contentPortal; 335 } 336 constructor(_viewContainerRef, _closestTabGroup) { 337 this._viewContainerRef = _viewContainerRef; 338 this._closestTabGroup = _closestTabGroup; 339 this.disabled = false; 340 this._explicitContent = void 0; 341 this.textLabel = ""; 342 this._contentPortal = null; 343 this._stateChanges = new Subject(); 344 this.position = null; 345 this.origin = null; 346 this.isActive = false; 347 } 348 ngOnChanges(changes) { 349 if (changes.hasOwnProperty("textLabel") || changes.hasOwnProperty("disabled")) { 350 this._stateChanges.next(); 351 } 352 } 353 ngOnDestroy() { 354 this._stateChanges.complete(); 355 } 356 ngOnInit() { 357 this._contentPortal = new TemplatePortal(this._explicitContent || this._implicitContent, this._viewContainerRef); 358 } 359 /** 360 * This has been extracted to a util because of TS 4 and VE. 361 * View Engine doesn't support property rename inheritance. 362 * TS 4.0 doesn't allow properties to override accessors or vice-versa. 363 * @docs-private 364 */ 365 _setTemplateLabelInput(value) { 366 if (value && value._closestTab === this) { 367 this._templateLabel = value; 368 } 369 } 370 static { 371 this.\u0275fac = function MatTab_Factory(__ngFactoryType__) { 372 return new (__ngFactoryType__ || _MatTab)(\u0275\u0275directiveInject(ViewContainerRef), \u0275\u0275directiveInject(MAT_TAB_GROUP, 8)); 373 }; 374 } 375 static { 376 this.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ 377 type: _MatTab, 378 selectors: [["mat-tab"]], 379 contentQueries: function MatTab_ContentQueries(rf, ctx, dirIndex) { 380 if (rf & 1) { 381 \u0275\u0275contentQuery(dirIndex, MatTabLabel, 5); 382 \u0275\u0275contentQuery(dirIndex, MatTabContent, 7, TemplateRef); 383 } 384 if (rf & 2) { 385 let _t; 386 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx.templateLabel = _t.first); 387 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._explicitContent = _t.first); 388 } 389 }, 390 viewQuery: function MatTab_Query(rf, ctx) { 391 if (rf & 1) { 392 \u0275\u0275viewQuery(TemplateRef, 7); 393 } 394 if (rf & 2) { 395 let _t; 396 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._implicitContent = _t.first); 397 } 398 }, 399 hostAttrs: ["hidden", ""], 400 inputs: { 401 disabled: [2, "disabled", "disabled", booleanAttribute], 402 textLabel: [0, "label", "textLabel"], 403 ariaLabel: [0, "aria-label", "ariaLabel"], 404 ariaLabelledby: [0, "aria-labelledby", "ariaLabelledby"], 405 labelClass: "labelClass", 406 bodyClass: "bodyClass" 407 }, 408 exportAs: ["matTab"], 409 standalone: true, 410 features: [\u0275\u0275ProvidersFeature([{ 411 provide: MAT_TAB, 412 useExisting: _MatTab 413 }]), \u0275\u0275InputTransformsFeature, \u0275\u0275NgOnChangesFeature, \u0275\u0275StandaloneFeature], 414 ngContentSelectors: _c0, 415 decls: 1, 416 vars: 0, 417 template: function MatTab_Template(rf, ctx) { 418 if (rf & 1) { 419 \u0275\u0275projectionDef(); 420 \u0275\u0275template(0, MatTab_ng_template_0_Template, 1, 0, "ng-template"); 421 } 422 }, 423 encapsulation: 2 424 }); 425 } 426}; 427(() => { 428 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTab, [{ 429 type: Component, 430 args: [{ 431 selector: "mat-tab", 432 changeDetection: ChangeDetectionStrategy.Default, 433 encapsulation: ViewEncapsulation$1.None, 434 exportAs: "matTab", 435 providers: [{ 436 provide: MAT_TAB, 437 useExisting: MatTab 438 }], 439 standalone: true, 440 host: { 441 // This element will be rendered on the server in order to support hydration. 442 // Hide it so it doesn't cause a layout shift when it's removed on the client. 443 "hidden": "" 444 }, 445 template: "<!-- Create a template for the content of the <mat-tab> so that we can grab a reference to this\n TemplateRef and use it in a Portal to render the tab content in the appropriate place in the\n tab-group. -->\n<ng-template><ng-content></ng-content></ng-template>\n" 446 }] 447 }], () => [{ 448 type: ViewContainerRef 449 }, { 450 type: void 0, 451 decorators: [{ 452 type: Inject, 453 args: [MAT_TAB_GROUP] 454 }, {
455 type: Optional 456 }] 457 }], { 458 disabled: [{ 459 type: Input, 460 args: [{ 461 transform: booleanAttribute 462 }] 463 }], 464 templateLabel: [{ 465 type: ContentChild, 466 args: [MatTabLabel] 467 }], 468 _explicitContent: [{ 469 type: ContentChild, 470 args: [MatTabContent, { 471 read: TemplateRef, 472 static: true 473 }] 474 }], 475 _implicitContent: [{ 476 type: ViewChild, 477 args: [TemplateRef, { 478 static: true 479 }] 480 }], 481 textLabel: [{ 482 type: Input, 483 args: ["label"] 484 }], 485 ariaLabel: [{ 486 type: Input, 487 args: ["aria-label"] 488 }], 489 ariaLabelledby: [{ 490 type: Input, 491 args: ["aria-labelledby"] 492 }], 493 labelClass: [{ 494 type: Input 495 }], 496 bodyClass: [{ 497 type: Input 498 }] 499 }); 500})(); 501var ACTIVE_CLASS = "mdc-tab-indicator--active"; 502var NO_TRANSITION_CLASS = "mdc-tab-indicator--no-transition"; 503var MatInkBar = class { 504 constructor(_items) { 505 this._items = _items; 506 } 507 /** Hides the ink bar. */ 508 hide() { 509 this._items.forEach((item) => item.deactivateInkBar()); 510 } 511 /** Aligns the ink bar to a DOM node. */ 512 alignToElement(element) { 513 const correspondingItem = this._items.find((item) => item.elementRef.nativeElement === element); 514 const currentItem = this._currentItem; 515 if (correspondingItem === currentItem) { 516 return; 517 } 518 currentItem?.deactivateInkBar(); 519 if (correspondingItem) { 520 const domRect = currentItem?.elementRef.nativeElement.getBoundingClientRect?.(); 521 correspondingItem.activateInkBar(domRect); 522 this._currentItem = correspondingItem; 523 } 524 } 525}; 526var InkBarItem = class _InkBarItem { 527 constructor() { 528 this._elementRef = inject(ElementRef); 529 this._fitToContent = false; 530 } 531 /** Whether the ink bar should fit to the entire tab or just its content. */ 532 get fitInkBarToContent() { 533 return this._fitToContent; 534 } 535 set fitInkBarToContent(newValue) { 536 if (this._fitToContent !== newValue) { 537 this._fitToContent = newValue; 538 if (this._inkBarElement) { 539 this._appendInkBarElement(); 540 } 541 } 542 } 543 /** Aligns the ink bar to the current item. */ 544 activateInkBar(previousIndicatorClientRect) { 545 const element = this._elementRef.nativeElement; 546 if (!previousIndicatorClientRect || !element.getBoundingClientRect || !this._inkBarContentElement) { 547 element.classList.add(ACTIVE_CLASS); 548 return; 549 } 550 const currentClientRect = element.getBoundingClientRect(); 551 const widthDelta = previousIndicatorClientRect.width / currentClientRect.width; 552 const xPosition = previousIndicatorClientRect.left - currentClientRect.left; 553 element.classList.add(NO_TRANSITION_CLASS); 554 this._inkBarContentElement.style.setProperty("transform", `translateX(${xPosition}px) scaleX(${widthDelta})`); 555 element.getBoundingClientRect(); 556 element.classList.remove(NO_TRANSITION_CLASS); 557 element.classList.add(ACTIVE_CLASS); 558 this._inkBarContentElement.style.setProperty("transform", ""); 559 } 560 /** Removes the ink bar from the current item. */ 561 deactivateInkBar() { 562 this._elementRef.nativeElement.classList.remove(ACTIVE_CLASS); 563 } 564 /** Initializes the foundation. */ 565 ngOnInit() { 566 this._createInkBarElement(); 567 } 568 /** Destroys the foundation. */ 569 ngOnDestroy() { 570 this._inkBarElement?.remove(); 571 this._inkBarElement = this._inkBarContentElement = null; 572 } 573 /** Creates and appends the ink bar element. */ 574 _createInkBarElement() { 575 const documentNode = this._elementRef.nativeElement.ownerDocument || document; 576 const inkBarElement = this._inkBarElement = documentNode.createElement("span"); 577 const inkBarContentElement = this._inkBarContentElement = documentNode.createElement("span"); 578 inkBarElement.className = "mdc-tab-indicator"; 579 inkBarContentElement.className = "mdc-tab-indicator__content mdc-tab-indicator__content--underline"; 580 inkBarElement.appendChild(this._inkBarContentElement); 581 this._appendInkBarElement(); 582 } 583 /** 584 * Appends the ink bar to the tab host element or content, depending on whether 585 * the ink bar should fit to content. 586 */ 587 _appendInkBarElement() { 588 if (!this._inkBarElement && (typeof ngDevMode === "undefined" || ngDevMode)) { 589 throw Error("Ink bar element has not been created and cannot be appended"); 590 } 591 const parentElement = this._fitToContent ? this._elementRef.nativeElement.querySelector(".mdc-tab__content") : this._elementRef.nativeElement; 592 if (!parentElement && (typeof ngDevMode === "undefined" || ngDevMode)) { 593 throw Error("Missing element to host the ink bar"); 594 } 595 parentElement.appendChild(this._inkBarElement); 596 } 597 static { 598 this.\u0275fac = function InkBarItem_Factory(__ngFactoryType__) { 599 return new (__ngFactoryType__ || _InkBarItem)(); 600 }; 601 } 602 static { 603 this.\u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({ 604 type: _InkBarItem, 605 inputs: { 606 fitInkBarToContent: [2, "fitInkBarToContent", "fitInkBarToContent", booleanAttribute] 607 }, 608 features: [\u0275\u0275InputTransformsFeature] 609 }); 610 } 611}; 612(() => { 613 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(InkBarItem, [{ 614 type: Directive 615 }], null, { 616 fitInkBarToContent: [{ 617 type: Input, 618 args: [{ 619 transform: booleanAttribute 620 }] 621 }] 622 }); 623})(); 624function _MAT_INK_BAR_POSITIONER_FACTORY() { 625 const method = (element) => ({ 626 left: element ? (element.offsetLeft || 0) + "px" : "0", 627 width: element ? (element.offsetWidth || 0) + "px" : "0" 628 }); 629 return method; 630} 631var _MAT_INK_BAR_POSITIONER = new InjectionToken("MatInkBarPositioner", { 632 providedIn: "root", 633 factory: _MAT_INK_BAR_POSITIONER_FACTORY 634}); 635var MatTabLabelWrapper = class _MatTabLabelWrapper extends InkBarItem { 636 constructor(elementRef) { 637 super(); 638 this.elementRef = elementRef; 639 this.disabled = false;
640 } 641 /** Sets focus on the wrapper element */ 642 focus() { 643 this.elementRef.nativeElement.focus(); 644 } 645 getOffsetLeft() { 646 return this.elementRef.nativeElement.offsetLeft; 647 } 648 getOffsetWidth() { 649 return this.elementRef.nativeElement.offsetWidth; 650 } 651 static { 652 this.\u0275fac = function MatTabLabelWrapper_Factory(__ngFactoryType__) { 653 return new (__ngFactoryType__ || _MatTabLabelWrapper)(\u0275\u0275directiveInject(ElementRef)); 654 }; 655 } 656 static { 657 this.\u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({ 658 type: _MatTabLabelWrapper, 659 selectors: [["", "matTabLabelWrapper", ""]], 660 hostVars: 3, 661 hostBindings: function MatTabLabelWrapper_HostBindings(rf, ctx) { 662 if (rf & 2) { 663 \u0275\u0275attribute("aria-disabled", !!ctx.disabled); 664 \u0275\u0275classProp("mat-mdc-tab-disabled", ctx.disabled); 665 } 666 }, 667 inputs: { 668 disabled: [2, "disabled", "disabled", booleanAttribute] 669 }, 670 standalone: true, 671 features: [\u0275\u0275InputTransformsFeature, \u0275\u0275InheritDefinitionFeature] 672 }); 673 } 674}; 675(() => { 676 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabLabelWrapper, [{ 677 type: Directive, 678 args: [{ 679 selector: "[matTabLabelWrapper]", 680 host: { 681 "[class.mat-mdc-tab-disabled]": "disabled", 682 "[attr.aria-disabled]": "!!disabled" 683 }, 684 standalone: true 685 }] 686 }], () => [{ 687 type: ElementRef 688 }], { 689 disabled: [{ 690 type: Input, 691 args: [{ 692 transform: booleanAttribute 693 }] 694 }] 695 }); 696})(); 697var passiveEventListenerOptions = normalizePassiveListenerOptions({ 698 passive: true 699}); 700var HEADER_SCROLL_DELAY = 650; 701var HEADER_SCROLL_INTERVAL = 100; 702var MatPaginatedTabHeader = class _MatPaginatedTabHeader { 703 /** The index of the active tab. */ 704 get selectedIndex() { 705 return this._selectedIndex; 706 } 707 set selectedIndex(v) { 708 const value = isNaN(v) ? 0 : v; 709 if (this._selectedIndex != value) { 710 this._selectedIndexChanged = true; 711 this._selectedIndex = value; 712 if (this._keyManager) { 713 this._keyManager.updateActiveItem(value); 714 } 715 } 716 } 717 constructor(_elementRef, _changeDetectorRef, _viewportRuler, _dir, _ngZone, _platform, _animationMode) { 718 this._elementRef = _elementRef; 719 this._changeDetectorRef = _changeDetectorRef; 720 this._viewportRuler = _viewportRuler; 721 this._dir = _dir; 722 this._ngZone = _ngZone; 723 this._platform = _platform; 724 this._animationMode = _animationMode; 725 this._scrollDistance = 0; 726 this._selectedIndexChanged = false; 727 this._destroyed = new Subject(); 728 this._showPaginationControls = false; 729 this._disableScrollAfter = true; 730 this._disableScrollBefore = true; 731 this._stopScrolling = new Subject(); 732 this.disablePagination = false; 733 this._selectedIndex = 0; 734 this.selectFocusedIndex = new EventEmitter(); 735 this.indexFocused = new EventEmitter(); 736 this._sharedResizeObserver = inject(SharedResizeObserver); 737 this._injector = inject(Injector); 738 _ngZone.runOutsideAngular(() => { 739 fromEvent(_elementRef.nativeElement, "mouseleave").pipe(takeUntil(this._destroyed)).subscribe(() => { 740 this._stopInterval(); 741 }); 742 }); 743 } 744 ngAfterViewInit() { 745 fromEvent(this._previousPaginator.nativeElement, "touchstart", passiveEventListenerOptions).pipe(takeUntil(this._destroyed)).subscribe(() => { 746 this._handlePaginatorPress("before"); 747 }); 748 fromEvent(this._nextPaginator.nativeElement, "touchstart", passiveEventListenerOptions).pipe(takeUntil(this._destroyed)).subscribe(() => { 749 this._handlePaginatorPress("after"); 750 }); 751 } 752 ngAfterContentInit() { 753 const dirChange = this._dir ? this._dir.change : of("ltr"); 754 const resize = this._sharedResizeObserver.observe(this._elementRef.nativeElement).pipe(debounceTime(32), takeUntil(this._destroyed)); 755 const viewportResize = this._viewportRuler.change(150).pipe(takeUntil(this._destroyed)); 756 const realign = () => { 757 this.updatePagination(); 758 this._alignInkBarToSelectedTab(); 759 }; 760 this._keyManager = new FocusKeyManager(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(() => false); 761 this._keyManager.updateActiveItem(this._selectedIndex); 762 afterNextRender(realign, { 763 injector: this._injector 764 }); 765 merge(dirChange, viewportResize, resize, this._items.changes, this._itemsResized()).pipe(takeUntil(this._destroyed)).subscribe(() => { 766 this._ngZone.run(() => { 767 Promise.resolve().then(() => { 768 this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance)); 769 realign(); 770 }); 771 }); 772 this._keyManager.withHorizontalOrientation(this._getLayoutDirection()); 773 }); 774 this._keyManager.change.subscribe((newFocusIndex) => { 775 this.indexFocused.emit(newFocusIndex); 776 this._setTabFocus(newFocusIndex); 777 }); 778 } 779 /** Sends any changes that could affect the layout of the items. */ 780 _itemsResized() { 781 if (typeof ResizeObserver !== "function") { 782 return EMPTY; 783 } 784 return this._items.changes.pipe( 785 startWith(this._items), 786 switchMap((tabItems) => new Observable((observer) => this._ngZone.runOutsideAngular(() => { 787 const resizeObserver = new ResizeObserver((entries) => observer.next(entries));
788 tabItems.forEach((item) => resizeObserver.observe(item.elementRef.nativeElement)); 789 return () => { 790 resizeObserver.disconnect(); 791 }; 792 }))), 793 // Skip the first emit since the resize observer emits when an item 794 // is observed for new items when the tab is already inserted 795 skip(1), 796 // Skip emissions where all the elements are invisible since we don't want 797 // the header to try and re-render with invalid measurements. See #25574. 798 filter((entries) => entries.some((e) => e.contentRect.width > 0 && e.contentRect.height > 0)) 799 ); 800 } 801 ngAfterContentChecked() { 802 if (this._tabLabelCount != this._items.length) { 803 this.updatePagination(); 804 this._tabLabelCount = this._items.length; 805 this._changeDetectorRef.markForCheck(); 806 } 807 if (this._selectedIndexChanged) { 808 this._scrollToLabel(this._selectedIndex); 809 this._checkScrollingControls(); 810 this._alignInkBarToSelectedTab(); 811 this._selectedIndexChanged = false; 812 this._changeDetectorRef.markForCheck(); 813 } 814 if (this._scrollDistanceChanged) { 815 this._updateTabScrollPosition(); 816 this._scrollDistanceChanged = false; 817 this._changeDetectorRef.markForCheck(); 818 } 819 } 820 ngOnDestroy() { 821 this._keyManager?.destroy(); 822 this._destroyed.next(); 823 this._destroyed.complete(); 824 this._stopScrolling.complete(); 825 } 826 /** Handles keyboard events on the header. */ 827 _handleKeydown(event) { 828 if (hasModifierKey(event)) { 829 return; 830 } 831 switch (event.keyCode) { 832 case ENTER: 833 case SPACE: 834 if (this.focusIndex !== this.selectedIndex) { 835 const item = this._items.get(this.focusIndex); 836 if (item && !item.disabled) { 837 this.selectFocusedIndex.emit(this.focusIndex); 838 this._itemSelected(event); 839 } 840 } 841 break; 842 default: 843 this._keyManager.onKeydown(event); 844 } 845 } 846 /** 847 * Callback for when the MutationObserver detects that the content has changed. 848 */ 849 _onContentChanges() { 850 const textContent = this._elementRef.nativeElement.textContent; 851 if (textContent !== this._currentTextContent) { 852 this._currentTextContent = textContent || ""; 853 this._ngZone.run(() => { 854 this.updatePagination(); 855 this._alignInkBarToSelectedTab(); 856 this._changeDetectorRef.markForCheck(); 857 }); 858 } 859 } 860 /** 861 * Updates the view whether pagination should be enabled or not. 862 * 863 * WARNING: Calling this method can be very costly in terms of performance. It should be called 864 * as infrequently as possible from outside of the Tabs component as it causes a reflow of the 865 * page. 866 */ 867 updatePagination() { 868 this._checkPaginationEnabled(); 869 this._checkScrollingControls(); 870 this._updateTabScrollPosition(); 871 } 872 /** Tracks which element has focus; used for keyboard navigation */ 873 get focusIndex() { 874 return this._keyManager ? this._keyManager.activeItemIndex : 0; 875 } 876 /** When the focus index is set, we must manually send focus to the correct label */ 877 set focusIndex(value) { 878 if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) { 879 return; 880 } 881 this._keyManager.setActiveItem(value); 882 } 883 /** 884 * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is 885 * providing a valid index and return true. 886 */ 887 _isValidIndex(index) { 888 return this._items ? !!this._items.toArray()[index] : true; 889 } 890 /** 891 * Sets focus on the HTML element for the label wrapper and scrolls it into the view if 892 * scrolling is enabled. 893 */ 894 _setTabFocus(tabIndex) { 895 if (this._showPaginationControls) { 896 this._scrollToLabel(tabIndex); 897 } 898 if (this._items && this._items.length) { 899 this._items.toArray()[tabIndex].focus(); 900 const containerEl = this._tabListContainer.nativeElement; 901 const dir = this._getLayoutDirection(); 902 if (dir == "ltr") { 903 containerEl.scrollLeft = 0; 904 } else { 905 containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth; 906 } 907 } 908 } 909 /** The layout direction of the containing app. */ 910 _getLayoutDirection() { 911 return this._dir && this._dir.value === "rtl" ? "rtl" : "ltr"; 912 } 913 /** Performs the CSS transformation on the tab list that will cause the list to scroll. */ 914 _updateTabScrollPosition() { 915 if (this.disablePagination) { 916 return; 917 } 918 const scrollDistance = this.scrollDistance; 919 const translateX = this._getLayoutDirection() === "ltr" ? -scrollDistance : scrollDistance; 920 this._tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`; 921 if (this._platform.TRIDENT || this._platform.EDGE) { 922 this._tabListContainer.nativeElement.scrollLeft = 0; 923 } 924 } 925 /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */ 926 get scrollDistance() { 927 return this._scrollDistance; 928 } 929 set scrollDistance(value) { 930 this._scrollTo(value); 931 } 932 /** 933 * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or 934 * the end of the list, respectively). The distance to scroll is computed to be a third of the 935 * length of the tab list view window. 936 * 937 * This is an expensive call that forces a layout reflow to compute box and scroll metrics and 938 * should be called sparingly. 939 */ 940 _scrollHeader(direction) { 941 const viewLength = this._tabListContainer.nativeElement.offsetWidth; 942 const scrollAmount = (direction == "before" ? -1 : 1) * viewLength / 3; 943 return this._scrollTo(this._scrollDistance + scrollAmount); 944 } 945 /** Handles click events on the pagination arrows. */ 946 _handlePaginatorClick(direction) { 947 this._stopInterval(); 948 this._scrollHeader(direction); 949 } 950 /** 951 * Moves the tab list such that the desired tab label (marked by index) is moved into view. 952 * 953 * This is an expensive call that forces a layout reflow to compute box and scroll metrics and 954 * should be called sparingly. 955 */ 956 _scrollToLabel(labelIndex) { 957 if (this.disablePagination) { 958 return; 959 } 960 const selectedLabel = this._items ? this._items.toArray()[labelIndex] : null; 961 if (!selectedLabel) { 962 return; 963 } 964 const viewLength = this._tabListContainer.nativeElement.offsetWidth; 965 const { 966 offsetLeft, 967 offsetWidth 968 } = selectedLabel.elementRef.nativeElement; 969 let labelBeforePos, labelAfterPos; 970 if (this._getLayoutDirection() == "ltr") { 971 labelBeforePos = offsetLeft; 972 labelAfterPos = labelBeforePos + offsetWidth; 973 } else { 974 labelAfterPos = this._tabListInner.nativeElement.offsetWidth - offsetLeft; 975 labelBeforePos = labelAfterPos - offsetWidth; 976 } 977 const beforeVisiblePos = this.scrollDistance; 978 const afterVisiblePos = this.scrollDistance + viewLength; 979 if (labelBeforePos < beforeVisiblePos) { 980 this.scrollDistance -= beforeVisiblePos - labelBeforePos; 981 } else if (labelAfterPos > afterVisiblePos) { 982 this.scrollDistance += Math.min(labelAfterPos - afterVisiblePos, labelBeforePos - beforeVisiblePos); 983 } 984 } 985 /** 986 * Evaluate whether the pagination controls should be displayed. If the scroll width of the 987 * tab list is wider than the size of the header container, then the pagination controls should 988 * be shown. 989 * 990 * This is an expensive call that forces a layout reflow to compute box and scroll metrics and 991 * should be called sparingly. 992 */ 993 _checkPaginationEnabled() { 994 if (this.disablePagination) { 995 this._showPaginationControls = false;
996 } else { 997 const scrollWidth = this._tabListInner.nativeElement.scrollWidth; 998 const containerWidth = this._elementRef.nativeElement.offsetWidth; 999 const isEnabled = scrollWidth - containerWidth >= 5; 1000 if (!isEnabled) { 1001 this.scrollDistance = 0; 1002 } 1003 if (isEnabled !== this._showPaginationControls) { 1004 this._showPaginationControls = isEnabled; 1005 this._changeDetectorRef.markForCheck(); 1006 } 1007 } 1008 } 1009 /** 1010 * Evaluate whether the before and after controls should be enabled or disabled. 1011 * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the 1012 * before button. If the header is at the end of the list (scroll distance is equal to the 1013 * maximum distance we can scroll), then disable the after button. 1014 * 1015 * This is an expensive call that forces a layout reflow to compute box and scroll metrics and 1016 * should be called sparingly. 1017 */ 1018 _checkScrollingControls() { 1019 if (this.disablePagination) { 1020 this._disableScrollAfter = this._disableScrollBefore = true; 1021 } else { 1022 this._disableScrollBefore = this.scrollDistance == 0; 1023 this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance(); 1024 this._changeDetectorRef.markForCheck(); 1025 } 1026 } 1027 /** 1028 * Determines what is the maximum length in pixels that can be set for the scroll distance. This 1029 * is equal to the difference in width between the tab list container and tab header container. 1030 * 1031 * This is an expensive call that forces a layout reflow to compute box and scroll metrics and 1032 * should be called sparingly. 1033 */ 1034 _getMaxScrollDistance() { 1035 const lengthOfTabList = this._tabListInner.nativeElement.scrollWidth; 1036 const viewLength = this._tabListContainer.nativeElement.offsetWidth; 1037 return lengthOfTabList - viewLength || 0; 1038 } 1039 /** Tells the ink-bar to align itself to the current label wrapper */ 1040 _alignInkBarToSelectedTab() { 1041 const selectedItem = this._items && this._items.length ? this._items.toArray()[this.selectedIndex] : null; 1042 const selectedLabelWrapper = selectedItem ? selectedItem.elementRef.nativeElement : null; 1043 if (selectedLabelWrapper) { 1044 this._inkBar.alignToElement(selectedLabelWrapper); 1045 } else { 1046 this._inkBar.hide(); 1047 } 1048 } 1049 /** Stops the currently-running paginator interval. */ 1050 _stopInterval() { 1051 this._stopScrolling.next(); 1052 } 1053 /** 1054 * Handles the user pressing down on one of the paginators. 1055 * Starts scrolling the header after a certain amount of time. 1056 * @param direction In which direction the paginator should be scrolled. 1057 */ 1058 _handlePaginatorPress(direction, mouseEvent) { 1059 if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) { 1060 return; 1061 } 1062 this._stopInterval(); 1063 timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL).pipe(takeUntil(merge(this._stopScrolling, this._destroyed))).subscribe(() => { 1064 const { 1065 maxScrollDistance, 1066 distance 1067 } = this._scrollHeader(direction); 1068 if (distance === 0 || distance >= maxScrollDistance) { 1069 this._stopInterval(); 1070 } 1071 }); 1072 } 1073 /** 1074 * Scrolls the header to a given position. 1075 * @param position Position to which to scroll. 1076 * @returns Information on the current scroll distance and the maximum. 1077 */ 1078 _scrollTo(position) { 1079 if (this.disablePagination) { 1080 return { 1081 maxScrollDistance: 0, 1082 distance: 0 1083 }; 1084 } 1085 const maxScrollDistance = this._getMaxScrollDistance(); 1086 this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position)); 1087 this._scrollDistanceChanged = true; 1088 this._checkScrollingControls(); 1089 return { 1090 maxScrollDistance, 1091 distance: this._scrollDistance 1092 }; 1093 } 1094 static { 1095 this.\u0275fac = function MatPaginatedTabHeader_Factory(__ngFactoryType__) { 1096 return new (__ngFactoryType__ || _MatPaginatedTabHeader)(\u0275\u0275directiveInject(ElementRef), \u0275\u0275directiveInject(ChangeDetectorRef), \u0275\u0275directiveInject(ViewportRuler), \u0275\u0275directiveInject(Directionality, 8), \u0275\u0275directiveInject(NgZone), \u0275\u0275directiveInject(Platform), \u0275\u0275directiveInject(ANIMATION_MODULE_TYPE, 8)); 1097 }; 1098 } 1099 static { 1100 this.\u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({ 1101 type: _MatPaginatedTabHeader, 1102 inputs: { 1103 disablePagination: [2, "disablePagination", "disablePagination", booleanAttribute], 1104 selectedIndex: [2, "selectedIndex", "selectedIndex", numberAttribute] 1105 }, 1106 outputs: { 1107 selectFocusedIndex: "selectFocusedIndex", 1108 indexFocused: "indexFocused" 1109 }, 1110 features: [\u0275\u0275InputTransformsFeature] 1111 }); 1112 } 1113}; 1114(() => { 1115 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatPaginatedTabHeader, [{ 1116 type: Directive 1117 }], () => [{ 1118 type: ElementRef 1119 }, { 1120 type: ChangeDetectorRef 1121 }, { 1122 type: ViewportRuler 1123 }, { 1124 type: Directionality, 1125 decorators: [{ 1126 type: Optional 1127 }] 1128 }, { 1129 type: NgZone 1130 }, { 1131 type: Platform 1132 }, { 1133 type: void 0, 1134 decorators: [{ 1135 type: Optional 1136 }, {
1137 type: Inject, 1138 args: [ANIMATION_MODULE_TYPE] 1139 }] 1140 }], { 1141 disablePagination: [{ 1142 type: Input, 1143 args: [{ 1144 transform: booleanAttribute 1145 }] 1146 }], 1147 selectedIndex: [{ 1148 type: Input, 1149 args: [{ 1150 transform: numberAttribute 1151 }] 1152 }], 1153 selectFocusedIndex: [{ 1154 type: Output 1155 }], 1156 indexFocused: [{ 1157 type: Output 1158 }] 1159 }); 1160})(); 1161var MatTabHeader = class _MatTabHeader extends MatPaginatedTabHeader { 1162 constructor(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode) { 1163 super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode); 1164 this.disableRipple = false; 1165 } 1166 ngAfterContentInit() { 1167 this._inkBar = new MatInkBar(this._items); 1168 super.ngAfterContentInit(); 1169 } 1170 _itemSelected(event) { 1171 event.preventDefault(); 1172 } 1173 static { 1174 this.\u0275fac = function MatTabHeader_Factory(__ngFactoryType__) { 1175 return new (__ngFactoryType__ || _MatTabHeader)(\u0275\u0275directiveInject(ElementRef), \u0275\u0275directiveInject(ChangeDetectorRef), \u0275\u0275directiveInject(ViewportRuler), \u0275\u0275directiveInject(Directionality, 8), \u0275\u0275directiveInject(NgZone), \u0275\u0275directiveInject(Platform), \u0275\u0275directiveInject(ANIMATION_MODULE_TYPE, 8)); 1176 }; 1177 } 1178 static { 1179 this.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ 1180 type: _MatTabHeader, 1181 selectors: [["mat-tab-header"]], 1182 contentQueries: function MatTabHeader_ContentQueries(rf, ctx, dirIndex) { 1183 if (rf & 1) { 1184 \u0275\u0275contentQuery(dirIndex, MatTabLabelWrapper, 4); 1185 } 1186 if (rf & 2) { 1187 let _t; 1188 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._items = _t); 1189 } 1190 }, 1191 viewQuery: function MatTabHeader_Query(rf, ctx) { 1192 if (rf & 1) { 1193 \u0275\u0275viewQuery(_c1, 7); 1194 \u0275\u0275viewQuery(_c2, 7); 1195 \u0275\u0275viewQuery(_c3, 7); 1196 \u0275\u0275viewQuery(_c4, 5); 1197 \u0275\u0275viewQuery(_c5, 5); 1198 } 1199 if (rf & 2) { 1200 let _t; 1201 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabListContainer = _t.first); 1202 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabList = _t.first); 1203 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabListInner = _t.first); 1204 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._nextPaginator = _t.first); 1205 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._previousPaginator = _t.first); 1206 } 1207 }, 1208 hostAttrs: [1, "mat-mdc-tab-header"], 1209 hostVars: 4, 1210 hostBindings: function MatTabHeader_HostBindings(rf, ctx) { 1211 if (rf & 2) { 1212 \u0275\u0275classProp("mat-mdc-tab-header-pagination-controls-enabled", ctx._showPaginationControls)("mat-mdc-tab-header-rtl", ctx._getLayoutDirection() == "rtl"); 1213 } 1214 }, 1215 inputs: { 1216 ariaLabel: [0, "aria-label", "ariaLabel"], 1217 ariaLabelledby: [0, "aria-labelledby", "ariaLabelledby"], 1218 disableRipple: [2, "disableRipple", "disableRipple", booleanAttribute] 1219 }, 1220 standalone: true, 1221 features: [\u0275\u0275InputTransformsFeature, \u0275\u0275InheritDefinitionFeature, \u0275\u0275StandaloneFeature], 1222 ngContentSelectors: _c0, 1223 decls: 13, 1224 vars: 10, 1225 consts: [["previousPaginator", ""], ["tabListContainer", ""], ["tabList", ""], ["tabListInner", ""], ["nextPaginator", ""], ["mat-ripple", "", 1, "mat-mdc-tab-header-pagination", "mat-mdc-tab-header-pagination-before", 3, "click", "mousedown", "touchend", "matRippleDisabled"], [1, "mat-mdc-tab-header-pagination-chevron"], [1, "mat-mdc-tab-label-container", 3, "keydown"], ["role", "tablist", 1, "mat-mdc-tab-list", 3, "cdkObserveContent"], [1, "mat-mdc-tab-labels"], ["mat-ripple", "", 1, "mat-mdc-tab-header-pagination", "mat-mdc-tab-header-pagination-after", 3, "mousedown", "click", "touchend", "matRippleDisabled"]], 1226 template: function MatTabHeader_Template(rf, ctx) { 1227 if (rf & 1) { 1228 const _r1 = \u0275\u0275getCurrentView(); 1229 \u0275\u0275projectionDef(); 1230 \u0275\u0275elementStart(0, "div", 5, 0); 1231 \u0275\u0275listener("click", function MatTabHeader_Template_div_click_0_listener() { 1232 \u0275\u0275restoreView(_r1);
1233 return \u0275\u0275resetView(ctx._handlePaginatorClick("before")); 1234 })("mousedown", function MatTabHeader_Template_div_mousedown_0_listener($event) { 1235 \u0275\u0275restoreView(_r1); 1236 return \u0275\u0275resetView(ctx._handlePaginatorPress("before", $event)); 1237 })("touchend", function MatTabHeader_Template_div_touchend_0_listener() { 1238 \u0275\u0275restoreView(_r1); 1239 return \u0275\u0275resetView(ctx._stopInterval()); 1240 }); 1241 \u0275\u0275element(2, "div", 6); 1242 \u0275\u0275elementEnd(); 1243 \u0275\u0275elementStart(3, "div", 7, 1); 1244 \u0275\u0275listener("keydown", function MatTabHeader_Template_div_keydown_3_listener($event) { 1245 \u0275\u0275restoreView(_r1); 1246 return \u0275\u0275resetView(ctx._handleKeydown($event)); 1247 }); 1248 \u0275\u0275elementStart(5, "div", 8, 2); 1249 \u0275\u0275listener("cdkObserveContent", function MatTabHeader_Template_div_cdkObserveContent_5_listener() { 1250 \u0275\u0275restoreView(_r1); 1251 return \u0275\u0275resetView(ctx._onContentChanges()); 1252 }); 1253 \u0275\u0275elementStart(7, "div", 9, 3); 1254 \u0275\u0275projection(9); 1255 \u0275\u0275elementEnd()()(); 1256 \u0275\u0275elementStart(10, "div", 10, 4); 1257 \u0275\u0275listener("mousedown", function MatTabHeader_Template_div_mousedown_10_listener($event) { 1258 \u0275\u0275restoreView(_r1); 1259 return \u0275\u0275resetView(ctx._handlePaginatorPress("after", $event)); 1260 })("click", function MatTabHeader_Template_div_click_10_listener() { 1261 \u0275\u0275restoreView(_r1); 1262 return \u0275\u0275resetView(ctx._handlePaginatorClick("after")); 1263 })("touchend", function MatTabHeader_Template_div_touchend_10_listener() { 1264 \u0275\u0275restoreView(_r1); 1265 return \u0275\u0275resetView(ctx._stopInterval()); 1266 }); 1267 \u0275\u0275element(12, "div", 6); 1268 \u0275\u0275elementEnd(); 1269 } 1270 if (rf & 2) { 1271 \u0275\u0275classProp("mat-mdc-tab-header-pagination-disabled", ctx._disableScrollBefore); 1272 \u0275\u0275property("matRippleDisabled", ctx._disableScrollBefore || ctx.disableRipple); 1273 \u0275\u0275advance(3); 1274 \u0275\u0275classProp("_mat-animation-noopable", ctx._animationMode === "NoopAnimations"); 1275 \u0275\u0275advance(2); 1276 \u0275\u0275attribute("aria-label", ctx.ariaLabel || null)("aria-labelledby", ctx.ariaLabelledby || null); 1277 \u0275\u0275advance(5); 1278 \u0275\u0275classProp("mat-mdc-tab-header-pagination-disabled", ctx._disableScrollAfter); 1279 \u0275\u0275property("matRippleDisabled", ctx._disableScrollAfter || ctx.disableRipple); 1280 } 1281 }, 1282 dependencies: [MatRipple, CdkObserveContent], 1283 styles: [".mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-header-pagination-icon-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-header-divider-height);border-bottom-color:var(--mat-tab-header-divider-color, var(--mat-app-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-header-divider-height);border-top-color:var(--mat-tab-header-divider-color, var(--mat-app-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mdc-secondary-navigation-tab-container-height)}.mat-mdc-tab::before{margin:5px}.cdk-high-contrast-active .mat-mdc-tab[aria-disabled=true]{color:GrayText}"], 1284 encapsulation: 2 1285 }); 1286 } 1287}; 1288(() => { 1289 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabHeader, [{ 1290 type: Component, 1291 args: [{ 1292 selector: "mat-tab-header", 1293 encapsulation: ViewEncapsulation$1.None, 1294 changeDetection: ChangeDetectionStrategy.Default, 1295 host: { 1296 "class": "mat-mdc-tab-header", 1297 "[class.mat-mdc-tab-header-pagination-controls-enabled]": "_showPaginationControls", 1298 "[class.mat-mdc-tab-header-rtl]": "_getLayoutDirection() == 'rtl'" 1299 }, 1300 standalone: true, 1301 imports: [MatRipple, CdkObserveContent], 1302 template: `<!-- 1303 Note that this intentionally uses a \`div\` instead of a \`button\`, because it's not part of
1304 the regular tabs flow and is only here to support mouse users. It should also not be focusable. 1305--> 1306<div class="mat-mdc-tab-header-pagination mat-mdc-tab-header-pagination-before" 1307 #previousPaginator 1308 mat-ripple 1309 [matRippleDisabled]="_disableScrollBefore || disableRipple" 1310 [class.mat-mdc-tab-header-pagination-disabled]="_disableScrollBefore" 1311 (click)="_handlePaginatorClick('before')" 1312 (mousedown)="_handlePaginatorPress('before', $event)" 1313 (touchend)="_stopInterval()"> 1314 <div class="mat-mdc-tab-header-pagination-chevron"></div> 1315</div> 1316 1317<div 1318 class="mat-mdc-tab-label-container" 1319 #tabListContainer 1320 (keydown)="_handleKeydown($event)" 1321 [class._mat-animation-noopable]="_animationMode === 'NoopAnimations'"> 1322 <div 1323 #tabList 1324 class="mat-mdc-tab-list" 1325 role="tablist" 1326 [attr.aria-label]="ariaLabel || null" 1327 [attr.aria-labelledby]="ariaLabelledby || null" 1328 (cdkObserveContent)="_onContentChanges()"> 1329 <div class="mat-mdc-tab-labels" #tabListInner> 1330 <ng-content></ng-content> 1331 </div> 1332 </div> 1333</div> 1334 1335<div class="mat-mdc-tab-header-pagination mat-mdc-tab-header-pagination-after" 1336 #nextPaginator 1337 mat-ripple 1338 [matRippleDisabled]="_disableScrollAfter || disableRipple" 1339 [class.mat-mdc-tab-header-pagination-disabled]="_disableScrollAfter" 1340 (mousedown)="_handlePaginatorPress('after', $event)" 1341 (click)="_handlePaginatorClick('after')" 1342 (touchend)="_stopInterval()"> 1343 <div class="mat-mdc-tab-header-pagination-chevron"></div> 1344</div> 1345`, 1346 styles: [".mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-header-pagination-icon-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-header-divider-height);border-bottom-color:var(--mat-tab-header-divider-color, var(--mat-app-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-header-divider-height);border-top-color:var(--mat-tab-header-divider-color, var(--mat-app-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mdc-secondary-navigation-tab-container-height)}.mat-mdc-tab::before{margin:5px}.cdk-high-contrast-active .mat-mdc-tab[aria-disabled=true]{color:GrayText}"] 1347 }] 1348 }], () => [{ 1349 type: ElementRef 1350 }, { 1351 type: ChangeDetectorRef 1352 }, { 1353 type: ViewportRuler 1354 }, { 1355 type: Directionality, 1356 decorators: [{ 1357 type: Optional 1358 }] 1359 }, { 1360 type: NgZone 1361 }, { 1362 type: Platform 1363 }, { 1364 type: void 0, 1365 decorators: [{ 1366 type: Optional 1367 }, {
1368 type: Inject, 1369 args: [ANIMATION_MODULE_TYPE] 1370 }] 1371 }], { 1372 _items: [{ 1373 type: ContentChildren, 1374 args: [MatTabLabelWrapper, { 1375 descendants: false 1376 }] 1377 }], 1378 _tabListContainer: [{ 1379 type: ViewChild, 1380 args: ["tabListContainer", { 1381 static: true 1382 }] 1383 }], 1384 _tabList: [{ 1385 type: ViewChild, 1386 args: ["tabList", { 1387 static: true 1388 }] 1389 }], 1390 _tabListInner: [{ 1391 type: ViewChild, 1392 args: ["tabListInner", { 1393 static: true 1394 }] 1395 }], 1396 _nextPaginator: [{ 1397 type: ViewChild, 1398 args: ["nextPaginator"] 1399 }], 1400 _previousPaginator: [{ 1401 type: ViewChild, 1402 args: ["previousPaginator"] 1403 }], 1404 ariaLabel: [{ 1405 type: Input, 1406 args: ["aria-label"] 1407 }], 1408 ariaLabelledby: [{ 1409 type: Input, 1410 args: ["aria-labelledby"] 1411 }], 1412 disableRipple: [{ 1413 type: Input, 1414 args: [{ 1415 transform: booleanAttribute 1416 }] 1417 }] 1418 }); 1419})(); 1420var MAT_TABS_CONFIG = new InjectionToken("MAT_TABS_CONFIG"); 1421var matTabsAnimations = { 1422 /** Animation translates a tab along the X axis. */ 1423 translateTab: trigger("translateTab", [ 1424 // Transitions to `none` instead of 0, because some browsers might blur the content. 1425 state("center, void, left-origin-center, right-origin-center", style({ 1426 transform: "none", 1427 visibility: "visible" 1428 })), 1429 // If the tab is either on the left or right, we additionally add a `min-height` of 1px 1430 // in order to ensure that the element has a height before its state changes. This is 1431 // necessary because Chrome does seem to skip the transition in RTL mode if the element does 1432 // not have a static height and is not rendered. See related issue: #9465 1433 state("left", style({ 1434 transform: "translate3d(-100%, 0, 0)", 1435 minHeight: "1px", 1436 // Normally this is redundant since we detach the content from the DOM, but if the user 1437 // opted into keeping the content in the DOM, we have to hide it so it isn't focusable. 1438 visibility: "hidden" 1439 })), 1440 state("right", style({ 1441 transform: "translate3d(100%, 0, 0)", 1442 minHeight: "1px", 1443 visibility: "hidden" 1444 })), 1445 transition("* => left, * => right, left => center, right => center", animate("{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)")), 1446 transition("void => left-origin-center", [style({ 1447 transform: "translate3d(-100%, 0, 0)", 1448 visibility: "hidden" 1449 }), animate("{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)")]), 1450 transition("void => right-origin-center", [style({ 1451 transform: "translate3d(100%, 0, 0)", 1452 visibility: "hidden" 1453 }), animate("{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)")]) 1454 ]) 1455}; 1456var MatTabBodyPortal = class _MatTabBodyPortal extends CdkPortalOutlet { 1457 constructor(componentFactoryResolver, viewContainerRef, _host, _document) { 1458 super(componentFactoryResolver, viewContainerRef, _document); 1459 this._host = _host; 1460 this._centeringSub = Subscription.EMPTY; 1461 this._leavingSub = Subscription.EMPTY; 1462 } 1463 /** Set initial visibility or set up subscription for changing visibility. */ 1464 ngOnInit() { 1465 super.ngOnInit(); 1466 this._centeringSub = this._host._beforeCentering.pipe(startWith(this._host._isCenterPosition(this._host._position))).subscribe((isCentering) => { 1467 if (this._host._content && isCentering && !this.hasAttached()) { 1468 this.attach(this._host._content); 1469 } 1470 }); 1471 this._leavingSub = this._host._afterLeavingCenter.subscribe(() => { 1472 if (!this._host.preserveContent) { 1473 this.detach(); 1474 } 1475 }); 1476 } 1477 /** Clean up centering subscription. */ 1478 ngOnDestroy() { 1479 super.ngOnDestroy(); 1480 this._centeringSub.unsubscribe(); 1481 this._leavingSub.unsubscribe(); 1482 } 1483 static { 1484 this.\u0275fac = function MatTabBodyPortal_Factory(__ngFactoryType__) { 1485 return new (__ngFactoryType__ || _MatTabBodyPortal)(\u0275\u0275directiveInject(ComponentFactoryResolver$1), \u0275\u0275directiveInject(ViewContainerRef), \u0275\u0275directiveInject(forwardRef(() => MatTabBody)), \u0275\u0275directiveInject(DOCUMENT)); 1486 }; 1487 } 1488 static { 1489 this.\u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({ 1490 type: _MatTabBodyPortal, 1491 selectors: [["", "matTabBodyHost", ""]], 1492 standalone: true, 1493 features: [\u0275\u0275InheritDefinitionFeature] 1494 }); 1495 } 1496}; 1497(() => { 1498 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabBodyPortal, [{ 1499 type: Directive, 1500 args: [{ 1501 selector: "[matTabBodyHost]", 1502 standalone: true 1503 }] 1504 }], () => [{ 1505 type: ComponentFactoryResolver$1 1506 }, { 1507 type: ViewContainerRef 1508 }, { 1509 type: MatTabBody, 1510 decorators: [{ 1511 type: Inject, 1512 args: [forwardRef(() => MatTabBody)] 1513 }] 1514 }, { 1515 type: void 0, 1516 decorators: [{ 1517 type: Inject, 1518 args: [DOCUMENT] 1519 }] 1520 }], null); 1521})(); 1522var MatTabBody = class _MatTabBody { 1523 /** The shifted index position of the tab body, where zero represents the active center tab. */ 1524 set position(position) { 1525 this._positionIndex = position; 1526 this._computePositionAnimationState(); 1527 } 1528 constructor(_elementRef, _dir, changeDetectorRef) { 1529 this._elementRef = _elementRef; 1530 this._dir = _dir; 1531 this._dirChangeSubscription = Subscription.EMPTY; 1532 this._translateTabComplete = new Subject(); 1533 this._onCentering = new EventEmitter(); 1534 this._beforeCentering = new EventEmitter(); 1535 this._afterLeavingCenter = new EventEmitter(); 1536 this._onCentered = new EventEmitter(true); 1537 this.animationDuration = "500ms"; 1538 this.preserveContent = false;
1539 if (_dir) { 1540 this._dirChangeSubscription = _dir.change.subscribe((dir) => { 1541 this._computePositionAnimationState(dir); 1542 changeDetectorRef.markForCheck(); 1543 }); 1544 } 1545 this._translateTabComplete.subscribe((event) => { 1546 if (this._isCenterPosition(event.toState) && this._isCenterPosition(this._position)) { 1547 this._onCentered.emit(); 1548 } 1549 if (this._isCenterPosition(event.fromState) && !this._isCenterPosition(this._position)) { 1550 this._afterLeavingCenter.emit(); 1551 } 1552 }); 1553 } 1554 /** 1555 * After initialized, check if the content is centered and has an origin. If so, set the 1556 * special position states that transition the tab from the left or right before centering. 1557 */ 1558 ngOnInit() { 1559 if (this._position == "center" && this.origin != null) { 1560 this._position = this._computePositionFromOrigin(this.origin); 1561 } 1562 } 1563 ngOnDestroy() { 1564 this._dirChangeSubscription.unsubscribe(); 1565 this._translateTabComplete.complete(); 1566 } 1567 _onTranslateTabStarted(event) { 1568 const isCentering = this._isCenterPosition(event.toState); 1569 this._beforeCentering.emit(isCentering); 1570 if (isCentering) { 1571 this._onCentering.emit(this._elementRef.nativeElement.clientHeight); 1572 } 1573 } 1574 /** The text direction of the containing app. */ 1575 _getLayoutDirection() { 1576 return this._dir && this._dir.value === "rtl" ? "rtl" : "ltr"; 1577 } 1578 /** Whether the provided position state is considered center, regardless of origin. */ 1579 _isCenterPosition(position) { 1580 return position == "center" || position == "left-origin-center" || position == "right-origin-center"; 1581 } 1582 /** Computes the position state that will be used for the tab-body animation trigger. */ 1583 _computePositionAnimationState(dir = this._getLayoutDirection()) { 1584 if (this._positionIndex < 0) { 1585 this._position = dir == "ltr" ? "left" : "right"; 1586 } else if (this._positionIndex > 0) { 1587 this._position = dir == "ltr" ? "right" : "left"; 1588 } else { 1589 this._position = "center"; 1590 } 1591 } 1592 /** 1593 * Computes the position state based on the specified origin position. This is used if the 1594 * tab is becoming visible immediately after creation. 1595 */ 1596 _computePositionFromOrigin(origin) { 1597 const dir = this._getLayoutDirection(); 1598 if (dir == "ltr" && origin <= 0 || dir == "rtl" && origin > 0) { 1599 return "left-origin-center"; 1600 } 1601 return "right-origin-center"; 1602 } 1603 static { 1604 this.\u0275fac = function MatTabBody_Factory(__ngFactoryType__) { 1605 return new (__ngFactoryType__ || _MatTabBody)(\u0275\u0275directiveInject(ElementRef), \u0275\u0275directiveInject(Directionality, 8), \u0275\u0275directiveInject(ChangeDetectorRef)); 1606 }; 1607 } 1608 static { 1609 this.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ 1610 type: _MatTabBody, 1611 selectors: [["mat-tab-body"]], 1612 viewQuery: function MatTabBody_Query(rf, ctx) { 1613 if (rf & 1) { 1614 \u0275\u0275viewQuery(CdkPortalOutlet, 5); 1615 } 1616 if (rf & 2) { 1617 let _t; 1618 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._portalHost = _t.first); 1619 } 1620 }, 1621 hostAttrs: [1, "mat-mdc-tab-body"], 1622 inputs: { 1623 _content: [0, "content", "_content"], 1624 origin: "origin", 1625 animationDuration: "animationDuration", 1626 preserveContent: "preserveContent", 1627 position: "position" 1628 }, 1629 outputs: { 1630 _onCentering: "_onCentering", 1631 _beforeCentering: "_beforeCentering", 1632 _afterLeavingCenter: "_afterLeavingCenter", 1633 _onCentered: "_onCentered" 1634 }, 1635 standalone: true, 1636 features: [\u0275\u0275StandaloneFeature], 1637 decls: 3, 1638 vars: 6, 1639 consts: [["content", ""], ["cdkScrollable", "", 1, "mat-mdc-tab-body-content"], ["matTabBodyHost", ""]], 1640 template: function MatTabBody_Template(rf, ctx) { 1641 if (rf & 1) { 1642 const _r1 = \u0275\u0275getCurrentView(); 1643 \u0275\u0275elementStart(0, "div", 1, 0); 1644 \u0275\u0275listener("@translateTab.start", function MatTabBody_Template_div_animation_translateTab_start_0_listener($event) { 1645 \u0275\u0275restoreView(_r1);
1646 return \u0275\u0275resetView(ctx._onTranslateTabStarted($event)); 1647 })("@translateTab.done", function MatTabBody_Template_div_animation_translateTab_done_0_listener($event) { 1648 \u0275\u0275restoreView(_r1); 1649 return \u0275\u0275resetView(ctx._translateTabComplete.next($event)); 1650 }); 1651 \u0275\u0275template(2, MatTabBody_ng_template_2_Template, 0, 0, "ng-template", 2); 1652 \u0275\u0275elementEnd(); 1653 } 1654 if (rf & 2) { 1655 \u0275\u0275property("@translateTab", \u0275\u0275pureFunction2(3, _c7, ctx._position, \u0275\u0275pureFunction1(1, _c6, ctx.animationDuration))); 1656 } 1657 }, 1658 dependencies: [MatTabBodyPortal, CdkScrollable], 1659 styles: ['.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-mdc-tab-body-content[style*="visibility: hidden"]{display:none}'], 1660 encapsulation: 2, 1661 data: { 1662 animation: [matTabsAnimations.translateTab] 1663 } 1664 }); 1665 } 1666}; 1667(() => { 1668 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabBody, [{ 1669 type: Component, 1670 args: [{ 1671 selector: "mat-tab-body", 1672 encapsulation: ViewEncapsulation$1.None, 1673 changeDetection: ChangeDetectionStrategy.Default, 1674 animations: [matTabsAnimations.translateTab], 1675 host: { 1676 "class": "mat-mdc-tab-body" 1677 }, 1678 standalone: true, 1679 imports: [MatTabBodyPortal, CdkScrollable], 1680 template: '<div class="mat-mdc-tab-body-content" #content\n [@translateTab]="{\n value: _position,\n params: {animationDuration: animationDuration}\n }"\n (@translateTab.start)="_onTranslateTabStarted($event)"\n (@translateTab.done)="_translateTabComplete.next($event)"\n cdkScrollable>\n <ng-template matTabBodyHost></ng-template>\n</div>\n', 1681 styles: ['.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-mdc-tab-body-content[style*="visibility: hidden"]{display:none}'] 1682 }] 1683 }], () => [{ 1684 type: ElementRef 1685 }, { 1686 type: Directionality, 1687 decorators: [{ 1688 type: Optional 1689 }] 1690 }, { 1691 type: ChangeDetectorRef 1692 }], { 1693 _onCentering: [{ 1694 type: Output 1695 }], 1696 _beforeCentering: [{ 1697 type: Output 1698 }], 1699 _afterLeavingCenter: [{ 1700 type: Output 1701 }], 1702 _onCentered: [{ 1703 type: Output 1704 }], 1705 _portalHost: [{ 1706 type: ViewChild, 1707 args: [CdkPortalOutlet] 1708 }], 1709 _content: [{ 1710 type: Input, 1711 args: ["content"] 1712 }], 1713 origin: [{ 1714 type: Input 1715 }], 1716 animationDuration: [{ 1717 type: Input 1718 }], 1719 preserveContent: [{ 1720 type: Input 1721 }], 1722 position: [{ 1723 type: Input 1724 }] 1725 }); 1726})(); 1727var nextId = 0; 1728var ENABLE_BACKGROUND_INPUT = true; 1729var MatTabGroup = class _MatTabGroup { 1730 /** Whether the ink bar should fit its width to the size of the tab label content. */ 1731 get fitInkBarToContent() { 1732 return this._fitInkBarToContent; 1733 } 1734 set fitInkBarToContent(value) { 1735 this._fitInkBarToContent = value; 1736 this._changeDetectorRef.markForCheck(); 1737 } 1738 /** The index of the active tab. */ 1739 get selectedIndex() { 1740 return this._selectedIndex; 1741 } 1742 set selectedIndex(value) { 1743 this._indexToSelect = isNaN(value) ? null : value; 1744 } 1745 /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */ 1746 get animationDuration() { 1747 return this._animationDuration; 1748 } 1749 set animationDuration(value) { 1750 const stringValue = value + ""; 1751 this._animationDuration = /^\d+$/.test(stringValue) ? value + "ms" : stringValue; 1752 } 1753 /** 1754 * `tabindex` to be set on the inner element that wraps the tab content. Can be used for improved 1755 * accessibility when the tab does not have focusable elements or if it has scrollable content. 1756 * The `tabindex` will be removed automatically for inactive tabs. 1757 * Read more at https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-2/tabs.html 1758 */ 1759 get contentTabIndex() { 1760 return this._contentTabIndex; 1761 } 1762 set contentTabIndex(value) { 1763 this._contentTabIndex = isNaN(value) ? null : value; 1764 } 1765 /** 1766 * Theme color of the background of the tab group. This API is supported in M2 themes only, it 1767 * has no effect in M3 themes. 1768 * 1769 * For information on applying color variants in M3, see 1770 * https://material.angular.io/guide/theming#using-component-color-variants. 1771 * 1772 * @deprecated The background color should be customized through Sass theming APIs. 1773 * @breaking-change 20.0.0 Remove this input 1774 */ 1775 get backgroundColor() { 1776 return this._backgroundColor; 1777 } 1778 set backgroundColor(value) { 1779 if (!ENABLE_BACKGROUND_INPUT) { 1780 throw new Error(`mat-tab-group background color must be set through the Sass theming API`); 1781 } 1782 const classList = this._elementRef.nativeElement.classList; 1783 classList.remove("mat-tabs-with-background", `mat-background-${this.backgroundColor}`); 1784 if (value) { 1785 classList.add("mat-tabs-with-background", `mat-background-${value}`); 1786 } 1787 this._backgroundColor = value; 1788 } 1789 constructor(_elementRef, _changeDetectorRef, defaultConfig, _animationMode) { 1790 this._elementRef = _elementRef; 1791 this._changeDetectorRef = _changeDetectorRef; 1792 this._animationMode = _animationMode; 1793 this._tabs = new QueryList(); 1794 this._indexToSelect = 0; 1795 this._lastFocusedTabIndex = null; 1796 this._tabBodyWrapperHeight = 0; 1797 this._tabsSubscription = Subscription.EMPTY; 1798 this._tabLabelSubscription = Subscription.EMPTY; 1799 this._fitInkBarToContent = false;
1800 this.stretchTabs = true; 1801 this.dynamicHeight = false; 1802 this._selectedIndex = null; 1803 this.headerPosition = "above"; 1804 this.disablePagination = false; 1805 this.disableRipple = false; 1806 this.preserveContent = false; 1807 this.selectedIndexChange = new EventEmitter(); 1808 this.focusChange = new EventEmitter(); 1809 this.animationDone = new EventEmitter(); 1810 this.selectedTabChange = new EventEmitter(true); 1811 this._isServer = !inject(Platform).isBrowser; 1812 this._groupId = nextId++; 1813 this.animationDuration = defaultConfig && defaultConfig.animationDuration ? defaultConfig.animationDuration : "500ms"; 1814 this.disablePagination = defaultConfig && defaultConfig.disablePagination != null ? defaultConfig.disablePagination : false; 1815 this.dynamicHeight = defaultConfig && defaultConfig.dynamicHeight != null ? defaultConfig.dynamicHeight : false; 1816 if (defaultConfig?.contentTabIndex != null) { 1817 this.contentTabIndex = defaultConfig.contentTabIndex; 1818 } 1819 this.preserveContent = !!defaultConfig?.preserveContent; 1820 this.fitInkBarToContent = defaultConfig && defaultConfig.fitInkBarToContent != null ? defaultConfig.fitInkBarToContent : false; 1821 this.stretchTabs = defaultConfig && defaultConfig.stretchTabs != null ? defaultConfig.stretchTabs : true; 1822 } 1823 /** 1824 * After the content is checked, this component knows what tabs have been defined 1825 * and what the selected index should be. This is where we can know exactly what position 1826 * each tab should be in according to the new selected index, and additionally we know how 1827 * a new selected tab should transition in (from the left or right). 1828 */ 1829 ngAfterContentChecked() { 1830 const indexToSelect = this._indexToSelect = this._clampTabIndex(this._indexToSelect); 1831 if (this._selectedIndex != indexToSelect) { 1832 const isFirstRun = this._selectedIndex == null; 1833 if (!isFirstRun) { 1834 this.selectedTabChange.emit(this._createChangeEvent(indexToSelect)); 1835 const wrapper = this._tabBodyWrapper.nativeElement; 1836 wrapper.style.minHeight = wrapper.clientHeight + "px"; 1837 } 1838 Promise.resolve().then(() => {
1839 this._tabs.forEach((tab, index) => tab.isActive = index === indexToSelect); 1840 if (!isFirstRun) { 1841 this.selectedIndexChange.emit(indexToSelect); 1842 this._tabBodyWrapper.nativeElement.style.minHeight = ""; 1843 } 1844 }); 1845 } 1846 this._tabs.forEach((tab, index) => { 1847 tab.position = index - indexToSelect; 1848 if (this._selectedIndex != null && tab.position == 0 && !tab.origin) { 1849 tab.origin = indexToSelect - this._selectedIndex; 1850 } 1851 }); 1852 if (this._selectedIndex !== indexToSelect) { 1853 this._selectedIndex = indexToSelect; 1854 this._lastFocusedTabIndex = null; 1855 this._changeDetectorRef.markForCheck(); 1856 } 1857 } 1858 ngAfterContentInit() { 1859 this._subscribeToAllTabChanges(); 1860 this._subscribeToTabLabels(); 1861 this._tabsSubscription = this._tabs.changes.subscribe(() => { 1862 const indexToSelect = this._clampTabIndex(this._indexToSelect); 1863 if (indexToSelect === this._selectedIndex) { 1864 const tabs = this._tabs.toArray(); 1865 let selectedTab; 1866 for (let i = 0; i < tabs.length; i++) { 1867 if (tabs[i].isActive) { 1868 this._indexToSelect = this._selectedIndex = i; 1869 this._lastFocusedTabIndex = null; 1870 selectedTab = tabs[i]; 1871 break; 1872 } 1873 } 1874 if (!selectedTab && tabs[indexToSelect]) { 1875 Promise.resolve().then(() => { 1876 tabs[indexToSelect].isActive = true; 1877 this.selectedTabChange.emit(this._createChangeEvent(indexToSelect)); 1878 }); 1879 } 1880 } 1881 this._changeDetectorRef.markForCheck(); 1882 }); 1883 } 1884 /** Listens to changes in all of the tabs. */ 1885 _subscribeToAllTabChanges() { 1886 this._allTabs.changes.pipe(startWith(this._allTabs)).subscribe((tabs) => { 1887 this._tabs.reset(tabs.filter((tab) => { 1888 return tab._closestTabGroup === this || !tab._closestTabGroup; 1889 })); 1890 this._tabs.notifyOnChanges(); 1891 }); 1892 } 1893 ngOnDestroy() { 1894 this._tabs.destroy(); 1895 this._tabsSubscription.unsubscribe(); 1896 this._tabLabelSubscription.unsubscribe(); 1897 } 1898 /** Re-aligns the ink bar to the selected tab element. */ 1899 realignInkBar() { 1900 if (this._tabHeader) { 1901 this._tabHeader._alignInkBarToSelectedTab(); 1902 } 1903 } 1904 /** 1905 * Recalculates the tab group's pagination dimensions. 1906 * 1907 * WARNING: Calling this method can be very costly in terms of performance. It should be called 1908 * as infrequently as possible from outside of the Tabs component as it causes a reflow of the 1909 * page. 1910 */ 1911 updatePagination() { 1912 if (this._tabHeader) { 1913 this._tabHeader.updatePagination(); 1914 } 1915 } 1916 /** 1917 * Sets focus to a particular tab. 1918 * @param index Index of the tab to be focused. 1919 */ 1920 focusTab(index) { 1921 const header = this._tabHeader; 1922 if (header) { 1923 header.focusIndex = index; 1924 } 1925 } 1926 _focusChanged(index) { 1927 this._lastFocusedTabIndex = index; 1928 this.focusChange.emit(this._createChangeEvent(index)); 1929 } 1930 _createChangeEvent(index) { 1931 const event = new MatTabChangeEvent(); 1932 event.index = index; 1933 if (this._tabs && this._tabs.length) { 1934 event.tab = this._tabs.toArray()[index]; 1935 } 1936 return event; 1937 } 1938 /** 1939 * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is 1940 * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the 1941 * binding to be updated, we need to subscribe to changes in it and trigger change detection 1942 * manually. 1943 */ 1944 _subscribeToTabLabels() { 1945 if (this._tabLabelSubscription) { 1946 this._tabLabelSubscription.unsubscribe(); 1947 } 1948 this._tabLabelSubscription = merge(...this._tabs.map((tab) => tab._stateChanges)).subscribe(() => this._changeDetectorRef.markForCheck()); 1949 } 1950 /** Clamps the given index to the bounds of 0 and the tabs length. */ 1951 _clampTabIndex(index) { 1952 return Math.min(this._tabs.length - 1, Math.max(index || 0, 0)); 1953 } 1954 /** Returns a unique id for each tab label element */ 1955 _getTabLabelId(i) { 1956 return `mat-tab-label-${this._groupId}-${i}`; 1957 } 1958 /** Returns a unique id for each tab content element */ 1959 _getTabContentId(i) { 1960 return `mat-tab-content-${this._groupId}-${i}`; 1961 } 1962 /** 1963 * Sets the height of the body wrapper to the height of the activating tab if dynamic 1964 * height property is true. 1965 */ 1966 _setTabBodyWrapperHeight(tabHeight) { 1967 if (!this.dynamicHeight || !this._tabBodyWrapperHeight) { 1968 return; 1969 } 1970 const wrapper = this._tabBodyWrapper.nativeElement; 1971 wrapper.style.height = this._tabBodyWrapperHeight + "px"; 1972 if (this._tabBodyWrapper.nativeElement.offsetHeight) { 1973 wrapper.style.height = tabHeight + "px"; 1974 } 1975 } 1976 /** Removes the height of the tab body wrapper. */ 1977 _removeTabBodyWrapperHeight() { 1978 const wrapper = this._tabBodyWrapper.nativeElement; 1979 this._tabBodyWrapperHeight = wrapper.clientHeight; 1980 wrapper.style.height = ""; 1981 this.animationDone.emit(); 1982 } 1983 /** Handle click events, setting new selected index if appropriate. */ 1984 _handleClick(tab, tabHeader, index) {
1985 tabHeader.focusIndex = index; 1986 if (!tab.disabled) { 1987 this.selectedIndex = index; 1988 } 1989 } 1990 /** Retrieves the tabindex for the tab. */ 1991 _getTabIndex(index) { 1992 const targetIndex = this._lastFocusedTabIndex ?? this.selectedIndex; 1993 return index === targetIndex ? 0 : -1; 1994 } 1995 /** Callback for when the focused state of a tab has changed. */ 1996 _tabFocusChanged(focusOrigin, index) { 1997 if (focusOrigin && focusOrigin !== "mouse" && focusOrigin !== "touch") { 1998 this._tabHeader.focusIndex = index; 1999 } 2000 } 2001 static { 2002 this.\u0275fac = function MatTabGroup_Factory(__ngFactoryType__) { 2003 return new (__ngFactoryType__ || _MatTabGroup)(\u0275\u0275directiveInject(ElementRef), \u0275\u0275directiveInject(ChangeDetectorRef), \u0275\u0275directiveInject(MAT_TABS_CONFIG, 8), \u0275\u0275directiveInject(ANIMATION_MODULE_TYPE, 8)); 2004 }; 2005 } 2006 static { 2007 this.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ 2008 type: _MatTabGroup, 2009 selectors: [["mat-tab-group"]], 2010 contentQueries: function MatTabGroup_ContentQueries(rf, ctx, dirIndex) { 2011 if (rf & 1) { 2012 \u0275\u0275contentQuery(dirIndex, MatTab, 5); 2013 } 2014 if (rf & 2) { 2015 let _t; 2016 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._allTabs = _t); 2017 } 2018 }, 2019 viewQuery: function MatTabGroup_Query(rf, ctx) { 2020 if (rf & 1) { 2021 \u0275\u0275viewQuery(_c8, 5); 2022 \u0275\u0275viewQuery(_c9, 5); 2023 } 2024 if (rf & 2) { 2025 let _t; 2026 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabBodyWrapper = _t.first); 2027 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabHeader = _t.first); 2028 } 2029 }, 2030 hostAttrs: [1, "mat-mdc-tab-group"], 2031 hostVars: 10, 2032 hostBindings: function MatTabGroup_HostBindings(rf, ctx) { 2033 if (rf & 2) { 2034 \u0275\u0275classMap("mat-" + (ctx.color || "primary")); 2035 \u0275\u0275styleProp("--mat-tab-animation-duration", ctx.animationDuration); 2036 \u0275\u0275classProp("mat-mdc-tab-group-dynamic-height", ctx.dynamicHeight)("mat-mdc-tab-group-inverted-header", ctx.headerPosition === "below")("mat-mdc-tab-group-stretch-tabs", ctx.stretchTabs); 2037 } 2038 }, 2039 inputs: { 2040 color: "color", 2041 fitInkBarToContent: [2, "fitInkBarToContent", "fitInkBarToContent", booleanAttribute], 2042 stretchTabs: [2, "mat-stretch-tabs", "stretchTabs", booleanAttribute], 2043 dynamicHeight: [2, "dynamicHeight", "dynamicHeight", booleanAttribute], 2044 selectedIndex: [2, "selectedIndex", "selectedIndex", numberAttribute], 2045 headerPosition: "headerPosition", 2046 animationDuration: "animationDuration", 2047 contentTabIndex: [2, "contentTabIndex", "contentTabIndex", numberAttribute], 2048 disablePagination: [2, "disablePagination", "disablePagination", booleanAttribute], 2049 disableRipple: [2, "disableRipple", "disableRipple", booleanAttribute], 2050 preserveContent: [2, "preserveContent", "preserveContent", booleanAttribute], 2051 backgroundColor: "backgroundColor", 2052 ariaLabel: [0, "aria-label", "ariaLabel"], 2053 ariaLabelledby: [0, "aria-labelledby", "ariaLabelledby"] 2054 }, 2055 outputs: { 2056 selectedIndexChange: "selectedIndexChange", 2057 focusChange: "focusChange", 2058 animationDone: "animationDone", 2059 selectedTabChange: "selectedTabChange" 2060 }, 2061 exportAs: ["matTabGroup"], 2062 standalone: true, 2063 features: [\u0275\u0275ProvidersFeature([{ 2064 provide: MAT_TAB_GROUP, 2065 useExisting: _MatTabGroup 2066 }]), \u0275\u0275InputTransformsFeature, \u0275\u0275StandaloneFeature], 2067 ngContentSelectors: _c0, 2068 decls: 9, 2069 vars: 8, 2070 consts: [["tabHeader", ""], ["tabBodyWrapper", ""], ["tabNode", ""], [3, "indexFocused", "selectFocusedIndex", "selectedIndex", "disableRipple", "disablePagination", "aria-label", "aria-labelledby"], ["role", "tab", "matTabLabelWrapper", "", "cdkMonitorElementFocus", "", 1, "mdc-tab", "mat-mdc-tab", "mat-mdc-focus-indicator", 3, "id", "mdc-tab--active", "class", "disabled", "fitInkBarToContent"], [1, "mat-mdc-tab-body-wrapper"], ["role", "tabpanel", 3, "id", "mat-mdc-tab-body-active", "class", "content", "position", "origin", "animationDuration", "preserveContent"], ["role", "tab", "matTabLabelWrapper", "", "cdkMonitorElementFocus", "", 1, "mdc-tab", "mat-mdc-tab", "mat-mdc-focus-indicator", 3, "click", "cdkFocusChange", "id", "disabled", "fitInkBarToContent"], [1, "mdc-tab__ripple"], ["mat-ripple", "", 1, "mat-mdc-tab-ripple", 3, "matRippleTrigger", "matRippleDisabled"], [1, "mdc-tab__content"], [1, "mdc-tab__text-label"], [3, "cdkPortalOutlet"], ["role", "tabpanel", 3, "_onCentered", "_onCentering", "id", "content", "position", "origin", "animationDuration", "preserveContent"]], 2071 template: function MatTabGroup_Template(rf, ctx) { 2072 if (rf & 1) { 2073 const _r1 = \u0275\u0275getCurrentView(); 2074 \u0275\u0275projectionDef(); 2075 \u0275\u0275elementStart(0, "mat-tab-header", 3, 0); 2076 \u0275\u0275listener("indexFocused", function MatTabGroup_Template_mat_tab_header_indexFocused_0_listener($event) { 2077 \u0275\u0275restoreView(_r1);
2078 return \u0275\u0275resetView(ctx._focusChanged($event)); 2079 })("selectFocusedIndex", function MatTabGroup_Template_mat_tab_header_selectFocusedIndex_0_listener($event) { 2080 \u0275\u0275restoreView(_r1); 2081 return \u0275\u0275resetView(ctx.selectedIndex = $event); 2082 }); 2083 \u0275\u0275repeaterCreate(2, MatTabGroup_For_3_Template, 8, 17, "div", 4, \u0275\u0275repeaterTrackByIdentity); 2084 \u0275\u0275elementEnd(); 2085 \u0275\u0275template(4, MatTabGroup_Conditional_4_Template, 1, 0); 2086 \u0275\u0275elementStart(5, "div", 5, 1); 2087 \u0275\u0275repeaterCreate(7, MatTabGroup_For_8_Template, 1, 13, "mat-tab-body", 6, \u0275\u0275repeaterTrackByIdentity); 2088 \u0275\u0275elementEnd(); 2089 } 2090 if (rf & 2) { 2091 \u0275\u0275property("selectedIndex", ctx.selectedIndex || 0)("disableRipple", ctx.disableRipple)("disablePagination", ctx.disablePagination)("aria-label", ctx.ariaLabel)("aria-labelledby", ctx.ariaLabelledby); 2092 \u0275\u0275advance(2); 2093 \u0275\u0275repeater(ctx._tabs); 2094 \u0275\u0275advance(2); 2095 \u0275\u0275conditional(ctx._isServer ? 4 : -1); 2096 \u0275\u0275advance(); 2097 \u0275\u0275classProp("_mat-animation-noopable", ctx._animationMode === "NoopAnimations"); 2098 \u0275\u0275advance(2); 2099 \u0275\u0275repeater(ctx._tabs); 2100 } 2101 }, 2102 dependencies: [MatTabHeader, MatTabLabelWrapper, CdkMonitorFocus, MatRipple, CdkPortalOutlet, MatTabBody], 2103 styles: ['.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}
2103.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mdc-secondary-navigation-tab-container-height);font-family:var(--mat-tab-header-label-text-font, var(--mat-app-title-small-font));font-size:var(--mat-tab-header-label-text-size, var(--mat-app-title-small-size));letter-spacing:var(--mat-tab-header-label-text-tracking, var(--mat-app-title-small-tracking));line-height:var(--mat-tab-header-label-text-line-height, var(--mat-app-title-small-line-height));font-weight:var(--mat-tab-header-label-text-weight, var(--mat-app-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mdc-tab-indicator-active-indicator-color, var(--mat-app-primary));border-top-width:var(--mdc-tab-indicator-active-indicator-height);border-radius:var(--mdc-tab-indicator-active-indicator-shape)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-header-inactive-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-header-inactive-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-header-active-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-header-active-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-header-active-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-hover-indicator-color, var(--mat-app-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-header-active-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-focus-indicator-color, var(--mat-app-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-header-disabled-ripple-color)}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-header-inactive-label-text-color, var(--mat-app-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}
2103.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-header-with-background-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-focus-indicator::before{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{al
2103ign-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}'], 2104 encapsulation: 2 2105 }); 2106 } 2107}; 2108(() => { 2109 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabGroup, [{ 2110 type: Component, 2111 args: [{ 2112 selector: "mat-tab-group", 2113 exportAs: "matTabGroup", 2114 encapsulation: ViewEncapsulation$1.None, 2115 changeDetection: ChangeDetectionStrategy.Default, 2116 providers: [{ 2117 provide: MAT_TAB_GROUP, 2118 useExisting: MatTabGroup 2119 }], 2120 host: { 2121 "class": "mat-mdc-tab-group", 2122 "[class]": '"mat-" + (color || "primary")', 2123 "[class.mat-mdc-tab-group-dynamic-height]": "dynamicHeight", 2124 "[class.mat-mdc-tab-group-inverted-header]": 'headerPosition === "below"', 2125 "[class.mat-mdc-tab-group-stretch-tabs]": "stretchTabs", 2126 "[style.--mat-tab-animation-duration]": "animationDuration" 2127 }, 2128 standalone: true, 2129 imports: [MatTabHeader, MatTabLabelWrapper, CdkMonitorFocus, MatRipple, CdkPortalOutlet, MatTabBody], 2130 template: '<mat-tab-header #tabHeader\n [selectedIndex]="selectedIndex || 0"\n [disableRipple]="disableRipple"\n [disablePagination]="disablePagination"\n [aria-label]="ariaLabel"\n [aria-labelledby]="ariaLabelledby"\n (indexFocused)="_focusChanged($event)"\n (selectFocusedIndex)="selectedIndex = $event">\n\n @for (tab of _tabs; track tab; let i = $index) {\n <div class="mdc-tab mat-mdc-tab mat-mdc-focus-indicator"\n #tabNode\n role="tab"\n matTabLabelWrapper\n cdkMonitorElementFocus\n [id]="_getTabLabelId(i)"\n [attr.tabIndex]="_getTabIndex(i)"\n [attr.aria-posinset]="i + 1"\n [attr.aria-setsize]="_tabs.length"\n [attr.aria-controls]="_getTabContentId(i)"\n [attr.aria-selected]="selectedIndex === i"\n [attr.aria-label]="tab.ariaLabel || null"\n [attr.aria-labelledby]="(!tab.ariaLabel && tab.ariaLabelledby) ? tab.ariaLabelledby : null"\n [class.mdc-tab--active]="selectedIndex === i"\n [class]="tab.labelClass"\n [disabled]="tab.disabled"\n [fitInkBarToContent]="fitInkBarToContent"\n (click)="_handleClick(tab, tabHeader, i)"\n (cdkFocusChange)="_tabFocusChanged($event, i)">
2130\n <span class="mdc-tab__ripple"></span>\n\n <!-- Needs to be a separate element, because we can\'t put\n `overflow: hidden` on tab due to the ink bar. -->\n <div\n class="mat-mdc-tab-ripple"\n mat-ripple\n [matRippleTrigger]="tabNode"\n [matRippleDisabled]="tab.disabled || disableRipple"></div>\n\n <span class="mdc-tab__content">\n <span class="mdc-tab__text-label">\n <!--\n If there is a label template, use it, otherwise fall back to the text label.\n Note that we don\'t have indentation around the text label, because it adds\n whitespace around the text which breaks some internal tests.\n -->\n @if (tab.templateLabel) {\n <ng-template [cdkPortalOutlet]="tab.templateLabel"></ng-template>\n } @else {{{tab.textLabel}}}\n </span>\n </span>\n </div>\n }\n</mat-tab-header>\n\n<!--\n We need to project the content somewhere to avoid hydration errors. Some observations:\n 1. This is only necessary on the server.\n 2. We get a hydration error if there aren\'t any nodes after the `ng-content`.\n 3. We get a hydration error if `ng-content` is wrapped in another element.\n-->\n@if (_isServer) {\n <ng-content/>\n}\n\n<div\n class="mat-mdc-tab-body-wrapper"\n [class._mat-animation-noopable]="_animationMode === \'NoopAnimations\'"\n #tabBodyWrapper>\n @for (tab of _tabs; track tab; let i = $index) {\n <mat-tab-body role="tabpanel"\n [id]="_getTabContentId(i)"\n [attr.tabindex]="(contentTabIndex != null && selectedIndex === i) ? contentTabIndex : null"\n [attr.aria-labelledby]="_getTabLabelId(i)"\n [attr.aria-hidden]="selectedIndex !== i"\n [class.mat-mdc-tab-body-active]="selectedIndex === i"\n [class]="tab.bodyClass"\n [content]="tab.content!"\n [position]="tab.position!"\n [origin]="tab.origin"\n [animationDuration]="animationDuration"\n [preserveContent]="preserveContent"\n (_onCentered)="_removeTabBodyWrapperHeight()"\n (_onCentering)="_setTabBodyWrapperHeight($event)">\n </mat-tab-body>\n }\n</div>\n', 2131 styles: ['.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}
2131.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mdc-secondary-navigation-tab-container-height);font-family:var(--mat-tab-header-label-text-font, var(--mat-app-title-small-font));font-size:var(--mat-tab-header-label-text-size, var(--mat-app-title-small-size));letter-spacing:var(--mat-tab-header-label-text-tracking, var(--mat-app-title-small-tracking));line-height:var(--mat-tab-header-label-text-line-height, var(--mat-app-title-small-line-height));font-weight:var(--mat-tab-header-label-text-weight, var(--mat-app-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mdc-tab-indicator-active-indicator-color, var(--mat-app-primary));border-top-width:var(--mdc-tab-indicator-active-indicator-height);border-radius:var(--mdc-tab-indicator-active-indicator-shape)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-header-inactive-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-header-inactive-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-header-active-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-header-active-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-header-active-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-hover-indicator-color, var(--mat-app-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-header-active-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-focus-indicator-color, var(--mat-app-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-header-disabled-ripple-color)}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-header-inactive-label-text-color, var(--mat-app-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}
2131.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-header-with-background-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-focus-indicator::before{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{al
2131ign-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}'] 2132 }] 2133 }], () => [{ 2134 type: ElementRef 2135 }, { 2136 type: ChangeDetectorRef 2137 }, { 2138 type: void 0, 2139 decorators: [{ 2140 type: Inject, 2141 args: [MAT_TABS_CONFIG] 2142 }, { 2143 type: Optional 2144 }] 2145 }, { 2146 type: void 0, 2147 decorators: [{ 2148 type: Optional 2149 }, { 2150 type: Inject, 2151 args: [ANIMATION_MODULE_TYPE] 2152 }] 2153 }], { 2154 _allTabs: [{ 2155 type: ContentChildren, 2156 args: [MatTab, { 2157 descendants: true 2158 }] 2159 }], 2160 _tabBodyWrapper: [{ 2161 type: ViewChild, 2162 args: ["tabBodyWrapper"] 2163 }], 2164 _tabHeader: [{ 2165 type: ViewChild, 2166 args: ["tabHeader"] 2167 }], 2168 color: [{ 2169 type: Input 2170 }], 2171 fitInkBarToContent: [{ 2172 type: Input, 2173 args: [{ 2174 transform: booleanAttribute 2175 }] 2176 }], 2177 stretchTabs: [{ 2178 type: Input, 2179 args: [{ 2180 alias: "mat-stretch-tabs", 2181 transform: booleanAttribute 2182 }] 2183 }], 2184 dynamicHeight: [{ 2185 type: Input, 2186 args: [{ 2187 transform: booleanAttribute 2188 }] 2189 }], 2190 selectedIndex: [{ 2191 type: Input, 2192 args: [{ 2193 transform: numberAttribute 2194 }] 2195 }], 2196 headerPosition: [{ 2197 type: Input 2198 }], 2199 animationDuration: [{ 2200 type: Input 2201 }], 2202 contentTabIndex: [{ 2203 type: Input, 2204 args: [{ 2205 transform: numberAttribute 2206 }] 2207 }], 2208 disablePagination: [{ 2209 type: Input, 2210 args: [{ 2211 transform: booleanAttribute 2212 }] 2213 }], 2214 disableRipple: [{ 2215 type: Input, 2216 args: [{ 2217 transform: booleanAttribute 2218 }] 2219 }], 2220 preserveContent: [{ 2221 type: Input, 2222 args: [{ 2223 transform: booleanAttribute 2224 }] 2225 }], 2226 backgroundColor: [{ 2227 type: Input 2228 }], 2229 ariaLabel: [{ 2230 type: Input, 2231 args: ["aria-label"] 2232 }], 2233 ariaLabelledby: [{ 2234 type: Input, 2235 args: ["aria-labelledby"] 2236 }], 2237 selectedIndexChange: [{ 2238 type: Output 2239 }], 2240 focusChange: [{ 2241 type: Output 2242 }], 2243 animationDone: [{ 2244 type: Output 2245 }], 2246 selectedTabChange: [{ 2247 type: Output 2248 }] 2249 }); 2250})(); 2251var MatTabChangeEvent = class { 2252}; 2253var nextUniqueId = 0; 2254var MatTabNav = class _MatTabNav extends MatPaginatedTabHeader { 2255 /** Whether the ink bar should fit its width to the size of the tab label content. */ 2256 get fitInkBarToContent() { 2257 return this._fitInkBarToContent.value; 2258 } 2259 set fitInkBarToContent(value) { 2260 this._fitInkBarToContent.next(value); 2261 this._changeDetectorRef.markForCheck(); 2262 } 2263 get animationDuration() { 2264 return this._animationDuration; 2265 } 2266 set animationDuration(value) { 2267 const stringValue = value + ""; 2268 this._animationDuration = /^\d+$/.test(stringValue) ? value + "ms" : stringValue; 2269 } 2270 /** 2271 * Theme color of the background of the tab nav. This API is supported in M2 themes only, it 2272 * has no effect in M3 themes. 2273 * 2274 * For information on applying color variants in M3, see 2275 * https://material.angular.io/guide/theming#using-component-color-variants. 2276 */ 2277 get backgroundColor() { 2278 return this._backgroundColor; 2279 } 2280 set backgroundColor(value) { 2281 const classList = this._elementRef.nativeElement.classList; 2282 classList.remove("mat-tabs-with-background", `mat-background-${this.backgroundColor}`); 2283 if (value) { 2284 classList.add("mat-tabs-with-background", `mat-background-${value}`); 2285 } 2286 this._backgroundColor = value; 2287 } 2288 constructor(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode, defaultConfig) { 2289 super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode); 2290 this._fitInkBarToContent = new BehaviorSubject(false); 2291 this.stretchTabs = true; 2292 this.disableRipple = false; 2293 this.color = "primary"; 2294 this.disablePagination = defaultConfig && defaultConfig.disablePagination != null ? defaultConfig.disablePagination : false;
2295 this.fitInkBarToContent = defaultConfig && defaultConfig.fitInkBarToContent != null ? defaultConfig.fitInkBarToContent : false; 2296 this.stretchTabs = defaultConfig && defaultConfig.stretchTabs != null ? defaultConfig.stretchTabs : true; 2297 } 2298 _itemSelected() { 2299 } 2300 ngAfterContentInit() { 2301 this._inkBar = new MatInkBar(this._items); 2302 this._items.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => { 2303 this.updateActiveLink(); 2304 }); 2305 super.ngAfterContentInit(); 2306 } 2307 ngAfterViewInit() { 2308 if (!this.tabPanel && (typeof ngDevMode === "undefined" || ngDevMode)) { 2309 throw new Error("A mat-tab-nav-panel must be specified via [tabPanel]."); 2310 } 2311 super.ngAfterViewInit(); 2312 } 2313 /** Notifies the component that the active link has been changed. */ 2314 updateActiveLink() { 2315 if (!this._items) { 2316 return; 2317 } 2318 const items = this._items.toArray(); 2319 for (let i = 0; i < items.length; i++) { 2320 if (items[i].active) { 2321 this.selectedIndex = i; 2322 this._changeDetectorRef.markForCheck(); 2323 if (this.tabPanel) { 2324 this.tabPanel._activeTabId = items[i].id; 2325 } 2326 return; 2327 } 2328 } 2329 this.selectedIndex = -1; 2330 this._inkBar.hide(); 2331 } 2332 _getRole() { 2333 return this.tabPanel ? "tablist" : this._elementRef.nativeElement.getAttribute("role"); 2334 } 2335 static { 2336 this.\u0275fac = function MatTabNav_Factory(__ngFactoryType__) { 2337 return new (__ngFactoryType__ || _MatTabNav)(\u0275\u0275directiveInject(ElementRef), \u0275\u0275directiveInject(Directionality, 8), \u0275\u0275directiveInject(NgZone), \u0275\u0275directiveInject(ChangeDetectorRef), \u0275\u0275directiveInject(ViewportRuler), \u0275\u0275directiveInject(Platform), \u0275\u0275directiveInject(ANIMATION_MODULE_TYPE, 8), \u0275\u0275directiveInject(MAT_TABS_CONFIG, 8)); 2338 }; 2339 } 2340 static { 2341 this.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ 2342 type: _MatTabNav, 2343 selectors: [["", "mat-tab-nav-bar", ""]], 2344 contentQueries: function MatTabNav_ContentQueries(rf, ctx, dirIndex) { 2345 if (rf & 1) { 2346 \u0275\u0275contentQuery(dirIndex, MatTabLink, 5); 2347 } 2348 if (rf & 2) { 2349 let _t; 2350 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._items = _t); 2351 } 2352 }, 2353 viewQuery: function MatTabNav_Query(rf, ctx) { 2354 if (rf & 1) { 2355 \u0275\u0275viewQuery(_c1, 7); 2356 \u0275\u0275viewQuery(_c2, 7); 2357 \u0275\u0275viewQuery(_c3, 7); 2358 \u0275\u0275viewQuery(_c4, 5); 2359 \u0275\u0275viewQuery(_c5, 5); 2360 } 2361 if (rf & 2) { 2362 let _t; 2363 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabListContainer = _t.first); 2364 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabList = _t.first); 2365 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._tabListInner = _t.first); 2366 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._nextPaginator = _t.first); 2367 \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._previousPaginator = _t.first); 2368 } 2369 }, 2370 hostAttrs: [1, "mat-mdc-tab-nav-bar", "mat-mdc-tab-header"], 2371 hostVars: 17, 2372 hostBindings: function MatTabNav_HostBindings(rf, ctx) { 2373 if (rf & 2) { 2374 \u0275\u0275attribute("role", ctx._getRole()); 2375 \u0275\u0275styleProp("--mat-tab-animation-duration", ctx.animationDuration); 2376 \u0275\u0275classProp("mat-mdc-tab-header-pagination-controls-enabled", ctx._showPaginationControls)("mat-mdc-tab-header-rtl", ctx._getLayoutDirection() == "rtl")("mat-mdc-tab-nav-bar-stretch-tabs", ctx.stretchTabs)("mat-primary", ctx.color !== "warn" && ctx.color !== "accent")("mat-accent", ctx.color === "accent")("mat-warn", ctx.color === "warn")("_mat-animation-noopable", ctx._animationMode === "NoopAnimations"); 2377 } 2378 }, 2379 inputs: { 2380 fitInkBarToContent: [2, "fitInkBarToContent", "fitInkBarToContent", booleanAttribute], 2381 stretchTabs: [2, "mat-stretch-tabs", "stretchTabs", booleanAttribute], 2382 animationDuration: "animationDuration", 2383 backgroundColor: "backgroundColor", 2384 disableRipple: [2, "disableRipple", "disableRipple", booleanAttribute], 2385 color: "color", 2386 tabPanel: "tabPanel" 2387 }, 2388 exportAs: ["matTabNavBar", "matTabNav"], 2389 standalone: true, 2390 features: [\u0275\u0275InputTransformsFeature, \u0275\u0275InheritDefinitionFeature, \u0275\u0275StandaloneFeature], 2391 attrs: _c10, 2392 ngContentSelectors: _c0, 2393 decls: 13, 2394 vars: 6, 2395 consts: [["previousPaginator", ""], ["tabListContainer", ""], ["tabList", ""], ["tabListInner", ""], ["nextPaginator", ""], ["mat-ripple", "", 1, "mat-mdc-tab-header-pagination", "mat-mdc-tab-header-pagination-before", 3, "click", "mousedown", "touchend", "matRippleDisabled"], [1, "mat-mdc-tab-header-pagination-chevron"], [1, "mat-mdc-tab-link-container", 3, "keydown"], [1, "mat-mdc-tab-list", 3, "cdkObserveContent"], [1, "mat-mdc-tab-links"], ["mat-ripple", "", 1, "mat-mdc-tab-header-pagination", "mat-mdc-tab-header-pagination-after", 3, "mousedown", "click", "touchend", "matRippleDisabled"]], 2396 template: function MatTabNav_Template(rf, ctx) { 2397 if (rf & 1) { 2398 const _r1 = \u0275\u0275getCurrentView(); 2399 \u0275\u0275projectionDef(); 2400 \u0275\u0275elementStart(0, "div", 5, 0); 2401 \u0275\u0275listener("click", function MatTabNav_Template_div_click_0_listener() { 2402 \u0275\u0275restoreView(_r1);
2403 return \u0275\u0275resetView(ctx._handlePaginatorClick("before")); 2404 })("mousedown", function MatTabNav_Template_div_mousedown_0_listener($event) { 2405 \u0275\u0275restoreView(_r1); 2406 return \u0275\u0275resetView(ctx._handlePaginatorPress("before", $event)); 2407 })("touchend", function MatTabNav_Template_div_touchend_0_listener() { 2408 \u0275\u0275restoreView(_r1); 2409 return \u0275\u0275resetView(ctx._stopInterval()); 2410 }); 2411 \u0275\u0275element(2, "div", 6); 2412 \u0275\u0275elementEnd(); 2413 \u0275\u0275elementStart(3, "div", 7, 1); 2414 \u0275\u0275listener("keydown", function MatTabNav_Template_div_keydown_3_listener($event) { 2415 \u0275\u0275restoreView(_r1); 2416 return \u0275\u0275resetView(ctx._handleKeydown($event)); 2417 }); 2418 \u0275\u0275elementStart(5, "div", 8, 2); 2419 \u0275\u0275listener("cdkObserveContent", function MatTabNav_Template_div_cdkObserveContent_5_listener() { 2420 \u0275\u0275restoreView(_r1); 2421 return \u0275\u0275resetView(ctx._onContentChanges()); 2422 }); 2423 \u0275\u0275elementStart(7, "div", 9, 3); 2424 \u0275\u0275projection(9); 2425 \u0275\u0275elementEnd()()(); 2426 \u0275\u0275elementStart(10, "div", 10, 4); 2427 \u0275\u0275listener("mousedown", function MatTabNav_Template_div_mousedown_10_listener($event) { 2428 \u0275\u0275restoreView(_r1); 2429 return \u0275\u0275resetView(ctx._handlePaginatorPress("after", $event)); 2430 })("click", function MatTabNav_Template_div_click_10_listener() { 2431 \u0275\u0275restoreView(_r1); 2432 return \u0275\u0275resetView(ctx._handlePaginatorClick("after")); 2433 })("touchend", function MatTabNav_Template_div_touchend_10_listener() { 2434 \u0275\u0275restoreView(_r1); 2435 return \u0275\u0275resetView(ctx._stopInterval()); 2436 }); 2437 \u0275\u0275element(12, "div", 6); 2438 \u0275\u0275elementEnd(); 2439 } 2440 if (rf & 2) { 2441 \u0275\u0275classProp("mat-mdc-tab-header-pagination-disabled", ctx._disableScrollBefore); 2442 \u0275\u0275property("matRippleDisabled", ctx._disableScrollBefore || ctx.disableRipple); 2443 \u0275\u0275advance(10); 2444 \u0275\u0275classProp("mat-mdc-tab-header-pagination-disabled", ctx._disableScrollAfter); 2445 \u0275\u0275property("matRippleDisabled", ctx._disableScrollAfter || ctx.disableRipple); 2446 } 2447 }, 2448 dependencies: [MatRipple, CdkObserveContent], 2449 styles: [".mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}
2449.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-header-pagination-icon-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-links{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-link-container .mat-mdc-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-link-container .mat-mdc-tab-links{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-links,.mat-mdc-tab-links.cdk-drop-list{min-height:var(--mdc-secondary-navigation-tab-container-height)}.mat-mdc-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-header-divider-height);border-bottom-color:var(--mat-tab-header-divider-color, var(--mat-app-surface-variant))}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-header-with-background-background-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background.mat-primary>.mat-mdc-tab-link-container .mat-mdc-tab-link .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background.mat-primary>.mat-mdc-tab-link-container .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-link-container .mat-mdc-tab-link:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-link-container .mat-mdc-tab-link:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-mdc-focus-indicator::before,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-focus-indicator::before{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-ripple-element,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mdc-tab__ripple::before,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-header-with-background-foreground-color)}"], 2450 encapsulation: 2 2451 }); 2452 } 2453}; 2454(() => { 2455 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabNav, [{ 2456 type: Component, 2457 args: [{ 2458 selector: "[mat-tab-nav-bar]", 2459 exportAs: "matTabNavBar, matTabNav", 2460 host: { 2461 "[attr.role]": "_getRole()", 2462 "class": "mat-mdc-tab-nav-bar mat-mdc-tab-header", 2463 "[class.mat-mdc-tab-header-pagination-controls-enabled]": "_showPaginationControls", 2464 "[class.mat-mdc-tab-header-rtl]": "_getLayoutDirection() == 'rtl'", 2465 "[class.mat-mdc-tab-nav-bar-stretch-tabs]": "stretchTabs", 2466 "[class.mat-primary]": 'color !== "warn" && color !== "accent"', 2467 "[class.mat-accent]": 'color === "accent"', 2468 "[class.mat-warn]": 'color === "warn"', 2469 "[class._mat-animation-noopable]": '_animationMode === "NoopAnimations"', 2470 "[style.--mat-tab-animation-duration]": "animationDuration" 2471 }, 2472 encapsulation: ViewEncapsulation$1.None, 2473 changeDetection: ChangeDetectionStrategy.Default, 2474 standalone: true, 2475 imports: [MatRipple, CdkObserveContent], 2476 template: `<!-- 2477 Note that this intentionally uses a \`div\` instead of a \`button\`, because it's not part of
2478 the regular tabs flow and is only here to support mouse users. It should also not be focusable. 2479--> 2480<div class="mat-mdc-tab-header-pagination mat-mdc-tab-header-pagination-before" 2481 #previousPaginator 2482 mat-ripple 2483 [matRippleDisabled]="_disableScrollBefore || disableRipple" 2484 [class.mat-mdc-tab-header-pagination-disabled]="_disableScrollBefore" 2485 (click)="_handlePaginatorClick('before')" 2486 (mousedown)="_handlePaginatorPress('before', $event)" 2487 (touchend)="_stopInterval()"> 2488 <div class="mat-mdc-tab-header-pagination-chevron"></div> 2489</div> 2490 2491<div class="mat-mdc-tab-link-container" #tabListContainer (keydown)="_handleKeydown($event)"> 2492 <div class="mat-mdc-tab-list" #tabList (cdkObserveContent)="_onContentChanges()"> 2493 <div class="mat-mdc-tab-links" #tabListInner> 2494 <ng-content></ng-content> 2495 </div> 2496 </div> 2497</div> 2498 2499<div class="mat-mdc-tab-header-pagination mat-mdc-tab-header-pagination-after" 2500 #nextPaginator 2501 mat-ripple 2502 [matRippleDisabled]="_disableScrollAfter || disableRipple" 2503 [class.mat-mdc-tab-header-pagination-disabled]="_disableScrollAfter" 2504 (mousedown)="_handlePaginatorPress('after', $event)" 2505 (click)="_handlePaginatorClick('after')" 2506 (touchend)="_stopInterval()"> 2507 <div class="mat-mdc-tab-header-pagination-chevron"></div> 2508</div> 2509`, 2510 styles: [".mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}
2510.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-header-pagination-icon-color, var(--mat-app-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-links{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-link-container .mat-mdc-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-link-container .mat-mdc-tab-links{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-links,.mat-mdc-tab-links.cdk-drop-list{min-height:var(--mdc-secondary-navigation-tab-container-height)}.mat-mdc-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-header-divider-height);border-bottom-color:var(--mat-tab-header-divider-color, var(--mat-app-surface-variant))}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-header-with-background-background-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background.mat-primary>.mat-mdc-tab-link-container .mat-mdc-tab-link .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background.mat-primary>.mat-mdc-tab-link-container .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-link-container .mat-mdc-tab-link:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-link-container .mat-mdc-tab-link:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-mdc-focus-indicator::before,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-focus-indicator::before{border-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-ripple-element,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mdc-tab__ripple::before,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-header-with-background-foreground-color)}.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-link-container .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-nav-bar.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-header-with-background-foreground-color)}"] 2511 }] 2512 }], () => [{ 2513 type: ElementRef 2514 }, { 2515 type: Directionality, 2516 decorators: [{ 2517 type: Optional 2518 }] 2519 }, { 2520 type: NgZone 2521 }, { 2522 type: ChangeDetectorRef 2523 }, { 2524 type: ViewportRuler 2525 }, { 2526 type: Platform 2527 }, { 2528 type: void 0, 2529 decorators: [{ 2530 type: Optional 2531 }, {
2532 type: Inject, 2533 args: [ANIMATION_MODULE_TYPE] 2534 }] 2535 }, { 2536 type: void 0, 2537 decorators: [{ 2538 type: Optional 2539 }, { 2540 type: Inject, 2541 args: [MAT_TABS_CONFIG] 2542 }] 2543 }], { 2544 fitInkBarToContent: [{ 2545 type: Input, 2546 args: [{ 2547 transform: booleanAttribute 2548 }] 2549 }], 2550 stretchTabs: [{ 2551 type: Input, 2552 args: [{ 2553 alias: "mat-stretch-tabs", 2554 transform: booleanAttribute 2555 }] 2556 }], 2557 animationDuration: [{ 2558 type: Input 2559 }], 2560 _items: [{ 2561 type: ContentChildren, 2562 args: [forwardRef(() => MatTabLink), { 2563 descendants: true 2564 }] 2565 }], 2566 backgroundColor: [{ 2567 type: Input 2568 }], 2569 disableRipple: [{ 2570 type: Input, 2571 args: [{ 2572 transform: booleanAttribute 2573 }] 2574 }], 2575 color: [{ 2576 type: Input 2577 }], 2578 tabPanel: [{ 2579 type: Input 2580 }], 2581 _tabListContainer: [{ 2582 type: ViewChild, 2583 args: ["tabListContainer", { 2584 static: true 2585 }] 2586 }], 2587 _tabList: [{ 2588 type: ViewChild, 2589 args: ["tabList", { 2590 static: true 2591 }] 2592 }], 2593 _tabListInner: [{ 2594 type: ViewChild, 2595 args: ["tabListInner", { 2596 static: true 2597 }] 2598 }], 2599 _nextPaginator: [{ 2600 type: ViewChild, 2601 args: ["nextPaginator"] 2602 }], 2603 _previousPaginator: [{ 2604 type: ViewChild, 2605 args: ["previousPaginator"] 2606 }] 2607 }); 2608})(); 2609var MatTabLink = class _MatTabLink extends InkBarItem { 2610 /** Whether the link is active. */ 2611 get active() { 2612 return this._isActive; 2613 } 2614 set active(value) { 2615 if (value !== this._isActive) { 2616 this._isActive = value; 2617 this._tabNavBar.updateActiveLink(); 2618 } 2619 } 2620 /** 2621 * Whether ripples are disabled on interaction. 2622 * @docs-private 2623 */ 2624 get rippleDisabled() { 2625 return this.disabled || this.disableRipple || this._tabNavBar.disableRipple || !!this.rippleConfig.disabled; 2626 } 2627 constructor(_tabNavBar, elementRef, globalRippleOptions, tabIndex, _focusMonitor, animationMode) { 2628 super(); 2629 this._tabNavBar = _tabNavBar; 2630 this.elementRef = elementRef; 2631 this._focusMonitor = _focusMonitor; 2632 this._destroyed = new Subject(); 2633 this._isActive = false; 2634 this.disabled = false; 2635 this.disableRipple = false; 2636 this.tabIndex = 0; 2637 this.id = `mat-tab-link-${nextUniqueId++}`; 2638 this.rippleConfig = globalRippleOptions || {}; 2639 this.tabIndex = parseInt(tabIndex) || 0; 2640 if (animationMode === "NoopAnimations") { 2641 this.rippleConfig.animation = { 2642 enterDuration: 0, 2643 exitDuration: 0 2644 }; 2645 } 2646 _tabNavBar._fitInkBarToContent.pipe(takeUntil(this._destroyed)).subscribe((fitInkBarToContent) => { 2647 this.fitInkBarToContent = fitInkBarToContent; 2648 }); 2649 } 2650 /** Focuses the tab link. */ 2651 focus() { 2652 this.elementRef.nativeElement.focus(); 2653 } 2654 ngAfterViewInit() { 2655 this._focusMonitor.monitor(this.elementRef); 2656 } 2657 ngOnDestroy() { 2658 this._destroyed.next(); 2659 this._destroyed.complete(); 2660 super.ngOnDestroy(); 2661 this._focusMonitor.stopMonitoring(this.elementRef); 2662 } 2663 _handleFocus() { 2664 this._tabNavBar.focusIndex = this._tabNavBar._items.toArray().indexOf(this); 2665 } 2666 _handleKeydown(event) { 2667 if (event.keyCode === SPACE || event.keyCode === ENTER) { 2668 if (this.disabled) { 2669 event.preventDefault(); 2670 } else if (this._tabNavBar.tabPanel) { 2671 if (event.keyCode === SPACE) { 2672 event.preventDefault(); 2673 } 2674 this.elementRef.nativeElement.click(); 2675 } 2676 } 2677 } 2678 _getAriaControls() { 2679 return this._tabNavBar.tabPanel ? this._tabNavBar.tabPanel?.id : this.elementRef.nativeElement.getAttribute("aria-controls"); 2680 } 2681 _getAriaSelected() { 2682 if (this._tabNavBar.tabPanel) { 2683 return this.active ? "true" : "false"; 2684 } else { 2685 return this.elementRef.nativeElement.getAttribute("aria-selected"); 2686 } 2687 } 2688 _getAriaCurrent() { 2689 return this.active && !this._tabNavBar.tabPanel ? "page" : null; 2690 } 2691 _getRole() { 2692 return this._tabNavBar.tabPanel ? "tab" : this.elementRef.nativeElement.getAttribute("role"); 2693 } 2694 _getTabIndex() { 2695 if (this._tabNavBar.tabPanel) { 2696 return this._isActive && !this.disabled ? 0 : -1; 2697 } else { 2698 return this.disabled ? -1 : this.tabIndex; 2699 } 2700 } 2701 static { 2702 this.\u0275fac = function MatTabLink_Factory(__ngFactoryType__) { 2703 return new (__ngFactoryType__ || _MatTabLink)(\u0275\u0275directiveInject(MatTabNav), \u0275\u0275directiveInject(ElementRef), \u0275\u0275directiveInject(MAT_RIPPLE_GLOBAL_OPTIONS, 8), \u0275\u0275injectAttribute("tabindex"), \u0275\u0275directiveInject(FocusMonitor), \u0275\u0275directiveInject(ANIMATION_MODULE_TYPE, 8)); 2704 }; 2705 } 2706 static { 2707 this.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ 2708 type: _MatTabLink, 2709 selectors: [["", "mat-tab-link", ""], ["", "matTabLink", ""]], 2710 hostAttrs: [1, "mdc-tab", "mat-mdc-tab-link", "mat-mdc-focus-indicator"], 2711 hostVars: 11, 2712 hostBindings: function MatTabLink_HostBindings(rf, ctx) { 2713 if (rf & 1) { 2714 \u0275\u0275listener("focus", function MatTabLink_focus_HostBindingHandler() { 2715 return ctx._handleFocus(); 2716 })("keydown", function MatTabLink_keydown_HostBindingHandler($event) { 2717 return ctx._handleKeydown($event); 2718 }); 2719 } 2720 if (rf & 2) { 2721 \u0275\u0275attribute("aria-controls", ctx._getAriaControl
2721s())("aria-current", ctx._getAriaCurrent())("aria-disabled", ctx.disabled)("aria-selected", ctx._getAriaSelected())("id", ctx.id)("tabIndex", ctx._getTabIndex())("role", ctx._getRole()); 2722 \u0275\u0275classProp("mat-mdc-tab-disabled", ctx.disabled)("mdc-tab--active", ctx.active); 2723 } 2724 }, 2725 inputs: { 2726 active: [2, "active", "active", booleanAttribute], 2727 disabled: [2, "disabled", "disabled", booleanAttribute], 2728 disableRipple: [2, "disableRipple", "disableRipple", booleanAttribute], 2729 tabIndex: [2, "tabIndex", "tabIndex", (value) => value == null ? 0 : numberAttribute(value)], 2730 id: "id" 2731 }, 2732 exportAs: ["matTabLink"], 2733 standalone: true, 2734 features: [\u0275\u0275InputTransformsFeature, \u0275\u0275InheritDefinitionFeature, \u0275\u0275StandaloneFeature], 2735 attrs: _c11, 2736 ngContentSelectors: _c0, 2737 decls: 5, 2738 vars: 2, 2739 consts: [[1, "mdc-tab__ripple"], ["mat-ripple", "", 1, "mat-mdc-tab-ripple", 3, "matRippleTrigger", "matRippleDisabled"], [1, "mdc-tab__content"], [1, "mdc-tab__text-label"]], 2740 template: function MatTabLink_Template(rf, ctx) { 2741 if (rf & 1) { 2742 \u0275\u0275projectionDef(); 2743 \u0275\u0275element(0, "span", 0)(1, "div", 1); 2744 \u0275\u0275elementStart(2, "span", 2)(3, "span", 3); 2745 \u0275\u0275projection(4); 2746 \u0275\u0275elementEnd()(); 2747 } 2748 if (rf & 2) { 2749 \u0275\u0275advance(); 2750 \u0275\u0275property("matRippleTrigger", ctx.elementRef.nativeElement)("matRippleDisabled", ctx.rippleDisabled); 2751 } 2752 }, 2753 dependencies: [MatRipple], 2754 styles: ['.mat-mdc-tab-link{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mdc-secondary-navigation-tab-container-height);font-family:var(--mat-tab-header-label-text-font, var(--mat-app-title-small-font));font-size:var(--mat-tab-header-label-text-size, var(--mat-app-title-small-size));letter-spacing:var(--mat-tab-header-label-text-tracking, var(--mat-app-title-small-tracking));line-height:var(--mat-tab-header-label-text-line-height, var(--mat-app-title-small-line-height));font-weight:var(--mat-tab-header-label-text-weight, var(--mat-app-title-small-weight))}.mat-mdc-tab-link.mdc-tab{flex-grow:0}.mat-mdc-tab-link .mdc-tab-indicator__content--underline{border-color:var(--mdc-tab-indicator-active-indicator-color, var(--mat-app-primary));border-top-width:var(--mdc-tab-indicator-active-indicator-height);border-radius:var(--mdc-tab-indicator-active-indicator-shape)}.mat-mdc-tab-link:hover .mdc-tab__text-label{color:var(--mat-tab-header-inactive-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link:focus .mdc-tab__text-label{color:var(--mat-tab-header-inactive-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-header-active-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab-link.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-header-active-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-header-active-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-hover-indicator-color, var(--mat-app-primary))}.mat-mdc-tab-link.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-header-active-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-focus-indicator-color, var(--mat-app-primary))}.mat-mdc-tab-link.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab-link.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab-link.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab-link.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-header-disabled-ripple-color)}.mat-mdc-tab-link .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-link .mdc-tab__text-label{color:var(--mat-tab-header-inactive-label-text-color, var(--mat-app-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab-link .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab-link:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab-link.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab-link.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab-link .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-header.mat-mdc-tab-nav-bar-stretch-tabs .mat-mdc-tab-link{flex-grow:1}.mat-mdc-tab-link::before{margin:5px}@media(max-width: 599px){.mat-mdc-tab-link{min-width:72px}}'], 2755 encapsulation: 2, 2756 changeDetection: 0 2757 }); 2758 } 2759}; 2760(() => { 2761 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabLink, [{ 2762 type: Component, 2763 args: [{ 2764 selector: "[mat-tab-link], [matTabLink]", 2765 exportAs: "matTabLink", 2766 changeDetection: ChangeDetectionStrategy.OnPush, 2767 encapsulation: ViewEncapsulation$1.None, 2768 host: { 2769 "class": "mdc-tab mat-mdc-tab-link mat-mdc-focus-indicator",
2770 "[attr.aria-controls]": "_getAriaControls()", 2771 "[attr.aria-current]": "_getAriaCurrent()", 2772 "[attr.aria-disabled]": "disabled", 2773 "[attr.aria-selected]": "_getAriaSelected()", 2774 "[attr.id]": "id", 2775 "[attr.tabIndex]": "_getTabIndex()", 2776 "[attr.role]": "_getRole()", 2777 "[class.mat-mdc-tab-disabled]": "disabled", 2778 "[class.mdc-tab--active]": "active", 2779 "(focus)": "_handleFocus()", 2780 "(keydown)": "_handleKeydown($event)" 2781 }, 2782 standalone: true, 2783 imports: [MatRipple], 2784 template: '<span class="mdc-tab__ripple"></span>\n\n<div\n class="mat-mdc-tab-ripple"\n mat-ripple\n [matRippleTrigger]="elementRef.nativeElement"\n [matRippleDisabled]="rippleDisabled"></div>\n\n<span class="mdc-tab__content">\n <span class="mdc-tab__text-label">\n <ng-content></ng-content>\n </span>\n</span>\n\n', 2785 styles: ['.mat-mdc-tab-link{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mdc-secondary-navigation-tab-container-height);font-family:var(--mat-tab-header-label-text-font, var(--mat-app-title-small-font));font-size:var(--mat-tab-header-label-text-size, var(--mat-app-title-small-size));letter-spacing:var(--mat-tab-header-label-text-tracking, var(--mat-app-title-small-tracking));line-height:var(--mat-tab-header-label-text-line-height, var(--mat-app-title-small-line-height));font-weight:var(--mat-tab-header-label-text-weight, var(--mat-app-title-small-weight))}.mat-mdc-tab-link.mdc-tab{flex-grow:0}.mat-mdc-tab-link .mdc-tab-indicator__content--underline{border-color:var(--mdc-tab-indicator-active-indicator-color, var(--mat-app-primary));border-top-width:var(--mdc-tab-indicator-active-indicator-height);border-radius:var(--mdc-tab-indicator-active-indicator-shape)}.mat-mdc-tab-link:hover .mdc-tab__text-label{color:var(--mat-tab-header-inactive-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link:focus .mdc-tab__text-label{color:var(--mat-tab-header-inactive-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-header-active-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab-link.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-header-active-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-header-active-hover-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-hover-indicator-color, var(--mat-app-primary))}.mat-mdc-tab-link.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-header-active-focus-label-text-color, var(--mat-app-on-surface))}.mat-mdc-tab-link.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-header-active-focus-indicator-color, var(--mat-app-primary))}.mat-mdc-tab-link.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab-link.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab-link.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab-link.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-header-disabled-ripple-color)}.mat-mdc-tab-link .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-link .mdc-tab__text-label{color:var(--mat-tab-header-inactive-label-text-color, var(--mat-app-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab-link .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab-link:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab-link.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab-link.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab-link .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-header-inactive-ripple-color, var(--mat-app-on-surface))}.mat-mdc-tab-header.mat-mdc-tab-nav-bar-stretch-tabs .mat-mdc-tab-link{flex-grow:1}.mat-mdc-tab-link::before{margin:5px}@media(max-width: 599px){.mat-mdc-tab-link{min-width:72px}}'] 2786 }] 2787 }], () => [{ 2788 type: MatTabNav 2789 }, { 2790 type: ElementRef 2791 }, { 2792 type: void 0, 2793 decorators: [{ 2794 type: Optional 2795 }, {
2796 type: Inject, 2797 args: [MAT_RIPPLE_GLOBAL_OPTIONS] 2798 }] 2799 }, { 2800 type: void 0, 2801 decorators: [{ 2802 type: Attribute, 2803 args: ["tabindex"] 2804 }] 2805 }, { 2806 type: FocusMonitor 2807 }, { 2808 type: void 0, 2809 decorators: [{ 2810 type: Optional 2811 }, { 2812 type: Inject, 2813 args: [ANIMATION_MODULE_TYPE] 2814 }] 2815 }], { 2816 active: [{ 2817 type: Input, 2818 args: [{ 2819 transform: booleanAttribute 2820 }] 2821 }], 2822 disabled: [{ 2823 type: Input, 2824 args: [{ 2825 transform: booleanAttribute 2826 }] 2827 }], 2828 disableRipple: [{ 2829 type: Input, 2830 args: [{ 2831 transform: booleanAttribute 2832 }] 2833 }], 2834 tabIndex: [{ 2835 type: Input, 2836 args: [{ 2837 transform: (value) => value == null ? 0 : numberAttribute(value) 2838 }] 2839 }], 2840 id: [{ 2841 type: Input 2842 }] 2843 }); 2844})(); 2845var MatTabNavPanel = class _MatTabNavPanel { 2846 constructor() { 2847 this.id = `mat-tab-nav-panel-${nextUniqueId++}`; 2848 } 2849 static { 2850 this.\u0275fac = function MatTabNavPanel_Factory(__ngFactoryType__) { 2851 return new (__ngFactoryType__ || _MatTabNavPanel)(); 2852 }; 2853 } 2854 static { 2855 this.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ 2856 type: _MatTabNavPanel, 2857 selectors: [["mat-tab-nav-panel"]], 2858 hostAttrs: ["role", "tabpanel", 1, "mat-mdc-tab-nav-panel"], 2859 hostVars: 2, 2860 hostBindings: function MatTabNavPanel_HostBindings(rf, ctx) { 2861 if (rf & 2) { 2862 \u0275\u0275attribute("aria-labelledby", ctx._activeTabId)("id", ctx.id); 2863 } 2864 }, 2865 inputs: { 2866 id: "id" 2867 }, 2868 exportAs: ["matTabNavPanel"], 2869 standalone: true, 2870 features: [\u0275\u0275StandaloneFeature], 2871 ngContentSelectors: _c0, 2872 decls: 1, 2873 vars: 0, 2874 template: function MatTabNavPanel_Template(rf, ctx) { 2875 if (rf & 1) { 2876 \u0275\u0275projectionDef(); 2877 \u0275\u0275projection(0); 2878 } 2879 }, 2880 encapsulation: 2, 2881 changeDetection: 0 2882 }); 2883 } 2884}; 2885(() => { 2886 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabNavPanel, [{ 2887 type: Component, 2888 args: [{ 2889 selector: "mat-tab-nav-panel", 2890 exportAs: "matTabNavPanel", 2891 template: "<ng-content></ng-content>", 2892 host: { 2893 "[attr.aria-labelledby]": "_activeTabId", 2894 "[attr.id]": "id", 2895 "class": "mat-mdc-tab-nav-panel", 2896 "role": "tabpanel" 2897 }, 2898 encapsulation: ViewEncapsulation$1.None, 2899 changeDetection: ChangeDetectionStrategy.OnPush, 2900 standalone: true 2901 }] 2902 }], null, { 2903 id: [{ 2904 type: Input 2905 }] 2906 }); 2907})(); 2908var MatTabsModule = class _MatTabsModule { 2909 static { 2910 this.\u0275fac = function MatTabsModule_Factory(__ngFactoryType__) { 2911 return new (__ngFactoryType__ || _MatTabsModule)(); 2912 }; 2913 } 2914 static { 2915 this.\u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({ 2916 type: _MatTabsModule 2917 }); 2918 } 2919 static { 2920 this.\u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({ 2921 imports: [MatCommonModule, MatCommonModule] 2922 }); 2923 } 2924}; 2925(() => { 2926 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatTabsModule, [{ 2927 type: NgModule, 2928 args: [{ 2929 imports: [MatCommonModule, MatTabContent, MatTabLabel, MatTab, MatTabGroup, MatTabNav, MatTabNavPanel, MatTabLink], 2930 exports: [MatCommonModule, MatTabContent, MatTabLabel, MatTab, MatTabGroup, MatTabNav, MatTabNavPanel, MatTabLink] 2931 }] 2932 }], null, null); 2933})(); 2934 2935export { 2936 MatTabLabel, 2937 MatTab, 2938 MatTabGroup, 2939 MatTabsModule 2940}; 2941//# sourceMappingURL=chunk-GLGFOAZ2.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.