@kushki/ng-suka
Version:
<p align="center"> <h1 align="center">Suka Components Angular</h1> <p align="center"> An Angular implementation of the Suka Design System </p> </p>
293 lines • 19.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, HostBinding, Input, ChangeDetectorRef, ElementRef, Renderer2, ViewContainerRef, ComponentFactoryResolver } from '@angular/core';
import { Loading } from '../loading/loading.module';
/**
* Buttons are used primarily for actions, such as “Add”, “Close”, “Cancel”, or “Save”.
* Plain buttons, which look similar to links, are used for less important or less commonly used actions, such as “view shipping settings”.
*
* For navigational actions that appear within or directly following a sentence, use the link component.
*/
var Button = /** @class */ (function () {
function Button(ref, el, renderer, viewContainerRef, componentFactoryResolver) {
this.ref = ref;
this.el = el;
this.renderer = renderer;
this.viewContainerRef = viewContainerRef;
this.componentFactoryResolver = componentFactoryResolver;
/**
* Sets the button type. Can be `primary`, `basic`, `plain`, `destructive` or `outline_white`.
*/
this.sukaButton = 'basic';
/**
* Button size. Can be `md` (Medium), `sm` (Small) or `lg` (Large).
*/
this.size = 'md';
/**
* Set to `true` for a skeleton state button.
*/
this.skeleton = false;
/**
* Set to `true` to display the outline version of the button.
*/
this.outline = false;
/**
* Set to `true` for a hover effect.
*/
this.hover = false;
/**
* Set to `true` for a button that uses the full horizontal width;
*/
this.fullWidth = false;
/**
* Sets to `true` when the button is on a button group.
*/
this.inGroup = false;
/**
* Set to `true` for a loading button.
*/
this.loading = false;
}
Object.defineProperty(Button.prototype, "basic", {
get: /**
* @return {?}
*/
function () {
return this.getType('basic');
},
enumerable: true,
configurable: true
});
Object.defineProperty(Button.prototype, "primary", {
get: /**
* @return {?}
*/
function () {
return this.getType('primary');
},
enumerable: true,
configurable: true
});
Object.defineProperty(Button.prototype, "plain", {
get: /**
* @return {?}
*/
function () {
return this.getType('plain');
},
enumerable: true,
configurable: true
});
Object.defineProperty(Button.prototype, "destructive", {
get: /**
* @return {?}
*/
function () {
return this.getType('destructive');
},
enumerable: true,
configurable: true
});
Object.defineProperty(Button.prototype, "outline_white", {
get: /**
* @return {?}
*/
function () {
return this.getType('outline_white');
},
enumerable: true,
configurable: true
});
Object.defineProperty(Button.prototype, "buttonSmall", {
get: /**
* @return {?}
*/
function () {
return this.size === 'sm';
},
enumerable: true,
configurable: true
});
Object.defineProperty(Button.prototype, "buttonLarge", {
get: /**
* @return {?}
*/
function () {
return this.size === 'lg';
},
enumerable: true,
configurable: true
});
/**
* @private
* @param {?} type
* @return {?}
*/
Button.prototype.getType = /**
* @private
* @param {?} type
* @return {?}
*/
function (type) {
return this.sukaButton === type;
};
/**
* @return {?}
*/
Button.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (!this.sukaButton) {
this.sukaButton = 'basic';
}
// Create the spinner
/** @type {?} */
var factory = this.componentFactoryResolver.resolveComponentFactory(Loading);
/** @type {?} */
var componentRef = this.viewContainerRef.createComponent(factory);
this.loadingSpinner = componentRef.instance;
this.loadingSpinner.size = 'sm';
this.renderer.setStyle(this.loadingSpinner.elementRef.nativeElement, 'display', 'none');
this.renderer.appendChild(this.el.nativeElement, this.loadingSpinner.elementRef.nativeElement);
if (this.loading) {
this.renderer.setStyle(this.loadingSpinner.elementRef.nativeElement, 'display', 'inherit');
this.el.nativeElement.disabled = true;
}
};
/**
* @param {?} changes
* @return {?}
*/
Button.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes.loading && this.loadingSpinner) {
if (this.loading) {
this.renderer.setStyle(this.loadingSpinner.elementRef.nativeElement, 'display', 'inherit');
}
else {
this.renderer.setStyle(this.loadingSpinner.elementRef.nativeElement, 'display', 'none');
}
this.el.nativeElement.disabled = changes.loading.currentValue;
}
};
/**
* @return {?}
*/
Button.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.ref.detectChanges();
};
Button.decorators = [
{ type: Directive, args: [{
selector: '[sukaButton]'
},] }
];
/** @nocollapse */
Button.ctorParameters = function () { return [
{ type: ChangeDetectorRef },
{ type: ElementRef },
{ type: Renderer2 },
{ type: ViewContainerRef },
{ type: ComponentFactoryResolver }
]; };
Button.propDecorators = {
sukaButton: [{ type: Input }],
size: [{ type: Input }],
basic: [{ type: HostBinding, args: ['class.btn--basic',] }],
primary: [{ type: HostBinding, args: ['class.btn--primary',] }],
plain: [{ type: HostBinding, args: ['class.btn--plain',] }],
destructive: [{ type: HostBinding, args: ['class.btn--destructive',] }],
outline_white: [{ type: HostBinding, args: ['class.btn--outline_white',] }],
skeleton: [{ type: HostBinding, args: ['class.skeleton',] }, { type: Input }],
outline: [{ type: HostBinding, args: ['class.btn--outline',] }, { type: Input }],
hover: [{ type: HostBinding, args: ['class.btn--hover',] }, { type: Input }],
fullWidth: [{ type: HostBinding, args: ['class.btn--full_width',] }, { type: Input }],
inGroup: [{ type: HostBinding, args: ['class.btn--group_item',] }, { type: Input }],
loading: [{ type: HostBinding, args: ['class.btn--loading',] }, { type: Input }],
buttonSmall: [{ type: HostBinding, args: ['class.btn--sm',] }],
buttonLarge: [{ type: HostBinding, args: ['class.btn--lg',] }]
};
return Button;
}());
export { Button };
if (false) {
/**
* Sets the button type. Can be `primary`, `basic`, `plain`, `destructive` or `outline_white`.
* @type {?}
*/
Button.prototype.sukaButton;
/**
* Button size. Can be `md` (Medium), `sm` (Small) or `lg` (Large).
* @type {?}
*/
Button.prototype.size;
/**
* Set to `true` for a skeleton state button.
* @type {?}
*/
Button.prototype.skeleton;
/**
* Set to `true` to display the outline version of the button.
* @type {?}
*/
Button.prototype.outline;
/**
* Set to `true` for a hover effect.
* @type {?}
*/
Button.prototype.hover;
/**
* Set to `true` for a button that uses the full horizontal width;
* @type {?}
*/
Button.prototype.fullWidth;
/**
* Sets to `true` when the button is on a button group.
* @type {?}
*/
Button.prototype.inGroup;
/**
* Set to `true` for a loading button.
* @type {?}
*/
Button.prototype.loading;
/**
* @ignore
* @type {?}
*/
Button.prototype.loadingSpinner;
/**
* @type {?}
* @private
*/
Button.prototype.ref;
/**
* @type {?}
* @private
*/
Button.prototype.el;
/**
* @type {?}
* @private
*/
Button.prototype.renderer;
/**
* @type {?}
* @private
*/
Button.prototype.viewContainerRef;
/**
* @type {?}
* @private
*/
Button.prototype.componentFactoryResolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFFekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBVXBEO0lBbUVFLGdCQUNVLEdBQXNCLEVBQ3RCLEVBQWMsRUFDZCxRQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsd0JBQWtEO1FBSmxELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjs7OztRQWpFbkQsZUFBVSxHQUFlLE9BQU8sQ0FBQzs7OztRQUtqQyxTQUFJLEdBQXdCLElBQUksQ0FBQzs7OztRQXFCRixhQUFRLEdBQUssS0FBSyxDQUFDOzs7O1FBSWYsWUFBTyxHQUFLLEtBQUssQ0FBQzs7OztRQUlwQixVQUFLLEdBQUssS0FBSyxDQUFDOzs7O1FBSVgsY0FBUyxHQUFLLEtBQUssQ0FBQzs7OztRQUlwQixZQUFPLEdBQUssS0FBSyxDQUFDOzs7O1FBSXJCLFlBQU8sR0FBSyxLQUFLLENBQUM7SUFvQjNELENBQUM7SUEzREosc0JBQXFDLHlCQUFLOzs7O1FBQTFDO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7OztPQUFBO0lBQ0Qsc0JBQXVDLDJCQUFPOzs7O1FBQTlDO1lBQ0Us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QUM7SUFDM0IsQ0FBQzs7Z0JBbkhGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztpQkFDekI7Ozs7Z0JBbkJDLGlCQUFpQjtnQkFDakIsVUFBVTtnQkFDVixTQUFTO2dCQUNULGdCQUFnQjtnQkFDaEIsd0JBQXdCOzs7NkJBb0J2QixLQUFLO3VCQUtMLEtBQUs7d0JBRUwsV0FBVyxTQUFDLGtCQUFrQjswQkFHOUIsV0FBVyxTQUFDLG9CQUFvQjt3QkFHaEMsV0FBVyxTQUFDLGtCQUFrQjs4QkFHOUIsV0FBVyxTQUFDLHdCQUF3QjtnQ0FHcEMsV0FBVyxTQUFDLDBCQUEwQjsyQkFPdEMsV0FBVyxTQUFDLGdCQUFnQixjQUFHLEtBQUs7MEJBSXBDLFdBQVcsU0FBQyxvQkFBb0IsY0FBRyxLQUFLO3dCQUl4QyxXQUFXLFNBQUMsa0JBQWtCLGNBQUcsS0FBSzs0QkFJdEMsV0FBVyxTQUFDLHVCQUF1QixjQUFHLEtBQUs7MEJBSTNDLFdBQVcsU0FBQyx1QkFBdUIsY0FBRyxLQUFLOzBCQUkzQyxXQUFXLFNBQUMsb0JBQW9CLGNBQUcsS0FBSzs4QkFFeEMsV0FBVyxTQUFDLGVBQWU7OEJBRzNCLFdBQVcsU0FBQyxlQUFlOztJQTBEOUIsYUFBQztDQUFBLEFBcEhELElBb0hDO1NBakhZLE1BQU07Ozs7OztJQUlqQiw0QkFBMEM7Ozs7O0lBSzFDLHNCQUEwQzs7Ozs7SUFxQjFDLDBCQUEyRDs7Ozs7SUFJM0QseUJBQThEOzs7OztJQUk5RCx1QkFBMEQ7Ozs7O0lBSTFELDJCQUFtRTs7Ozs7SUFJbkUseUJBQWlFOzs7OztJQUlqRSx5QkFBOEQ7Ozs7O0lBWTlELGdDQUF3Qjs7Ozs7SUFHdEIscUJBQThCOzs7OztJQUM5QixvQkFBc0I7Ozs7O0lBQ3RCLDBCQUEyQjs7Ozs7SUFDM0Isa0NBQTBDOzs7OztJQUMxQywwQ0FBMEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvYWRpbmcgfSBmcm9tICcuLi9sb2FkaW5nL2xvYWRpbmcubW9kdWxlJztcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuL2J1dHRvbi10eXBlcyc7XG5cblxuLyoqXG4gKiBCdXR0b25zIGFyZSB1c2VkIHByaW1hcmlseSBmb3IgYWN0aW9ucywgc3VjaCBhcyDigJxBZGTigJ0sIOKAnENsb3Nl4oCdLCDigJxDYW5jZWzigJ0sIG9yIOKAnFNhdmXigJ0uXG4gKiBQbGFpbiBidXR0b25zLCB3aGljaCBsb29rIHNpbWlsYXIgdG8gbGlua3MsIGFyZSB1c2VkIGZvciBsZXNzIGltcG9ydGFudCBvciBsZXNzIGNvbW1vbmx5IHVzZWQgYWN0aW9ucywgc3VjaCBhcyDigJx2aWV3IHNoaXBwaW5nIHNldHRpbmdz4oCdLlxuICpcbiAqIEZvciBuYXZpZ2F0aW9uYWwgYWN0aW9ucyB0aGF0IGFwcGVhciB3aXRoaW4gb3IgZGlyZWN0bHkgZm9sbG93aW5nIGEgc2VudGVuY2UsIHVzZSB0aGUgbGluayBjb21wb25lbnQuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzdWthQnV0dG9uXSdcbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogU2V0cyB0aGUgYnV0dG9uIHR5cGUuIENhbiBiZSBgcHJpbWFyeWAsIGBiYXNpY2AsIGBwbGFpbmAsIGBkZXN0cnVjdGl2ZWAgb3IgYG91dGxpbmVfd2hpdGVgLlxuICAgKi9cbiAgQElucHV0KCkgc3VrYUJ1dHRvbjogQnV0dG9uVHlwZSA9ICdiYXNpYyc7XG5cbiAgLyoqXG4gICAqIEJ1dHRvbiBzaXplLiBDYW4gYmUgYG1kYCAoTWVkaXVtKSwgYHNtYCAoU21hbGwpIG9yIGBsZ2AgKExhcmdlKS5cbiAgICovXG4gIEBJbnB1dCgpIHNpemU/OiAnbWQnIHwgJ3NtJyB8ICdsZycgPSAnbWQnO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1iYXNpYycpIGdldCBiYXNpYygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCdiYXNpYycpO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1wcmltYXJ5JykgZ2V0IHByaW1hcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZSgncHJpbWFyeScpO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1wbGFpbicpIGdldCBwbGFpbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCdwbGFpbicpO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1kZXN0cnVjdGl2ZScpIGdldCBkZXN0cnVjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCdkZXN0cnVjdGl2ZScpO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1vdXRsaW5lX3doaXRlJykgZ2V0IG91dGxpbmVfd2hpdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZSgnb3V0bGluZV93aGl0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgc2tlbGV0b24gc3RhdGUgYnV0dG9uLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5za2VsZXRvbicpIEBJbnB1dCgpIHNrZWxldG9uID8gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzcGxheSB0aGUgb3V0bGluZSB2ZXJzaW9uIG9mIHRoZSBidXR0b24uXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi0tb3V0bGluZScpIEBJbnB1dCgpIG91dGxpbmUgPyA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBmb3IgYSBob3ZlciBlZmZlY3QuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi0taG92ZXInKSBASW5wdXQoKSBob3ZlciA/ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhIGJ1dHRvbiB0aGF0IHVzZXMgdGhlIGZ1bGwgaG9yaXpvbnRhbCB3aWR0aDtcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1mdWxsX3dpZHRoJykgQElucHV0KCkgZnVsbFdpZHRoID8gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldHMgdG8gYHRydWVgIHdoZW4gdGhlIGJ1dHRvbiBpcyBvbiBhIGJ1dHRvbiBncm91cC5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1ncm91cF9pdGVtJykgQElucHV0KCkgaW5Hcm91cCA/ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhIGxvYWRpbmcgYnV0dG9uLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLWxvYWRpbmcnKSBASW5wdXQoKSBsb2FkaW5nID8gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi0tc20nKSBnZXQgYnV0dG9uU21hbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ3NtJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi0tbGcnKSBnZXQgYnV0dG9uTGFyZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ2xnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBsb2FkaW5nU3Bpbm5lcjogTG9hZGluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgKSB7fVxuXG4gIHByaXZhdGUgZ2V0VHlwZSh0eXBlOiBCdXR0b25UeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3VrYUJ1dHRvbiA9PT0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc3VrYUJ1dHRvbikge1xuICAgICAgdGhpcy5zdWthQnV0dG9uID0gJ2Jhc2ljJztcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHNwaW5uZXJcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTG9hZGluZyk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICB0aGlzLmxvYWRpbmdTcGlubmVyID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgdGhpcy5sb2FkaW5nU3Bpbm5lci5zaXplID0gJ3NtJztcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5sb2FkaW5nU3Bpbm5lci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLmxvYWRpbmdTcGlubmVyLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMubG9hZGluZ1NwaW5uZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdpbmhlcml0Jyk7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5sb2FkaW5nICYmIHRoaXMubG9hZGluZ1NwaW5uZXIpIHtcbiAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxvYWRpbmdTcGlubmVyLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnaW5oZXJpdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxvYWRpbmdTcGlubmVyLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSBjaGFuZ2VzLmxvYWRpbmcuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiJdfQ==