carbon-components-angular
Version:
Next generation components
204 lines • 16.3 kB
JavaScript
import { Component, HostBinding, Input, ViewEncapsulation } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "carbon-components-angular/i18n";
import * as i2 from "@angular/common";
import * as i3 from "./sidenav-item.component";
import * as i4 from "./sidenav-menu.component";
/**
* `Sidenav` is a fixed left navigation that may contain `SideNavItem`s or `SideNavMenu`s
*
* [See demo](../../?path=/story/components-ui-shell--side-navigation)
*/
export class SideNav {
constructor(i18n) {
this.i18n = i18n;
this.hostClass = true;
this.ariaLabel = "Side navigation";
/**
* Controls the expanded (`true`) or collapsed (`false`) state when on a small screen.
*/
this.expanded = true;
/**
* Controls the hidden (`true`) or visible (`false`) state
*/
this.hidden = false;
this.rail = false;
this.ux = true;
this.allowExpansion = false;
/**
* Use the routerLink attribute on <a> tag for navigation instead of using event handlers
*/
this.useRouter = false;
}
toggle() {
this.expanded = !this.expanded;
}
}
SideNav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SideNav, deps: [{ token: i1.I18n }], target: i0.ɵɵFactoryTarget.Component });
SideNav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SideNav, selector: "cds-sidenav, ibm-sidenav", inputs: { ariaLabel: "ariaLabel", expanded: "expanded", hidden: "hidden", rail: "rail", allowExpansion: "allowExpansion", navigationItems: "navigationItems", useRouter: "useRouter" }, host: { properties: { "class.cds--side-nav": "this.hostClass", "class.cds--side-nav--expanded": "this.expanded", "class.cds--side-nav--hidden": "this.hidden", "class.cds--side-nav--rail": "this.rail", "class.cds--side-nav__navigation": "this.ux" } }, ngImport: i0, template: `
<nav class="cds--side-nav__items" [attr.aria-label]="ariaLabel">
<ng-content select="cds-sidenav-header,ibm-sidenav-header"></ng-content>
<div role="list">
<div class="cds--side-nav__header-navigation cds--side-nav__header-divider">
<ng-container *ngFor="let navigationItem of navigationItems">
<cds-sidenav-item
*ngIf="navigationItem.type === 'item'"
[]="navigationItem.href"
[]="navigationItem.route"
[]="navigationItem.routeExtras"
[]="useRouter"
[]="navigationItem.title">
{{ navigationItem.content }}
</cds-sidenav-item>
<cds-sidenav-menu
*ngIf="navigationItem.type === 'menu'"
[]="navigationItem.title"
[]="useRouter"
[]="navigationItem.menuItems">
</cds-sidenav-menu>
</ng-container>
</div>
<ng-content></ng-content>
</div>
<footer class="cds--side-nav__footer">
<button
*ngIf="allowExpansion"
class="cds--side-nav__toggle"
type="button"
[]="(expanded ? i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_CLOSE') : i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_OPEN')) | async"
(click)="toggle()">
<div class="cds--side-nav__icon">
<svg
*ngIf="expanded"
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="M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4l6.6 6.6L8 22.6 9.4 24l6.6-6.6 6.6 6.6 1.4-1.4-6.6-6.6L24 9.4z"></path>
</svg>
<svg
*ngIf="!expanded"
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="M22 16L12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path>
</svg>
</div>
<span class="cds--assistive-text">
{{(expanded ? i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_CLOSE') : i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_OPEN')) | async}}
</span>
</button>
</footer>
</nav>
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SideNavItem, selector: "cds-sidenav-item, ibm-sidenav-item", inputs: ["href", "useRouter", "active", "route", "isSubMenu", "routeExtras", "title"], outputs: ["navigation", "selected"] }, { kind: "component", type: i4.SideNavMenu, selector: "cds-sidenav-menu, ibm-sidenav-menu", inputs: ["useRouter", "title", "expanded", "hasActiveChild", "menuItems"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SideNav, decorators: [{
type: Component,
args: [{
selector: "cds-sidenav, ibm-sidenav",
template: `
<nav class="cds--side-nav__items" [attr.aria-label]="ariaLabel">
<ng-content select="cds-sidenav-header,ibm-sidenav-header"></ng-content>
<div role="list">
<div class="cds--side-nav__header-navigation cds--side-nav__header-divider">
<ng-container *ngFor="let navigationItem of navigationItems">
<cds-sidenav-item
*ngIf="navigationItem.type === 'item'"
[]="navigationItem.href"
[]="navigationItem.route"
[]="navigationItem.routeExtras"
[]="useRouter"
[]="navigationItem.title">
{{ navigationItem.content }}
</cds-sidenav-item>
<cds-sidenav-menu
*ngIf="navigationItem.type === 'menu'"
[]="navigationItem.title"
[]="useRouter"
[]="navigationItem.menuItems">
</cds-sidenav-menu>
</ng-container>
</div>
<ng-content></ng-content>
</div>
<footer class="cds--side-nav__footer">
<button
*ngIf="allowExpansion"
class="cds--side-nav__toggle"
type="button"
[]="(expanded ? i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_CLOSE') : i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_OPEN')) | async"
(click)="toggle()">
<div class="cds--side-nav__icon">
<svg
*ngIf="expanded"
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="M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4l6.6 6.6L8 22.6 9.4 24l6.6-6.6 6.6 6.6 1.4-1.4-6.6-6.6L24 9.4z"></path>
</svg>
<svg
*ngIf="!expanded"
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="M22 16L12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path>
</svg>
</div>
<span class="cds--assistive-text">
{{(expanded ? i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_CLOSE') : i18n.get('UI_SHELL.SIDE_NAV.TOGGLE_OPEN')) | async}}
</span>
</button>
</footer>
</nav>
`,
encapsulation: ViewEncapsulation.None
}]
}], ctorParameters: function () { return [{ type: i1.I18n }]; }, propDecorators: { hostClass: [{
type: HostBinding,
args: ["class.cds--side-nav"]
}], ariaLabel: [{
type: Input
}], expanded: [{
type: HostBinding,
args: ["class.cds--side-nav--expanded"]
}, {
type: Input
}], hidden: [{
type: HostBinding,
args: ["class.cds--side-nav--hidden"]
}, {
type: Input
}], rail: [{
type: HostBinding,
args: ["class.cds--side-nav--rail"]
}, {
type: Input
}], ux: [{
type: HostBinding,
args: ["class.cds--side-nav__navigation"]
}], allowExpansion: [{
type: Input
}], navigationItems: [{
type: Input
}], useRouter: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdWktc2hlbGwvc2lkZW5hdi9zaWRlbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFJdkI7Ozs7R0FJRztBQXNFSCxNQUFNLE9BQU8sT0FBTztJQTJCbkIsWUFBbUIsSUFBVTtRQUFWLFNBQUksR0FBSixJQUFJLENBQU07UUExQk8sY0FBUyxHQUFHLElBQUksQ0FBQztRQUM1QyxjQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDdkM7O1dBRUc7UUFDb0QsYUFBUSxHQUFHLElBQUksQ0FBQztRQUN2RTs7V0FFRztRQUNrRCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDaEIsT0FBRSxHQUFHLElBQUksQ0FBQztRQUNqRCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQVNoQzs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFFTSxDQUFDO0lBRWxDLE1BQU07UUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDOztvR0EvQlcsT0FBTzt3RkFBUCxPQUFPLG1mQW5FVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWdFVDsyRkFHVyxPQUFPO2tCQXJFbkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnRVQ7b0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3JDOzJGQUVvQyxTQUFTO3NCQUE1QyxXQUFXO3VCQUFDLHFCQUFxQjtnQkFDekIsU0FBUztzQkFBakIsS0FBSztnQkFJaUQsUUFBUTtzQkFBOUQsV0FBVzt1QkFBQywrQkFBK0I7O3NCQUFHLEtBQUs7Z0JBSUMsTUFBTTtzQkFBMUQsV0FBVzt1QkFBQyw2QkFBNkI7O3NCQUFHLEtBQUs7Z0JBQ0MsSUFBSTtzQkFBdEQsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUFHLEtBQUs7Z0JBQ0EsRUFBRTtzQkFBakQsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBQ3JDLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT0csZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJMThuIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkl0ZW0gfSBmcm9tIFwiLi4vaGVhZGVyL2hlYWRlci1uYXZpZ2F0aW9uLWl0ZW1zLmludGVyZmFjZVwiO1xuXG4vKipcbiAqIGBTaWRlbmF2YCBpcyBhIGZpeGVkIGxlZnQgbmF2aWdhdGlvbiB0aGF0IG1heSBjb250YWluIGBTaWRlTmF2SXRlbWBzIG9yIGBTaWRlTmF2TWVudWBzXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy11aS1zaGVsbC0tc2lkZS1uYXZpZ2F0aW9uKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLXNpZGVuYXYsIGlibS1zaWRlbmF2XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5hdiBjbGFzcz1cImNkcy0tc2lkZS1uYXZfX2l0ZW1zXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIj5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImNkcy1zaWRlbmF2LWhlYWRlcixpYm0tc2lkZW5hdi1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8ZGl2IHJvbGU9XCJsaXN0XCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNpZGUtbmF2X19oZWFkZXItbmF2aWdhdGlvbiBjZHMtLXNpZGUtbmF2X19oZWFkZXItZGl2aWRlclwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5hdmlnYXRpb25JdGVtIG9mIG5hdmlnYXRpb25JdGVtc1wiPlxuXHRcdFx0XHRcdFx0PGNkcy1zaWRlbmF2LWl0ZW1cblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJuYXZpZ2F0aW9uSXRlbS50eXBlID09PSAnaXRlbSdcIlxuXHRcdFx0XHRcdFx0XHRbaHJlZl09XCJuYXZpZ2F0aW9uSXRlbS5ocmVmXCJcblx0XHRcdFx0XHRcdFx0W3JvdXRlXT1cIm5hdmlnYXRpb25JdGVtLnJvdXRlXCJcblx0XHRcdFx0XHRcdFx0W3JvdXRlRXh0cmFzXT1cIm5hdmlnYXRpb25JdGVtLnJvdXRlRXh0cmFzXCJcblx0XHRcdFx0XHRcdFx0W3VzZVJvdXRlcl09XCJ1c2VSb3V0ZXJcIlxuXHRcdFx0XHRcdFx0XHRbdGl0bGVdPVwibmF2aWdhdGlvbkl0ZW0udGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0e3sgbmF2aWdhdGlvbkl0ZW0uY29udGVudCB9fVxuXHRcdFx0XHRcdFx0PC9jZHMtc2lkZW5hdi1pdGVtPlxuXHRcdFx0XHRcdFx0PGNkcy1zaWRlbmF2LW1lbnVcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJuYXZpZ2F0aW9uSXRlbS50eXBlID09PSAnbWVudSdcIlxuXHRcdFx0XHRcdFx0XHRbdGl0bGVdPVwibmF2aWdhdGlvbkl0ZW0udGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRbdXNlUm91dGVyXT1cInVzZVJvdXRlclwiXG5cdFx0XHRcdFx0XHRcdFttZW51SXRlbXNdPVwibmF2aWdhdGlvbkl0ZW0ubWVudUl0ZW1zXCI+XG5cdFx0XHRcdFx0XHQ8L2Nkcy1zaWRlbmF2LW1lbnU+XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxmb290ZXIgY2xhc3M9XCJjZHMtLXNpZGUtbmF2X19mb290ZXJcIj5cblx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdCpuZ0lmPVwiYWxsb3dFeHBhbnNpb25cIlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zaWRlLW5hdl9fdG9nZ2xlXCJcblx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRbdGl0bGVdPVwiKGV4cGFuZGVkID8gaTE4bi5nZXQoJ1VJX1NIRUxMLlNJREVfTkFWLlRPR0dMRV9DTE9TRScpIDogaTE4bi5nZXQoJ1VJX1NIRUxMLlNJREVfTkFWLlRPR0dMRV9PUEVOJykpIHwgYXN5bmNcIlxuXHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGUoKVwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNpZGUtbmF2X19pY29uXCI+XG5cdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdCpuZ0lmPVwiZXhwYW5kZWRcIlxuXHRcdFx0XHRcdFx0XHRmb2N1c2FibGU9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCJcblx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1wiXG5cdFx0XHRcdFx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0XHRcdFx0XHR3aWR0aD1cIjIwXCJcblx0XHRcdFx0XHRcdFx0aGVpZ2h0PVwiMjBcIlxuXHRcdFx0XHRcdFx0XHR2aWV3Qm94PVwiMCAwIDMyIDMyXCJcblx0XHRcdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0XHRcdDxwYXRoIGQ9XCJNMjQgOS40TDIyLjYgOCAxNiAxNC42IDkuNCA4IDggOS40bDYuNiA2LjZMOCAyMi42IDkuNCAyNGw2LjYtNi42IDYuNiA2LjYgMS40LTEuNC02LjYtNi42TDI0IDkuNHpcIj48L3BhdGg+XG5cdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCIhZXhwYW5kZWRcIlxuXHRcdFx0XHRcdFx0XHRmb2N1c2FibGU9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCJcblx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1wiXG5cdFx0XHRcdFx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0XHRcdFx0XHR3aWR0aD1cIjIwXCJcblx0XHRcdFx0XHRcdFx0aGVpZ2h0PVwiMjBcIlxuXHRcdFx0XHRcdFx0XHR2aWV3Qm94PVwiMCAwIDMyIDMyXCJcblx0XHRcdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0XHRcdDxwYXRoIGQ9XCJNMjIgMTZMMTIgMjZsLTEuNC0xLjQgOC42LTguNi04LjYtOC42TDEyIDZ6XCI+PC9wYXRoPlxuXHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLWFzc2lzdGl2ZS10ZXh0XCI+XG5cdFx0XHRcdFx0XHR7eyhleHBhbmRlZCA/IGkxOG4uZ2V0KCdVSV9TSEVMTC5TSURFX05BVi5UT0dHTEVfQ0xPU0UnKSA6IGkxOG4uZ2V0KCdVSV9TSEVMTC5TSURFX05BVi5UT0dHTEVfT1BFTicpKSB8IGFzeW5jfX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PC9mb290ZXI+XG5cdFx0PC9uYXY+XG5cdGAsXG5cdGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2lkZU5hdiB7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tc2lkZS1uYXZcIikgaG9zdENsYXNzID0gdHJ1ZTtcblx0QElucHV0KCkgYXJpYUxhYmVsID0gXCJTaWRlIG5hdmlnYXRpb25cIjtcblx0LyoqXG5cdCAqIENvbnRyb2xzIHRoZSBleHBhbmRlZCAoYHRydWVgKSBvciBjb2xsYXBzZWQgKGBmYWxzZWApIHN0YXRlIHdoZW4gb24gYSBzbWFsbCBzY3JlZW4uXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXNpZGUtbmF2LS1leHBhbmRlZFwiKSBASW5wdXQoKSBleHBhbmRlZCA9IHRydWU7XG5cdC8qKlxuXHQgKiBDb250cm9scyB0aGUgaGlkZGVuIChgdHJ1ZWApIG9yIHZpc2libGUgKGBmYWxzZWApIHN0YXRlXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXNpZGUtbmF2LS1oaWRkZW5cIikgQElucHV0KCkgaGlkZGVuID0gZmFsc2U7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tc2lkZS1uYXYtLXJhaWxcIikgQElucHV0KCkgcmFpbCA9IGZhbHNlO1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXNpZGUtbmF2X19uYXZpZ2F0aW9uXCIpIHV4ID0gdHJ1ZTtcblx0QElucHV0KCkgYWxsb3dFeHBhbnNpb24gPSBmYWxzZTtcblxuXHQvKipcblx0ICogTmF2aWdhdGlvbkl0ZW1zIGZyb20gdGhlIGhlYWRlciBuYXZpZ2F0aW9uIGNvbXBvbmVudCB3aGljaCBhcmUgZGlzcGxheWVkIG9uIHRoZSBzaWRlbmF2IHdoZW4gdGhlIHdpbmRvd1xuXHQgKiBpbm5lcldpZHRoIGlzIHNtYWxsIGVub3VnaC4gU2lkZW5hdiBpdGVtcyBhbmQgbWVudXMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIG1vZGVsIHVzZWQgdG8gY3JlYXRlIGhlYWRlclxuXHQgKiBuYXZpZ2F0aW9uIGl0ZW1zLlxuXHQgKi9cblx0QElucHV0KCkgbmF2aWdhdGlvbkl0ZW1zOiBOYXZpZ2F0aW9uSXRlbVtdO1xuXG5cdC8qKlxuXHQgKiBVc2UgdGhlIHJvdXRlckxpbmsgYXR0cmlidXRlIG9uIDxhPiB0YWcgZm9yIG5hdmlnYXRpb24gaW5zdGVhZCBvZiB1c2luZyBldmVudCBoYW5kbGVyc1xuXHQgKi9cblx0QElucHV0KCkgdXNlUm91dGVyID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IocHVibGljIGkxOG46IEkxOG4pIHsgfVxuXG5cdHRvZ2dsZSgpIHtcblx0XHR0aGlzLmV4cGFuZGVkID0gIXRoaXMuZXhwYW5kZWQ7XG5cdH1cbn1cbiJdfQ==