UNPKG

@taiga-ui/kit

Version:
147 lines • 21 kB
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=