UNPKG

@junte/ui

Version:

Quality Angular UI components kit

286 lines 25.3 kB
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==