UNPKG

@taiga-ui/kit

Version:
200 lines • 26.3 kB
import { __decorate, __param } from "tslib"; import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, Output, ViewChild, } from '@angular/core'; import { setNativeFocused, tuiDefaultProp } from '@taiga-ui/cdk'; import { MODE_PROVIDER, sizeBigger, TUI_MODE, } from '@taiga-ui/core'; import { stringHashToHsl } from '@taiga-ui/kit/utils/format'; import { Observable } from 'rxjs'; export const ALLOWED_SPACE_REGEXP = new RegExp(`\,|[\\s]`); let TuiTagComponent = class TuiTagComponent { constructor(elementRef, mode$) { this.elementRef = elementRef; this.mode$ = mode$; // TODO: Possibly implement standard focus mechanisms and outline this.value = ''; this.editable = false; this.allowSpaces = true; this.maxLength = null; this.size = 'm'; this.showLoader = false; this.status = "default" /* Default */; this.hoverable = false; this.removable = false; this.disabled = false; this.autoColor = false; this.leftContent = null; this.edited = new EventEmitter(); this.editing = false; this.editedText = null; } set input(input) { if (input) { setNativeFocused(input.nativeElement); } } get backgroundColor() { return this.autoColor ? stringHashToHsl(this.value) : null; } get canRemove() { return this.removable && !this.disabled && !this.showLoader; } get displayText() { return this.editedText === null ? this.value : this.editedText; } get loaderSize() { return sizeBigger(this.size) ? 's' : 'xs'; } get hasIcon() { return this.showLoader || this.removable; } edit(event) { if (!this.canEdit) { return; } event.preventDefault(); this.editing = true; this.editedText = this.value; } remove(event) { if (!this.canRemove) { return; } event.preventDefault(); event.stopPropagation(); this.edited.emit(''); } onInput(value) { const newTags = this.allowSpaces ? value.split(',') : value.split(ALLOWED_SPACE_REGEXP); if (newTags.length > 1) { this.save(newTags.toString()); return; } this.editedText = value; } onKeyDown(event) { event.stopPropagation(); switch (event.key.toLowerCase()) { case 'enter': event.preventDefault(); this.save(this.editedText || ''); break; case 'escape': case 'esc': event.preventDefault(); this.stopEditing(); setNativeFocused(this.elementRef.nativeElement); break; default: break; } } onBlur() { if (this.editedText !== null) { this.save(this.editedText); } } get canEdit() { return this.editable && !this.disabled && !this.showLoader; } stopEditing() { this.editing = false; this.editedText = null; } save(value) { this.stopEditing(); this.edited.emit(value.trim()); } }; TuiTagComponent.ctorParameters = () => [ { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }, { type: Observable, decorators: [{ type: Inject, args: [TUI_MODE,] }] } ]; __decorate([ Input(), tuiDefaultProp() ], TuiTagComponent.prototype, "value", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiTagComponent.prototype, "editable", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiTagComponent.prototype, "allowSpaces", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiTagComponent.prototype, "maxLength", void 0); __decorate([ Input(), HostBinding('attr.data-tui-host-size'), tuiDefaultProp() ], TuiTagComponent.prototype, "size", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiTagComponent.prototype, "showLoader", void 0); __decorate([ Input(), HostBinding('attr.data-tui-host-status'), tuiDefaultProp() ], TuiTagComponent.prototype, "status", void 0); __decorate([ Input(), HostBinding('class._hoverable'), tuiDefaultProp() ], TuiTagComponent.prototype, "hoverable", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiTagComponent.prototype, "removable", void 0); __decorate([ Input(), HostBinding('class._disabled'), tuiDefaultProp() ], TuiTagComponent.prototype, "disabled", void 0); __decorate([ Input(), HostBinding('class._autocolor'), tuiDefaultProp() ], TuiTagComponent.prototype, "autoColor", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiTagComponent.prototype, "leftContent", void 0); __decorate([ Output() ], TuiTagComponent.prototype, "edited", void 0); __decorate([ HostBinding('class._editing') ], TuiTagComponent.prototype, "editing", void 0); __decorate([ ViewChild('input', { read: ElementRef }) ], TuiTagComponent.prototype, "input", null); __decorate([ HostBinding('class._has-icon') ], TuiTagComponent.prototype, "hasIcon", null); __decorate([ HostListener('keydown.enter', ['$event']) ], TuiTagComponent.prototype, "edit", null); __decorate([ HostListener('keydown.delete', ['$event']), HostListener('keydown.backspace', ['$event']) ], TuiTagComponent.prototype, "remove", null); TuiTagComponent = __decorate([ Component({ selector: 'tui-tag, a[tuiTag]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"tag\"\n [style.backgroundColor]=\"backgroundColor\"\n (dblclick)=\"edit($event)\"\n>\n <div\n polymorpheus-outlet\n *ngIf=\"leftContent\"\n class=\"left-content\"\n [content]=\"leftContent\"\n ></div>\n <span automation-id=\"tui-tag__text\" class=\"text\">{{displayText}}</span>\n <tui-loader\n *ngIf=\"showLoader\"\n class=\"icon icon_loader\"\n [inheritColor]=\"true\"\n [size]=\"loaderSize\"\n ></tui-loader>\n <tui-svg\n *ngIf=\"canRemove\"\n tuiPreventDefault=\"mousedown\"\n automation-id=\"tui-tag__remove\"\n class=\"icon\"\n src=\"tuiIconCloseLarge\"\n (click)=\"remove($event)\"\n ></tui-svg>\n</div>\n<input\n *ngIf=\"editing\"\n #input\n automation-id=\"tui-tag__edit\"\n class=\"edit\"\n type=\"text\"\n [attr.maxLength]=\"maxLength\"\n [ngModel]=\"editedText\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeyDown($event)\"\n/>\n", providers: [MODE_PROVIDER], host: { '($.data-mode.attr)': 'mode$', }, styles: [":host{transition-property:background;transition-duration:.3s;transition-timing-function:ease-in-out;font:var(--tui-font-text-s);position:relative;display:inline-block;border-radius:var(--tui-radius-s);max-width:100%;cursor:default;outline:0;text-decoration:none}:host:after{transition-property:background;transition-duration:.3s;transition-timing-function:ease-in-out;position:absolute;top:0;left:0;width:100%;height:100%;content:'';box-sizing:border-box;border-radius:inherit;pointer-events:none}:host._hoverable:active[data-tui-host-status=custom]:after,:host._hoverable:hover[data-tui-host-status=custom]:after{background-color:var(--tui-clear)}:host:focus:after{border:2px solid var(--tui-focus)}:host[data-tui-host-status=primary]{background-color:var(--tui-primary);color:var(--tui-primary-text)}:host[data-tui-host-status=primary]._hoverable:hover{background-color:var(--tui-primary-hover)}:host[data-tui-host-status=primary]._hoverable:active{background-color:var(--tui-primary-active)}:host[data-tui-host-status=error]{background-color:var(--tui-error-bg);color:var(--tui-text-01)}:host[data-tui-host-status=error]._hoverable:active,:host[data-tui-host-status=error]._hoverable:hover{background-color:var(--tui-error-bg-hover)}:host[data-tui-host-status=error][data-mode=onDark]{background-color:var(--tui-error-bg-night);color:var(--tui-text-01-night)}:host[data-tui-host-status=error][data-mode=onDark]._hoverable:active,:host[data-tui-host-status=error][data-mode=onDark]._hoverable:hover{background-color:var(--tui-error-bg-night-hover)}:host[data-tui-host-status=success]{background-color:var(--tui-success-bg);color:var(--tui-text-01)}:host[data-tui-host-status=success]._hoverable:active,:host[data-tui-host-status=success]._hoverable:hover{background-color:var(--tui-success-bg-hover)}:host[data-tui-host-status=success][data-mode=onDark]{background-color:var(--tui-success-bg-night);color:var(--tui-text-01-night)}:host[data-tui-host-status=success][data-mode=onDark]._hoverable:active,:host[data-tui-host-status=success][data-mode=onDark]._hoverable:hover{background-color:var(--tui-success-bg-night-hover)}:host[data-tui-host-status=warning]{background-color:var(--tui-warning-bg);color:var(--tui-text-01)}:host[data-tui-host-status=warning]._hoverable:active,:host[data-tui-host-status=warning]._hoverable:hover{background-color:var(--tui-warning-bg-hover)}:host[data-tui-host-status=warning][data-mode=onDark]{background-color:var(--tui-warning-bg-night);color:var(--tui-text-01-night)}:host[data-tui-host-status=warning][data-mode=onDark]._hoverable:active,:host[data-tui-host-status=warning][data-mode=onDark]._hoverable:hover{background-color:var(--tui-warning-bg-night-hover)}:host[data-tui-host-status=default]{color:var(--tui-text-01-night);background-color:var(--tui-base-06)}:host[data-tui-host-status=default]:not([data-mode])._hoverable:hover{background-color:var(--tui-base-07)}:host[data-tui-host-status=default]:not([data-mode])._hoverable:active{background-color:var(--tui-base-08)}:host[data-tui-host-status=default][data-mode=onDark]{color:var(--tui-text-01-night);background-color:var(--tui-clear-inverse)}:host[data-tui-host-status=default][data-mode=onDark]._hoverable:hover{background-color:var(--tui-clear-inverse-hover)}:host[data-tui-host-status=default][data-mode=onDark]._hoverable:active{background-color:var(--tui-clear-inverse-active)}:host[data-tui-host-status=default][data-mode=onDark]:focus:after{border:2px solid var(--tui-base-01)}:host[data-tui-host-status=default][data-mode=onLight]{background-color:var(--tui-clear);color:var(--tui-text-01)}:host[data-tui-host-status=default][data-mode=onLight]._hoverable:hover{background-color:var(--tui-clear-hover)}:host[data-tui-host-status=default][data-mode=onLight]._hoverable:active{background-color:var(--tui-clear-active)}:host._editing{background:0 0!important}:host._disabled{pointer-events:none;opacity:var(--tui-disabled-opacity)}:host._hoverable{cursor:pointer}:host._autocolor{color:var(--tui-text-01)}.text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:.02em}.tag{position:relative;display:flex;align-items:center;border-radius:inherit;white-space:pre}:host[data-tui-host-size='s'] .tag{font:var(--tui-font-text-xs);height:20px;padding:0 8px}:host[data-tui-host-size='m'] .tag{height:var(--tui-height-xs);padding:0 8px}:host[data-tui-host-size='l'] .tag{height:var(--tui-height-s);padding:0 12px}:host._has-icon[data-tui-host-size='s'] .tag{padding-right:2px}:host._has-icon[data-tui-host-size='m'] .tag{padding-right:0}:host._has-icon[data-tui-host-size='l'] .tag{padding-right:4px}:host._editing .tag{visibility:hidden}:host._disabled._has-icon[data-tui-host-size='m'] .tag,:host._disabled._has-icon[data-tui-host-size='s'] .tag{padding-right:8px}:host._disabled._has-icon[data-tui-host-size='l'] .tag{padding-right:12px}.edit{font:var(--tui-font-text-s);padding:0;border:0;border-radius:inherit;background:0 0;font-size:inherit;line-height:inherit;font-weight:inherit;color:inherit;caret-color:currentColor;outline:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;word-break:keep-all;-webkit-text-fill-color:currentColor;position:absolute;top:0;left:0;width:100%;box-sizing:border-box}.edit:-webkit-autofill,.edit:-webkit-autofill:focus,.edit:-webkit-autofill:hover{border-radius:inherit;-webkit-text-fill-color:inherit!important;color:inherit!important;background-color:transparent!important;-webkit-box-shadow:0 0 0 1000px var(--tui-autofill) inset!important}:host[data-tui-host-size='s'] .edit{height:20px;line-height:20px;padding-left:8px}:host[data-tui-host-size='m'] .edit{height:var(--tui-height-xs);line-height:var(--tui-height-xs);padding-left:8px}:host[data-tui-host-size='l'] .edit{height:var(--tui-height-s);line-height:var(--tui-height-s);padding-left:12px}.icon{margin-left:4px;height:100%}.icon:not(.icon_loader){cursor:pointer;pointer-events:all;opacity:var(--tui-disabled-opacity)}.icon:hover{opacity:1}.icon_loader{width:16px;height:16px;margin:0 4px}:host[data-tui-host-size='s'] .icon_loader{margin:0 6px 0 12px;width:8px;height:8px}:host[data-tui-host-size='l'] .icon_loader{margin:0 4px 0 8px}.left-content{margin-right:4px;width:16px;height:16px}"] }), __param(0, Inject(ElementRef)), __param(1, Inject(TUI_MODE)) ], TuiTagComponent); export { TuiTagComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9raXQvY29tcG9uZW50cy90YWcvIiwic291cmNlcyI6WyJ0YWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNILGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxHQUtYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFZM0QsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZTtJQXNFeEIsWUFDeUMsVUFBbUMsRUFDN0MsS0FBdUM7UUFEN0IsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDN0MsVUFBSyxHQUFMLEtBQUssQ0FBa0M7UUF2RXRFLGlFQUFpRTtRQUdqRSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBSVgsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUlqQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUluQixjQUFTLEdBQWtCLElBQUksQ0FBQztRQUtoQyxTQUFJLEdBQXdCLEdBQUcsQ0FBQztRQUloQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBS25CLFdBQU0sMkJBQWdDO1FBS3RDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFJbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztR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LEVBQUUsT0FBTztTQUNoQzs7S0FDSixDQUFDO0lBd0VPLFdBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2xCLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0dBeEVaLGVBQWUsQ0EySzNCO1NBM0tZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtzZXROYXRpdmVGb2N1c2VkLCB0dWlEZWZhdWx0UHJvcH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge1xuICAgIE1PREVfUFJPVklERVIsXG4gICAgc2l6ZUJpZ2dlcixcbiAgICBUVUlfTU9ERSxcbiAgICBUdWlCcmlnaHRuZXNzLFxuICAgIFR1aVNpemVMLFxuICAgIFR1aVNpemVTLFxuICAgIFR1aVNpemVYUyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtUdWlTdGF0dXN9IGZyb20gJ0B0YWlnYS11aS9raXQvZW51bXMnO1xuaW1wb3J0IHtzdHJpbmdIYXNoVG9Ic2x9IGZyb20gJ0B0YWlnYS11aS9raXQvdXRpbHMvZm9ybWF0JztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBBTExPV0VEX1NQQUNFX1JFR0VYUCA9IG5ldyBSZWdFeHAoYFxcLHxbXFxcXHNdYCk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLXRhZywgYVt0dWlUYWddJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFnLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhZy5zdHlsZS5sZXNzJ10sXG4gICAgcHJvdmlkZXJzOiBbTU9ERV9QUk9WSURFUl0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKCQuZGF0YS1tb2RlLmF0dHIpJzogJ21vZGUkJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlUYWdDb21wb25lbnQge1xuICAgIC8vIFRPRE86IFBvc3NpYmx5IGltcGxlbWVudCBzdGFuZGFyZCBmb2N1cyBtZWNoYW5pc21zIGFuZCBvdXRsaW5lXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHZhbHVlID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZWRpdGFibGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBhbGxvd1NwYWNlcyA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdHVpLWhvc3Qtc2l6ZScpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzaXplOiBUdWlTaXplUyB8IFR1aVNpemVMID0gJ20nO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHNob3dMb2FkZXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdHVpLWhvc3Qtc3RhdHVzJylcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHN0YXR1czogVHVpU3RhdHVzID0gVHVpU3RhdHVzLkRlZmF1bHQ7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX2hvdmVyYWJsZScpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBob3ZlcmFibGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICByZW1vdmFibGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5fZGlzYWJsZWQnKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5fYXV0b2NvbG9yJylcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGF1dG9Db2xvciA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGxlZnRDb250ZW50OiBQb2x5bW9ycGhldXNDb250ZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBlZGl0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX2VkaXRpbmcnKVxuICAgIGVkaXRpbmcgPSBmYWxzZTtcblxuICAgIGVkaXRlZFRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7cmVhZDogRWxlbWVudFJlZn0pXG4gICAgc2V0IGlucHV0KGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgc2V0TmF0aXZlRm9jdXNlZChpbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEVsZW1lbnRSZWYpIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoVFVJX01PREUpIHJlYWRvbmx5IG1vZGUkOiBPYnNlcnZhYmxlPFR1aUJyaWdodG5lc3MgfCBudWxsPixcbiAgICApIHt9XG5cbiAgICBnZXQgYmFja2dyb3VuZENvbG9yKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRvQ29sb3IgPyBzdHJpbmdIYXNoVG9Ic2wodGhpcy52YWx1ZSkgOiBudWxsO1xuICAgIH1cblxuICAgIGdldCBjYW5SZW1vdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92YWJsZSAmJiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5zaG93TG9hZGVyO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0ZWRUZXh0ID09PSBudWxsID8gdGhpcy52YWx1ZSA6IHRoaXMuZWRpdGVkVGV4dDtcbiAgICB9XG5cbiAgICBnZXQgbG9hZGVyU2l6ZSgpOiBUdWlTaXplWFMge1xuICAgICAgICByZXR1cm4gc2l6ZUJpZ2dlcih0aGlzLnNpemUpID8gJ3MnIDogJ3hzJztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLl9oYXMtaWNvbicpXG4gICAgZ2V0IGhhc0ljb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dMb2FkZXIgfHwgdGhpcy5yZW1vdmFibGU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pXG4gICAgZWRpdChldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZWRpdGVkVGV4dCA9IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5kZWxldGUnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYmFja3NwYWNlJywgWyckZXZlbnQnXSlcbiAgICByZW1vdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZW1vdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmVkaXRlZC5lbWl0KCcnKTtcbiAgICB9XG5cbiAgICBvbklucHV0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbmV3VGFncyA9IHRoaXMuYWxsb3dTcGFjZXNcbiAgICAgICAgICAgID8gdmFsdWUuc3BsaXQoJywnKVxuICAgICAgICAgICAgOiB2YWx1ZS5zcGxpdChBTExPV0VEX1NQQUNFX1JFR0VYUCk7XG5cbiAgICAgICAgaWYgKG5ld1RhZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlKG5ld1RhZ3MudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdGVkVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmUodGhpcy5lZGl0ZWRUZXh0IHx8ICcnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgICBjYXNlICdlc2MnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wRWRpdGluZygpO1xuICAgICAgICAgICAgICAgIHNldE5hdGl2ZUZvY3VzZWQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmx1cigpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdGVkVGV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlKHRoaXMuZWRpdGVkVGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjYW5FZGl0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0YWJsZSAmJiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5zaG93TG9hZGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcEVkaXRpbmcoKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkaXRlZFRleHQgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcEVkaXRpbmcoKTtcbiAgICAgICAgdGhpcy5lZGl0ZWQuZW1pdCh2YWx1ZS50cmltKCkpO1xuICAgIH1cbn1cbiJdfQ==