UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

133 lines 15.4 kB
import { __decorate, __metadata } from "tslib"; import { Component, ContentChildren, ElementRef, Injector, Input, QueryList } from '@angular/core'; import { Debounce } from '@microsoft/windows-admin-center-sdk/core/base/decorators/debounce.decorators'; import { Dom } from '@microsoft/windows-admin-center-sdk/core/dom/dom'; import { CoreBaseComponent } from '../common/base.component'; import * as i0 from "@angular/core"; const _c0 = ["pane"]; const _c1 = ["*"]; export class GuidedPanelComponent extends CoreBaseComponent { /** * Constructs a new instance of @see GuidedPanelComponent * @param injector the injector service for the base class of this component */ constructor(injector, elementRef) { super(injector); this.elementRef = elementRef; this.paneHistory = []; } /** * The source name to use for logging */ get logSourceName() { return 'GuidedPanelComponent'; } ngAfterContentInit() { this.reset(); } /** * Resets the panel to the first pane */ reset() { if (!this.firstPaneId) { throw new Error(`No firstPaneId Defined. Please set the firstPaneId attribute on sme-guided-panel`); } this.activate(this.firstPaneId); } /** * deactivates the currently active pane * @param modifyHistory If true, adds the active pane to history before deactivating it */ deactivate(modifyHistory) { if (this.activePane) { if (modifyHistory) { this.paneHistory.push(this.activePane.paneId); } this.activePane.active = false; this.activePane = null; } } /** * Find a pane by its id * @param id The id of the pane */ find(id) { const pane = this.panes.find(p => p.paneId === id); if (!pane) { throw new Error(`Cannot find a guided pane with the id: ${id}.`); } return pane; } /** * Activate a pane by its id * @param id The id of the pane */ activate(id) { const currentElement = document.activeElement; // deactivate the current pane this.deactivate(true); // set the new active pane this.activePane = this.find(id); // set the new active panes state to active this.activePane.active = true; // reset history if we are back at the first pane if (id === this.firstPaneId) { this.paneHistory = []; } this.focusOnPaneElement(currentElement); } /** * navigates back in the pane history */ back() { if (!this.paneHistory || this.paneHistory.length === 0) { throw new Error(`Cannot go back. Pane history is empty.`); } // get the previous id off the stack const previous = this.paneHistory.pop(); // deactivate the current pane this.deactivate(false); // activate the previous panel this.activate(previous); } /** * If pane activation made us lose focus, refocus on first thing in the pane * @param previousElement the element that was active before activating the new pane */ focusOnPaneElement(previousElement) { if (!document.activeElement.isSameNode(previousElement)) { const next = Dom.getNextFocusableElement(this.elementRef.nativeElement); if (next) { next.focus(); } } } } /** @nocollapse */ GuidedPanelComponent.ɵfac = function GuidedPanelComponent_Factory(t) { return new (t || GuidedPanelComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ElementRef)); }; /** @nocollapse */ GuidedPanelComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: GuidedPanelComponent, selectors: [["sme-guided-panel"]], contentQueries: function GuidedPanelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, _c0, 4); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.panes = _t); } }, inputs: { firstPaneId: "firstPaneId" }, features: [i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1, decls: 3, vars: 0, consts: [[1, "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-arrange-stack-v"], [1, "sme-layout-relative", "sme-position-flex-auto"]], template: function GuidedPanelComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(); i0.ɵɵelementStart(0, "div", 0)(1, "div", 1); i0.ɵɵprojection(2); i0.ɵɵelementEnd()(); } }, encapsulation: 2 }); __decorate([ Debounce(), __metadata("design:type", Function), __metadata("design:paramtypes", [Element]), __metadata("design:returntype", void 0) ], GuidedPanelComponent.prototype, "focusOnPaneElement", null); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GuidedPanelComponent, [{ type: Component, args: [{ selector: 'sme-guided-panel', template: "<div class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v\">\r\n <div class=\"sme-layout-relative sme-position-flex-auto\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>" }] }], function () { return [{ type: i0.Injector }, { type: i0.ElementRef }]; }, { panes: [{ type: ContentChildren, args: ['pane'] }], firstPaneId: [{ type: Input }], focusOnPaneElement: [] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZGVkLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2d1aWRlZC1wYW5lbC9ndWlkZWQtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZ3VpZGVkLXBhbmVsL2d1aWRlZC1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDeEcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBTTdELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFrQnZEOzs7T0FHRztJQUNILFlBQVksUUFBa0IsRUFBVSxVQUFzQjtRQUMxRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEb0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVJ2RCxnQkFBVyxHQUFhLEVBQUUsQ0FBQztJQVVsQyxDQUFDO0lBdkJEOztHQUVEO0lBQ0MsSUFBYyxhQUFhO1FBQ3ZCLE9BQU8sc0JBQXNCLENBQUM7SUFDbEMsQ0FBQztJQW9CTSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUM7U0FDdkc7UUFDRCxJQUFJ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bnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERlYm91bmNlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3VpZGVkUGFuZUNvbXBvbmVudCB9IGZyb20gJy4vZ3VpZGVkLXBhbmUvZ3VpZGVkLXBhbmUuY29tcG9uZW50JztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1ndWlkZWQtcGFuZWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2d1aWRlZC1wYW5lbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEd1aWRlZFBhbmVsQ29tcG9uZW50IGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcclxuICAgIC8qKlxyXG4gKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnR3VpZGVkUGFuZWxDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ3BhbmUnKVxyXG4gICAgcHVibGljIHBhbmVzOiBRdWVyeUxpc3Q8R3VpZGVkUGFuZUNvbXBvbmVudD47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmaXJzdFBhbmVJZDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBwYW5lSGlzdG9yeTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgYWN0aXZlUGFuZTogR3VpZGVkUGFuZUNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBHdWlkZWRQYW5lbENvbXBvbmVudFxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIHRoZSBpbmplY3RvciBzZXJ2aWNlIGZvciB0aGUgYmFzZSBjbGFzcyBvZiB0aGlzIGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgcGFuZWwgdG8gdGhlIGZpcnN0IHBhbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2V0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5maXJzdFBhbmVJZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZpcnN0UGFuZUlkIERlZmluZWQuIFBsZWFzZSBzZXQgdGhlIGZpcnN0UGFuZUlkIGF0dHJpYnV0ZSBvbiBzbWUtZ3VpZGVkLXBhbmVsYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aXZhdGUodGhpcy5maXJzdFBhbmVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWFjdGl2YXRlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBwYW5lXHJcbiAgICAgKiBAcGFyYW0gbW9kaWZ5SGlzdG9yeSBJZiB0cnVlLCBhZGRzIHRoZSBhY3RpdmUgcGFuZSB0byBoaXN0b3J5IGJlZm9yZSBkZWFjdGl2YXRpbmcgaXRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkZWFjdGl2YXRlKG1vZGlmeUhpc3Rvcnk6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVQYW5lKSB7XHJcbiAgICAgICAgICAgIGlmIChtb2RpZnlIaXN0b3J5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVIaXN0b3J5LnB1c2godGhpcy5hY3RpdmVQYW5lLnBhbmVJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVQYW5lLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVBhbmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgYSBwYW5lIGJ5IGl0cyBpZFxyXG4gICAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgcGFuZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZpbmQoaWQ6IHN0cmluZyk6IEd1aWRlZFBhbmVDb21wb25lbnQge1xyXG4gICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzLmZpbmQocCA9PiBwLnBhbmVJZCA9PT0gaWQpO1xyXG4gICAgICAgIGlmICghcGFuZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgZ3VpZGVkIHBhbmUgd2l0aCB0aGUgaWQ6ICR7aWR9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFuZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFjdGl2YXRlIGEgcGFuZSBieSBpdHMgaWRcclxuICAgICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHBhbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFjdGl2YXRlKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgLy8gZGVhY3RpdmF0ZSB0aGUgY3VycmVudCBwYW5lXHJcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlKHRydWUpO1xyXG4gICAgICAgIC8vIHNldCB0aGUgbmV3IGFjdGl2ZSBwYW5lXHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYW5lID0gdGhpcy5maW5kKGlkKTtcclxuICAgICAgICAvLyBzZXQgdGhlIG5ldyBhY3RpdmUgcGFuZXMgc3RhdGUgdG8gYWN0aXZlXHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYW5lLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgLy8gcmVzZXQgaGlzdG9yeSBpZiB3ZSBhcmUgYmFjayBhdCB0aGUgZmlyc3QgcGFuZVxyXG4gICAgICAgIGlmIChpZCA9PT0gdGhpcy5maXJzdFBhbmVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhbmVIaXN0b3J5ID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvY3VzT25QYW5lRWxlbWVudChjdXJyZW50RWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBuYXZpZ2F0ZXMgYmFjayBpbiB0aGUgcGFuZSBoaXN0b3J5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBiYWNrKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wYW5lSGlzdG9yeSB8fCB0aGlzLnBhbmVIaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnbyBiYWNrLiBQYW5lIGhpc3RvcnkgaXMgZW1wdHkuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdldCB0aGUgcHJldmlvdXMgaWQgb2ZmIHRoZSBzdGFja1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5wYW5lSGlzdG9yeS5wb3AoKTtcclxuICAgICAgICAvLyBkZWFjdGl2YXRlIHRoZSBjdXJyZW50IHBhbmVcclxuICAgICAgICB0aGlzLmRlYWN0aXZhdGUoZmFsc2UpO1xyXG4gICAgICAgIC8vIGFjdGl2YXRlIHRoZSBwcmV2aW91cyBwYW5lbFxyXG4gICAgICAgIHRoaXMuYWN0aXZhdGUocHJldmlvdXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcGFuZSBhY3RpdmF0aW9uIG1hZGUgdXMgbG9zZSBmb2N1cywgcmVmb2N1cyBvbiBmaXJzdCB0aGluZyBpbiB0aGUgcGFuZVxyXG4gICAgICogQHBhcmFtIHByZXZpb3VzRWxlbWVudCB0aGUgZWxlbWVudCB0aGF0IHdhcyBhY3RpdmUgYmVmb3JlIGFjdGl2YXRpbmcgdGhlIG5ldyBwYW5lXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIGZvY3VzT25QYW5lRWxlbWVudChwcmV2aW91c0VsZW1lbnQ6IEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaXNTYW1lTm9kZShwcmV2aW91c0VsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgbmV4dC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlLXBob25lLXVwIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lIHNtZS1hcnJhbmdlLXN0YWNrLXZcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIj5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19