@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>
255 lines • 17.7 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.
*/
export class Button {
/**
* @param {?} ref
* @param {?} el
* @param {?} renderer
* @param {?} viewContainerRef
* @param {?} componentFactoryResolver
*/
constructor(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;
}
/**
* @return {?}
*/
get basic() {
return this.getType('basic');
}
/**
* @return {?}
*/
get primary() {
return this.getType('primary');
}
/**
* @return {?}
*/
get plain() {
return this.getType('plain');
}
/**
* @return {?}
*/
get destructive() {
return this.getType('destructive');
}
/**
* @return {?}
*/
get outline_white() {
return this.getType('outline_white');
}
/**
* @return {?}
*/
get buttonSmall() {
return this.size === 'sm';
}
/**
* @return {?}
*/
get buttonLarge() {
return this.size === 'lg';
}
/**
* @private
* @param {?} type
* @return {?}
*/
getType(type) {
return this.sukaButton === type;
}
/**
* @return {?}
*/
ngOnInit() {
if (!this.sukaButton) {
this.sukaButton = 'basic';
}
// Create the spinner
/** @type {?} */
const factory = this.componentFactoryResolver.resolveComponentFactory(Loading);
/** @type {?} */
const 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 {?}
*/
ngOnChanges(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 {?}
*/
ngAfterViewInit() {
this.ref.detectChanges();
}
}
Button.decorators = [
{ type: Directive, args: [{
selector: '[sukaButton]'
},] }
];
/** @nocollapse */
Button.ctorParameters = () => [
{ 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',] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFFekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBYXBELE1BQU0sT0FBTyxNQUFNOzs7Ozs7OztJQWdFakIsWUFDVSxHQUFzQixFQUN0QixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLHdCQUFrRDtRQUpsRCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7Ozs7UUFqRW5ELGVBQVUsR0FBZSxPQUFPLENBQUM7Ozs7UUFLakMsU0FBSSxHQUF3QixJQUFJLENBQUM7Ozs7UUFxQkYsYUFBUSxHQUFLLEtBQUssQ0FBQzs7OztRQUlmLFlBQU8sR0FBSyxLQUFLLENBQUM7Ozs7UUFJcEIsVUFBSyxHQUFLLEtBQUssQ0FBQzs7OztRQUlYLGNBQVMsR0FBSyxLQUFLLENBQUM7Ozs7UUFJcEIsWUFBTyxHQUFLLEtBQUssQ0FBQzs7OztRQUlyQixZQUFPLEdBQUssS0FBSyxDQUFDO0lBb0IzRCxDQUFDOzs7O0lBM0RKLElBQXFDLEtBQUs7UUFDeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7Ozs7SUFDRCxJQUF1QyxPQUFPO1FBQzVD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Qix3QkFBd0I7Ozt5QkFvQnZCLEtBQUs7bUJBS0wsS0FBSztvQkFFTCxXQUFXLFNBQUMsa0JBQWtCO3NCQUc5QixXQUFXLFNBQUMsb0JBQW9CO29CQUdoQyxXQUFXLFNBQUMsa0JBQWtCOzBCQUc5QixXQUFXLFNBQUMsd0JBQXdCOzRCQUdwQyxXQUFXLFNBQUMsMEJBQTBCO3VCQU90QyxXQUFXLFNBQUMsZ0JBQWdCLGNBQUcsS0FBSztzQkFJcEMsV0FBVyxTQUFDLG9CQUFvQixjQUFHLEtBQUs7b0JBSXhDLFdBQVcsU0FBQyxrQkFBa0IsY0FBRyxLQUFLO3dCQUl0QyxXQUFXLFNBQUMsdUJBQXVCLGNBQUcsS0FBSztzQkFJM0MsV0FBVyxTQUFDLHVCQUF1QixjQUFHLEtBQUs7c0JBSTNDLFdBQVcsU0FBQyxvQkFBb0IsY0FBRyxLQUFLOzBCQUV4QyxXQUFXLFNBQUMsZUFBZTswQkFHM0IsV0FBVyxTQUFDLGVBQWU7Ozs7Ozs7SUFuRDVCLDRCQUEwQzs7Ozs7SUFLMUMsc0JBQTBDOzs7OztJQXFCMUMsMEJBQTJEOzs7OztJQUkzRCx5QkFBOEQ7Ozs7O0lBSTlELHVCQUEwRDs7Ozs7SUFJMUQsMkJBQW1FOzs7OztJQUluRSx5QkFBaUU7Ozs7O0lBSWpFLHlCQUE4RDs7Ozs7SUFZOUQsZ0NBQXdCOzs7OztJQUd0QixxQkFBOEI7Ozs7O0lBQzlCLG9CQUFzQjs7Ozs7SUFDdEIsMEJBQTJCOzs7OztJQUMzQixrQ0FBMEM7Ozs7O0lBQzFDLDBDQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9hZGluZyB9IGZyb20gJy4uL2xvYWRpbmcvbG9hZGluZy5tb2R1bGUnO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSB9IGZyb20gJy4vYnV0dG9uLXR5cGVzJztcblxuXG4vKipcbiAqIEJ1dHRvbnMgYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBhY3Rpb25zLCBzdWNoIGFzIOKAnEFkZOKAnSwg4oCcQ2xvc2XigJ0sIOKAnENhbmNlbOKAnSwgb3Ig4oCcU2F2ZeKAnS5cbiAqIFBsYWluIGJ1dHRvbnMsIHdoaWNoIGxvb2sgc2ltaWxhciB0byBsaW5rcywgYXJlIHVzZWQgZm9yIGxlc3MgaW1wb3J0YW50IG9yIGxlc3MgY29tbW9ubHkgdXNlZCBhY3Rpb25zLCBzdWNoIGFzIOKAnHZpZXcgc2hpcHBpbmcgc2V0dGluZ3PigJ0uXG4gKlxuICogRm9yIG5hdmlnYXRpb25hbCBhY3Rpb25zIHRoYXQgYXBwZWFyIHdpdGhpbiBvciBkaXJlY3RseSBmb2xsb3dpbmcgYSBzZW50ZW5jZSwgdXNlIHRoZSBsaW5rIGNvbXBvbmVudC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3N1a2FCdXR0b25dJ1xufSlcbmV4cG9ydCBjbGFzcyBCdXR0b24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBidXR0b24gdHlwZS4gQ2FuIGJlIGBwcmltYXJ5YCwgYGJhc2ljYCwgYHBsYWluYCwgYGRlc3RydWN0aXZlYCBvciBgb3V0bGluZV93aGl0ZWAuXG4gICAqL1xuICBASW5wdXQoKSBzdWthQnV0dG9uOiBCdXR0b25UeXBlID0gJ2Jhc2ljJztcblxuICAvKipcbiAgICogQnV0dG9uIHNpemUuIENhbiBiZSBgbWRgIChNZWRpdW0pLCBgc21gIChTbWFsbCkgb3IgYGxnYCAoTGFyZ2UpLlxuICAgKi9cbiAgQElucHV0KCkgc2l6ZT86ICdtZCcgfCAnc20nIHwgJ2xnJyA9ICdtZCc7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLWJhc2ljJykgZ2V0IGJhc2ljKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoJ2Jhc2ljJyk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLXByaW1hcnknKSBnZXQgcHJpbWFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCdwcmltYXJ5Jyk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLXBsYWluJykgZ2V0IHBsYWluKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoJ3BsYWluJyk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLWRlc3RydWN0aXZlJykgZ2V0IGRlc3RydWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoJ2Rlc3RydWN0aXZlJyk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLW91dGxpbmVfd2hpdGUnKSBnZXQgb3V0bGluZV93aGl0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCdvdXRsaW5lX3doaXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBmb3IgYSBza2VsZXRvbiBzdGF0ZSBidXR0b24uXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNrZWxldG9uJykgQElucHV0KCkgc2tlbGV0b24gPyA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCB0byBkaXNwbGF5IHRoZSBvdXRsaW5lIHZlcnNpb24gb2YgdGhlIGJ1dHRvbi5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1vdXRsaW5lJykgQElucHV0KCkgb3V0bGluZSA/ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhIGhvdmVyIGVmZmVjdC5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1ob3ZlcicpIEBJbnB1dCgpIGhvdmVyID8gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgYnV0dG9uIHRoYXQgdXNlcyB0aGUgZnVsbCBob3Jpem9udGFsIHdpZHRoO1xuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLWZ1bGxfd2lkdGgnKSBASW5wdXQoKSBmdWxsV2lkdGggPyA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0cyB0byBgdHJ1ZWAgd2hlbiB0aGUgYnV0dG9uIGlzIG9uIGEgYnV0dG9uIGdyb3VwLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tLWdyb3VwX2l0ZW0nKSBASW5wdXQoKSBpbkdyb3VwID8gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyBidXR0b24uXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi0tbG9hZGluZycpIEBJbnB1dCgpIGxvYWRpbmcgPyA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1zbScpIGdldCBidXR0b25TbWFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSAnc20nO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLS1sZycpIGdldCBidXR0b25MYXJnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSAnbGcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGxvYWRpbmdTcGlubmVyOiBMb2FkaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICApIHt9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlKHR5cGU6IEJ1dHRvblR5cGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdWthQnV0dG9uID09PSB0eXBlO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5zdWthQnV0dG9uKSB7XG4gICAgICB0aGlzLnN1a2FCdXR0b24gPSAnYmFzaWMnO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgc3Bpbm5lclxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMb2FkaW5nKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuICAgIHRoaXMubG9hZGluZ1NwaW5uZXIgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICB0aGlzLmxvYWRpbmdTcGlubmVyLnNpemUgPSAnc20nO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxvYWRpbmdTcGlubmVyLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMubG9hZGluZ1NwaW5uZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5sb2FkaW5nU3Bpbm5lci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ2luaGVyaXQnKTtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmxvYWRpbmcgJiYgdGhpcy5sb2FkaW5nU3Bpbm5lcikge1xuICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMubG9hZGluZ1NwaW5uZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdpbmhlcml0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMubG9hZGluZ1NwaW5uZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGNoYW5nZXMubG9hZGluZy5jdXJyZW50VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIl19