@junte/ui
Version:
Quality Angular UI components kit
286 lines • 25.3 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { animate, state, style, transition, trigger } from '@angular/animations';
import { Component, ContentChildren, EventEmitter, HostBinding, Input, Output, QueryList } from '@angular/core';
import { Shape } from '../../core/enums/shape';
import { PropertyApi } from '../../core/decorators/api';
import { Outline } from '../../core/enums/outline';
import { Position } from '../../core/enums/position';
import { Scheme } from '../../core/enums/scheme';
import { Size } from '../../core/enums/size';
import { UI } from '../../core/enums/ui';
import { Width } from '../../core/enums/width';
import { BadgeComponent } from '../../elements/badge/badge.component';
import { ButtonType } from './button.enums';
var ButtonComponent = /** @class */ (function () {
function ButtonComponent() {
this.host = 'jnt-button-host';
this.ui = UI;
this._type = ButtonType.button;
this._scheme = Scheme.primary;
this._size = Size.normal;
this._outline = Outline.fill;
this._width = Width.default;
this._shape = Shape.square;
this.loading = false;
this.disabled = false;
this.click = new EventEmitter();
}
Object.defineProperty(ButtonComponent.prototype, "shape", {
set: function (shape) {
this._shape = shape || Shape.square;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "_icon", {
set: function (icon) {
this.icon = (typeof icon === 'string'
? { icon: icon, position: Position.left } : icon);
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "scheme", {
set: function (scheme) {
this._scheme = scheme || Scheme.primary;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "size", {
get: function () {
return this._size;
},
set: function (size) {
this._size = size || Size.normal;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "withText", {
get: function () {
return !!this.text;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "outline", {
set: function (outline) {
this._outline = outline || Outline.fill;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "width", {
set: function (width) {
this._width = width || Width.default;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "disable", {
get: function () {
return this.disabled || this.loading;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonComponent.prototype, "type", {
get: function () {
return this._type;
},
set: function (type) {
this._type = type || ButtonType.button;
},
enumerable: true,
configurable: true
});
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], ButtonComponent.prototype, "host", void 0);
__decorate([
HostBinding('attr.data-scheme'),
__metadata("design:type", String)
], ButtonComponent.prototype, "_scheme", void 0);
__decorate([
HostBinding('attr.data-size'),
__metadata("design:type", String)
], ButtonComponent.prototype, "_size", void 0);
__decorate([
HostBinding('attr.data-outline'),
__metadata("design:type", String)
], ButtonComponent.prototype, "_outline", void 0);
__decorate([
HostBinding('attr.data-width'),
__metadata("design:type", String)
], ButtonComponent.prototype, "_width", void 0);
__decorate([
HostBinding('attr.data-shape'),
__metadata("design:type", String)
], ButtonComponent.prototype, "_shape", void 0);
__decorate([
PropertyApi({
description: 'Button shape',
path: 'ui.shape',
default: Shape.square,
options: [Shape.circle, Shape.square]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], ButtonComponent.prototype, "shape", null);
__decorate([
PropertyApi({
description: 'Set the loading status of button',
type: 'boolean',
default: 'false'
}),
HostBinding('attr.data-loading'),
Input(),
__metadata("design:type", Object)
], ButtonComponent.prototype, "loading", void 0);
__decorate([
PropertyApi({
name: 'icon',
description: 'Icon for button',
type: 'string | {icon: string, position: Position}'
}),
Input('icon'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], ButtonComponent.prototype, "_icon", null);
__decorate([
PropertyApi({
description: 'Button color scheme',
path: 'ui.scheme',
options: [Scheme.primary, Scheme.secondary, Scheme.success, Scheme.fail],
default: Scheme.primary
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], ButtonComponent.prototype, "scheme", null);
__decorate([
PropertyApi({
description: 'Button size',
path: 'ui.size',
options: [Size.tiny, Size.small, Size.normal, Size.large],
default: Size.normal
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], ButtonComponent.prototype, "size", null);
__decorate([
HostBinding('attr.data-with-text'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], ButtonComponent.prototype, "withText", null);
__decorate([
PropertyApi({
description: 'Button outline',
path: 'ui.outline',
default: Outline.fill,
options: [Outline.transparent, Outline.ghost, Outline.fill]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], ButtonComponent.prototype, "outline", null);
__decorate([
PropertyApi({
description: 'Button width',
path: 'ui.width',
default: Width.default,
options: [Width.default, Width.fluid]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], ButtonComponent.prototype, "width", null);
__decorate([
HostBinding('attr.data-disabled'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], ButtonComponent.prototype, "disable", null);
__decorate([
PropertyApi({
description: 'Set disabled state',
type: 'boolean',
default: 'false',
}),
Input(),
__metadata("design:type", Object)
], ButtonComponent.prototype, "disabled", void 0);
__decorate([
PropertyApi({
description: 'Button typeControl',
path: 'ui.button.type',
default: ButtonType.button,
options: [ButtonType.button, ButtonType.submit]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], ButtonComponent.prototype, "type", null);
__decorate([
PropertyApi({
description: 'Text on button',
type: 'string',
}),
Input(),
__metadata("design:type", String)
], ButtonComponent.prototype, "text", void 0);
__decorate([
PropertyApi({
description: 'Click event',
path: 'EventEmitter'
}),
Output(),
__metadata("design:type", Object)
], ButtonComponent.prototype, "click", void 0);
__decorate([
ContentChildren(BadgeComponent),
__metadata("design:type", QueryList)
], ButtonComponent.prototype, "badges", void 0);
ButtonComponent = __decorate([
Component({
selector: 'jnt-button',
template: "<button child-of=\"jnt-button-host\" [type]=\"type\" [disabled]=\"disabled || loading\">\n <jnt-spinner child-of=\"jnt-button-host\" data-loading *ngIf=\"loading\" [@appear]=\"loading\"></jnt-spinner>\n <jnt-stack child-of=\"jnt-button-host\" [orientation]=\"ui.orientation.horizontal\"\n [align]=\"ui.align.center\"\n [gutter]=\"ui.gutter.small\">\n <jnt-icon child-of=\"jnt-button-host\" *ngIf=\"!!icon && icon.position === ui.position.left\"\n [@visibility]=\"loading ? 'hide' : 'show'\"\n [icon]=\"icon?.icon\">\n </jnt-icon>\n\n <div child-of=\"jnt-button-host\" data-text *ngIf=\"!!text\"\n [@visibility]=\"loading ? 'hide' : 'show'\">\n {{text}}\n </div>\n\n <jnt-stack child-of=\"jnt-button-host\" data-badges *ngIf=\"badges.length > 0\"\n [@visibility]=\"loading ? 'hide' : 'show'\"\n [orientation]=\"ui.orientation.horizontal\"\n [gutter]=\"ui.gutter.tiny\">\n <jnt-badge child-of=\"jnt-button-host\" data-badge *ngFor=\"let badge of badges\"\n [color]=\"badge.color\"\n [value]=\"badge.value\"\n [overflow]=\"badge.overflow\"\n [position]=\"ui.position.inline\">\n </jnt-badge>\n </jnt-stack>\n\n <jnt-icon child-of=\"jnt-button-host\" *ngIf=\"!!icon && icon.position === ui.position.right\"\n [@visibility]=\"loading ? 'hide' : 'show'\"\n [icon]=\"icon?.icon\">\n </jnt-icon>\n\n <div child-of=\"jnt-button-host\" data-empty *ngIf=\"!icon && !badges.length && !text\" [@visibility]=\"loading ? 'hide' : 'show'\"></div>\n </jnt-stack>\n</button>",
animations: [
trigger('appear', [
state('void', style({
opacity: 0,
width: '200px',
height: '200px'
})),
state('*', style({
opacity: 1,
width: '*',
height: '*'
})),
transition('void => *', [
animate('.5s ease-in-out')
]),
]),
trigger('visibility', [
state('show', style({
visibility: 'visible',
opacity: 1
})),
state('hide', style({
visibility: 'collapse',
opacity: 0
})),
transition('show <=> hide', [
animate('.5s ease-in-out')
]),
])
]
})
], ButtonComponent);
return ButtonComponent;
}());
export { ButtonComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BqdW50ZS91aS8iLCJzb3VyY2VzIjpbImxpYi9mb3Jtcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQXFENUM7SUFBQTtRQUdXLFNBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUVsQyxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBRUEsVUFBSyxHQUFlLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFJOUMsWUFBTyxHQUFXLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFH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VUFBVSxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ2QsS0FBSyxDQUNILE1BQU0sRUFDTixLQUFLLENBQUM7d0JBQ0osT0FBTyxFQUFFLENBQUM7d0JBQ1YsS0FBSyxFQUFFLE9BQU87d0JBQ2QsTUFBTSxFQUFFLE9BQU87cUJBQ2hCLENBQUMsQ0FDSDtvQkFDRCxLQUFLLENBQ0gsR0FBRyxFQUNILEtBQUssQ0FBQzt3QkFDSixPQUFPLEVBQUUsQ0FBQzt3QkFDVixLQUFLLEVBQUUsR0FBRzt3QkFDVixNQUFNLEVBQUUsR0FBRztxQkFDWixDQUFDLENBQ0g7b0JBQ0QsVUFBVSxDQUNSLFdBQVcsRUFDWDt3QkFDRSxPQUFPLENBQUMsaUJBQWlCLENBQUM7cUJBQzNCLENBQ0Y7aUJBQ0YsQ0FDRjtnQkFFRCxPQUFPLENBQUMsWUFBWSxFQUFFO29CQUNwQixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzt3QkFDbEIsVUFBVSxFQUFFLFNBQVM7d0JBQ3JCLE9BQU8sRUFBRSxDQUFDO3FCQUNYLENBQUMsQ0FBQztvQkFDSCxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzt3QkFDbEIsVUFBVSxFQUFFLFVBQVU7d0JBQ3RCLE9BQU8sRUFBRSxDQUFDO3FCQUNYLENBQUMsQ0FBQztvQkFDSCxVQUFVLENBQUMsZUFBZSxFQUFFO3dCQUMxQixPQUFPLENBQUMsaUJBQWlCLENBQUM7cUJBQzNCLENBQUM7aUJBQ0gsQ0FBQzthQUNIO1NBQ0YsQ0FBQztPQUVXLGVBQWUsQ0F5SjNCO0lBQUQsc0JBQUM7Q0FBQSxBQXpKRCxJQXlKQztTQXpKWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaGFwZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvc2hhcGUnO1xuaW1wb3J0IHsgUHJvcGVydHlBcGkgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IE91dGxpbmUgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL291dGxpbmUnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3Bvc2l0aW9uJztcbmltcG9ydCB7IFNjaGVtZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvc2NoZW1lJztcbmltcG9ydCB7IFNpemUgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3NpemUnO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IFdpZHRoIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy93aWR0aCc7XG5pbXBvcnQgeyBCYWRnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2JhZGdlL2JhZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi9idXR0b24uZW51bXMnO1xuXG5pbnRlcmZhY2UgSWNvbiB7XG4gIGljb246IHN0cmluZztcbiAgcG9zaXRpb246IFBvc2l0aW9uO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5lbmNhcHN1bGF0ZWQuaHRtbCcsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdhcHBlYXInLCBbXG4gICAgICAgIHN0YXRlKFxuICAgICAgICAgICd2b2lkJyxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6ICcyMDBweCdcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBzdGF0ZShcbiAgICAgICAgICAnKicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIHdpZHRoOiAnKicsXG4gICAgICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHRyYW5zaXRpb24oXG4gICAgICAgICAgJ3ZvaWQgPT4gKicsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnLjVzIGVhc2UtaW4tb3V0JylcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICBdXG4gICAgKSxcblxuICAgIHRyaWdnZXIoJ3Zpc2liaWxpdHknLCBbXG4gICAgICBzdGF0ZSgnc2hvdycsIHN0eWxlKHtcbiAgICAgICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnLFxuICAgICAgICBvcGFjaXR5OiAxXG4gICAgICB9KSksXG4gICAgICBzdGF0ZSgnaGlkZScsIHN0eWxlKHtcbiAgICAgICAgdmlzaWJpbGl0eTogJ2NvbGxhcHNlJyxcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfSkpLFxuICAgICAgdHJhbnNpdGlvbignc2hvdyA8PT4gaGlkZScsIFtcbiAgICAgICAgYW5pbWF0ZSgnLjVzIGVhc2UtaW4tb3V0JylcbiAgICAgIF0pLFxuICAgIF0pXG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBCdXR0b25Db21wb25lbnQge1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JylcbiAgcmVhZG9ubHkgaG9zdCA9ICdqbnQtYnV0dG9uLWhvc3QnO1xuXG4gIHVpID0gVUk7XG5cbiAgcHJpdmF0ZSBfdHlwZTogQnV0dG9uVHlwZSA9IEJ1dHRvblR5cGUuYnV0dG9uO1xuICBpY29uOiBJY29uO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNjaGVtZScpXG4gIF9zY2hlbWU6IFNjaGVtZSA9IFNjaGVtZS5wcmltYXJ5O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNpemUnKVxuICBfc2l6ZTogU2l6ZSA9IFNpemUubm9ybWFsO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLW91dGxpbmUnKVxuICBfb3V0bGluZTogT3V0bGluZSA9IE91dGxpbmUuZmlsbDtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS13aWR0aCcpXG4gIF93aWR0aDogV2lkdGggPSBXaWR0aC5kZWZhdWx0O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNoYXBlJylcbiAgX3NoYXBlOiBTaGFwZSA9IFNoYXBlLnNxdWFyZTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnQnV0dG9uIHNoYXBlJyxcbiAgICBwYXRoOiAndWkuc2hhcGUnLFxuICAgIGRlZmF1bHQ6IFNoYXBlLnNxdWFyZSxcbiAgICBvcHRpb25zOiBbU2hhcGUuY2lyY2xlLCBTaGFwZS5zcXVhcmVdXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBzaGFwZShzaGFwZTogU2hhcGUpIHtcbiAgICB0aGlzLl9zaGFwZSA9IHNoYXBlIHx8IFNoYXBlLnNxdWFyZTtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdTZXQgdGhlIGxvYWRpbmcgc3RhdHVzIG9mIGJ1dHRvbicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6ICdmYWxzZSdcbiAgfSlcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtbG9hZGluZycpXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmcgPSBmYWxzZTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIG5hbWU6ICdpY29uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ljb24gZm9yIGJ1dHRvbicsXG4gICAgdHlwZTogJ3N0cmluZyB8IHtpY29uOiBzdHJpbmcsIHBvc2l0aW9uOiBQb3NpdGlvbn0nXG4gIH0pXG4gIEBJbnB1dCgnaWNvbicpXG4gIHNldCBfaWNvbihpY29uOiBzdHJpbmcgfCBJY29uKSB7XG4gICAgdGhpcy5pY29uID0gIDxJY29uPih0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZydcbiAgICAgID8ge2ljb246IGljb24sIHBvc2l0aW9uOiBQb3NpdGlvbi5sZWZ0fSA6IGljb24pO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0J1dHRvbiBjb2xvciBzY2hlbWUnLFxuICAgIHBhdGg6ICd1aS5zY2hlbWUnLFxuICAgIG9wdGlvbnM6IFtTY2hlbWUucHJpbWFyeSwgU2NoZW1lLnNlY29uZGFyeSwgU2NoZW1lLnN1Y2Nlc3MsIFNjaGVtZS5mYWlsXSxcbiAgICBkZWZhdWx0OiBTY2hlbWUucHJpbWFyeVxuICB9KVxuICBASW5wdXQoKVxuICBzZXQgc2NoZW1lKHNjaGVtZTogU2NoZW1lKSB7XG4gICAgdGhpcy5fc2NoZW1lID0gc2NoZW1lIHx8IFNjaGVtZS5wcmltYXJ5O1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0J1dHRvbiBzaXplJyxcbiAgICBwYXRoOiAndWkuc2l6ZScsXG4gICAgb3B0aW9uczogW1NpemUudGlueSwgU2l6ZS5zbWFsbCwgU2l6ZS5ub3JtYWwsIFNpemUubGFyZ2VdLFxuICAgIGRlZmF1bHQ6IFNpemUubm9ybWFsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBzaXplKHNpemU6IFNpemUpIHtcbiAgICB0aGlzLl9zaXplID0gc2l6ZSB8fCBTaXplLm5vcm1hbDtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtd2l0aC10ZXh0JylcbiAgZ2V0IHdpdGhUZXh0KCkge1xuICAgIHJldHVybiAhIXRoaXMudGV4dDtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdCdXR0b24gb3V0bGluZScsXG4gICAgcGF0aDogJ3VpLm91dGxpbmUnLFxuICAgIGRlZmF1bHQ6IE91dGxpbmUuZmlsbCxcbiAgICBvcHRpb25zOiBbT3V0bGluZS50cmFuc3BhcmVudCwgT3V0bGluZS5naG9zdCwgT3V0bGluZS5maWxsXVxuICB9KVxuICBASW5wdXQoKVxuICBzZXQgb3V0bGluZShvdXRsaW5lOiBPdXRsaW5lKSB7XG4gICAgdGhpcy5fb3V0bGluZSA9IG91dGxpbmUgfHwgT3V0bGluZS5maWxsO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0J1dHRvbiB3aWR0aCcsXG4gICAgcGF0aDogJ3VpLndpZHRoJyxcbiAgICBkZWZhdWx0OiBXaWR0aC5kZWZhdWx0LFxuICAgIG9wdGlvbnM6IFtXaWR0aC5kZWZhdWx0LCBXaWR0aC5mbHVpZF1cbiAgfSlcbiAgQElucHV0KClcbiAgc2V0IHdpZHRoKHdpZHRoOiBXaWR0aCkge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgV2lkdGguZGVmYXVsdDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWRpc2FibGVkJylcbiAgZ2V0IGRpc2FibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1NldCBkaXNhYmxlZCBzdGF0ZScsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6ICdmYWxzZScsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0J1dHRvbiB0eXBlQ29udHJvbCcsXG4gICAgcGF0aDogJ3VpLmJ1dHRvbi50eXBlJyxcbiAgICBkZWZhdWx0OiBCdXR0b25UeXBlLmJ1dHRvbixcbiAgICBvcHRpb25zOiBbQnV0dG9uVHlwZS5idXR0b24sIEJ1dHRvblR5cGUuc3VibWl0XVxuICB9KVxuICBASW5wdXQoKVxuICBzZXQgdHlwZSh0eXBlOiBCdXR0b25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHR5cGUgfHwgQnV0dG9uVHlwZS5idXR0b247XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdUZXh0IG9uIGJ1dHRvbicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHRleHQ6IHN0cmluZztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ2xpY2sgZXZlbnQnLFxuICAgIHBhdGg6ICdFdmVudEVtaXR0ZXInXG4gIH0pXG4gIEBPdXRwdXQoKVxuICBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQmFkZ2VDb21wb25lbnQpXG4gIGJhZGdlczogUXVlcnlMaXN0PEJhZGdlQ29tcG9uZW50Pjtcbn1cbiJdfQ==