@taiga-ui/kit
Version:
Taiga UI Angular main components kit
147 lines • 21 kB
JavaScript
import { __decorate, __extends, __param } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Input, Optional, Self, ViewChild, } from '@angular/core';
import { NgControl } from '@angular/forms';
import { AbstractTuiControl, setNativeFocused, TUI_FOCUSABLE_ITEM_ACCESSOR, tuiDefaultProp, tuiPure, } from '@taiga-ui/cdk';
import { TUI_DIGIT_REGEXP, TUI_ICONS_PATH, TuiPrimitiveTextfieldComponent, } from '@taiga-ui/core';
import { TUI_ARROW } from '@taiga-ui/kit/components/arrow';
import { TuiInputPhoneComponent } from '@taiga-ui/kit/components/input-phone';
import { FIXED_DROPDOWN_CONTROLLER_PROVIDER } from '@taiga-ui/kit/providers';
import { COUNTRIES } from './const/countries';
import { TuiCountryIsoCode } from './country-iso-code';
// @dynamic
var TuiInputPhoneInternationalComponent = /** @class */ (function (_super) {
__extends(TuiInputPhoneInternationalComponent, _super);
function TuiInputPhoneInternationalComponent(control, changeDetectorRef, iconsPath) {
var _this = _super.call(this, control, changeDetectorRef) || this;
_this.countryIsoCode = TuiCountryIsoCode.RU;
_this.countries = [];
_this.open = false;
_this.arrow = TUI_ARROW;
_this.staticPath = null;
_this.staticPath = iconsPath('tuiIcon').replace('tuiIcon.svg#tuiIcon', '');
return _this;
}
TuiInputPhoneInternationalComponent_1 = TuiInputPhoneInternationalComponent;
Object.defineProperty(TuiInputPhoneInternationalComponent.prototype, "nativeFocusableElement", {
get: function () {
return this.inputPhoneComponent && !this.computedDisabled
? this.inputPhoneComponent.nativeFocusableElement
: null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiInputPhoneInternationalComponent.prototype, "focused", {
get: function () {
return ((!!this.primitiveTextfield && this.primitiveTextfield.focused) ||
(!!this.inputPhoneComponent && this.inputPhoneComponent.focused));
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiInputPhoneInternationalComponent.prototype, "inputPhoneCountryCode", {
get: function () {
return this.isoToCountryCode(this.countryIsoCode);
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiInputPhoneInternationalComponent.prototype, "phoneMaskAfterCountryCode", {
get: function () {
var countryCode = this.isoToCountryCode(this.countryIsoCode);
return this.calculateMaskAfterCountryCode(COUNTRIES[this.countryIsoCode].mask, countryCode);
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiInputPhoneInternationalComponent.prototype, "countryFlagPath", {
get: function () {
return this.getFlagPath(this.countryIsoCode);
},
enumerable: true,
configurable: true
});
TuiInputPhoneInternationalComponent.prototype.getFlagPath = function (code) {
return "" + this.staticPath + code + ".png";
};
TuiInputPhoneInternationalComponent.prototype.getCountryName = function (isoCode) {
return COUNTRIES[isoCode].name;
};
TuiInputPhoneInternationalComponent.prototype.onItemClick = function (isoCode) {
this.open = false;
this.countryIsoCode = isoCode;
// recalculates mask inside inputPhone to prevent isoCode conflict
this.changeDetectorRef.detectChanges();
if (this.nativeFocusableElement) {
setNativeFocused(this.nativeFocusableElement);
}
};
TuiInputPhoneInternationalComponent.prototype.setDisabledState = function () {
_super.prototype.setDisabledState.call(this);
this.close();
};
TuiInputPhoneInternationalComponent.prototype.isoToCountryCode = function (isoCode) {
return ('+' +
COUNTRIES[isoCode].mask
.split('')
.filter(function (symbol) { return TUI_DIGIT_REGEXP.test(symbol); })
.join(''));
};
TuiInputPhoneInternationalComponent.prototype.getFallbackValue = function () {
return '';
};
TuiInputPhoneInternationalComponent.prototype.close = function () {
this.open = false;
};
TuiInputPhoneInternationalComponent.prototype.calculateMaskAfterCountryCode = function (mask, countryCode) {
return mask.replace(countryCode, '');
};
var TuiInputPhoneInternationalComponent_1;
TuiInputPhoneInternationalComponent.ctorParameters = function () { return [
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NgControl,] }] },
{ type: ChangeDetectorRef, decorators: [{ type: Inject, args: [ChangeDetectorRef,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [TUI_ICONS_PATH,] }] }
]; };
__decorate([
Input(),
tuiDefaultProp()
], TuiInputPhoneInternationalComponent.prototype, "countryIsoCode", void 0);
__decorate([
Input()
], TuiInputPhoneInternationalComponent.prototype, "countries", void 0);
__decorate([
ViewChild(TuiInputPhoneComponent)
], TuiInputPhoneInternationalComponent.prototype, "inputPhoneComponent", void 0);
__decorate([
ViewChild(TuiPrimitiveTextfieldComponent)
], TuiInputPhoneInternationalComponent.prototype, "primitiveTextfield", void 0);
__decorate([
tuiPure
], TuiInputPhoneInternationalComponent.prototype, "isoToCountryCode", null);
__decorate([
tuiPure
], TuiInputPhoneInternationalComponent.prototype, "calculateMaskAfterCountryCode", null);
TuiInputPhoneInternationalComponent = TuiInputPhoneInternationalComponent_1 = __decorate([
Component({
selector: 'tui-input-phone-international',
template: "<tui-hosted-dropdown\n class=\"hosted-dropdown\"\n [content]=\"dropdown\"\n [canOpen]=\"!readOnly\"\n [(open)]=\"open\"\n>\n <div tuiGroup>\n <tui-primitive-textfield\n tuiHostedDropdownHost\n class=\"country-select tui-group__auto-width-item\"\n [tuiTextfieldCustomContent]=\"countryValueContent\"\n [tuiTextfieldLabelOutside]=\"true\"\n [disabled]=\"disabled\"\n [focusable]=\"focusable\"\n [editable]=\"false\"\n [iconContent]=\"arrow\"\n [pseudoFocused]=\"open || null\"\n [readOnly]=\"readOnly\"\n [tuiHintContent]=\"null\"\n ></tui-primitive-textfield>\n <tui-input-phone\n class=\"input-phone tui-group__auto-width-item\"\n tuiTextfieldAutocomplete=\"off\"\n [tuiTextfieldLabelOutside]=\"true\"\n [formControl]=\"control\"\n [focusable]=\"focusable\"\n [countryCode]=\"inputPhoneCountryCode\"\n [phoneMaskAfterCountryCode]=\"phoneMaskAfterCountryCode\"\n [readOnly]=\"readOnly\"\n [pseudoInvalid]=\"pseudoInvalid\"\n [pseudoFocused]=\"pseudoFocused\"\n [pseudoHovered]=\"pseudoHovered\"\n >\n {{inputPhoneCountryCode}}\n </tui-input-phone>\n </div>\n</tui-hosted-dropdown>\n\n<ng-template #dropdown>\n <tui-data-list>\n <button\n *ngFor=\"let item of countries\"\n tuiOption\n (click)=\"onItemClick(item)\"\n >\n <img class=\"country-item-flag\" alt=\"\" [src]=\"getFlagPath(item)\" />\n <span class=\"country-item-name\">{{getCountryName(item)}}</span>\n <span class=\"country-item-code\">{{isoToCountryCode(item)}}</span>\n </button>\n </tui-data-list>\n</ng-template>\n\n<ng-template #countryValueContent>\n <img\n class=\"flag\"\n [alt]=\"getCountryName(countryIsoCode)\"\n [src]=\"countryFlagPath\"\n />\n</ng-template>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
{
provide: TUI_FOCUSABLE_ITEM_ACCESSOR,
useExisting: forwardRef(function () { return TuiInputPhoneInternationalComponent_1; }),
},
FIXED_DROPDOWN_CONTROLLER_PROVIDER,
],
styles: [":host{display:block}:host._disabled{pointer-events:none}.hosted-dropdown{display:block}.country-select{width:90px}.arrow-icon{transition-duration:.3s;transition-timing-function:ease-in-out;display:flex;width:24px;height:24px;align-items:center;justify-content:center;color:var(--tui-text-03);position:relative;box-sizing:border-box;cursor:pointer;transition-property:color,transform}.arrow-icon:hover{color:var(--tui-text-02)}:host._disabled .arrow-icon,:host._readonly .arrow-icon{pointer-events:none}:host[data-mode=onDark] .arrow-icon{color:var(--tui-text-03-night)}:host[data-mode=onDark] .arrow-icon:hover{color:var(--tui-text-01-night)}.arrow-icon_open{transform:rotate(180deg)}.input-phone{flex:1}.flag{width:28px;height:20px;margin-left:-8px}.country-item-flag{width:28px;height:20px}.country-item-name{margin-left:12px;margin-right:auto}.country-item-code{color:var(--tui-text-02);margin-right:4px}"]
}),
__param(0, Optional()),
__param(0, Self()),
__param(0, Inject(NgControl)),
__param(1, Inject(ChangeDetectorRef)),
__param(2, Inject(TUI_ICONS_PATH))
], TuiInputPhoneInternationalComponent);
return TuiInputPhoneInternationalComponent;
}(AbstractTuiControl));
export { TuiInputPhoneInternationalComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC8iLCJzb3VyY2VzIjpbImlucHV0LXBob25lLWludGVybmF0aW9uYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLDJCQUEyQixFQUMzQixjQUFjLEVBRWQsT0FBTyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLDhCQUE4QixHQUNqQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsV0FBVztBQWNYO0lBQ1ksdURBQTBCO0lBcUJsQyw2Q0FJSSxPQUF5QixFQUNFLGlCQUFvQyxFQUUvRCxTQUFtQztRQVB2QyxZQVNJLGtCQUFNLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxTQUdwQztRQTdCRCxvQkFBYyxHQUFzQixpQkFBaUIs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QTtPQTVCbEIsbUNBQW1DLENBaUgvQztJQUFELDBDQUFDO0NBQUEsQUFqSEQsQ0FDWSxrQkFBa0IsR0FnSDdCO1NBakhZLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0VHVpQ29udHJvbCxcbiAgICBzZXROYXRpdmVGb2N1c2VkLFxuICAgIFRVSV9GT0NVU0FCTEVfSVRFTV9BQ0NFU1NPUixcbiAgICB0dWlEZWZhdWx0UHJvcCxcbiAgICBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3IsXG4gICAgdHVpUHVyZSxcbiAgICBUdWlTdHJpbmdIYW5kbGVyLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7XG4gICAgVFVJX0RJR0lUX1JFR0VYUCxcbiAgICBUVUlfSUNPTlNfUEFUSCxcbiAgICBUdWlQcmltaXRpdmVUZXh0ZmllbGRDb21wb25lbnQsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7VFVJX0FSUk9XfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvYXJyb3cnO1xuaW1wb3J0IHtUdWlJbnB1dFBob25lQ29tcG9uZW50fSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvaW5wdXQtcGhvbmUnO1xuaW1wb3J0IHtGSVhFRF9EUk9QRE9XTl9DT05UUk9MTEVSX1BST1ZJREVSfSBmcm9tICdAdGFpZ2EtdWkva2l0L3Byb3ZpZGVycyc7XG5pbXBvcnQge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQge0NPVU5UUklFU30gZnJvbSAnLi9jb25zdC9jb3VudHJpZXMnO1xuaW1wb3J0IHtUdWlDb3VudHJ5SXNvQ29kZX0gZnJvbSAnLi9jb3VudHJ5LWlzby1jb2RlJztcblxuLy8gQGR5bmFtaWNcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWlucHV0LXBob25lLWludGVybmF0aW9uYWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2lucHV0LXBob25lLWludGVybmF0aW9uYWwuc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUVUlfRk9DVVNBQkxFX0lURU1fQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUdWlJbnB1dFBob25lSW50ZXJuYXRpb25hbENvbXBvbmVudCksXG4gICAgICAgIH0sXG4gICAgICAgIEZJWEVEX0RST1BET1dOX0NPTlRST0xMRVJfUFJPVklERVIsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpSW5wdXRQaG9uZUludGVybmF0aW9uYWxDb21wb25lbnRcbiAgICBleHRlbmRzIEFic3RyYWN0VHVpQ29udHJvbDxzdHJpbmc+XG4gICAgaW1wbGVtZW50cyBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3Ige1xuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBjb3VudHJ5SXNvQ29kZTogVHVpQ291bnRyeUlzb0NvZGUgPSBUdWlDb3VudHJ5SXNvQ29kZS5SVTtcblxuICAgIEBJbnB1dCgpXG4gICAgY291bnRyaWVzOiBSZWFkb25seUFycmF5PFR1aUNvdW50cnlJc29Db2RlPiA9IFtdO1xuXG4gICAgb3BlbiA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgYXJyb3c6IFBvbHltb3JwaGV1c0NvbnRlbnQgPSBUVUlfQVJST1c7XG5cbiAgICBwcml2YXRlIHN0YXRpY1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZChUdWlJbnB1dFBob25lQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRQaG9uZUNvbXBvbmVudD86IFR1aUlucHV0UGhvbmVDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKFR1aVByaW1pdGl2ZVRleHRmaWVsZENvbXBvbmVudClcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZVRleHRmaWVsZD86IFR1aVByaW1pdGl2ZVRleHRmaWVsZENvbXBvbmVudDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBAU2VsZigpXG4gICAgICAgIEBJbmplY3QoTmdDb250cm9sKVxuICAgICAgICBjb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsLFxuICAgICAgICBASW5qZWN0KENoYW5nZURldGVjdG9yUmVmKSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoVFVJX0lDT05TX1BBVEgpXG4gICAgICAgIGljb25zUGF0aDogVHVpU3RyaW5nSGFuZGxlcjxzdHJpbmc+LFxuICAgICkge1xuICAgICAgICBzdXBlcihjb250cm9sLCBjaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICAgICAgdGhpcy5zdGF0aWNQYXRoID0gaWNvbnNQYXRoKCd0dWlJY29uJykucmVwbGFjZSgndHVpSWNvbi5zdmcjdHVpSWNvbicsICcnKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRm9jdXNhYmxlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFBob25lQ29tcG9uZW50ICYmICF0aGlzLmNvbXB1dGVkRGlzYWJsZWRcbiAgICAgICAgICAgID8gdGhpcy5pbnB1dFBob25lQ29tcG9uZW50Lm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICghIXRoaXMucHJpbWl0aXZlVGV4dGZpZWxkICYmIHRoaXMucHJpbWl0aXZlVGV4dGZpZWxkLmZvY3VzZWQpIHx8XG4gICAgICAgICAgICAoISF0aGlzLmlucHV0UGhvbmVDb21wb25lbnQgJiYgdGhpcy5pbnB1dFBob25lQ29tcG9uZW50LmZvY3VzZWQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGlucHV0UGhvbmVDb3VudHJ5Q29kZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29Ub0NvdW50cnlDb2RlKHRoaXMuY291bnRyeUlzb0NvZGUpO1xuICAgIH1cblxuICAgIGdldCBwaG9uZU1hc2tBZnRlckNvdW50cnlDb2RlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvdW50cnlDb2RlID0gdGhpcy5pc29Ub0NvdW50cnlDb2RlKHRoaXMuY291bnRyeUlzb0NvZGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZU1hc2tBZnRlckNvdW50cnlDb2RlKFxuICAgICAgICAgICAgQ09VTlRSSUVTW3RoaXMuY291bnRyeUlzb0NvZGVdLm1hc2ssXG4gICAgICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgY291bnRyeUZsYWdQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZsYWdQYXRoKHRoaXMuY291bnRyeUlzb0NvZGUpO1xuICAgIH1cblxuICAgIGdldEZsYWdQYXRoKGNvZGU6IFR1aUNvdW50cnlJc29Db2RlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc3RhdGljUGF0aH0ke2NvZGV9LnBuZ2A7XG4gICAgfVxuXG4gICAgZ2V0Q291bnRyeU5hbWUoaXNvQ29kZTogVHVpQ291bnRyeUlzb0NvZGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQ09VTlRSSUVTW2lzb0NvZGVdLm5hbWU7XG4gICAgfVxuXG4gICAgb25JdGVtQ2xpY2soaXNvQ29kZTogVHVpQ291bnRyeUlzb0NvZGUpIHtcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY291bnRyeUlzb0NvZGUgPSBpc29Db2RlO1xuICAgICAgICAvLyByZWNhbGN1bGF0ZXMgbWFzayBpbnNpZGUgaW5wdXRQaG9uZSB0byBwcmV2ZW50IGlzb0NvZGUgY29uZmxpY3RcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRm9jdXNhYmxlRWxlbWVudCkge1xuICAgICAgICAgICAgc2V0TmF0aXZlRm9jdXNlZCh0aGlzLm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZSgpIHtcbiAgICAgICAgc3VwZXIuc2V0RGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBpc29Ub0NvdW50cnlDb2RlKGlzb0NvZGU6IFR1aUNvdW50cnlJc29Db2RlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcrJyArXG4gICAgICAgICAgICBDT1VOVFJJRVNbaXNvQ29kZV0ubWFza1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHN5bWJvbCA9PiBUVUlfRElHSVRfUkVHRVhQLnRlc3Qoc3ltYm9sKSlcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RmFsbGJhY2tWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGNhbGN1bGF0ZU1hc2tBZnRlckNvdW50cnlDb2RlKG1hc2s6IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UoY291bnRyeUNvZGUsICcnKTtcbiAgICB9XG59XG4iXX0=