UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

670 lines 83.4 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, Inject, Injector, Input, Optional, Output, QueryList, SkipSelf, ViewChild, ViewChildren } from '@angular/core'; import { Debounce } from '@microsoft/windows-admin-center-sdk/core/base/decorators/debounce.decorators'; import { Yield } from '@microsoft/windows-admin-center-sdk/core/base/decorators/yield.decorator'; import { SME_LAYOUT_PROVIDER } from '../common/layout'; import { SpacerBaseDirective } from '../common/spacer-base.component'; import { PivotResponsiveWindowManager } from './pivot-responsive-window-manager'; import { PivotTabType } from './pivot-tab-type'; import { PivotTabComponent } from './pivot-tab.component'; import { SME_PIVOT_TAB_CONTAINER_PROVIDER } from './pivot-tab.container'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../../directives/router/router-link.directive"; import * as i3 from "@angular/router"; import * as i4 from "../dropdown/dropdown.component"; const _c0 = ["dropDownButton"]; const _c1 = ["pivotContents"]; function PivotComponent_h4_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "h4", 14); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r0.headerText); } } function PivotComponent_ng_container_4_button_1_span_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span"); } if (rf & 2) { const tab_r7 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵclassMap(tab_r7.iconClass); } } function PivotComponent_ng_container_4_button_1_span_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span", 20); } } function PivotComponent_ng_container_4_button_1_Template(rf, ctx) { if (rf & 1) { const _r16 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 17); i0.ɵɵlistener("smeRouterLinkActivated", function PivotComponent_ng_container_4_button_1_Template_button_smeRouterLinkActivated_0_listener() { i0.ɵɵrestoreView(_r16); const tab_r7 = i0.ɵɵnextContext().$implicit; const ctx_r14 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r14.select(tab_r7)); }); i0.ɵɵtemplate(1, PivotComponent_ng_container_4_button_1_span_1_Template, 1, 2, "span", 18); i0.ɵɵelementStart(2, "span"); i0.ɵɵtext(3); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, PivotComponent_ng_container_4_button_1_span_4_Template, 1, 0, "span", 19); i0.ɵɵelementEnd(); } if (rf & 2) { const tab_r7 = i0.ɵɵnextContext().$implicit; const ctx_r9 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-disabled", ctx_r9.disabled || tab_r7.disabled)("sme-active", ctx_r9.isSelected(tab_r7)); i0.ɵɵproperty("routerLink", tab_r7.route)("disabled", ctx_r9.disabled || tab_r7.disabled)("routerLinkActiveOptions", tab_r7.routerLinkActiveOptions); i0.ɵɵattribute("aria-controls", ctx_r9.idBag.tabPanel)("aria-disabled", ctx_r9.disabled || tab_r7.disabled)("aria-selected", ctx_r9.isSelected(tab_r7)); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r7.iconClass); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(tab_r7.label); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r7.showErrorStatusIcon); } } function PivotComponent_ng_container_4_button_2_span_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span"); } if (rf & 2) { const tab_r7 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵclassMap(tab_r7.iconClass); } } function PivotComponent_ng_container_4_button_2_span_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span", 20); } } function PivotComponent_ng_container_4_button_2_Template(rf, ctx) { if (rf & 1) { const _r23 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 21); i0.ɵɵlistener("click", function PivotComponent_ng_container_4_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const tab_r7 = i0.ɵɵnextContext().$implicit; const ctx_r21 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r21.select(tab_r7)); }); i0.ɵɵtemplate(1, PivotComponent_ng_container_4_button_2_span_1_Template, 1, 2, "span", 18); i0.ɵɵelementStart(2, "span"); i0.ɵɵtext(3); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, PivotComponent_ng_container_4_button_2_span_4_Template, 1, 0, "span", 19); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r24 = i0.ɵɵnextContext(); const tab_r7 = ctx_r24.$implicit; const i_r8 = ctx_r24.index; const ctx_r10 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-disabled", ctx_r10.disabled || tab_r7.disabled)("sme-active", ctx_r10.isSelected(tab_r7)); i0.ɵɵproperty("disabled", ctx_r10.disabled || tab_r7.disabled); i0.ɵɵattribute("aria-controls", ctx_r10.idBag.tabPanel + i_r8)("aria-disabled", ctx_r10.disabled || tab_r7.disabled)("aria-description", tab_r7.showErrorStatusIcon ? ctx_r10.strings.MsftSmeShell.Angular.PivotTab.HasError : null)("aria-selected", ctx_r10.isSelected(tab_r7)); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r7.iconClass); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(tab_r7.label); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r7.showErrorStatusIcon); } } function PivotComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, PivotComponent_ng_container_4_button_1_Template, 5, 13, "button", 15); i0.ɵɵtemplate(2, PivotComponent_ng_container_4_button_2_Template, 5, 12, "button", 16); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const tab_r7 = ctx.$implicit; const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r7.type === ctx_r1.pivotTabType.Routed); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r7.type === ctx_r1.pivotTabType.Static); } } function PivotComponent_div_14_button_1_span_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span"); } if (rf & 2) { const tab_r25 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵclassMap(tab_r25.iconClass); } } function PivotComponent_div_14_button_1_Template(rf, ctx) { if (rf & 1) { const _r33 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 24); i0.ɵɵlistener("smeRouterLinkActivated", function PivotComponent_div_14_button_1_Template_button_smeRouterLinkActivated_0_listener() { i0.ɵɵrestoreView(_r33); const tab_r25 = i0.ɵɵnextContext().$implicit; const ctx_r31 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r31.select(tab_r25)); }); i0.ɵɵtemplate(1, PivotComponent_div_14_button_1_span_1_Template, 1, 2, "span", 18); i0.ɵɵelementStart(2, "span"); i0.ɵɵtext(3); i0.ɵɵelementEnd()(); } if (rf & 2) { const tab_r25 = i0.ɵɵnextContext().$implicit; const ctx_r27 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-disabled", ctx_r27.disabled || tab_r25.disabled); i0.ɵɵproperty("routerLink", tab_r25.route)("routerLinkActiveOptions", tab_r25.routerLinkActiveOptions); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r25.iconClass); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(tab_r25.label); } } function PivotComponent_div_14_button_2_span_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span"); } if (rf & 2) { const tab_r25 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵclassMap(tab_r25.iconClass); } } function PivotComponent_div_14_button_2_span_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span", 20); } } function PivotComponent_div_14_button_2_Template(rf, ctx) { if (rf & 1) { const _r40 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 25); i0.ɵɵlistener("click", function PivotComponent_div_14_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r40); const tab_r25 = i0.ɵɵnextContext().$implicit; const ctx_r38 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r38.select(tab_r25)); }); i0.ɵɵtemplate(1, PivotComponent_div_14_button_2_span_1_Template, 1, 2, "span", 18); i0.ɵɵelementStart(2, "span"); i0.ɵɵtext(3); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, PivotComponent_div_14_button_2_span_4_Template, 1, 0, "span", 19); i0.ɵɵelementEnd(); } if (rf & 2) { const tab_r25 = i0.ɵɵnextContext().$implicit; const ctx_r28 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-disabled", ctx_r28.disabled || tab_r25.disabled); i0.ɵɵattribute("aria-description", tab_r25.showErrorStatusIcon ? ctx_r28.strings.MsftSmeShell.Angular.PivotTab.HasError : null); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r25.iconClass); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(tab_r25.label); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r25.showErrorStatusIcon); } } function PivotComponent_div_14_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, PivotComponent_div_14_button_1_Template, 4, 6, "button", 22); i0.ɵɵtemplate(2, PivotComponent_div_14_button_2_Template, 5, 6, "button", 23); i0.ɵɵelementEnd(); } if (rf & 2) { const tab_r25 = ctx.$implicit; const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r25.type === ctx_r4.pivotTabType.Routed); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r25.type === ctx_r4.pivotTabType.Static); } } function PivotComponent_section_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "section", 26, 27); i0.ɵɵelement(2, "router-outlet"); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-layout-none", !ctx_r5.selectionIsRouted); i0.ɵɵproperty("id", ctx_r5.idBag.tabPanel); i0.ɵɵattribute("aria-hidden", !ctx_r5.selectionIsRouted); } } function PivotComponent_ng_container_16_ng_container_1_ng_container_1_ng_container_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainer(0); } } function PivotComponent_ng_container_16_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "section", 28, 27); i0.ɵɵtemplate(3, PivotComponent_ng_container_16_ng_container_1_ng_container_1_ng_container_3_Template, 1, 0, "ng-container", 29); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r49 = i0.ɵɵnextContext(); const tab_r44 = ctx_r49.$implicit; const i_r45 = ctx_r49.index; const ctx_r46 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); i0.ɵɵclassProp("sme-layout-none", !ctx_r46.isSelected(tab_r44)); i0.ɵɵproperty("id", ctx_r46.idBag.tabPanel + i_r45); i0.ɵɵattribute("aria-hidden", !ctx_r46.isSelected(tab_r44)); i0.ɵɵadvance(2); i0.ɵɵproperty("ngTemplateOutlet", ctx_r46.switchTabByShowHide || ctx_r46.isSelected(tab_r44) ? tab_r44.contentTemplate : null); } } function PivotComponent_ng_container_16_ng_container_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, PivotComponent_ng_container_16_ng_container_1_ng_container_1_Template, 4, 5, "ng-container", 13); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const tab_r44 = ctx.$implicit; const ctx_r43 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", tab_r44.type === ctx_r43.pivotTabType.Static); } } function PivotComponent_ng_container_16_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, PivotComponent_ng_container_16_ng_container_1_Template, 2, 1, "ng-container", 3); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r6 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngForOf", ctx_r6.visibleTabs); } } /** * @smeDoc {@label Pivot @id sme-pivot-component} * * @overview * @file {@filepath ./examples/overview.md} * * @example {@label Static Tab @id static-tab} * @file {@filename component.html @filepath ./examples/static-tab.component.html} * * @example {@label Routed Tab @id routed-tab} * @file {@filename component.html @filepath ./examples/routed-tab.component.html} */ export class PivotComponent extends SpacerBaseDirective { /** * Initializes a new instance of the @see PivotComponent class. * @param injector The angular injection service. required by @SmeInjectableBase() decorator in the base @see BaseComponent class */ constructor(injector, layout) { super(injector); this.trayTabs = []; // Regulates the tabs that are added to the dropdown if necessary. this.moreTabsDisplay = 'More'; // Label for the dropdown menu tabs /** * Localized set of strings. */ this.strings = MsftSme.getStrings(); /** * The selected tab changed event */ this.selectionChange = new EventEmitter(); /** * The selected tab changed event triggered by click or keyboard navigation. */ this.selectionChangeByClick = new EventEmitter(); /** * Implementation of the Layout interface */ this.layoutChanged = new EventEmitter(); /** * Implementation of the Layout interface */ this.windowBreakpointChanged = new EventEmitter(); /** * Bindable property for tab types */ this.pivotTabType = PivotTabType; this.changeDetectorRef = injector.get(ChangeDetectorRef); if (layout) { this.pivotResponsiveWindowManager = new PivotResponsiveWindowManager(layout); // on parent layout changes, re-emit the layout change to our event this.subscriptions.push(layout.layoutChanged.subscribe((() => this.onLayoutChanged()))); // on window break point changes, emit the event about critical classes and styling updates signal. this.subscriptions.push(layout.windowBreakpointChanged.subscribe(() => this.onWindowBreakpointChanged())); this.deferredOnLayoutChanged(); } } /** * The source name to use for logging */ get logSourceName() { return 'PivotComponent'; } /** * @deprecated since 08/30/19. Please use alignTabs instead */ set alignHeader(value) { this.alignTabs = value; } /** * Indicates that routed tabs have been provided */ get hasRoutedTabs() { return this.tabs && this.tabs.some(t => t.type === PivotTabType.Routed); } /** * Indicates that static tabs have been provided */ get hasStaticTabs() { return this.tabs && this.tabs.some(t => t.type === PivotTabType.Static); } get visiTabs() { return this.tabs.filter(tab => tab.isVisible); } /** * Indicates that static tabs have been provided */ get selectionIsRouted() { return this.selection && this.selection.type === PivotTabType.Routed; } ngAfterContentInit() { if (this.tabs && this.tabs.first && !this.selection) { this.selection = this.tabs.first; } if (this.tabs.length < 1) { throw new Error('Pivot must contain child tabs. Expected at least one (1) tab'); } this.visibleTabs = this.tabs.toArray(); } ngAfterContentChecked() { this.changeDetectorRef.detectChanges(); } /** * Indicates of a given tab is selected * @param tab The tab to compare with */ isSelected(tab) { return this.selection && this.selection === tab; } /** * Force refresh for the pivot tabs. */ refresh(shouldEmit = false, byWindowSize = false) { this.updatePivotTabs(shouldEmit, byWindowSize); } /** * Selects a tab by clicking or keyboard navigation. * @param tab The tab to select by clicking or keyboard navigation. */ onClick(tab) { this.select(tab); this.selectionChangeByClick.emit(tab); } /** * Selects a tab * @param tab The tab to select */ select(tab) { // At any given time we should have an attribute that lets us know if a tab is visible or not. if (tab) { for (let i = 0; i < this.trayTabs.length; i++) { if (this.trayTabs[i] === tab) { if (this.visibleTabs && this.visibleTabs.length > 0) { const hiddenTab = this.visibleTabs.pop(); hiddenTab.isVisible = false; this.trayTabs.push(hiddenTab); } this.visibleTabs.push(tab); tab.isVisible = true; this.trayTabs.splice(i, 1); break; } } this.selection = tab; this.selectionChange.emit(tab); this.changeDetectorRef.detectChanges(); this.emitLayoutChanged(); } } /** * The on window breakpoint changed handler. * Adding yield for component to get ElementRef after initialization. */ onWindowBreakpointChanged() { if (!this.tabs || !this.tabs.toArray()) { return; } this.pivotResponsiveWindowManager.onWindowSizeChanged(this.pivotContents, this.idBag.tabPanel + this.tabs.toArray().indexOf(this.selection)); } /** * Emits the layout changed event to notify children about layout changed. */ emitLayoutChanged() { this.layoutChanged.emit(); } /** * On layout changed event handler, occurs every time the layout has been changed. */ onLayoutChanged() { this.updatePivotTabs(); } /** * The deferred layout changed handler. */ deferredOnLayoutChanged() { this.onLayoutChanged(); } /** * It gets the label from the pivot tab component. * @returns array of labels representing the pivot tabs. */ getLabels() { if (!this.tabs || !this.tabs.toArray()) { return []; } return this.tabs.toArray().map((a) => a.label); } /** * It handles the selection of pivot tab by label. * @param label the label for pivot tab to be selected. * @returns void. */ selectTabByLabel(label) { const tabComponent = this.getPivotTabComponentByLabel(label); if (!tabComponent) { return; } this.select(tabComponent); } /** * Creates the idBag used by this component to store unique element ids. * id values will be assigned by the @see BaseComponent super class. */ createIdBag() { return { tabPanel: '' }; } /** * Gets the initial host classes to be applied to this element */ getInitialHostClasses() { return super.getInitialHostClasses().concat([ 'sme-pivot' ]); } /** * Gets the pivot tab component by pivot tab label. * @param label the label string. * @returns the pivot tab component with the specific label. */ getPivotTabComponentByLabel(label) { if (!this.tabs || !this.tabs.toArray() || !this.tabs.toArray().length) { return; } const tabs = this.tabs.toArray(); for (let i = 0; i < tabs.length; i++) { if (tabs[i].label === label) { return tabs[i]; } } } /** * Main rendering functionality for the pivot tab * @param shouldEmit It indicates whether the layout changed event should be fired. * @param byWindowSize It indicates whether to use the window width when the hostElement width is 0. */ updatePivotTabs(shouldEmit = true, byWindowSize = false) { let currentFill = 0; this.visibleTabs = []; this.trayTabs = []; const host = this.hostElement.nativeElement; let tabBarWidth = host.offsetWidth; if (tabBarWidth === 0 && byWindowSize) { tabBarWidth = window.innerWidth; } let totalTabWidth = 0; const tabList = this.tabs.toArray(); for (let i = 0; i < this.tabs.length; i++) { const tab = tabList[i]; const tabWidth = tab.width; totalTabWidth += tabWidth; } if (totalTabWidth <= tabBarWidth) { for (let i = 0; i < this.tabs.length; ++i) { tabList[i].isVisible = true; this.visibleTabs.push(tabList[i]); } } else { let isMoreButtonWidthAdded = false; const visibleTabBarWidth = tabBarWidth; // Get the current selection if applicable. On window resize, the selection cannot lost target. let indexForSelection = -1; for (let i = 0; i < this.tabs.length; i++) { const tab = tabList[i]; if (tab === this.selection) { indexForSelection = i; break; } } // Force fit in the selection if (indexForSelection >= 0) { tabList[indexForSelection].isVisible = true; const tabWidth = tabList[indexForSelection].width; currentFill += tabWidth; } let prevWidth = 0; for (let i = 0; i < this.tabs.length; ++i) { const tab = tabList[i]; if (indexForSelection === i) { this.visibleTabs.push(tab); } else { const tabWidth = tab.width; prevWidth = tabWidth; if (currentFill + tabWidth > visibleTabBarWidth) { tab.isVisible = false; this.trayTabs.push(tab); if (!isMoreButtonWidthAdded) { isMoreButtonWidthAdded = true; // Pop the prev visible tab due to not compatible after adding the 'More' dropdown. // Guarantee that at least one tab will be shown at minimum. // If the prev item is selected, should not backtracking pop. if (this.selection && this.visibleTabs.length > 1 && this.selection !== this.visibleTabs[this.visibleTabs.length - 1]) { const poppedTab = this.visibleTabs.pop(); this.trayTabs.push(poppedTab); currentFill -= prevWidth; } // The actual width for the dropdown currentFill += this.dropDownButtonElement.nativeElement.offsetWidth; } } else { tab.isVisible = true; this.visibleTabs.push(tab); currentFill += tabWidth; } } } } if (shouldEmit) { this.emitLayoutChanged(); } } } /** @nocollapse */ PivotComponent.ɵfac = function PivotComponent_Factory(t) { return new (t || PivotComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(SME_LAYOUT_PROVIDER, 12)); }; /** @nocollapse */ PivotComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: PivotComponent, selectors: [["sme-pivot"]], contentQueries: function PivotComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, PivotTabComponent, 4); i0.ɵɵcontentQuery(dirIndex, PivotTabComponent, 4); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tabs = _t); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.visibleTabsQL = _t); } }, viewQuery: function PivotComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 5); i0.ɵɵviewQuery(_c1, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropDownButtonElement = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pivotContents = _t); } }, hostVars: 2, hostBindings: function PivotComponent_HostBindings(rf, ctx) { if (rf & 2) { i0.ɵɵclassProp("sme-disabled", ctx.disabled); } }, inputs: { selection: "selection", switchTabByShowHide: "switchTabByShowHide", headerText: "headerText", alignHeader: "alignHeader", alignTabs: "alignTabs", disabled: "disabled" }, outputs: { selectionChange: "selectionChange", selectionChangeByClick: "selectionChangeByClick", layoutChanged: "layoutChanged", windowBreakpointChanged: "windowBreakpointChanged" }, features: [i0.ɵɵProvidersFeature([ { provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => PivotComponent)) }, { provide: SME_PIVOT_TAB_CONTAINER_PROVIDER, useExisting: forwardRef((() => PivotComponent)) } ]), i0.ɵɵInheritDefinitionFeature], decls: 17, vars: 20, consts: [[1, "sme-arrange-stack-h"], ["class", "sme-position-flex-auto", 4, "ngIf"], ["role", "tablist"], [4, "ngFor", "ngForOf"], ["role", "menu"], ["role", "presentation", 1, "sme-position-flex-none"], ["dropDown", ""], ["type", "button", "role", "menuitem", "aria-haspopup", "true", 1, "sme-button-trigger", "sme-layout-action-bar-item-height", "sme-button-auto-width", "sme-dropdown-toggle"], ["dropDownButton", ""], [1, "sme-icon", "sme-icon-size-xxs", "sme-icon-chevronDown", "sme-margin-left-xs"], ["role", "menu", 1, "sme-dropdown-content", "sme-arrange-stack-v", "sme-position-stretch-h"], ["class", "sme-arrange-stack-h", 4, "ngFor", "ngForOf"], ["role", "tabpanel", 3, "id", "sme-layout-none", 4, "ngIf"], [4, "ngIf"], [1, "sme-position-flex-auto"], ["role", "tab", "class", "sme-layout-relative", 3, "routerLink", "disabled", "sme-disabled", "routerLinkActiveOptions", "sme-active", "smeRouterLinkActivated", 4, "ngIf"], ["tabindex", "0", "role", "tab", "class", "sme-layout-relative", 3, "disabled", "sme-disabled", "sme-active", "click", 4, "ngIf"], ["role", "tab", 1, "sme-layout-relative", 3, "routerLink", "disabled", "routerLinkActiveOptions", "smeRouterLinkActivated"], [3, "class", 4, "ngIf"], ["class", "sme-icon sme-icon-size-xxxs sme-icon-statusCircleInner sme-color-error sme-layout-absolute sme-padding-inset-none", 4, "ngIf"], [1, "sme-icon", "sme-icon-size-xxxs", "sme-icon-statusCircleInner", "sme-color-error", "sme-layout-absolute", "sme-padding-inset-none"], ["tabindex", "0", "role", "tab", 1, "sme-layout-relative", 3, "disabled", "click"], ["role", "menuitem", "class", "sme-layout-relative", "class", "sme-position-stretch-h", 3, "routerLink", "sme-disabled", "routerLinkActiveOptions", "smeRouterLinkActivated", 4, "ngIf"], ["role", "menuitem", "class", "sme-position-stretch-h", 3, "sme-disabled", "click", 4, "ngIf"], ["role", "menuitem", 1, "sme-position-stretch-h", 3, "routerLink", "routerLinkActiveOptions", "smeRouterLinkActivated"], ["role", "menuitem", 1, "sme-position-stretch-h", 3, "click"], ["role", "tabpanel", 3, "id"], ["pivotContents", ""], ["role", "tabpanel", 1, "sme-focus-zone", 3, "id"], [4, "ngTemplateOutlet"]], template: function PivotComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, PivotComponent_h4_1_Template, 2, 1, "h4", 1); i0.ɵɵelementStart(2, "header")(3, "div", 2); i0.ɵɵtemplate(4, PivotComponent_ng_container_4_Template, 3, 2, "ng-container", 3); i0.ɵɵelementStart(5, "div", 4)(6, "sme-dropdown", 5, 6)(8, "button", 7, 8)(10, "span"); i0.ɵɵtext(11); i0.ɵɵelementEnd(); i0.ɵɵelement(12, "span", 9); i0.ɵɵelementEnd(); i0.ɵɵelementStart(13, "div", 10); i0.ɵɵtemplate(14, PivotComponent_div_14_Template, 3, 2, "div", 11); i0.ɵɵelementEnd()()()()()(); i0.ɵɵtemplate(15, PivotComponent_section_15_Template, 3, 4, "section", 12); i0.ɵɵtemplate(16, PivotComponent_ng_container_16_Template, 2, 1, "ng-container", 13); } if (rf & 2) { const _r2 = i0.ɵɵreference(7); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.headerText); i0.ɵɵadvance(1); i0.ɵɵstyleProp("padding-left", ctx.noLeftPadding ? 0 : null); i0.ɵɵclassProp("sme-pivot-reverse-header", ctx.alignTabs === "right")("sme-position-stretch-h", !ctx.headerText); i0.ɵɵadvance(2); i0.ɵɵproperty("ngForOf", ctx.visibleTabs); i0.ɵɵadvance(2); i0.ɵɵclassProp("sme-layout-hidden", ctx.trayTabs.length === 0)("sme-layout-none", ctx.trayTabs.length === 0); i0.ɵɵadvance(2); i0.ɵɵclassProp("sme-toggled", _r2.isOpen); i0.ɵɵattribute("aria-label", ctx.moreTabsDisplay)("aria-expanded", _r2.isOpen); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx.moreTabsDisplay); i0.ɵɵadvance(3); i0.ɵɵproperty("ngForOf", ctx.trayTabs); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.hasRoutedTabs); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.hasStaticTabs); } }, dependencies: [i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i2.SmeRouterLinkDirective, i3.RouterOutlet, i3.RouterLink, i4.DropdownComponent], encapsulation: 2 }); __decorate([ Debounce(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], PivotComponent.prototype, "refresh", null); __decorate([ Yield(), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], PivotComponent.prototype, "onWindowBreakpointChanged", null); __decorate([ Yield(), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], PivotComponent.prototype, "onLayoutChanged", null); __decorate([ Debounce(), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], PivotComponent.prototype, "deferredOnLayoutChanged", null); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PivotComponent, [{ type: Component, args: [{ selector: 'sme-pivot', providers: [ { provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => PivotComponent)) }, { provide: SME_PIVOT_TAB_CONTAINER_PROVIDER, useExisting: forwardRef((() => PivotComponent)) } ], template: "<div class=\"sme-arrange-stack-h\">\r\n <h4 *ngIf=\"headerText\" class=\"sme-position-flex-auto\">{{headerText}}</h4>\r\n\r\n <header [class.sme-pivot-reverse-header]=\"alignTabs === 'right'\" [class.sme-position-stretch-h]=\"!headerText\" [style.paddingLeft]=\"noLeftPadding ? 0 : null\">\r\n <!-- Cannot use \"sme-padding-left-none\" CSS class in <header> above since sme-padding-left-none doesn't have enough selector weight to override sme-pivot>[role=\"tablist\"] selector -->\r\n <div role=\"tablist\">\r\n <ng-container *ngFor=\"let tab of visibleTabs; let i = index\">\r\n <!-- Routed Tab item -->\r\n <button *ngIf=\"tab.type === pivotTabType.Routed\" role=\"tab\" [routerLink]=\"tab.route\" class=\"sme-layout-relative\"\r\n [attr.aria-controls]=\"idBag.tabPanel\" [attr.aria-disabled]=\"disabled || tab.disabled\"\r\n [disabled]=\"disabled || tab.disabled\" [class.sme-disabled]=\"disabled || tab.disabled\"\r\n [attr.aria-selected]=\"isSelected(tab)\" [routerLinkActiveOptions]=\"tab.routerLinkActiveOptions\"\r\n [class.sme-active]=\"isSelected(tab)\" (smeRouterLinkActivated)=\"select(tab)\">\r\n <span *ngIf=\"tab.iconClass\" [class]=\"tab.iconClass\"></span>\r\n <span>{{tab.label}}</span>\r\n <span *ngIf=\"tab.showErrorStatusIcon\"\r\n class=\"sme-icon sme-icon-size-xxxs sme-icon-statusCircleInner sme-color-error sme-layout-absolute sme-padding-inset-none\"></span>\r\n </button>\r\n\r\n <!-- Static Tab Item -->\r\n <button *ngIf=\"tab.type === pivotTabType.Static\" tabindex=\"0\" role=\"tab\" class=\"sme-layout-relative\"\r\n [attr.aria-controls]=\"idBag.tabPanel + i\" [attr.aria-disabled]=\"disabled || tab.disabled\"\r\n [attr.aria-description]=\"tab.showErrorStatusIcon ? strings.MsftSmeShell.Angular.PivotTab.HasError : null\"\r\n [disabled]=\"disabled || tab.disabled\" [class.sme-disabled]=\"disabled || tab.disabled\"\r\n [attr.aria-selected]=\"isSelected(tab)\" [class.sme-active]=\"isSelected(tab)\"\r\n (click)=\"select(tab)\">\r\n <span *ngIf=\"tab.iconClass\" [class]=\"tab.iconClass\"></span>\r\n <span>{{tab.label}}</span>\r\n <span *ngIf=\"tab.showErrorStatusIcon\"\r\n class=\"sme-icon sme-icon-size-xxxs sme-icon-statusCircleInner sme-color-error sme-layout-absolute sme-padding-inset-none\"></span>\r\n </button>\r\n </ng-container>\r\n <div role=\"menu\">\r\n <sme-dropdown #dropDown role=\"presentation\" class=\"sme-position-flex-none\"\r\n [class.sme-layout-hidden]=\"trayTabs.length === 0\" [class.sme-layout-none]=\"trayTabs.length === 0\">\r\n <button #dropDownButton type=\"button\" [attr.aria-label]=\"moreTabsDisplay\" role=\"menuitem\"\r\n class=\"sme-layout-relative\"\r\n class=\"sme-button-trigger sme-layout-action-bar-item-height sme-button-auto-width sme-dropdown-toggle\"\r\n [class.sme-toggled]=\"dropDown.isOpen\" [attr.aria-expanded]=\"dropDown.isOpen\" aria-haspopup=\"true\">\r\n <span>{{ moreTabsDisplay }}</span>\r\n <span class=\"sme-icon sme-icon-size-xxs sme-icon-chevronDown sme-margin-left-xs\"></span>\r\n </button>\r\n <div role=\"menu\" class=\"sme-dropdown-content sme-arrange-stack-v sme-position-stretch-h\">\r\n <div class=\"sme-arrange-stack-h\" *ngFor=\"let tab of trayTabs; let i = index\">\r\n <button *ngIf=\"tab.type === pivotTabType.Routed\" role=\"menuitem\" [routerLink]=\"tab.route\"\r\n class=\"sme-layout-relative\" class=\"sme-position-stretch-h\"\r\n [class.sme-disabled]=\"disabled || tab.disabled\" (smeRouterLinkActivated)=\"select(tab)\"\r\n [routerLinkActiveOptions]=\"tab.routerLinkActiveOptions\">\r\n <span *ngIf=\"tab.iconClass\" [class]=\"tab.iconClass\"></span>\r\n <span>{{tab.label}}</span>\r\n </button>\r\n <button *ngIf=\"tab.type === pivotTabType.Static\" role=\"menuitem\"\r\n [attr.aria-description]=\"tab.showErrorStatusIcon ? strings.MsftSmeShell.Angular.PivotTab.HasError : null\" class=\"sme-position-stretch-h\"\r\n [class.sme-disabled]=\"disabled || tab.disabled\" (click)=\"select(tab)\">\r\n <span *ngIf=\"tab.iconClass\" [class]=\"tab.iconClass\"></span>\r\n <span>{{tab.label}}</span>\r\n <span *ngIf=\"tab.showErrorStatusIcon\"\r\n class=\"sme-icon sme-icon-size-xxxs sme-icon-statusCircleInner sme-color-error sme-layout-absolute sme-padding-inset-none\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </sme-dropdown>\r\n </div>\r\n </div>\r\n </header>\r\n</div>\r\n\r\n<!-- Routed Tab Content -->\r\n<section #pivotContents *ngIf=\"hasRoutedTabs\" role=\"tabpanel\" [id]=\"idBag.tabPanel\" [class.sme-layout-none]=\"!selectionIsRouted\"\r\n [attr.aria-hidden]=\"!selectionIsRouted\">\r\n <router-outlet></router-outlet>\r\n</section>\r\n\r\n<!-- Static Tab Content -->\r\n<ng-container *ngIf=\"hasStaticTabs\">\r\n <ng-container *ngFor=\"let tab of visibleTabs; let i = index\">\r\n <ng-container *ngIf=\"tab.type === pivotTabType.Static\">\r\n <section #pivotContents role=\"tabpanel\" [id]=\"idBag.tabPanel + i\" [class.sme-layout-none]=\"!isSelected(tab)\"\r\n [attr.aria-hidden]=\"!isSelected(tab)\" class=\"sme-focus-zone\">\r\n <ng-container *ngTemplateOutlet=\"(switchTabByShowHide || isSelected(tab)) ? tab.contentTemplate : null\">\r\n </ng-container>\r\n </section>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n" }] }], function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{ type: SkipSelf }, { type: Optional }, { type: Inject, args: [SME_LAYOUT_PROVIDER] }] }]; }, { selection: [{ type: Input }], switchTabByShowHide: [{ type: Input }], headerText: [{ type: Input }], alignHeader: [{ type: Input }], alignTabs: [{ type: Input }], selectionChange: [{ type: Output }], selectionChangeByClick: [{ type: Output }], layoutChanged: [{ type: Output }], windowBreakpointChanged: [{ type: Output }], tabs: [{ type: ContentChildren, args: [PivotTabComponent] }], visibleTabsQL: [{ type: ContentChildren, args: [PivotTabComponent] }], disabled: [{ type: HostBinding, args: ['class.sme-disabled'] }, { type: Input }], dropDownButtonElement: [{ type: ViewChild, args: ['dropDownButton'] }], pivotContents: [{ type: ViewChildren, args: ['pivotContents'] }], refresh: [], onWindowBreakpointChanged: [], onLayoutChanged: [], deferredOnLayoutChanged: [] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvcGl2b3QvcGl2b3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvcGl2b3QvcGl2b3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUVqRyxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztJQzNCdkUsOEJBQXNEO0lBQUEsWUFBYztJQUFBLGlCQUFLOzs7SUFBbkIsZUFBYztJQUFkLHVDQUFjOzs7SUFZNUQsdUJBQTJEOzs7SUFBL0IsK0JBQXVCOzs7SUFFbkQsMkJBQ21JOzs7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