UNPKG

carbon-components-angular

Version:
175 lines 15 kB
import { Component, ContentChildren, Input, HostBinding } from "@angular/core"; import { SideNavItem } from "./sidenav-item.component"; import { Subscription } from "rxjs"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "./sidenav-item.component"; /** * `SideNavMenu` provides a method to group `SideNavItem`s under a common heading. */ export class SideNavMenu { constructor() { this.navItem = true; this.navItemIcon = true; this.role = "listitem"; /** * Use the routerLink attribute on <a> tag for navigation instead of using event handlers */ this.useRouter = false; /** * Controls the visibility of the child `SideNavItem`s */ this.expanded = false; /** * Controls the active status indicator on the menu if there is an active * child sidenav item. */ this.hasActiveChild = false; this.activeItemsSubscription = new Subscription(); } get navItemActive() { return this.hasActiveChild; } ngAfterContentInit() { setTimeout(() => { this.sidenavItems.forEach(item => { item.isSubMenu = true; this.findActiveChildren(); const activeItemSubscription = item.selected.subscribe(() => { this.findActiveChildren(); }); this.activeItemsSubscription.add(activeItemSubscription); }); this.sidenavItems.changes.subscribe(() => { this.sidenavItems.forEach(item => { item.isSubMenu = true; this.findActiveChildren(); const activeItemSubscription = item.selected.subscribe(() => { this.findActiveChildren(); }); this.activeItemsSubscription.add(activeItemSubscription); }); }); }); } ngOnDestroy() { this.activeItemsSubscription.unsubscribe(); } toggle() { this.expanded = !this.expanded; } findActiveChildren() { this.hasActiveChild = this.sidenavItems.some(item => item.active); } } SideNavMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SideNavMenu, deps: [], target: i0.ɵɵFactoryTarget.Component }); SideNavMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SideNavMenu, selector: "cds-sidenav-menu, ibm-sidenav-menu", inputs: { useRouter: "useRouter", title: "title", expanded: "expanded", hasActiveChild: "hasActiveChild", menuItems: "menuItems" }, host: { properties: { "class.cds--side-nav__item": "this.navItem", "class.cds--side-nav__item--icon": "this.navItemIcon", "class.cds--side-nav__item--active": "this.navItemActive", "attr.role": "this.role" } }, queries: [{ propertyName: "sidenavItems", predicate: SideNavItem }], ngImport: i0, template: ` <button (click)="toggle()" class="cds--side-nav__submenu" aria-haspopup="true" [attr.aria-expanded]="expanded" type="button"> <div class="cds--side-nav__icon"> <ng-content select="svg, [icon]"></ng-content> </div> <span class="cds--side-nav__submenu-title">{{title}}</span> <div class="cds--side-nav__icon cds--side-nav__icon--small cds--side-nav__submenu-chevron"> <svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change: transform;" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true"> <path d="M16 22L6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path> </svg> </div> </button> <div class="cds--side-nav__menu" role="list"> <ng-content></ng-content> <ng-container *ngFor="let menuItem of menuItems"> <cds-sidenav-item [href]="menuItem.href" [route]="menuItem.route" [routeExtras]="menuItem.routeExtras" [useRouter]="useRouter" [isSubMenu]="true"> {{ menuItem.content }} </cds-sidenav-item> </ng-container> </div> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.SideNavItem, selector: "cds-sidenav-item, ibm-sidenav-item", inputs: ["href", "useRouter", "active", "route", "isSubMenu", "routeExtras", "title"], outputs: ["navigation", "selected"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SideNavMenu, decorators: [{ type: Component, args: [{ selector: "cds-sidenav-menu, ibm-sidenav-menu", template: ` <button (click)="toggle()" class="cds--side-nav__submenu" aria-haspopup="true" [attr.aria-expanded]="expanded" type="button"> <div class="cds--side-nav__icon"> <ng-content select="svg, [icon]"></ng-content> </div> <span class="cds--side-nav__submenu-title">{{title}}</span> <div class="cds--side-nav__icon cds--side-nav__icon--small cds--side-nav__submenu-chevron"> <svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change: transform;" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true"> <path d="M16 22L6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path> </svg> </div> </button> <div class="cds--side-nav__menu" role="list"> <ng-content></ng-content> <ng-container *ngFor="let menuItem of menuItems"> <cds-sidenav-item [href]="menuItem.href" [route]="menuItem.route" [routeExtras]="menuItem.routeExtras" [useRouter]="useRouter" [isSubMenu]="true"> {{ menuItem.content }} </cds-sidenav-item> </ng-container> </div> ` }] }], propDecorators: { navItem: [{ type: HostBinding, args: ["class.cds--side-nav__item"] }], navItemIcon: [{ type: HostBinding, args: ["class.cds--side-nav__item--icon"] }], navItemActive: [{ type: HostBinding, args: ["class.cds--side-nav__item--active"] }], role: [{ type: HostBinding, args: ["attr.role"] }], useRouter: [{ type: Input }], title: [{ type: Input }], expanded: [{ type: Input }], hasActiveChild: [{ type: Input }], menuItems: [{ type: Input }], sidenavItems: [{ type: ContentChildren, args: [SideNavItem] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91aS1zaGVsbC9zaWRlbmF2L3NpZGVuYXYtbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUdMLFdBQVcsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUdwQzs7R0FFRztBQTJDSCxNQUFNLE9BQU8sV0FBVztJQTFDeEI7UUEyQzJDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDVCxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUl6QyxTQUFJLEdBQUcsVUFBVSxDQUFDO1FBRTVDOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQU0zQjs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUI7OztXQUdHO1FBQ00sbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFNdEIsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQXFDdkQ7SUFqRUEsSUFBc0QsYUFBYTtRQUNsRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDNUIsQ0FBQztJQTRCRCxrQkFBa0I7UUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUMzRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzFELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUN0QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQzNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUMzQixDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNO1FBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUVTLGtCQUFrQjtRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLENBQUM7O3dHQW5FVyxXQUFXOzRGQUFYLFdBQVcsOGJBNkJOLFdBQVcsNkJBckVsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFzQ1Q7MkZBRVcsV0FBVztrQkExQ3ZCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNDVDtpQkFDRDs4QkFFMEMsT0FBTztzQkFBaEQsV0FBVzt1QkFBQywyQkFBMkI7Z0JBQ1EsV0FBVztzQkFBMUQsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBQ1EsYUFBYTtzQkFBbEUsV0FBVzt1QkFBQyxtQ0FBbUM7Z0JBR3RCLElBQUk7c0JBQTdCLFdBQVc7dUJBQUMsV0FBVztnQkFLZixTQUFTO3NCQUFqQixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFd0IsWUFBWTtzQkFBekMsZUFBZTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGRyZW4sXG5cdElucHV0LFxuXHRRdWVyeUxpc3QsXG5cdE9uRGVzdHJveSxcblx0SG9zdEJpbmRpbmdcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFNpZGVOYXZJdGVtIH0gZnJvbSBcIi4vc2lkZW5hdi1pdGVtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFNpZGVOYXZJdGVtSW50ZXJmYWNlIH0gZnJvbSBcIi4vc2lkZW5hdi1pdGVtLmludGVyZmFjZVwiO1xuXG4vKipcbiAqIGBTaWRlTmF2TWVudWAgcHJvdmlkZXMgYSBtZXRob2QgdG8gZ3JvdXAgYFNpZGVOYXZJdGVtYHMgdW5kZXIgYSBjb21tb24gaGVhZGluZy5cbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1zaWRlbmF2LW1lbnUsIGlibS1zaWRlbmF2LW1lbnVcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8YnV0dG9uXG5cdFx0XHQoY2xpY2spPVwidG9nZ2xlKClcIlxuXHRcdFx0Y2xhc3M9XCJjZHMtLXNpZGUtbmF2X19zdWJtZW51XCJcblx0XHRcdGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcblx0XHRcdFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuXHRcdFx0dHlwZT1cImJ1dHRvblwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2lkZS1uYXZfX2ljb25cIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwic3ZnLCBbaWNvbl1cIj48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1zaWRlLW5hdl9fc3VibWVudS10aXRsZVwiPnt7dGl0bGV9fTwvc3Bhbj5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNpZGUtbmF2X19pY29uIGNkcy0tc2lkZS1uYXZfX2ljb24tLXNtYWxsIGNkcy0tc2lkZS1uYXZfX3N1Ym1lbnUtY2hldnJvblwiPlxuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Zm9jdXNhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCJcblx0XHRcdFx0XHRzdHlsZT1cIndpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XCJcblx0XHRcdFx0XHR4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcblx0XHRcdFx0XHR3aWR0aD1cIjIwXCJcblx0XHRcdFx0XHRoZWlnaHQ9XCIyMFwiXG5cdFx0XHRcdFx0dmlld0JveD1cIjAgMCAzMiAzMlwiXG5cdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0PHBhdGggZD1cIk0xNiAyMkw2IDEybDEuNC0xLjQgOC42IDguNiA4LjYtOC42TDI2IDEyelwiPjwvcGF0aD5cblx0XHRcdFx0PC9zdmc+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2J1dHRvbj5cblx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zaWRlLW5hdl9fbWVudVwiIHJvbGU9XCJsaXN0XCI+XG5cdFx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBtZW51SXRlbXNcIj5cblx0XHRcdFx0PGNkcy1zaWRlbmF2LWl0ZW1cblx0XHRcdFx0XHRbaHJlZl09XCJtZW51SXRlbS5ocmVmXCJcblx0XHRcdFx0XHRbcm91dGVdPVwibWVudUl0ZW0ucm91dGVcIlxuXHRcdFx0XHRcdFtyb3V0ZUV4dHJhc109XCJtZW51SXRlbS5yb3V0ZUV4dHJhc1wiXG5cdFx0XHRcdFx0W3VzZVJvdXRlcl09XCJ1c2VSb3V0ZXJcIlxuXHRcdFx0XHRcdFtpc1N1Yk1lbnVdPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdHt7IG1lbnVJdGVtLmNvbnRlbnQgfX1cblx0XHRcdFx0PC9jZHMtc2lkZW5hdi1pdGVtPlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdGBcbn0pXG5leHBvcnQgY2xhc3MgU2lkZU5hdk1lbnUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXNpZGUtbmF2X19pdGVtXCIpIG5hdkl0ZW0gPSB0cnVlO1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXNpZGUtbmF2X19pdGVtLS1pY29uXCIpIG5hdkl0ZW1JY29uID0gdHJ1ZTtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1zaWRlLW5hdl9faXRlbS0tYWN0aXZlXCIpIGdldCBuYXZJdGVtQWN0aXZlKCkge1xuXHRcdHJldHVybiB0aGlzLmhhc0FjdGl2ZUNoaWxkO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImF0dHIucm9sZVwiKSByb2xlID0gXCJsaXN0aXRlbVwiO1xuXG5cdC8qKlxuXHQgKiBVc2UgdGhlIHJvdXRlckxpbmsgYXR0cmlidXRlIG9uIDxhPiB0YWcgZm9yIG5hdmlnYXRpb24gaW5zdGVhZCBvZiB1c2luZyBldmVudCBoYW5kbGVyc1xuXHQgKi9cblx0QElucHV0KCkgdXNlUm91dGVyID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEhlYWRpbmcgZm9yIHRoZSBncm91cFxuXHQgKi9cblx0QElucHV0KCkgdGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjaGlsZCBgU2lkZU5hdkl0ZW1gc1xuXHQgKi9cblx0QElucHV0KCkgZXhwYW5kZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIENvbnRyb2xzIHRoZSBhY3RpdmUgc3RhdHVzIGluZGljYXRvciBvbiB0aGUgbWVudSBpZiB0aGVyZSBpcyBhbiBhY3RpdmVcblx0ICogY2hpbGQgc2lkZW5hdiBpdGVtLlxuXHQgKi9cblx0QElucHV0KCkgaGFzQWN0aXZlQ2hpbGQgPSBmYWxzZTtcblxuXHRASW5wdXQoKSBtZW51SXRlbXM6IFNpZGVOYXZJdGVtSW50ZXJmYWNlW107XG5cblx0QENvbnRlbnRDaGlsZHJlbihTaWRlTmF2SXRlbSkgc2lkZW5hdkl0ZW1zOiBRdWVyeUxpc3Q8U2lkZU5hdkl0ZW0+O1xuXG5cdHByb3RlY3RlZCBhY3RpdmVJdGVtc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuXHRuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLnNpZGVuYXZJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuXHRcdFx0XHRpdGVtLmlzU3ViTWVudSA9IHRydWU7XG5cdFx0XHRcdHRoaXMuZmluZEFjdGl2ZUNoaWxkcmVuKCk7XG5cdFx0XHRcdGNvbnN0IGFjdGl2ZUl0ZW1TdWJzY3JpcHRpb24gPSBpdGVtLnNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maW5kQWN0aXZlQ2hpbGRyZW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYWN0aXZlSXRlbXNTdWJzY3JpcHRpb24uYWRkKGFjdGl2ZUl0ZW1TdWJzY3JpcHRpb24pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuc2lkZW5hdkl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0dGhpcy5zaWRlbmF2SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcblx0XHRcdFx0XHRpdGVtLmlzU3ViTWVudSA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5maW5kQWN0aXZlQ2hpbGRyZW4oKTtcblx0XHRcdFx0XHRjb25zdCBhY3RpdmVJdGVtU3Vic2NyaXB0aW9uID0gaXRlbS5zZWxlY3RlZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5maW5kQWN0aXZlQ2hpbGRyZW4oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLmFjdGl2ZUl0ZW1zU3Vic2NyaXB0aW9uLmFkZChhY3RpdmVJdGVtU3Vic2NyaXB0aW9uKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMuYWN0aXZlSXRlbXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdHRvZ2dsZSgpIHtcblx0XHR0aGlzLmV4cGFuZGVkID0gIXRoaXMuZXhwYW5kZWQ7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZmluZEFjdGl2ZUNoaWxkcmVuKCkge1xuXHRcdHRoaXMuaGFzQWN0aXZlQ2hpbGQgPSB0aGlzLnNpZGVuYXZJdGVtcy5zb21lKGl0ZW0gPT4gaXRlbS5hY3RpdmUpO1xuXHR9XG59XG4iXX0=