@lbgm/phone-input
Version:
An Angular phone input module
275 lines • 53.4 kB
JavaScript
import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
import parsePhoneNumber from "libphonenumber-js";
import allCountries from './all-countries';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/forms";
import * as i3 from "./typing.directive";
export var FormControlEvent;
(function (FormControlEvent) {
FormControlEvent["INVALID"] = "INVALID";
FormControlEvent["VALID"] = "VALID";
})(FormControlEvent || (FormControlEvent = {}));
export class PhoneInputComponent {
constructor(el, cd) {
this.el = el;
this.cd = cd;
this.value = "";
this.label = "";
this.hasError = false;
this.hasSuccess = false;
this.placeholder = "";
this.name = "lbgm-phone-input";
this.required = false;
this.defaultCountry = 'BJ';
this.arrow = true;
this.listHeight = 150;
this.allowed = ([]);
this.phoneEvent = new EventEmitter(true);
this.phoneData = new EventEmitter(true);
this.country = new EventEmitter(true);
this.countries = allCountries;
this.openSelect = false;
this.phone = "";
this.popupPos = "bottom";
this.focus = false;
}
/**
* TrackBy for *ngFor
* @param index
* @param item
* @returns
*/
trackByCountry(index, country) {
return index;
// you can also return item.X;
}
ngOnInit() {
// initialize default country selected
this.defaultSelected = this.formatPhoneInput(this.value);
}
ngOnChanges(changes) {
//
// watch changes on @Input() here
}
ngDoCheck() {
// this.cd.markForCheck();
}
ngAfterViewInit() {
this.emitAll();
// outside
document.addEventListener("click", (event) => {
var _a, _b;
if (((_a = this.basePhoneArrow) === null || _a === void 0 ? void 0 : _a.nativeElement) &&
!((_b = this.basePhoneArrow) === null || _b === void 0 ? void 0 : _b.nativeElement).contains(event.target)) {
this.openSelect = false;
}
});
}
/**
* used to send custom Event: usable in case of scroll turning off when popup is under
*/
cev_dash_select() {
var _a;
const event = new CustomEvent("CEV_SELECT_POPUP", {
detail: { opened: this.openSelect, target: (_a = this.selectPhone) === null || _a === void 0 ? void 0 : _a.nativeElement },
});
document.body.dispatchEvent(event);
}
/**
* filt allowedCountries from props
*/
get allowedCountries() {
const tbl = this.allowed.length !== 0
? this.countries.filter((o) => this.allowed.includes(o.iso2))
: this.countries;
return tbl;
}
get getGroup() {
return this.group;
}
get getName() {
return this.name;
}
get fieldError() {
var _a;
if (!this.controls)
return (_a = this.hasError) !== null && _a !== void 0 ? _a : false;
const f = this.controls[this.name];
return f.status === FormControlEvent.INVALID && f.touched && this.required;
}
get fieldSuccess() {
var _a;
if (!this.controls)
return (_a = this.hasSuccess) !== null && _a !== void 0 ? _a : false;
const f = this.controls[this.name];
return f.status === FormControlEvent.VALID && f.touched && this.required;
}
/**
* ToggleSelect
* to open countries list
*/
toggleSelect() {
var _a;
this.openSelect = !this.openSelect;
// calculate popup position: top or bottom
const selectRect = (_a = this.selectPhone) === null || _a === void 0 ? void 0 : _a.nativeElement.getBoundingClientRect();
// y
this.popupPos = selectRect.bottom < this.listHeight ? "top" : "bottom";
//
this.cev_dash_select();
}
;
/**
* formatPhoneInput
* used to format Phone Input
* @param val
*/
formatPhoneInput(val) {
var _a;
const phoneNumber = parsePhoneNumber(`+${val}`);
if (phoneNumber) {
this.phone = phoneNumber.nationalNumber;
return {
iso2: phoneNumber === null || phoneNumber === void 0 ? void 0 : phoneNumber.country,
dialCode: phoneNumber === null || phoneNumber === void 0 ? void 0 : phoneNumber.countryCallingCode,
name: (_a = this.countries.find((o) => o.iso2 === (phoneNumber === null || phoneNumber === void 0 ? void 0 : phoneNumber.country))) === null || _a === void 0 ? void 0 : _a.name,
};
}
// else
return Object.assign({}, this.countries.find((o) => o.iso2 === this.defaultCountry));
}
;
/**
* emitPhone
* used to emit phone in internationalFormat
*/
emitPhone() {
if (this.phone)
this.phoneEvent.emit(`${this.defaultSelected.dialCode}${this.phone}`);
else
this.phoneEvent.emit("");
}
;
/**
* emitPhoneData
* Used to emit phoneData as an object
* @returns {}
*/
emitPhoneData(event) {
void event;
const ph = parsePhoneNumber(`+${this.defaultSelected.dialCode}${this.phone}`);
this.phoneData.emit({
country: ph === null || ph === void 0 ? void 0 : ph.country,
dialCode: ph === null || ph === void 0 ? void 0 : ph.countryCallingCode,
nationalNumber: ph === null || ph === void 0 ? void 0 : ph.nationalNumber,
number: ph === null || ph === void 0 ? void 0 : ph.number,
isValid: ph === null || ph === void 0 ? void 0 : ph.isValid(),
});
}
;
/**
* emitAll
* used to emit all event
*/
emitAll() {
this.country.emit(this.defaultSelected.iso2);
this.emitPhone();
this.emitPhoneData();
}
/**
* to select any country
* @param country
*/
choose(country) {
this.defaultSelected = country;
this.openSelect = false;
this.emitAll();
}
;
/**
* bind on input
* @param event
*/
onPhoneInput(event) {
event.target.value = this.phone = String(event.target.value).replace(/\D/g, "");
this.emitPhone();
}
;
focusOn(event) {
switch (event.type) {
case "mouseenter":
this.focus = true;
break;
case "mouseleave":
this.focus = false;
break;
default:
break;
}
}
}
PhoneInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PhoneInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
PhoneInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PhoneInputComponent, selector: "lbgm-phone-input", inputs: { value: "value", label: "label", hasError: "hasError", hasSuccess: "hasSuccess", placeholder: "placeholder", name: "name", required: "required", defaultCountry: "defaultCountry", arrow: "arrow", listHeight: "listHeight", allowed: "allowed", group: "group", controls: "controls" }, outputs: { phoneEvent: "phoneEvent", phoneData: "phoneData", country: "country" }, host: { listeners: { "mouseleave": "focusOn($event)", "mouseenter": "focusOn($event)" } }, viewQueries: [{ propertyName: "basePhoneArrow", first: true, predicate: ["basePhoneArrow"], descendants: true }, { propertyName: "inputBase", first: true, predicate: ["inputBase"], descendants: true }, { propertyName: "arrowIcon", first: true, predicate: ["arrowIcon"], descendants: true, static: true }, { propertyName: "selectPhone", first: true, predicate: ["selectPhone"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #selectPhone\n data-widget-item=\"baseinput\"\n class=\"flex flex-col relative\"\n data-lbgm-phonenumberinput=\"component\"\n>\n <!--phone-number-input core-->\n <div\n data-children=\"core\"\n class=\"w-full flex flex-col relative\"\n >\n <!---->\n <label\n *ngIf=\"label\"\n class=\"cursor-pointer baseinput-label p-3px text-xs text-left leading-3 tracking-mz1px text-3dark font-medium select-none bg-white absolute left-2 -translate-y-2\"\n [ngClass]=\"{ 'text-red': fieldError, 'text-blue': focus || fieldSuccess }\"\n [for]=\"name\"\n data-children=\"label\"\n >\n <span data-children=\"labelText\">{{ label }}</span>\n <!---->\n <span\n *ngIf=\"required\"\n data-children=\"requiredStar\"\n class=\"text-left text-DA1414 font-semibold opacity-80 text-xs\"\n > *</span\n >\n </label>\n <!--input-->\n <div\n data-children=\"inputcore\"\n #selectPhoneButton\n class=\"bg-white baseinput-core border w-full border-3dark rounded-md py-2 px-4 flex flex-shrink flex-nowrap items-center space-x-2\"\n [ngClass]=\"{ 'border-red': fieldError, 'border-blue': fieldSuccess, 'border-blue-50': focus }\"\n >\n <span\n (click)=\"toggleSelect()\"\n class=\"inline-flex flex-nowrap items-center space-x-2 cursor-pointer\"\n #basePhoneArrow\n data-children=\"arrowGroup\"\n >\n <span *ngIf=\"arrow; then iconTemplate\"></span>\n <ng-template #iconTemplate>\n <span #arrowIcon [attr.data-arrow-icon]=\"arrowIcon.children.length\" class=\"inline-flex flex-shrink-0 select-none\">\n <ng-content select=\"[arrow]\"></ng-content>\n </span>\n <span *ngIf=\"!arrowIcon.children.length\" [attr.data-arrow-icon]=\"arrowIcon.children.length\" class=\"inline-flex flex-shrink-0\">\n <svg\n width=\"12\"\n height=\"6\"\n viewBox=\"0 0 12 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M0.96967 0.21967C1.26256 -0.0732233 1.73744 -0.0732233 2.03033 0.21967L6 4.18934L9.96967 0.21967C10.2626 -0.0732233 10.7374 -0.0732233 11.0303 0.21967C11.3232 0.512563 11.3232 0.987437 11.0303 1.28033L6.53033 5.78033C6.23744 6.07322 5.76256 6.07322 5.46967 5.78033L0.96967 1.28033C0.676777 0.987437 0.676777 0.512563 0.96967 0.21967Z\"\n [attr.fill]=\"focus ? 'rgb(29 144 237)' : 'rgba(51, 51, 51, 0.5)'\"\n />\n </svg>\n </span>\n </ng-template>\n <span\n class=\"opacity-80 select-none inline-flex flex-whrink-0 font-medium text-3dark text-left text-xs leading-4\"\n [ngClass]=\"{ 'text-blue': focus }\"\n >\n {{ '+' + defaultSelected.dialCode }}\n </span>\n </span>\n <!-- INPUT ELEMENT -->\n <span *ngIf=\"group; then withGroup; else withoutGroup;\"></span>\n <ng-template #withGroup>\n <div class=\"w-full\" [formGroup]=\"getGroup\">\n <input\n #inputBase\n inputTyping\n data-children=\"htmlInput\"\n [placeholder]=\"placeholder\"\n [formControlName]=\"getName\"\n [name]=\"name\"\n [id]=\"name\"\n [value]=\"phone\"\n [autocomplete]=\"'off'\"\n [inputInterval]=\"300\"\n (input)=\"onPhoneInput($event)\"\n (finish)=\"emitPhoneData()\"\n spellcheck=\"false\"\n class=\"border-0 outline-none appearance-none flex-shrink w-full bg-transparent text-3dark text-base\"\n [ngClass]=\"{ 'text-blue': focus }\"\n type=\"text\"\n />\n </div>\n </ng-template>\n\n <ng-template #withoutGroup>\n <input\n #inputBase\n inputTyping\n data-children=\"htmlInput\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [id]=\"name\"\n [value]=\"phone\"\n [autocomplete]=\"'off'\"\n [inputInterval]=\"300\"\n (input)=\"onPhoneInput($event)\"\n (finish)=\"emitPhoneData()\"\n spellcheck=\"false\"\n class=\"border-0 outline-none appearance-none flex-shrink w-full bg-transparent text-3dark text-base\"\n [ngClass]=\"{ 'text-blue': focus }\"\n type=\"text\"\n />\n </ng-template>\n </div>\n <!--select option-->\n <div\n #selectOptions\n class=\"w-full rounded border border-3dark-2 bg-white absolute z-1 lbgm-phone-scrll\"\n *ngIf=\"openSelect\"\n data-children=\"countriesList\"\n [ngClass]=\"{ 'bottom-0': popupPos === 'top', 'mt-z281rem top-full': popupPos === 'bottom' }\"\n [style.maxHeight]=\"listHeight + 'px'\"\n >\n <div\n class=\"w-full py-2 px-4 cursor-pointer text-left hover:bg-3dark-1\"\n *ngFor=\"let country of allowedCountries; let lastitr = last; trackBy: trackByCountry\"\n (click)=\"choose(country)\"\n [attr.data-country]=\"country.iso2\"\n >\n <span class=\"font-semibold text-xs text-3dark\">\n {{ country.name }}\n </span>\n </div>\n </div>\n <!-- end core-->\n </div>\n\n <!-- any slot -->\n <ng-content select=\"[slot]\"></ng-content>\n</div>", styles: ["*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.static{position:static}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0px}.left-2{left:.5rem}.top-full{top:100%}.z-1{z-index:1}.mt-z281rem{margin-top:.281rem}.flex{display:flex}.inline-flex{display:inline-flex}.w-full{width:100%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.appearance-none{-webkit-appearance:none;appearance:none}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-3dark{border-color:#33333380}.border-3dark-2{border-color:#3333}.border-blue{--tw-border-opacity: 1;border-color:rgb(29 144 237/var(--tw-border-opacity))}.border-blue-50{border-color:#1d90ed80}.border-red{--tw-border-opacity: 1;border-color:rgb(255 0 0/var(--tw-border-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.p-3px{padding:3px}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-left{text-align:left}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.tracking-mz1px{letter-spacing:-.1px}.text-3dark{color:#33333380}.text-DA1414{--tw-text-opacity: 1;color:rgb(218 20 20/var(--tw-text-opacity))}.text-blue{--tw-text-opacity: 1;color:rgb(29 144 237/var(--tw-text-opacity))}.text-red{--tw-text-opacity: 1;color:rgb(255 0 0/var(--tw-text-opacity))}.opacity-80{opacity:.8}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\\:bg-3dark-1:hover{background-color:#3333331a}\n", ":host{display:block;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";color:#333;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative}@media screen and (-webkit-min-device-pixel-ratio: 0){.lbgm-phone-scrll::-webkit-scrollbar{width:6px;height:6px}.lbgm-phone-scrll::-webkit-scrollbar-track{background:transparent}.lbgm-phone-scrll::-webkit-scrollbar-thumb{border-radius:6px;background:rgba(0,106,82,.8);border:0;display:none}.lbgm-phone-scrll:hover.lbgm-phone-scrll::-webkit-scrollbar-thumb{display:initial}.lbgm-phone-scrll::-webkit-scrollbar-corner{display:none}}@-moz-document url-prefix(){.lbgm-phone-scrll{scrollbar-color:rgba(0,106,82,.8) transparent;scrollbar-width:none}.lbgm-phone-scrll:hover{scrollbar-width:thin}}[data-widget-item=baseinput]{transition:all .2s ease-in-out}[data-widget-item=baseinput] *{box-sizing:border-box}[data-widget-item=baseinput] label.error{color:red}[data-widget-item=baseinput] label.success{color:#1d90ed}[data-widget-item=baseinput] [data-children=countriesList]{overflow-y:auto;filter:drop-shadow(0 5px 15px rgba(0,0,0,.15))}[data-widget-item=baseinput] [data-children=inputcore] input::placeholder{font-weight:normal;color:#333}[data-widget-item=baseinput] [data-children=inputcore] input:-webkit-autofill,[data-widget-item=baseinput] [data-children=inputcore] input:-webkit-autofill:hover,[data-widget-item=baseinput] [data-children=inputcore] input:-webkit-autofill:focus,[data-widget-item=baseinput] [data-children=inputcore] input:-webkit-autofill:active{-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.TypingDirective, selector: "[inputTyping]", inputs: ["inputInterval"], outputs: ["run", "finish"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PhoneInputComponent, decorators: [{
type: Component,
args: [{
selector: 'lbgm-phone-input',
templateUrl: './phone-input.component.html',
styleUrls: [
'./tailwind.scss',
'./phone-input.component.scss',
]
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { value: [{
type: Input
}], label: [{
type: Input
}], hasError: [{
type: Input
}], hasSuccess: [{
type: Input
}], placeholder: [{
type: Input
}], name: [{
type: Input
}], required: [{
type: Input
}], defaultCountry: [{
type: Input
}], arrow: [{
type: Input
}], listHeight: [{
type: Input
}], allowed: [{
type: Input
}], group: [{
type: Input
}], controls: [{
type: Input
}], basePhoneArrow: [{
type: ViewChild,
args: ['basePhoneArrow']
}], inputBase: [{
type: ViewChild,
args: ['inputBase']
}], arrowIcon: [{
type: ViewChild,
args: ['arrowIcon', { static: true }]
}], selectPhone: [{
type: ViewChild,
args: ['selectPhone']
}], phoneEvent: [{
type: Output
}], phoneData: [{
type: Output
}], country: [{
type: Output
}], focusOn: [{
type: HostListener,
args: ['mouseleave', ['$event']]
}, {
type: HostListener,
args: ['mouseenter', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGhvbmUtaW5wdXQvc3JjL2xpYi9waG9uZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9waG9uZS1pbnB1dC9zcmMvbGliL3Bob25lLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoTCxPQUFPLGdCQUFpQyxNQUFNLG1CQUFtQixDQUFDO0FBRWxFLE9BQU8sWUFBMkIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFlMUQsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQix1Q0FBbUIsQ0FBQTtJQUNuQixtQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRzNCO0FBVUQsTUFBTSxPQUFPLG1CQUFtQjtJQWlDOUIsWUFBbUIsRUFBYyxFQUFVLEVBQXFCO1FBQTdDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQS9CdkQsVUFBSyxHQUFZLEVBQUUsQ0FBQztRQUNwQixVQUFLLEdBQVksRUFBRSxDQUFDO1FBQ3BCLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFDM0IsZUFBVSxHQUFhLEtBQUssQ0FBQztRQUM3QixnQkFBVyxHQUFZLEVBQUUsQ0FBQTtRQUN6QixTQUFJLEdBQVksa0JBQWtCLENBQUE7UUFDbEMsYUFBUSxHQUFhLEtBQUssQ0FBQztRQUMzQixtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixVQUFLLEdBQWEsSUFBSSxDQUFDO1FBQ3ZCLGVBQVUsR0FBWSxHQUFHLENBQUM7UUFDMUIsWUFB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LDQ2QkMvQmhDLDJ1TUE0SU07NEZEN0dPLG1CQUFtQjtrQkFSL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUU7d0JBQ1QsaUJBQWlCO3dCQUNqQiw4QkFBOEI7cUJBQy9CO2lCQUNGO2lJQUdVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRXVCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNILFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDb0IsU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNkLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFFZCxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkF1TVAsT0FBTztzQkFGTixZQUFZO3VCQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3JDLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBwYXJzZVBob25lTnVtYmVyLCB7IFBob25lTnVtYmVyIH0gZnJvbSBcImxpYnBob25lbnVtYmVyLWpzXCI7XG5cbmltcG9ydCBhbGxDb3VudHJpZXMsIHsgVF9Db3VudHJ5IH0gZnJvbSAnLi9hbGwtY291bnRyaWVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgeyBUX0NvdW50cnkgfTtcblxuZXhwb3J0IHR5cGUgVF9Gb3JtRmllbGRDb250cm9sID0geyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7IH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGhvbmVEQVRBIHtcbiAgY291bnRyeT86IHN0cmluZztcbiAgZGlhbENvZGU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIG5hdGlvbmFsTnVtYmVyPzogc3RyaW5nIHwgbnVtYmVyO1xuICBudW1iZXI/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGlzVmFsaWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBGb3JtQ29udHJvbEV2ZW50IHtcbiAgSU5WQUxJRCA9ICdJTlZBTElEJyxcbiAgVkFMSUQgPSAnVkFMSUQnXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xiZ20tcGhvbmUtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGhvbmUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi90YWlsd2luZC5zY3NzJyxcbiAgICAnLi9waG9uZS1pbnB1dC5jb21wb25lbnQuc2NzcycsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUGhvbmVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgaGFzRXJyb3I/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhhc1N1Y2Nlc3M/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nID0gXCJcIlxuICBASW5wdXQoKSBuYW1lPzogc3RyaW5nID0gXCJsYmdtLXBob25lLWlucHV0XCJcbiAgQElucHV0KCkgcmVxdWlyZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRlZmF1bHRDb3VudHJ5Pzogc3RyaW5nID0gJ0JKJztcbiAgQElucHV0KCkgYXJyb3c/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgbGlzdEhlaWdodD86IG51bWJlciA9IDE1MDtcbiAgQElucHV0KCkgYWxsb3dlZD86IHN0cmluZ1tdID0gKFtdKTtcblxuICBASW5wdXQoKSBncm91cD86IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgY29udHJvbHM/OiBUX0Zvcm1GaWVsZENvbnRyb2w7XG5cbiAgQFZpZXdDaGlsZCgnYmFzZVBob25lQXJyb3cnKSBiYXNlUGhvbmVBcnJvdz86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZScpIGlucHV0QmFzZT86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Fycm93SWNvbicsIHsgc3RhdGljOiB0cnVlIH0pIGFycm93SWNvbj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdFBob25lJykgc2VsZWN0UGhvbmU/OiBFbGVtZW50UmVmO1xuXG4gIEBPdXRwdXQoKSBwaG9uZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KHRydWUpO1xuICBAT3V0cHV0KCkgcGhvbmVEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxQaG9uZURBVEE+KHRydWUpO1xuICBAT3V0cHV0KCkgY291bnRyeSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPih0cnVlKTtcblxuICBjb3VudHJpZXM6IFRfQ291bnRyeVtdID0gYWxsQ291bnRyaWVzO1xuICBvcGVuU2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIGRlZmF1bHRTZWxlY3RlZCE6IFRfQ291bnRyeTtcbiAgcGhvbmU6IHN0cmluZyA9IFwiXCI7XG4gIHBvcHVwUG9zOiBzdHJpbmcgPSBcImJvdHRvbVwiO1xuICBmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG5cbiAgLyoqXG4gICAqIFRyYWNrQnkgZm9yICpuZ0ZvclxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHJldHVybnNcbiAgICovXG4gICB0cmFja0J5Q291bnRyeShpbmRleDogbnVtYmVyLCBjb3VudHJ5OiBUX0NvdW50cnkpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgICAvLyB5b3UgY2FuIGFsc28gcmV0dXJuIGl0ZW0uWDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIGluaXRpYWxpemUgZGVmYXVsdCBjb3VudHJ5IHNlbGVjdGVkXG4gICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWQgPSB0aGlzLmZvcm1hdFBob25lSW5wdXQodGhpcy52YWx1ZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vXG4gICAgLy8gd2F0Y2ggY2hhbmdlcyBvbiBASW5wdXQoKSBoZXJlXG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgLy8gdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXRBbGwoKTtcbiAgICAvLyBvdXRzaWRlXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VQaG9uZUFycm93Py5uYXRpdmVFbGVtZW50ICYmXG4gICAgICAgICEodGhpcy5iYXNlUGhvbmVBcnJvdz8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vcGVuU2VsZWN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIC8qKlxuICAqIHVzZWQgdG8gc2VuZCBjdXN0b20gRXZlbnQ6IHVzYWJsZSBpbiBjYXNlIG9mIHNjcm9sbCB0dXJuaW5nIG9mZiB3aGVuIHBvcHVwIGlzIHVuZGVyXG4gICovXG4gIGNldl9kYXNoX3NlbGVjdCgpOiB2b2lkIHtcblxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KFwiQ0VWX1NFTEVDVF9QT1BVUFwiLCB7XG4gICAgICBkZXRhaWw6IHsgb3BlbmVkOiB0aGlzLm9wZW5TZWxlY3QsIHRhcmdldDogdGhpcy5zZWxlY3RQaG9uZT8ubmF0aXZlRWxlbWVudCB9LFxuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAqIGZpbHQgYWxsb3dlZENvdW50cmllcyBmcm9tIHByb3BzXG4gICovXG4gIGdldCBhbGxvd2VkQ291bnRyaWVzKCk6IFRfQ291bnRyeVtdIHtcbiAgICBjb25zdCB0Ymw6IFRfQ291bnRyeVtdID1cbiAgICAgICh0aGlzLmFsbG93ZWQgYXMgc3RyaW5nW10pLmxlbmd0aCAhPT0gMFxuICAgICAgICA/IHRoaXMuY291bnRyaWVzLmZpbHRlcigobzogVF9Db3VudHJ5KSA9PiAodGhpcy5hbGxvd2VkIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhvLmlzbzIpKVxuICAgICAgICA6IHRoaXMuY291bnRyaWVzO1xuICAgIHJldHVybiB0Ymw7XG4gIH1cblxuICBnZXQgZ2V0R3JvdXAgKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXAgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0IGdldE5hbWUgKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZSBhcyBzdHJpbmc7XG4gIH1cblxuICBnZXQgZmllbGRFcnJvcigpOiBib29sZWFuIHtcbiAgICBpZighdGhpcy5jb250cm9scykgcmV0dXJuIHRoaXMuaGFzRXJyb3IgPz8gZmFsc2U7XG4gICAgY29uc3QgZiA9ICh0aGlzLmNvbnRyb2xzIGFzIFRfRm9ybUZpZWxkQ29udHJvbClbdGhpcy5uYW1lIGFzIHN0cmluZ107XG4gICAgcmV0dXJuIGYuc3RhdHVzID09PSBGb3JtQ29udHJvbEV2ZW50LklOVkFMSUQgJiYgZi50b3VjaGVkICYmIHRoaXMucmVxdWlyZWQgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldCBmaWVsZFN1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgaWYoIXRoaXMuY29udHJvbHMpIHJldHVybiB0aGlzLmhhc1N1Y2Nlc3MgPz8gZmFsc2U7XG4gICAgY29uc3QgZiA9ICh0aGlzLmNvbnRyb2xzIGFzIFRfRm9ybUZpZWxkQ29udHJvbClbdGhpcy5uYW1lIGFzIHN0cmluZ107XG4gICAgcmV0dXJuIGYuc3RhdHVzID09PSBGb3JtQ29udHJvbEV2ZW50LlZBTElEICYmIGYudG91Y2hlZCAmJiB0aGlzLnJlcXVpcmVkIGFzIGJvb2xlYW47XG4gIH1cblxuXG4gIC8qKlxuICAqIFRvZ2dsZVNlbGVjdFxuICAqIHRvIG9wZW4gY291bnRyaWVzIGxpc3RcbiAgKi9cbiAgdG9nZ2xlU2VsZWN0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlblNlbGVjdCA9ICF0aGlzLm9wZW5TZWxlY3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgcG9wdXAgcG9zaXRpb246IHRvcCBvciBib3R0b21cbiAgICBjb25zdCBzZWxlY3RSZWN0ID0gdGhpcy5zZWxlY3RQaG9uZT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAvLyB5XG4gICAgdGhpcy5wb3B1cFBvcyA9IHNlbGVjdFJlY3QuYm90dG9tIDwgKHRoaXMubGlzdEhlaWdodCBhcyBudW1iZXIpID8gXCJ0b3BcIiA6IFwiYm90dG9tXCI7XG4gICAgLy9cbiAgICB0aGlzLmNldl9kYXNoX3NlbGVjdCgpO1xuICB9O1xuXG5cbiAgLyoqXG4gICogZm9ybWF0UGhvbmVJbnB1dFxuICAqIHVzZWQgdG8gZm9ybWF0IFBob25lIElucHV0XG4gICogQHBhcmFtIHZhbFxuICAqL1xuICBmb3JtYXRQaG9uZUlucHV0ICh2YWw6IHN0cmluZyk6IFRfQ291bnRyeSB7XG4gICAgY29uc3QgcGhvbmVOdW1iZXI6IFBob25lTnVtYmVyIHwgdW5kZWZpbmVkID0gcGFyc2VQaG9uZU51bWJlcihgKyR7dmFsfWApO1xuICAgIGlmIChwaG9uZU51bWJlcikge1xuICAgICAgdGhpcy5waG9uZSA9IHBob25lTnVtYmVyLm5hdGlvbmFsTnVtYmVyO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc28yOiBwaG9uZU51bWJlcj8uY291bnRyeSBhcyBzdHJpbmcsXG4gICAgICAgIGRpYWxDb2RlOiBwaG9uZU51bWJlcj8uY291bnRyeUNhbGxpbmdDb2RlIGFzIHN0cmluZyxcbiAgICAgICAgbmFtZTogdGhpcy5jb3VudHJpZXMuZmluZCgobzogVF9Db3VudHJ5KSA9PiBvLmlzbzIgPT09IHBob25lTnVtYmVyPy5jb3VudHJ5IGFzIHN0cmluZyk/Lm5hbWUgYXMgc3RyaW5nLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gZWxzZVxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvdW50cmllcy5maW5kKChvOiBUX0NvdW50cnkpID0+IG8uaXNvMiA9PT0gdGhpcy5kZWZhdWx0Q291bnRyeSkgYXMgVF9Db3VudHJ5LFxuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICogZW1pdFBob25lXG4gICogdXNlZCB0byBlbWl0IHBob25lIGluIGludGVybmF0aW9uYWxGb3JtYXRcbiAgKi9cbiAgZW1pdFBob25lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBob25lKVxuICAgICAgdGhpcy5waG9uZUV2ZW50LmVtaXQoYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWQuZGlhbENvZGV9JHt0aGlzLnBob25lfWApO1xuICAgIGVsc2UgdGhpcy5waG9uZUV2ZW50LmVtaXQoXCJcIik7XG4gIH07XG5cblxuICAvKipcbiAgKiBlbWl0UGhvbmVEYXRhXG4gICogVXNlZCB0byBlbWl0IHBob25lRGF0YSBhcyBhbiBvYmplY3RcbiAgKiBAcmV0dXJucyB7fVxuICAqL1xuICBlbWl0UGhvbmVEYXRhKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICB2b2lkIGV2ZW50O1xuICAgIGNvbnN0IHBoID0gcGFyc2VQaG9uZU51bWJlcihcbiAgICAgIGArJHt0aGlzLmRlZmF1bHRTZWxlY3RlZC5kaWFsQ29kZX0ke3RoaXMucGhvbmV9YFxuICAgICk7XG4gICAgdGhpcy5waG9uZURhdGEuZW1pdCh7XG4gICAgICBjb3VudHJ5OiBwaD8uY291bnRyeSxcbiAgICAgIGRpYWxDb2RlOiBwaD8uY291bnRyeUNhbGxpbmdDb2RlLFxuICAgICAgbmF0aW9uYWxOdW1iZXI6IHBoPy5uYXRpb25hbE51bWJlcixcbiAgICAgIG51bWJlcjogcGg/Lm51bWJlcixcbiAgICAgIGlzVmFsaWQ6IHBoPy5pc1ZhbGlkKCksXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICogZW1pdEFsbFxuICAqIHVzZWQgdG8gZW1pdCBhbGwgZXZlbnRcbiAgKi9cbiAgZW1pdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvdW50cnkuZW1pdCh0aGlzLmRlZmF1bHRTZWxlY3RlZC5pc28yKTtcbiAgICB0aGlzLmVtaXRQaG9uZSgpO1xuICAgIHRoaXMuZW1pdFBob25lRGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICogdG8gc2VsZWN0IGFueSBjb3VudHJ5XG4gICogQHBhcmFtIGNvdW50cnlcbiAgKi9cbiAgY2hvb3NlKGNvdW50cnk6IFRfQ291bnRyeSkge1xuICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkID0gY291bnRyeTtcbiAgICB0aGlzLm9wZW5TZWxlY3QgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXRBbGwoKTtcbiAgfTtcblxuXG4gIC8qKlxuICAqIGJpbmQgb24gaW5wdXRcbiAgKiBAcGFyYW0gZXZlbnRcbiAgKi9cbiAgb25QaG9uZUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSB0aGlzLnBob25lID0gU3RyaW5nKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpLnJlcGxhY2UoXG4gICAgICAvXFxEL2csXG4gICAgICBcIlwiXG4gICAgKTtcbiAgICB0aGlzLmVtaXRQaG9uZSgpO1xuICB9O1xuXG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBbJyRldmVudCddKVxuICBmb2N1c09uKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgY2FzZSBcIm1vdXNlZW50ZXJcIjpcbiAgICAgIHRoaXMuZm9jdXMgPSB0cnVlO1xuICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtb3VzZWxlYXZlXCI6XG4gICAgICB0aGlzLmZvY3VzID0gZmFsc2U7XG4gICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICBicmVhaztcbiAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2XG4gICAgI3NlbGVjdFBob25lXG4gICAgZGF0YS13aWRnZXQtaXRlbT1cImJhc2VpbnB1dFwiXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJlbGF0aXZlXCJcbiAgICBkYXRhLWxiZ20tcGhvbmVudW1iZXJpbnB1dD1cImNvbXBvbmVudFwiXG4+XG4gICAgICAgIDwhLS1waG9uZS1udW1iZXItaW5wdXQgY29yZS0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1jaGlsZHJlbj1cImNvcmVcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1jb2wgcmVsYXRpdmVcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLS0tPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgKm5nSWY9XCJsYWJlbFwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGJhc2VpbnB1dC1sYWJlbCBwLTNweCB0ZXh0LXhzIHRleHQtbGVmdCBsZWFkaW5nLTMgdHJhY2tpbmctbXoxcHggdGV4dC0zZGFyayBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBiZy13aGl0ZSBhYnNvbHV0ZSBsZWZ0LTIgLXRyYW5zbGF0ZS15LTJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1yZWQnOiBmaWVsZEVycm9yLCAndGV4dC1ibHVlJzogZm9jdXMgfHwgZmllbGRTdWNjZXNzIH1cIlxuICAgICAgICAgICAgW2Zvcl09XCJuYW1lXCJcbiAgICAgICAgICAgIGRhdGEtY2hpbGRyZW49XCJsYWJlbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gZGF0YS1jaGlsZHJlbj1cImxhYmVsVGV4dFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPCEtLS0tPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGRhdGEtY2hpbGRyZW49XCJyZXF1aXJlZFN0YXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGVmdCB0ZXh0LURBMTQxNCBmb250LXNlbWlib2xkIG9wYWNpdHktODAgdGV4dC14c1wiXG4gICAgICAgICAgICAgID4mdGhpbnNwOyo8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwhLS1pbnB1dC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtY2hpbGRyZW49XCJpbnB1dGNvcmVcIlxuICAgICAgICAgICAgI3NlbGVjdFBob25lQnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJnLXdoaXRlIGJhc2VpbnB1dC1jb3JlIGJvcmRlciB3LWZ1bGwgYm9yZGVyLTNkYXJrIHJvdW5kZWQtbWQgcHktMiBweC00IGZsZXggZmxleC1zaHJpbmsgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdib3JkZXItcmVkJzogZmllbGRFcnJvciwgJ2JvcmRlci1ibHVlJzogZmllbGRTdWNjZXNzLCAnYm9yZGVyLWJsdWUtNTAnOiBmb2N1cyB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0KClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAjYmFzZVBob25lQXJyb3dcbiAgICAgICAgICAgICAgZGF0YS1jaGlsZHJlbj1cImFycm93R3JvdXBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFycm93OyB0aGVuIGljb25UZW1wbGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpY29uVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gI2Fycm93SWNvbiBbYXR0ci5kYXRhLWFycm93LWljb25dPVwiYXJyb3dJY29uLmNoaWxkcmVuLmxlbmd0aFwiIGNsYXNzPVwiaW5saW5lLWZsZXggZmxleC1zaHJpbmstMCBzZWxlY3Qtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Fycm93XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYXJyb3dJY29uLmNoaWxkcmVuLmxlbmd0aFwiIFthdHRyLmRhdGEtYXJyb3ctaWNvbl09XCJhcnJvd0ljb24uY2hpbGRyZW4ubGVuZ3RoXCIgY2xhc3M9XCJpbmxpbmUtZmxleCBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI2XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiA2XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuOTY5NjcgMC4yMTk2N0MxLjI2MjU2IC0wLjA3MzIyMzMgMS43Mzc0NCAtMC4wNzMyMjMzIDIuMDMwMzMgMC4yMTk2N0w2IDQuMTg5MzRMOS45Njk2NyAwLjIxOTY3QzEwLjI2MjYgLTAuMDczMjIzMyAxMC43Mzc0IC0wLjA3MzIyMzMgMTEuMDMwMyAwLjIxOTY3QzExLjMyMzIgMC41MTI1NjMgMTEuMzIzMiAwLjk4NzQzNyAxMS4wMzAzIDEuMjgwMzNMNi41MzAzMyA1Ljc4MDMzQzYuMjM3NDQgNi4wNzMyMiA1Ljc2MjU2IDYuMDczMjIgNS40Njk2NyA1Ljc4MDMzTDAuOTY5NjcgMS4yODAzM0MwLjY3Njc3NyAwLjk4NzQzNyAwLjY3Njc3NyAwLjUxMjU2MyAwLjk2OTY3IDAuMjE5NjdaXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImZvY3VzID8gJ3JnYigyOSAxNDQgMjM3KScgOiAncmdiYSg1MSwgNTEsIDUxLCAwLjUpJ1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJvcGFjaXR5LTgwIHNlbGVjdC1ub25lIGlubGluZS1mbGV4IGZsZXgtd2hyaW5rLTAgZm9udC1tZWRpdW0gdGV4dC0zZGFyayB0ZXh0LWxlZnQgdGV4dC14cyBsZWFkaW5nLTRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RleHQtYmx1ZSc6IGZvY3VzIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICcrJyArIGRlZmF1bHRTZWxlY3RlZC5kaWFsQ29kZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIElOUFVUIEVMRU1FTlQgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwOyB0aGVuIHdpdGhHcm91cDsgZWxzZSB3aXRob3V0R3JvdXA7XCI+PC9zcGFuPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aXRoR3JvdXA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiBbZm9ybUdyb3VwXT1cImdldEdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICNpbnB1dEJhc2VcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRUeXBpbmdcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jaGlsZHJlbj1cImh0bWxJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZ2V0TmFtZVwiXG4gICAgICAgICAgICAg