UNPKG

@junte/ui

Version:

Quality Angular UI components kit

253 lines 24.5 kB
import { __decorate, __metadata } from "tslib"; import { Component, ContentChild, EventEmitter, HostBinding, Input, Output, TemplateRef } from '@angular/core'; import { Height } from '../../core/enums/height'; import { Breakpoint } from '../../core/enums/breakpoint'; import { BreakpointService } from '../responsive/breakpoint.service'; import { ContentApi, PropertyApi } from '../../core/decorators/api'; import { Feature } from '../../core/enums/feature'; import { Gutter } from '../../core/enums/gutter'; import { Position } from '../../core/enums/position'; import { State } from '../../core/enums/state'; import { UI } from '../../core/enums/ui'; import { Width } from '../../core/enums/width'; var Picture = /** @class */ (function () { function Picture(defs) { if (defs === void 0) { defs = null; } this.position = Position.left; this.width = 70; this.height = 70; Object.assign(this, defs); } return Picture; }()); var CardComponent = /** @class */ (function () { function CardComponent(breakpoint) { this.breakpoint = breakpoint; this.ui = UI; this.host = 'jnt-card-host'; this._height = Height.default; this._padding = Gutter.normal; this.width = Width.default; this.features = []; this.selected = new EventEmitter(); } Object.defineProperty(CardComponent.prototype, "hasColor", { get: function () { return !!this.color; }, enumerable: true, configurable: true }); Object.defineProperty(CardComponent.prototype, "hasAction", { get: function () { return !!this.icon || !!this.cardActionsTemplate; }, enumerable: true, configurable: true }); Object.defineProperty(CardComponent.prototype, "height", { set: function (height) { this._height = height || Height.default; }, enumerable: true, configurable: true }); Object.defineProperty(CardComponent.prototype, "__picture__", { set: function (picture) { if (!!picture) { this.picture = typeof (picture) === 'string' ? new Picture({ url: picture, template: null, position: Position.left, width: 70, height: 70 }) : new Picture(picture); } else { this.picture = null; } }, enumerable: true, configurable: true }); Object.defineProperty(CardComponent.prototype, "padding", { set: function (padding) { this._padding = padding || Gutter.normal; }, enumerable: true, configurable: true }); CardComponent.prototype.hideActions = function () { this.popover.hide(); }; Object.defineProperty(CardComponent.prototype, "mobile", { get: function () { return this.breakpoint.current === Breakpoint.mobile; }, enumerable: true, configurable: true }); CardComponent.ctorParameters = function () { return [ { type: BreakpointService } ]; }; __decorate([ HostBinding('attr.host'), __metadata("design:type", Object) ], CardComponent.prototype, "host", void 0); __decorate([ HostBinding('attr.data-height'), __metadata("design:type", String) ], CardComponent.prototype, "_height", void 0); __decorate([ HostBinding('attr.data-has-color'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], CardComponent.prototype, "hasColor", null); __decorate([ HostBinding('attr.data-has-icon'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], CardComponent.prototype, "hasAction", null); __decorate([ HostBinding('attr.data-padding'), __metadata("design:type", Object) ], CardComponent.prototype, "_padding", void 0); __decorate([ PropertyApi({ description: 'Title of card', type: 'string' }), Input(), __metadata("design:type", String) ], CardComponent.prototype, "title", void 0); __decorate([ PropertyApi({ description: 'Height of card', path: 'ui.height', options: [Height.default, Height.fluid], default: Height.default }), Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], CardComponent.prototype, "height", null); __decorate([ PropertyApi({ description: 'Picture on card', type: 'string' }), Input('picture'), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], CardComponent.prototype, "__picture__", null); __decorate([ ContentApi({ selector: '#cardHeaderTemplate', description: 'Card header template' }), ContentChild('cardHeaderTemplate'), __metadata("design:type", TemplateRef) ], CardComponent.prototype, "headerTemplate", void 0); __decorate([ ContentApi({ selector: '#cardTitleTemplate', description: 'Card title template' }), ContentChild('cardTitleTemplate'), __metadata("design:type", TemplateRef) ], CardComponent.prototype, "titleTemplate", void 0); __decorate([ ContentApi({ selector: '#cardFooterTemplate', description: 'Card footer template' }), ContentChild('cardFooterTemplate'), __metadata("design:type", TemplateRef) ], CardComponent.prototype, "footerTemplate", void 0); __decorate([ ContentApi({ selector: '#cardActionsTemplate', description: 'Card actions template' }), ContentChild('cardActionsTemplate'), __metadata("design:type", TemplateRef) ], CardComponent.prototype, "cardActionsTemplate", void 0); __decorate([ PropertyApi({ description: 'Icon indicator', type: 'string' }), Input(), __metadata("design:type", String) ], CardComponent.prototype, "icon", void 0); __decorate([ PropertyApi({ description: 'State of card', path: 'ui.state', options: [State.error, State.loading] }), Input(), __metadata("design:type", String) ], CardComponent.prototype, "state", void 0); __decorate([ PropertyApi({ description: 'Padding for card', path: 'ui.gutter', options: [Gutter.none, Gutter.tiny, Gutter.small, Gutter.normal, Gutter.large, Gutter.big, Gutter.huge] }), Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], CardComponent.prototype, "padding", null); __decorate([ PropertyApi({ description: 'Card width', path: 'ui.width', default: Width.default, options: [Width.default, Width.fluid] }), HostBinding('attr.data-width'), Input(), __metadata("design:type", String) ], CardComponent.prototype, "width", void 0); __decorate([ PropertyApi({ description: 'Сlickable card; Adapted card on mobile view', path: 'ui.feature', options: [Feature.clickable, Feature.adapted] }), HostBinding('attr.data-features'), Input(), __metadata("design:type", Array) ], CardComponent.prototype, "features", void 0); __decorate([ PropertyApi({ description: 'Card indicator color', type: 'string', default: 'purple' }), Input(), __metadata("design:type", String) ], CardComponent.prototype, "color", void 0); __decorate([ PropertyApi({ description: 'Output event of click on card content', type: 'Event Emitter' }), Output(), __metadata("design:type", Object) ], CardComponent.prototype, "selected", void 0); CardComponent = __decorate([ Component({ selector: 'jnt-card', template: "<div child-of=\"jnt-card-host\" *ngIf=\"!!icon && !cardActionsTemplate\" data-indicator>\n <jnt-icon child-of=\"jnt-card-host\" [icon]=\"icon\"></jnt-icon>\n</div>\n\n<ng-template #cardImageTemplate>\n <img child-of=\"jnt-card-host\" data-image [src]=\"picture.url\" [width]=\"picture.width\" [height]=\"picture.height\" />\n</ng-template>\n\n<jnt-stack child-of=\"jnt-card-host\" data-card\n [attr.tabindex]=\"(features | includes : ui.feature.clickable) ? 1 : null\"\n [orientation]=\"ui.orientation.horizontal\"\n [gutter]=\"ui.gutter.none\"\n [align]=\"ui.align.stretch\">\n <div child-of=\"jnt-card-host\" data-line *ngIf=\"color\" [style.background-color]=\"color\"></div>\n\n <jnt-stack child-of=\"jnt-card-host\" data-main [align]=\"ui.align.stretch\">\n <div child-of=\"jnt-card-host\" *ngIf=\"!!headerTemplate\" data-header>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </div>\n <jnt-stack child-of=\"jnt-card-host\" data-body\n [align]=\"ui.align.stretch\"\n [orientation]=\"(features | includes : ui.feature.adapted) && mobile ? ui.orientation.vertical : ui.orientation.horizontal\"\n (click)=\"!!features && features.includes(ui.feature.clickable) ? selected.emit() : null\">\n <div child-of=\"jnt-card-host\" data-picture *ngIf=\"!!picture && picture.position === ui.position.left\">\n <ng-container *ngIf=\"!!picture.template; else cardImageTemplate\">\n <ng-container *ngTemplateOutlet=\"picture.template\"></ng-container>\n </ng-container>\n </div>\n <div child-of=\"jnt-card-host\" data-content>\n <div child-of=\"jnt-card-host\" *ngIf=\"!!title || !!titleTemplate\" data-title>\n <div child-of=\"jnt-card-host\" data-text *ngIf=\"!!title && !titleTemplate\">{{title}}</div>\n <ng-container *ngIf=\"!!titleTemplate\">\n <ng-container *ngTemplateOutlet=\"titleTemplate\"></ng-container>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div child-of=\"jnt-card-host\" data-picture *ngIf=\"!!picture && picture.position === ui.position.right\">\n <ng-container *ngIf=\"!!picture.template; else cardImageTemplate\">\n <ng-container *ngTemplateOutlet=\"picture.template\"></ng-container>\n </ng-container>\n </div>\n </jnt-stack>\n\n <div child-of=\"jnt-card-host\" *ngIf=\"!!footerTemplate\" data-footer>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n </jnt-stack>\n\n</jnt-stack>\n\n<jnt-button child-of=\"jnt-card-host\" *ngIf=\"!!cardActionsTemplate\"\n data-action\n [scheme]=\"ui.scheme.secondary\"\n [size]=\"ui.size.small\"\n [icon]=\"ui.icons.actions\"\n (attached)=\"popover = $event\"\n [jntPopover]=\"{\n contentTemplate: dropdownTemplate,\n position: ui.position.right,\n trigger: ui.trigger.click\n }\">\n</jnt-button>\n\n<ng-template #dropdownTemplate>\n <ng-container *ngTemplateOutlet=\"cardActionsTemplate; context: {hide: hideActions.bind(this)}\"></ng-container>\n</ng-template>\n\n<div child-of=\"jnt-card-host\" *ngIf=\"state === ui.state.loading\" data-load>\n <jnt-spinner child-of=\"jnt-card-host\" [size]=\"ui.size.large\"></jnt-spinner>\n</div>\n<div child-of=\"jnt-card-host\" *ngIf=\"state === ui.state.error\" data-error>\n <jnt-icon child-of=\"jnt-card-host\" [icon]=\"ui.icons.sad\"></jnt-icon>\n</div>" }), __metadata("design:paramtypes", [BreakpointService]) ], CardComponent); return CardComponent; }()); export { CardComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AanVudGUvdWkvIiwic291cmNlcyI6WyJsaWIvbGF5b3V0L2NhcmQvY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRy9DO0lBT0UsaUJBQVksSUFBZ0I7UUFBaEIscUJBQUEsRUFBQSxXQUFnQjtRQUo1QixhQUFRLEdBQWEsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUdWLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDSCxjQUFDO0FBQUQsQ0FBQyxB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QkFBQztDQUFBLEFBaEtELElBZ0tDO1NBaEtZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhlaWdodCB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvaGVpZ2h0JztcbmltcG9ydCB7IEJyZWFrcG9pbnQgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsgQnJlYWtwb2ludFNlcnZpY2UgfSBmcm9tICcuLi9yZXNwb25zaXZlL2JyZWFrcG9pbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50QXBpLCBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9hcGknO1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvZmVhdHVyZSc7XG5pbXBvcnQgeyBHdXR0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL2d1dHRlcic7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvcG9zaXRpb24nO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3N0YXRlJztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy91aSc7XG5pbXBvcnQgeyBXaWR0aCB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvd2lkdGgnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL292ZXJsYXlzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnO1xuXG5jbGFzcyBQaWN0dXJlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwb3NpdGlvbjogUG9zaXRpb24gPSBQb3NpdGlvbi5sZWZ0O1xuICB3aWR0aCA9IDcwO1xuICBoZWlnaHQgPSA3MDtcblxuICBjb25zdHJ1Y3RvcihkZWZzOiBhbnkgPSBudWxsKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBkZWZzKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmVuY2Fwc3VsYXRlZC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IHtcblxuICB1aSA9IFVJO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JykgcmVhZG9ubHkgaG9zdCA9ICdqbnQtY2FyZC1ob3N0JztcblxuICBwaWN0dXJlOiBQaWN0dXJlO1xuICBwb3BvdmVyOiBQb3BvdmVyQ29tcG9uZW50O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWhlaWdodCcpXG4gIF9oZWlnaHQ6IEhlaWdodCA9IEhlaWdodC5kZWZhdWx0O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWhhcy1jb2xvcicpXG4gIGdldCBoYXNDb2xvcigpIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbG9yO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWljb24nKVxuICBnZXQgaGFzQWN0aW9uKCkge1xuICAgIHJldHVybiAhIXRoaXMuaWNvbiB8fCAhIXRoaXMuY2FyZEFjdGlvbnNUZW1wbGF0ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXBhZGRpbmcnKVxuICBfcGFkZGluZyA9IEd1dHRlci5ub3JtYWw7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1RpdGxlIG9mIGNhcmQnLFxuICAgIHR5cGU6ICdzdHJpbmcnXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmc7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0hlaWdodCBvZiBjYXJkJyxcbiAgICBwYXRoOiAndWkuaGVpZ2h0JyxcbiAgICBvcHRpb25zOiBbSGVpZ2h0LmRlZmF1bHQsIEhlaWdodC5mbHVpZF0sXG4gICAgZGVmYXVsdDogSGVpZ2h0LmRlZmF1bHRcbiAgfSlcbiAgQElucHV0KCkgc2V0IGhlaWdodChoZWlnaHQ6IEhlaWdodCkge1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCBIZWlnaHQuZGVmYXVsdDtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdQaWN0dXJlIG9uIGNhcmQnLFxuICAgIHR5cGU6ICdzdHJpbmcnXG4gIH0pXG4gIEBJbnB1dCgncGljdHVyZScpXG4gIHNldCBfX3BpY3R1cmVfXyhwaWN0dXJlOiBzdHJpbmcgfCBQaWN0dXJlKSB7XG4gICAgaWYgKCEhcGljdHVyZSkge1xuICAgICAgdGhpcy5waWN0dXJlID0gdHlwZW9mIChwaWN0dXJlKSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBuZXcgUGljdHVyZSh7dXJsOiBwaWN0dXJlLCB0ZW1wbGF0ZTogbnVsbCwgcG9zaXRpb246IFBvc2l0aW9uLmxlZnQsIHdpZHRoOiA3MCwgaGVpZ2h0OiA3MH0pIDogbmV3IFBpY3R1cmUocGljdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGljdHVyZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgQENvbnRlbnRBcGkoe1xuICAgIHNlbGVjdG9yOiAnI2NhcmRIZWFkZXJUZW1wbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdDYXJkIGhlYWRlciB0ZW1wbGF0ZSdcbiAgfSlcbiAgQENvbnRlbnRDaGlsZCgnY2FyZEhlYWRlclRlbXBsYXRlJylcbiAgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRBcGkoe1xuICAgIHNlbGVjdG9yOiAnI2NhcmRUaXRsZVRlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NhcmQgdGl0bGUgdGVtcGxhdGUnXG4gIH0pXG4gIEBDb250ZW50Q2hpbGQoJ2NhcmRUaXRsZVRlbXBsYXRlJylcbiAgdGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjY2FyZEZvb3RlclRlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NhcmQgZm9vdGVyIHRlbXBsYXRlJ1xuICB9KVxuICBAQ29udGVudENoaWxkKCdjYXJkRm9vdGVyVGVtcGxhdGUnKVxuICBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjY2FyZEFjdGlvbnNUZW1wbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdDYXJkIGFjdGlvbnMgdGVtcGxhdGUnXG4gIH0pXG4gIEBDb250ZW50Q2hpbGQoJ2NhcmRBY3Rpb25zVGVtcGxhdGUnKVxuICBjYXJkQWN0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdJY29uIGluZGljYXRvcicsXG4gICAgdHlwZTogJ3N0cmluZydcbiAgfSlcbiAgQElucHV0KClcbiAgaWNvbjogc3RyaW5nO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdTdGF0ZSBvZiBjYXJkJyxcbiAgICBwYXRoOiAndWkuc3RhdGUnLFxuICAgIG9wdGlvbnM6IFtTdGF0ZS5lcnJvcixcbiAgICAgIFN0YXRlLmxvYWRpbmddXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHN0YXRlOiBTdGF0ZTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUGFkZGluZyBmb3IgY2FyZCcsXG4gICAgcGF0aDogJ3VpLmd1dHRlcicsXG4gICAgb3B0aW9uczogW0d1dHRlci5ub25lLFxuICAgICAgR3V0dGVyLnRpbnksXG4gICAgICBHdXR0ZXIuc21hbGwsXG4gICAgICBHdXR0ZXIubm9ybWFsLFxuICAgICAgR3V0dGVyLmxhcmdlLFxuICAgICAgR3V0dGVyLmJpZyxcbiAgICAgIEd1dHRlci5odWdlXVxuICB9KVxuICBASW5wdXQoKSBzZXQgcGFkZGluZyhwYWRkaW5nOiBHdXR0ZXIpIHtcbiAgICB0aGlzLl9wYWRkaW5nID0gcGFkZGluZyB8fCBHdXR0ZXIubm9ybWFsO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NhcmQgd2lkdGgnLFxuICAgIHBhdGg6ICd1aS53aWR0aCcsXG4gICAgZGVmYXVsdDogV2lkdGguZGVmYXVsdCxcbiAgICBvcHRpb25zOiBbV2lkdGguZGVmYXVsdCxcbiAgICAgIFdpZHRoLmZsdWlkXVxuICB9KVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS13aWR0aCcpXG4gIEBJbnB1dCgpXG4gIHdpZHRoOiBXaWR0aCA9IFdpZHRoLmRlZmF1bHQ7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ9ChbGlja2FibGUgY2FyZDsgQWRhcHRlZCBjYXJkIG9uIG1vYmlsZSB2aWV3JyxcbiAgICBwYXRoOiAndWkuZmVhdHVyZScsXG4gICAgb3B0aW9uczogW0ZlYXR1cmUuY2xpY2thYmxlLCBGZWF0dXJlLmFkYXB0ZWRdXG4gIH0pXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWZlYXR1cmVzJylcbiAgQElucHV0KClcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdDYXJkIGluZGljYXRvciBjb2xvcicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogJ3B1cnBsZSdcbiAgfSlcbiAgQElucHV0KClcbiAgY29sb3I6IHN0cmluZztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnT3V0cHV0IGV2ZW50IG9mIGNsaWNrIG9uIGNhcmQgY29udGVudCcsXG4gICAgdHlwZTogJ0V2ZW50IEVtaXR0ZXInXG4gIH0pXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGhpZGVBY3Rpb25zKCkge1xuICAgIHRoaXMucG9wb3Zlci5oaWRlKCk7XG4gIH1cblxuICBnZXQgbW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLmJyZWFrcG9pbnQuY3VycmVudCA9PT0gQnJlYWtwb2ludC5tb2JpbGU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJyZWFrcG9pbnQ6IEJyZWFrcG9pbnRTZXJ2aWNlKSB7XG4gIH1cblxufVxuIl19