@taiga-ui/kit
Version:
Taiga UI Angular main components kit
229 lines • 28.2 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 var ALLOWED_SPACE_REGEXP = new RegExp(",|[\\s]");
var TuiTagComponent = /** @class */ (function () {
function TuiTagComponent(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;
}
Object.defineProperty(TuiTagComponent.prototype, "input", {
set: function (input) {
if (input) {
setNativeFocused(input.nativeElement);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiTagComponent.prototype, "backgroundColor", {
get: function () {
return this.autoColor ? stringHashToHsl(this.value) : null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiTagComponent.prototype, "canRemove", {
get: function () {
return this.removable && !this.disabled && !this.showLoader;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiTagComponent.prototype, "displayText", {
get: function () {
return this.editedText === null ? this.value : this.editedText;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiTagComponent.prototype, "loaderSize", {
get: function () {
return sizeBigger(this.size) ? 's' : 'xs';
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiTagComponent.prototype, "hasIcon", {
get: function () {
return this.showLoader || this.removable;
},
enumerable: true,
configurable: true
});
TuiTagComponent.prototype.edit = function (event) {
if (!this.canEdit) {
return;
}
event.preventDefault();
this.editing = true;
this.editedText = this.value;
};
TuiTagComponent.prototype.remove = function (event) {
if (!this.canRemove) {
return;
}
event.preventDefault();
event.stopPropagation();
this.edited.emit('');
};
TuiTagComponent.prototype.onInput = function (value) {
var newTags = this.allowSpaces
? value.split(',')
: value.split(ALLOWED_SPACE_REGEXP);
if (newTags.length > 1) {
this.save(newTags.toString());
return;
}
this.editedText = value;
};
TuiTagComponent.prototype.onKeyDown = function (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;
}
};
TuiTagComponent.prototype.onBlur = function () {
if (this.editedText !== null) {
this.save(this.editedText);
}
};
Object.defineProperty(TuiTagComponent.prototype, "canEdit", {
get: function () {
return this.editable && !this.disabled && !this.showLoader;
},
enumerable: true,
configurable: true
});
TuiTagComponent.prototype.stopEditing = function () {
this.editing = false;
this.editedText = null;
};
TuiTagComponent.prototype.save = function (value) {
this.stopEditing();
this.edited.emit(value.trim());
};
TuiTagComponent.ctorParameters = function () { return [
{ 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);
return TuiTagComponent;
}());
export { TuiTagComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9raXQvY29tcG9uZW50cy90YWcvIiwic291cmNlcyI6WyJ0YWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNILGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxHQUtYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEMsTUFBTSxDQUFDLElBQU0sb0JBQW9CLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBVSxDQUFDLENBQUM7QUFZM0Q7SUFzRUkseUJBQ3lDLFVBQW1DLEVBQzdDLEtBQXVDO1FBRDdCLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQzdDLFVBQUssR0FBTCxLQUFLLENBQWtDO1FBdkV0RSxpRUFBaUU7UUFHakUsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUlYLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFJakIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFJbkIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFLaEMsU0FBSSxHQUF3QixHQUFHLENBQUM7UUFJaEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUtuQixXQUFNLDJCQUFnQztRQUt0QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSWxCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFLbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztR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QUFvQjtZQUM5QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtZQUMvQyxtaUNBQWtDO1lBRWxDLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMxQixJQUFJLEVBQUU7Z0JBQ0Ysb0JBQW9CLEVBQUUsT0FBTzthQUNoQzs7U0FDSixDQUFDO1FBd0VPLFdBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ2xCLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO09BeEVaLGVBQWUsQ0EySzNCO0lBQUQsc0JBQUM7Q0FBQSxBQTNLRCxJQTJLQztTQTNLWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7c2V0TmF0aXZlRm9jdXNlZCwgdHVpRGVmYXVsdFByb3B9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtcbiAgICBNT0RFX1BST1ZJREVSLFxuICAgIHNpemVCaWdnZXIsXG4gICAgVFVJX01PREUsXG4gICAgVHVpQnJpZ2h0bmVzcyxcbiAgICBUdWlTaXplTCxcbiAgICBUdWlTaXplUyxcbiAgICBUdWlTaXplWFMsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7VHVpU3RhdHVzfSBmcm9tICdAdGFpZ2EtdWkva2l0L2VudW1zJztcbmltcG9ydCB7c3RyaW5nSGFzaFRvSHNsfSBmcm9tICdAdGFpZ2EtdWkva2l0L3V0aWxzL2Zvcm1hdCc7XG5pbXBvcnQge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgQUxMT1dFRF9TUEFDRV9SRUdFWFAgPSBuZXcgUmVnRXhwKGBcXCx8W1xcXFxzXWApO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3R1aS10YWcsIGFbdHVpVGFnXScsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhZy50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWcuc3R5bGUubGVzcyddLFxuICAgIHByb3ZpZGVyczogW01PREVfUFJPVklERVJdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJygkLmRhdGEtbW9kZS5hdHRyKSc6ICdtb2RlJCcsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpVGFnQ29tcG9uZW50IHtcbiAgICAvLyBUT0RPOiBQb3NzaWJseSBpbXBsZW1lbnQgc3RhbmRhcmQgZm9jdXMgbWVjaGFuaXNtcyBhbmQgb3V0bGluZVxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB2YWx1ZSA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGVkaXRhYmxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgYWxsb3dTcGFjZXMgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIG1heExlbmd0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXR1aS1ob3N0LXNpemUnKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgc2l6ZTogVHVpU2l6ZVMgfCBUdWlTaXplTCA9ICdtJztcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzaG93TG9hZGVyID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXR1aS1ob3N0LXN0YXR1cycpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzdGF0dXM6IFR1aVN0YXR1cyA9IFR1aVN0YXR1cy5EZWZhdWx0O1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLl9ob3ZlcmFibGUnKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgaG92ZXJhYmxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgcmVtb3ZhYmxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX2Rpc2FibGVkJylcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX2F1dG9jb2xvcicpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBhdXRvQ29sb3IgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBsZWZ0Q29udGVudDogUG9seW1vcnBoZXVzQ29udGVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZWRpdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLl9lZGl0aW5nJylcbiAgICBlZGl0aW5nID0gZmFsc2U7XG5cbiAgICBlZGl0ZWRUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0Jywge3JlYWQ6IEVsZW1lbnRSZWZ9KVxuICAgIHNldCBpbnB1dChpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pikge1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHNldE5hdGl2ZUZvY3VzZWQoaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBASW5qZWN0KFRVSV9NT0RFKSByZWFkb25seSBtb2RlJDogT2JzZXJ2YWJsZTxUdWlCcmlnaHRuZXNzIHwgbnVsbD4sXG4gICAgKSB7fVxuXG4gICAgZ2V0IGJhY2tncm91bmRDb2xvcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b0NvbG9yID8gc3RyaW5nSGFzaFRvSHNsKHRoaXMudmFsdWUpIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY2FuUmVtb3ZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmFibGUgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuc2hvd0xvYWRlcjtcbiAgICB9XG5cbiAgICBnZXQgZGlzcGxheVRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGVkVGV4dCA9PT0gbnVsbCA/IHRoaXMudmFsdWUgOiB0aGlzLmVkaXRlZFRleHQ7XG4gICAgfVxuXG4gICAgZ2V0IGxvYWRlclNpemUoKTogVHVpU2l6ZVhTIHtcbiAgICAgICAgcmV0dXJuIHNpemVCaWdnZXIodGhpcy5zaXplKSA/ICdzJyA6ICd4cyc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5faGFzLWljb24nKVxuICAgIGdldCBoYXNJY29uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93TG9hZGVyIHx8IHRoaXMucmVtb3ZhYmxlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICAgIGVkaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmVkaXRlZFRleHQgPSB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZGVsZXRlJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmJhY2tzcGFjZScsIFsnJGV2ZW50J10pXG4gICAgcmVtb3ZlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5lZGl0ZWQuZW1pdCgnJyk7XG4gICAgfVxuXG4gICAgb25JbnB1dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5ld1RhZ3MgPSB0aGlzLmFsbG93U3BhY2VzXG4gICAgICAgICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgICAgICAgIDogdmFsdWUuc3BsaXQoQUxMT1dFRF9TUEFDRV9SRUdFWFApO1xuXG4gICAgICAgIGlmIChuZXdUYWdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZShuZXdUYWdzLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRlZFRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlKHRoaXMuZWRpdGVkVGV4dCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlc2NhcGUnOlxuICAgICAgICAgICAgY2FzZSAnZXNjJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEVkaXRpbmcoKTtcbiAgICAgICAgICAgICAgICBzZXROYXRpdmVGb2N1c2VkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRlZFRleHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZSh0aGlzLmVkaXRlZFRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY2FuRWRpdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuc2hvd0xvYWRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3BFZGl0aW5nKCkge1xuICAgICAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0ZWRUZXh0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0b3BFZGl0aW5nKCk7XG4gICAgICAgIHRoaXMuZWRpdGVkLmVtaXQodmFsdWUudHJpbSgpKTtcbiAgICB9XG59XG4iXX0=