@taiga-ui/kit
Version:
Taiga UI Angular main components kit
200 lines • 26.3 kB
JavaScript
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==