@junte/ui
Version:
Quality Angular UI components kit
226 lines • 22.6 kB
JavaScript
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=