UNPKG

ng-cornerstone

Version:

[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.git

123 lines 21.4 kB
import { __decorate } from "tslib"; import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, Output, } from '@angular/core'; import { InputBoolean } from '../../core'; import { Subject } from 'rxjs'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../icon/icon.component"; export class ButtonComponent { onClick(event) { if (this.disabled) { event.preventDefault(); event.stopImmediatePropagation(); } else if (this.isToggle) { this.pressed = !this.pressed; } } get pressedChange$() { return this._pressedChange$.asObservable(); } /** * Controls button pressed state **/ get pressed() { return this._pressed; } set pressed(value) { if (this.pressed !== coerceBooleanProperty(value)) { this._pressed = !this.pressed; this.pressedChange.emit(this.pressed); this._pressedChange$.next({ source: this, pressed: this.pressed }); } } constructor(_elementRef, cd) { this._elementRef = _elementRef; this.cd = cd; this.disabled = false; this.tabIndex = null; this.type = 'default'; this.shape = 'default'; this.content = 'default'; this.size = 'default'; this.isToggle = false; this.icon = null; this.text = null; /** * Emits whenever button pressed state change **/ this.pressedChange = new EventEmitter(); this._pressedChange$ = new Subject(); this._pressed = false; this.destroy$ = new Subject(); } _getHostElement() { return this._elementRef.nativeElement; } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } /** * @docs-private */ _updatePressed(value) { this.pressed = value; this.cd.markForCheck(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ButtonComponent, selector: "button[nc-button], a[nc-button]", inputs: { disabled: "disabled", tabIndex: "tabIndex", type: "type", shape: "shape", content: "content", size: "size", isToggle: "isToggle", icon: "icon", text: "text", value: "value" }, outputs: { pressedChange: "pressedChange" }, host: { listeners: { "click": "onClick($event)" }, properties: { "class.btn-type-primary": "type === 'primary'", "class.btn-type-default": "type === 'default'", "class.btn-content-icon-text": "content === 'icon-text'", "class.btn-content-icon": "content === 'icon'", "class.btn-content-text": "content === 'text'", "class.btn-shape-round": "shape === 'round'", "class.btn-shape-circle": "shape === 'circle'", "class.btn-size-lg": "size === 'large'", "class.btn-size-sm": "size === 'small'", "attr.tabindex": "disabled ? -1 : (tabIndex === null ? null : tabIndex)", "attr.disabled": "disabled || null", "class.pressed": "this.pressed" }, classAttribute: "nc-btn" }, exportAs: ["ncButton"], ngImport: i0, template: "<ng-container [ngSwitch]=\"content\">\n <ng-container *ngSwitchCase=\"'icon-text'\">\n <i nc-icon [iconfont]=\"icon\"></i>\n <span class=\"text\">{{ text }}</span>\n </ng-container>\n <div *ngSwitchCase=\"'text'\">\n <span>{{ text }}</span>\n </div>\n <div *ngSwitchCase=\"'icon'\">\n <i nc-icon [iconfont]=\"icon\"></i>\n </div>\n <ng-content *ngSwitchDefault></ng-content>\n</ng-container>\n", styles: ["@charset \"UTF-8\";.h1,h1,.headline{font-size:24px;line-height:32px;font-weight:400;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h2,h2,.title{font-size:20px;line-height:32px;font-weight:500;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h3,h3,.subheading{font-size:16px;line-height:28px;font-weight:400;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h4,h4,.body{font-size:14px;line-height:24px;font-weight:500;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h5,h5,.button,:host.nc-btn{font-size:14px;line-height:14px;font-weight:500;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}:host.nc-btn{cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;box-sizing:border-box;position:relative;appearance:none;text-align:center;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;user-select:none;text-decoration:none;margin:0;min-width:0;padding:2px;overflow:visible;border-radius:0;border-width:1px;border-style:solid;border-color:transparent;font-size:16px;line-height:20px}:host.nc-btn::-moz-focus-inner{border:0}:host.nc-btn:disabled{cursor:not-allowed;color:#595959d9}:host.nc-btn.transition{transition-duration:.15s;transition-property:background-color,border-color,box-shadow,color;transition-timing-function:ease-in}:host.btn-type-primary{color:#f2f2f2d9;background-color:#3bdbdf}:host.btn-type-primary:hover:not(:disabled){background-color:#93ebed}:host.btn-type-primary:active:not(:disabled){background-color:#3bdbdf}:host.btn-type-primary.pressed:not(:disabled){background-color:#93ebed}:host.btn-type-default{color:#f2f2f2d9;background-color:transparent}:host.btn-type-default:hover:not(:disabled){border:1px transparent solid!important;color:#3bdbdfd9}:host.btn-type-default:focus:not(:disabled){border:1px rgba(59,219,223,.85) solid}:host.btn-type-default:active:not(:disabled){border:1px transparent solid!important;color:#3bdbdfd9}:host.btn-type-default.pressed:not(:disabled){border:1px transparent solid!important;color:#3bdbdfd9}:host.btn-content-icon-text{flex-flow:column nowrap;align-items:center;justify-content:space-evenly;height:42px}:host.btn-content-icon-text i{font-size:20px}:host.btn-content-icon-text span{font-size:12px;line-height:16px}:host.btn-content-icon{font-size:20px;line-height:24px}:host.btn-content-text{font-size:16px;line-height:20px}:host.btn-shape-round{border-radius:2px}:host.btn-shape-circle{border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.IconComponent, selector: "i[nc-icon]", inputs: ["iconfont"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } __decorate([ InputBoolean() ], ButtonComponent.prototype, "disabled", void 0); __decorate([ InputBoolean() ], ButtonComponent.prototype, "isToggle", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, decorators: [{ type: Component, args: [{ selector: 'button[nc-button], a[nc-button]', exportAs: 'ncButton', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'nc-btn', '[class.btn-type-primary]': `type === 'primary'`, '[class.btn-type-default]': `type === 'default'`, '[class.btn-content-icon-text]': `content === 'icon-text'`, '[class.btn-content-icon]': `content === 'icon'`, '[class.btn-content-text]': `content === 'text'`, '[class.btn-shape-round]': `shape === 'round'`, '[class.btn-shape-circle]': `shape === 'circle'`, '[class.btn-size-lg]': `size === 'large'`, '[class.btn-size-sm]': `size === 'small'`, '[attr.tabindex]': 'disabled ? -1 : (tabIndex === null ? null : tabIndex)', '[attr.disabled]': 'disabled || null', }, template: "<ng-container [ngSwitch]=\"content\">\n <ng-container *ngSwitchCase=\"'icon-text'\">\n <i nc-icon [iconfont]=\"icon\"></i>\n <span class=\"text\">{{ text }}</span>\n </ng-container>\n <div *ngSwitchCase=\"'text'\">\n <span>{{ text }}</span>\n </div>\n <div *ngSwitchCase=\"'icon'\">\n <i nc-icon [iconfont]=\"icon\"></i>\n </div>\n <ng-content *ngSwitchDefault></ng-content>\n</ng-container>\n", styles: ["@charset \"UTF-8\";.h1,h1,.headline{font-size:24px;line-height:32px;font-weight:400;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h2,h2,.title{font-size:20px;line-height:32px;font-weight:500;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h3,h3,.subheading{font-size:16px;line-height:28px;font-weight:400;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h4,h4,.body{font-size:14px;line-height:24px;font-weight:500;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}.h5,h5,.button,:host.nc-btn{font-size:14px;line-height:14px;font-weight:500;font-family:roboto,Noto Sans SC,sans-serif;letter-spacing:normal}:host.nc-btn{cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;box-sizing:border-box;position:relative;appearance:none;text-align:center;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;user-select:none;text-decoration:none;margin:0;min-width:0;padding:2px;overflow:visible;border-radius:0;border-width:1px;border-style:solid;border-color:transparent;font-size:16px;line-height:20px}:host.nc-btn::-moz-focus-inner{border:0}:host.nc-btn:disabled{cursor:not-allowed;color:#595959d9}:host.nc-btn.transition{transition-duration:.15s;transition-property:background-color,border-color,box-shadow,color;transition-timing-function:ease-in}:host.btn-type-primary{color:#f2f2f2d9;background-color:#3bdbdf}:host.btn-type-primary:hover:not(:disabled){background-color:#93ebed}:host.btn-type-primary:active:not(:disabled){background-color:#3bdbdf}:host.btn-type-primary.pressed:not(:disabled){background-color:#93ebed}:host.btn-type-default{color:#f2f2f2d9;background-color:transparent}:host.btn-type-default:hover:not(:disabled){border:1px transparent solid!important;color:#3bdbdfd9}:host.btn-type-default:focus:not(:disabled){border:1px rgba(59,219,223,.85) solid}:host.btn-type-default:active:not(:disabled){border:1px transparent solid!important;color:#3bdbdfd9}:host.btn-type-default.pressed:not(:disabled){border:1px transparent solid!important;color:#3bdbdfd9}:host.btn-content-icon-text{flex-flow:column nowrap;align-items:center;justify-content:space-evenly;height:42px}:host.btn-content-icon-text i{font-size:20px}:host.btn-content-icon-text span{font-size:12px;line-height:16px}:host.btn-content-icon{font-size:20px;line-height:24px}:host.btn-content-text{font-size:16px;line-height:20px}:host.btn-shape-round{border-radius:2px}:host.btn-shape-circle{border-radius:50%}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { disabled: [{ type: Input }], tabIndex: [{ type: Input }], type: [{ type: Input }], shape: [{ type: Input }], content: [{ type: Input }], size: [{ type: Input }], isToggle: [{ type: Input }], icon: [{ type: Input }], text: [{ type: Input }], value: [{ type: Input }], onClick: [{ type: HostListener, args: ['click', ['$event']] }], pressedChange: [{ type: Output }], pressed: [{ type: HostBinding, args: ['class.pressed'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvcm5lcnN0b25lL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvcm5lcnN0b25lL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFrQzVFLE1BQU0sT0FBTyxlQUFlO0lBYTFCLE9BQU8sQ0FBQyxLQUFLO1FBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQU1ELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUNEOztRQUVJO0lBQ0osSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lB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LEtBQUs7Z0JBR04sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFZZCxhQUFhO3NCQUEvQixNQUFNO2dCQVNILE9BQU87c0JBRFYsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5leHBvcnQgdHlwZSBCdXR0b25UeXBlID0gJ3ByaW1hcnknIHwgJ2RlZmF1bHQnO1xuZXhwb3J0IHR5cGUgQnV0dG9uQ29udGVudCA9ICdpY29uLXRleHQnIHwgJ2ljb24nIHwgJ3RleHQnIHwgJ2RlZmF1bHQnO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2hhcGUgPSAnY2lyY2xlJyB8ICdyb3VuZCcgfCAnZGVmYXVsdCc7XG5leHBvcnQgdHlwZSBCdXR0b25TaXplID0gJ2xhcmdlJyB8ICdkZWZhdWx0JyB8ICdzbWFsbCc7XG5leHBvcnQgaW50ZXJmYWNlIEJ1dHRvblRvZ2dsZUNoYW5nZSB7XG4gIHNvdXJjZTogQnV0dG9uQ29tcG9uZW50O1xuICBwcmVzc2VkOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdidXR0b25bbmMtYnV0dG9uXSwgYVtuYy1idXR0b25dJyxcbiAgZXhwb3J0QXM6ICduY0J1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7XG4gICAgY2xhc3M6ICduYy1idG4nLFxuICAgICdbY2xhc3MuYnRuLXR5cGUtcHJpbWFyeV0nOiBgdHlwZSA9PT0gJ3ByaW1hcnknYCxcbiAgICAnW2NsYXNzLmJ0bi10eXBlLWRlZmF1bHRdJzogYHR5cGUgPT09ICdkZWZhdWx0J2AsXG4gICAgJ1tjbGFzcy5idG4tY29udGVudC1pY29uLXRleHRdJzogYGNvbnRlbnQgPT09ICdpY29uLXRleHQnYCxcbiAgICAnW2NsYXNzLmJ0bi1jb250ZW50LWljb25dJzogYGNvbnRlbnQgPT09ICdpY29uJ2AsXG4gICAgJ1tjbGFzcy5idG4tY29udGVudC10ZXh0XSc6IGBjb250ZW50ID09PSAndGV4dCdgLFxuICAgICdbY2xhc3MuYnRuLXNoYXBlLXJvdW5kXSc6IGBzaGFwZSA9PT0gJ3JvdW5kJ2AsXG4gICAgJ1tjbGFzcy5idG4tc2hhcGUtY2lyY2xlXSc6IGBzaGFwZSA9PT0gJ2NpcmNsZSdgLFxuICAgICdbY2xhc3MuYnRuLXNpemUtbGddJzogYHNpemUgPT09ICdsYXJnZSdgLFxuICAgICdbY2xhc3MuYnRuLXNpemUtc21dJzogYHNpemUgPT09ICdzbWFsbCdgLFxuICAgICdbYXR0ci50YWJpbmRleF0nOiAnZGlzYWJsZWQgPyAtMSA6ICh0YWJJbmRleCA9PT0gbnVsbCA/IG51bGwgOiB0YWJJbmRleCknLFxuICAgICdbYXR0ci5kaXNhYmxlZF0nOiAnZGlzYWJsZWQgfHwgbnVsbCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHR5cGU6IEJ1dHRvblR5cGUgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIHNoYXBlOiBCdXR0b25TaGFwZSA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgY29udGVudDogQnV0dG9uQ29udGVudCA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgc2l6ZTogQnV0dG9uU2l6ZSA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGlzVG9nZ2xlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGljb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSB0ZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgdmFsdWU6IGFueTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1RvZ2dsZSkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gIXRoaXMucHJlc3NlZDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW5ldmVyIGJ1dHRvbiBwcmVzc2VkIHN0YXRlIGNoYW5nZVxuICAgKiovXG4gIEBPdXRwdXQoKSByZWFkb25seSBwcmVzc2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3ByZXNzZWRDaGFuZ2UkID0gbmV3IFN1YmplY3Q8QnV0dG9uVG9nZ2xlQ2hhbmdlPigpO1xuICBnZXQgcHJlc3NlZENoYW5nZSQoKTogT2JzZXJ2YWJsZTxCdXR0b25Ub2dnbGVDaGFuZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5fcHJlc3NlZENoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnRyb2xzIGJ1dHRvbiBwcmVzc2VkIHN0YXRlXG4gICAqKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wcmVzc2VkJylcbiAgZ2V0IHByZXNzZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXNzZWQ7XG4gIH1cbiAgc2V0IHByZXNzZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5wcmVzc2VkICE9PSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpKSB7XG4gICAgICB0aGlzLl9wcmVzc2VkID0gIXRoaXMucHJlc3NlZDtcbiAgICAgIHRoaXMucHJlc3NlZENoYW5nZS5lbWl0KHRoaXMucHJlc3NlZCk7XG4gICAgICB0aGlzLl9wcmVzc2VkQ2hhbmdlJC5uZXh0KHsgc291cmNlOiB0aGlzLCBwcmVzc2VkOiB0aGlzLnByZXNzZWQgfSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBfcHJlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcHJlc3NlZDogQm9vbGVhbklucHV0O1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgX2dldEhvc3RFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVByZXNzZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnByZXNzZWQgPSB2YWx1ZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250ZW50XCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpY29uLXRleHQnXCI+XG4gICAgPGkgbmMtaWNvbiBbaWNvbmZvbnRdPVwiaWNvblwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cInRleHRcIj57eyB0ZXh0IH19PC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XG4gICAgPHNwYW4+e3sgdGV4dCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiPlxuICAgIDxpIG5jLWljb24gW2ljb25mb250XT1cImljb25cIj48L2k+XG4gIDwvZGl2PlxuICA8bmctY29udGVudCAqbmdTd2l0Y2hEZWZhdWx0PjwvbmctY29udGVudD5cbjwvbmctY29udGFpbmVyPlxuIl19