UNPKG

@junte/ui

Version:

Quality Angular UI components kit

226 lines 22.6 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'; class Picture { constructor(defs = null) { this.position = Position.left; this.width = 70; this.height = 70; Object.assign(this, defs); } } let CardComponent = class CardComponent { constructor(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(); } get hasColor() { return !!this.color; } get hasAction() { return !!this.icon || !!this.cardActionsTemplate; } set height(height) { this._height = height || Height.default; } set __picture__(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; } } set padding(padding) { this._padding = padding || Gutter.normal; } hideActions() { this.popover.hide(); } get mobile() { return this.breakpoint.current === Breakpoint.mobile; } }; CardComponent.ctorParameters = () => [ { 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); export { CardComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AanVudGUvdWkvIiwic291cmNlcyI6WyJsaWIvbGF5b3V0L2NhcmQvY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRy9DLE1BQU0sT0FBTztJQU9YLFlBQVksT0FBWSxJQUFJO1FBSjVCLGFBQVEsR0FBYSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ25DLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBR1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBTUQsSUFBYSxhQUFhLEdBQTFCLE1BQWEs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LENBQUMsR0FBRztZQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUM7S0FDZixDQUFDO0lBQ0QsS0FBSyxFQUFFOzs7NENBRVA7QUFXRDtJQVRDLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSxZQUFZO1FBQ3pCLElBQUksRUFBRSxVQUFVO1FBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTztZQUNyQixLQUFLLENBQUMsS0FBSyxDQUFDO0tBQ2YsQ0FBQztJQUNELFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztJQUM5QixLQUFLLEVBQUU7OzRDQUNxQjtBQVM3QjtJQVBDLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSw2Q0FBNkM7UUFDMUQsSUFBSSxFQUFFLFlBQVk7UUFDbEIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDO0tBQzlDLENBQUM7SUFDRCxXQUFXLENBQUMsb0JBQW9CLENBQUM7SUFDakMsS0FBSyxFQUFFOzsrQ0FDaUI7QUFRekI7SUFOQyxXQUFXLENBQUM7UUFDWCxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLElBQUksRUFBRSxRQUFRO1FBQ2QsT0FBTyxFQUFFLFFBQVE7S0FDbEIsQ0FBQztJQUNELEtBQUssRUFBRTs7NENBQ007QUFNSjtJQUpULFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSx1Q0FBdUM7UUFDcEQsSUFBSSxFQUFFLGVBQWU7S0FDdEIsQ0FBQztJQUNELE1BQU0sRUFBRTs7K0NBQW9DO0FBbkpsQyxhQUFhO0lBSnpCLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxVQUFVO1FBQ3BCLHNoSEFBdUM7S0FDeEMsQ0FBQztxQ0E4SmdDLGlCQUFpQjtHQTdKdEMsYUFBYSxDQWdLekI7U0FoS1ksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSGVpZ2h0IH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9oZWlnaHQnO1xuaW1wb3J0IHsgQnJlYWtwb2ludCB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvYnJlYWtwb2ludCc7XG5pbXBvcnQgeyBCcmVha3BvaW50U2VydmljZSB9IGZyb20gJy4uL3Jlc3BvbnNpdmUvYnJlYWtwb2ludC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRBcGksIFByb3BlcnR5QXBpIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9mZWF0dXJlJztcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvZ3V0dGVyJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9wb3NpdGlvbic7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvc3RhdGUnO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IFdpZHRoIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy93aWR0aCc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3ZlcmxheXMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudCc7XG5cbmNsYXNzIFBpY3R1cmUge1xuICB1cmw6IHN0cmluZztcbiAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHBvc2l0aW9uOiBQb3NpdGlvbiA9IFBvc2l0aW9uLmxlZnQ7XG4gIHdpZHRoID0gNzA7XG4gIGhlaWdodCA9IDcwO1xuXG4gIGNvbnN0cnVjdG9yKGRlZnM6IGFueSA9IG51bGwpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZnMpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQuZW5jYXBzdWxhdGVkLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIENhcmRDb21wb25lbnQge1xuXG4gIHVpID0gVUk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhvc3QnKSByZWFkb25seSBob3N0ID0gJ2pudC1jYXJkLWhvc3QnO1xuXG4gIHBpY3R1cmU6IFBpY3R1cmU7XG4gIHBvcG92ZXI6IFBvcG92ZXJDb21wb25lbnQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGVpZ2h0JylcbiAgX2hlaWdodDogSGVpZ2h0ID0gSGVpZ2h0LmRlZmF1bHQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWNvbG9yJylcbiAgZ2V0IGhhc0NvbG9yKCkge1xuICAgIHJldHVybiAhIXRoaXMuY29sb3I7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1oYXMtaWNvbicpXG4gIGdldCBoYXNBY3Rpb24oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5pY29uIHx8ICEhdGhpcy5jYXJkQWN0aW9uc1RlbXBsYXRlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcGFkZGluZycpXG4gIF9wYWRkaW5nID0gR3V0dGVyLm5vcm1hbDtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnVGl0bGUgb2YgY2FyZCcsXG4gICAgdHlwZTogJ3N0cmluZydcbiAgfSlcbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnSGVpZ2h0IG9mIGNhcmQnLFxuICAgIHBhdGg6ICd1aS5oZWlnaHQnLFxuICAgIG9wdGlvbnM6IFtIZWlnaHQuZGVmYXVsdCwgSGVpZ2h0LmZsdWlkXSxcbiAgICBkZWZhdWx0OiBIZWlnaHQuZGVmYXVsdFxuICB9KVxuICBASW5wdXQoKSBzZXQgaGVpZ2h0KGhlaWdodDogSGVpZ2h0KSB7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IEhlaWdodC5kZWZhdWx0O1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1BpY3R1cmUgb24gY2FyZCcsXG4gICAgdHlwZTogJ3N0cmluZydcbiAgfSlcbiAgQElucHV0KCdwaWN0dXJlJylcbiAgc2V0IF9fcGljdHVyZV9fKHBpY3R1cmU6IHN0cmluZyB8IFBpY3R1cmUpIHtcbiAgICBpZiAoISFwaWN0dXJlKSB7XG4gICAgICB0aGlzLnBpY3R1cmUgPSB0eXBlb2YgKHBpY3R1cmUpID09PSAnc3RyaW5nJ1xuICAgICAgICA/IG5ldyBQaWN0dXJlKHt1cmw6IHBpY3R1cmUsIHRlbXBsYXRlOiBudWxsLCBwb3NpdGlvbjogUG9zaXRpb24ubGVmdCwgd2lkdGg6IDcwLCBoZWlnaHQ6IDcwfSkgOiBuZXcgUGljdHVyZShwaWN0dXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5waWN0dXJlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjY2FyZEhlYWRlclRlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NhcmQgaGVhZGVyIHRlbXBsYXRlJ1xuICB9KVxuICBAQ29udGVudENoaWxkKCdjYXJkSGVhZGVyVGVtcGxhdGUnKVxuICBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjY2FyZFRpdGxlVGVtcGxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2FyZCB0aXRsZSB0ZW1wbGF0ZSdcbiAgfSlcbiAgQENvbnRlbnRDaGlsZCgnY2FyZFRpdGxlVGVtcGxhdGUnKVxuICB0aXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50QXBpKHtcbiAgICBzZWxlY3RvcjogJyNjYXJkRm9vdGVyVGVtcGxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2FyZCBmb290ZXIgdGVtcGxhdGUnXG4gIH0pXG4gIEBDb250ZW50Q2hpbGQoJ2NhcmRGb290ZXJUZW1wbGF0ZScpXG4gIGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50QXBpKHtcbiAgICBzZWxlY3RvcjogJyNjYXJkQWN0aW9uc1RlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NhcmQgYWN0aW9ucyB0ZW1wbGF0ZSdcbiAgfSlcbiAgQENvbnRlbnRDaGlsZCgnY2FyZEFjdGlvbnNUZW1wbGF0ZScpXG4gIGNhcmRBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0ljb24gaW5kaWNhdG9yJyxcbiAgICB0eXBlOiAnc3RyaW5nJ1xuICB9KVxuICBASW5wdXQoKVxuICBpY29uOiBzdHJpbmc7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0YXRlIG9mIGNhcmQnLFxuICAgIHBhdGg6ICd1aS5zdGF0ZScsXG4gICAgb3B0aW9uczogW1N0YXRlLmVycm9yLFxuICAgICAgU3RhdGUubG9hZGluZ11cbiAgfSlcbiAgQElucHV0KClcbiAgc3RhdGU6IFN0YXRlO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdQYWRkaW5nIGZvciBjYXJkJyxcbiAgICBwYXRoOiAndWkuZ3V0dGVyJyxcbiAgICBvcHRpb25zOiBbR3V0dGVyLm5vbmUsXG4gICAgICBHdXR0ZXIudGlueSxcbiAgICAgIEd1dHRlci5zbWFsbCxcbiAgICAgIEd1dHRlci5ub3JtYWwsXG4gICAgICBHdXR0ZXIubGFyZ2UsXG4gICAgICBHdXR0ZXIuYmlnLFxuICAgICAgR3V0dGVyLmh1Z2VdXG4gIH0pXG4gIEBJbnB1dCgpIHNldCBwYWRkaW5nKHBhZGRpbmc6IEd1dHRlcikge1xuICAgIHRoaXMuX3BhZGRpbmcgPSBwYWRkaW5nIHx8IEd1dHRlci5ub3JtYWw7XG4gIH1cblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ2FyZCB3aWR0aCcsXG4gICAgcGF0aDogJ3VpLndpZHRoJyxcbiAgICBkZWZhdWx0OiBXaWR0aC5kZWZhdWx0LFxuICAgIG9wdGlvbnM6IFtXaWR0aC5kZWZhdWx0LFxuICAgICAgV2lkdGguZmx1aWRdXG4gIH0pXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXdpZHRoJylcbiAgQElucHV0KClcbiAgd2lkdGg6IFdpZHRoID0gV2lkdGguZGVmYXVsdDtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAn0KFsaWNrYWJsZSBjYXJkOyBBZGFwdGVkIGNhcmQgb24gbW9iaWxlIHZpZXcnLFxuICAgIHBhdGg6ICd1aS5mZWF0dXJlJyxcbiAgICBvcHRpb25zOiBbRmVhdHVyZS5jbGlja2FibGUsIEZlYXR1cmUuYWRhcHRlZF1cbiAgfSlcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZmVhdHVyZXMnKVxuICBASW5wdXQoKVxuICBmZWF0dXJlczogRmVhdHVyZVtdID0gW107XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NhcmQgaW5kaWNhdG9yIGNvbG9yJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiAncHVycGxlJ1xuICB9KVxuICBASW5wdXQoKVxuICBjb2xvcjogc3RyaW5nO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdPdXRwdXQgZXZlbnQgb2YgY2xpY2sgb24gY2FyZCBjb250ZW50JyxcbiAgICB0eXBlOiAnRXZlbnQgRW1pdHRlcidcbiAgfSlcbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgaGlkZUFjdGlvbnMoKSB7XG4gICAgdGhpcy5wb3BvdmVyLmhpZGUoKTtcbiAgfVxuXG4gIGdldCBtb2JpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnJlYWtwb2ludC5jdXJyZW50ID09PSBCcmVha3BvaW50Lm1vYmlsZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnJlYWtwb2ludDogQnJlYWtwb2ludFNlcnZpY2UpIHtcbiAgfVxuXG59XG4iXX0=