@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
670 lines • 83.4 kB
JavaScript
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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