{"version":3,"file":"angular-intl-phone.mjs","sources":["../../../projects/angular-intl-phone/src/lib/angular-intl-phone.service.ts","../../../projects/angular-intl-phone/src/lib/angular-intl-phone.ts","../../../projects/angular-intl-phone/src/lib/angular-intl-phone.component.ts","../../../projects/angular-intl-phone/src/lib/angular-intl-phone.module.ts","../../../projects/angular-intl-phone/src/public-api.ts","../../../projects/angular-intl-phone/src/angular-intl-phone.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AngularIntlPhoneService {\n\n  constructor() { }\n}\n","export class AngularIntlPhoneConfig {\r\n    id?: string = 'telInputPhone';\r\n    name?: string = 'telInputPhone';\r\n    placeholder?: string = 'Enter phone number';\r\n    options?: Options;\r\n}\r\n\r\nexport interface Options {\r\n    /**\r\n     * Whether or not to allow the dropdown. If disabled, there is no dropdown\r\n     * arrow, and the selected flag is not clickable. Also we display the\r\n     * selected flag on the right instead because it is just a marker of state.\r\n     * Default = true\r\n     */\r\n    allowDropdown?: boolean | undefined;\r\n\r\n    /**\r\n     * If there is just a dial code in the input: remove it on blur or submit,\r\n     * and re-add it on focus. This is to prevent just a dial code getting\r\n     * submitted with the form. Requires nationalMode to be set to false.\r\n     * Default = true\r\n     */\r\n    autoHideDialCode?: boolean | undefined;\r\n\r\n    /**\r\n     * Set the input's placeholder to an example number for the selected country, and update it if the country changes.\r\n     * You can specify the number type using the placeholderNumberType option.\r\n     * By default it is set to \"polite\", which means it will only set the placeholder if the input doesn't already have one.\r\n     * You can also set it to \"aggressive\", which will replace any existing placeholder, or \"off\".\r\n     * Requires the utilsScript option.\r\n     * Default = \"polite\"\r\n     */\r\n    autoPlaceholder?: 'off' | 'polite' | 'aggressive' | undefined;\r\n\r\n    /**\r\n     * Change the placeholder generated by autoPlaceholder. Must return a string.\r\n     * Default = null\r\n     */\r\n    customPlaceholder?: ((selectedCountryPlaceholder: string, selectedCountryData: CountryData) => string) | undefined;\r\n\r\n    /**\r\n     * Additional classes to add to the parent div..\r\n     * @default ''\r\n     */\r\n    customContainer?: string | undefined;\r\n\r\n    /**\r\n     * Expects a node e.g. document.body. Instead of putting the country dropdown next to the input,\r\n     * append it to the specified node, and it will then be positioned absolutely next to the input using JavaScript.\r\n     * This is useful when the input is inside a container with overflow: hidden.\r\n     * Note that the absolute positioning can be broken by scrolling, so it will automatically close on the window scroll event.\r\n     * Default = null\r\n     */\r\n    dropdownContainer?: Node | undefined;\r\n\r\n    /**\r\n     * In the dropdown, display all countries except the ones you specify here.\r\n     * Default = null\r\n     */\r\n    excludeCountries?: string[] | undefined;\r\n\r\n    /**\r\n     * Format the input value (according to the nationalMode option) during initialisation, and on setNumber.\r\n     * Requires the utilsScript option.\r\n     * Default = true\r\n     */\r\n    formatOnDisplay?: boolean | undefined;\r\n\r\n    /**\r\n     * When setting initialCountry to \"auto\", you must use this option to\r\n     * specify a custom function that looks up the user's location,\r\n     * and then calls the success callback with the relevant country code.\r\n     * Also note that when instantiating the plugin, if the Promise object is defined,\r\n     * one of those is returned under the promise instance property, so you can\r\n     * do something like iti.promise.then(callback) to know when initialisation requests like this have completed.\r\n     * Default = null\r\n     */\r\n    geoIpLookup?: ((callback: (countryCode: string) => void) => void) | undefined;\r\n\r\n    /**\r\n     * Add a hidden input with the given name (or if your input name contains square brackets then it will give the hidden input the same name,\r\n     * replacing the contents of the brackets with the given name). On submit, populate it with the full international number (using getNumber).\r\n     * This is a quick way for people using non-ajax forms to get the full international number, even when nationalMode is enabled.\r\n     * Note: requires the input to be inside a form element, as this feature works by listening for the submit event on the closest form element.\r\n     * Also note that since this uses getNumber internally, it expects a valid number, and so should only be used after validation.\r\n     * Default = \"\"\r\n     */\r\n    hiddenInput?: string | undefined;\r\n\r\n    /**\r\n     * Set the initial country selection by specifying it's country code.\r\n     * You can also set it to \"auto\", which will lookup the user's country based\r\n     * on their IP address (requires the geoIpLookup option).\r\n     * Note that the \"auto\" option will not update the country selection if the\r\n     * input already contains a number. If you leave initialCountry blank,\r\n     * it will default to the first country in the list.\r\n     */\r\n    initialCountry?: string | undefined;\r\n\r\n    /**\r\n     * Allows to translate the countries by its given iso code e.g.: { 'de': 'Deutschland' }\r\n     * Default = {}\r\n     */\r\n    localizedCountries?: object | undefined;\r\n\r\n    /**\r\n     * Allow users to enter national numbers (and not have to think about\r\n     * international dial codes). Formatting, validation and placeholders still\r\n     * work. Then you can use getNumber to extract a full international number.\r\n     * This option now defaults to true, and it is recommended that you leave it\r\n     * that way as it provides a better experience for the user.\r\n     * Default = true\r\n     */\r\n    nationalMode?: boolean | undefined;\r\n\r\n    /**\r\n     * In the dropdown, display only the countries you specify.\r\n     * Default = undefined\r\n     */\r\n    onlyCountries?: string[] | undefined;\r\n\r\n    /**\r\n     * Specify one of the keys from the global enum intlTelInputUtils.numberType\r\n     * e.g. \"FIXED_LINE\" to set the number type to use for the placeholder.\r\n     * Default = MOBILE\r\n     */\r\n    placeholderNumberType?: placeholderNumberType | undefined;\r\n\r\n    /**\r\n     * Specify the countries to appear at the top of the list.\r\n     * Default = [\"us\", \"gb\"]\r\n     */\r\n    preferredCountries?: string[] | undefined;\r\n\r\n    /**\r\n     * Display the country dial code next to the selected flag so it's not part\r\n     * of the typed number. Note that this will disable nationalMode because\r\n     * technically we are dealing with international numbers, but with the\r\n     * dial code separated.\r\n     * Default = false\r\n     */\r\n    separateDialCode?: boolean | undefined;\r\n\r\n    /**\r\n     * Enable formatting/validation etc. by specifying the URL of the included utils.js script\r\n     * (or alternatively just point it to the file on cdnjs.com). The script is fetched when the page has finished loading (on the window load event)\r\n     *  to prevent blocking (the script is ~215KB). When instantiating the plugin, if the Promise object is defined,\r\n     * one of those is returned under the promise instance property, so you can do something like\r\n     * iti.promise.then(callback) to know when initialisation requests like this have finished.\r\n     * Note that if you're lazy loading the plugin script itself (intlTelInput.js)\r\n     * this will not work and you will need to use the loadUtils method instead.\r\n     * Example: \"build/js/utils.js\"\r\n     * Default = \"\"\r\n     */\r\n    utilsScript?: string | undefined;\r\n}\r\n\r\nexport interface CountryData {\r\n    name: string;\r\n    iso2: string;\r\n    dialCode: string;\r\n}\r\n\r\nexport type placeholderNumberType =\r\n    | 'FIXED_LINE_OR_MOBILE'\r\n    | 'FIXED_LINE'\r\n    | 'MOBILE'\r\n    | 'PAGER'\r\n    | 'PERSONAL_NUMBER'\r\n    | 'PREMIUM_RATE'\r\n    | 'SHARED_COST'\r\n    | 'TOLL_FREE'\r\n    | 'UAN'\r\n    | 'UNKNOWN'\r\n    | 'VOICEMAIL'\r\n    | 'VOIP';","import { AfterViewInit, Component, ElementRef, forwardRef, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport * as lpn from 'google-libphonenumber';\n// @ts-ignore\nimport * as utils from 'intl-tel-input/build/js/utils.js';\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\n// @ts-ignore\nimport intlTelInput from 'intl-tel-input';\nimport { AngularIntlPhoneConfig } from './angular-intl-phone';\n\nexport function phoneNumberValidator(control: any) {\n  if (!control.value) {\n    return;\n  }\n  if (control.value.e164Number) {\n    var phoneUtil = lpn.PhoneNumberUtil.getInstance();\n    if (!phoneUtil.isValidNumber(phoneUtil.parseAndKeepRawInput(control.value.e164Number))) {\n      return { invalid: true };\n    } else return;\n  }\n  return { invalid: true };\n};\n\n@Component({\n  selector: 'angular-intl-phone',\n  template: `\n    <input #telephoneInput [disabled]=\"disabled\" autocomplete=\"off\" type=\"tel\" class=\"{{class}} \" [(ngModel)]=\"phoneNumber\"\n    [attr.id]=\"config.id\" [attr.name]=\"config.name\"  [placeholder]=\"config.placeholder\" (ngModelChange)=\"onPhoneNumberChange()\" (focus)=\"onTouched()\"\n    (keypress)=\"onInputKeyPress($event)\" (countrychange)=\"onPhoneNumberChange()\">\n  `,\n  styleUrls: ['../build/css/intlTelInput.css'],\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AngularIntlPhoneComponent),\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useValue: phoneNumberValidator,\n      multi: true,\n    },\n  ],\n})\nexport class AngularIntlPhoneComponent implements OnInit, AfterViewInit, ControlValueAccessor {\n\n  @ViewChild('telephoneInput', { static: false }) telephoneInput!: ElementRef;\n  private _value: any;\n  phoneNumber: any = '';\n  phoneUtil: any = lpn.PhoneNumberUtil.getInstance();\n  selectedCountry: any;\n  disabled = false;\n  @Input() class: string = '';\n  @Input() config: AngularIntlPhoneConfig = new AngularIntlPhoneConfig();\n\n  script: any;\n\n  constructor() { }\n\n  propagateChange = (_: any) => { };\n  registerOnChange(fn: any): void { this.propagateChange = fn; }\n  registerOnTouched(fn: any): void { this.onTouched = fn }\n  setDisabledState?(isDisabled: boolean): void { this.disabled = isDisabled }\n  public onChange: any = () => { }\n  public onTouched: any = () => { }\n\n  get value() {\n    return this._value;\n  }\n  set value(val) {\n    this.propagateChange(val);\n    this._value = val;\n    this.onChange(val);\n    this.onTouched();\n  }\n\n  ngOnInit(): void {\n\n  }\n\n  ngAfterViewInit(): void {\n    if (this.config && this.config.options && !this.config.options.utilsScript) {\n      this.config.options.utilsScript = utils;\n    }\n    this.init();\n  }\n\n  public onInputKeyPress(event: KeyboardEvent): void {\n    const allowedChars = /[0-9\\+\\-\\(\\)\\ ]/;\n    const allowedCtrlChars = /[axcv]/; // Allows copy-pasting\n    const allowedOtherKeys: string[] = [\n      'ArrowLeft',\n      'ArrowUp',\n      'ArrowRight',\n      'ArrowDown',\n      'Home',\n      'End',\n      'Insert',\n      'Delete',\n      'Backspace',\n    ];\n\n    if (\n      !allowedChars.test(event.key) &&\n      !(event.ctrlKey && allowedCtrlChars.test(event.key)) &&\n      !allowedOtherKeys.includes(event.key)\n    ) {\n      event.preventDefault();\n    }\n  }\n\n  writeValue(obj: any): void {\n    this.phoneNumber = obj;\n    // this.value = obj;\n    setTimeout(() => {\n      this.script.setNumber(this.script.getNumber());\n      this.onPhoneNumberChange();\n    }, 100);\n  }\n\n  init() {\n    // const input: any = document.querySelector('#telInputPhone');\n    this.script = intlTelInput(this.telephoneInput.nativeElement, this.config.options);\n    this.selectedCountry = this.script.getSelectedCountryData();\n  }\n\n\n  public onPhoneNumberChange(): void {\n    let countryCode: string | undefined;\n    if (this.phoneNumber && typeof this.phoneNumber === 'object') {\n      const numberObj: Phone = this.phoneNumber;\n      this.phoneNumber = numberObj.number;\n      countryCode = numberObj.countryCode;\n    }\n    this.selectedCountry = this.script.getSelectedCountryData();\n    countryCode = countryCode || this.selectedCountry.iso2;\n    const number = this.getParsedNumber(this.phoneNumber, (countryCode as string));\n    if (number) {\n      var elNo: any = number ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.E164) : '';\n      if (elNo) elNo = elNo.replace('+', '');\n      this.propagateChange(elNo);\n      const intlNo = number\n        ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.INTERNATIONAL)\n        : '';\n      const obj = {\n        number: this.phoneNumber,\n        internationalNumber: intlNo,\n        nationalNumber: number\n          ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.NATIONAL)\n          : '',\n        e164Number: number\n          ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.E164)\n          : '',\n        countryCode: (countryCode as string).toUpperCase(),\n        dialCode: this.selectedCountry.dialCode,\n        dialCodeWithPlus: \"+\" + this.selectedCountry.dialCode,\n      }\n      // this.getPhoneData.emit(obj);\n      this.value = obj;\n\n    } else {\n      this.propagateChange(null);\n    }\n  }\n\n  private getParsedNumber(\n    phoneNumber: string,\n    countryCode: string\n  ): lpn.PhoneNumber {\n    let number!: lpn.PhoneNumber;\n    try {\n      number = this.phoneUtil.parse(phoneNumber, countryCode.toUpperCase());\n    } catch (e) { }\n    return number;\n  }\n\n}\n\ninterface Phone {\n  number?: string;\n  internationalNumber?: string;\n  nationalNumber?: string;\n  e164Number?: string;\n  countryCode?: string;\n  dialCode?: string;\n  dialCodeWithPlus?: string;\n}\n","import { NgModule } from '@angular/core';\nimport { AngularIntlPhoneComponent } from './angular-intl-phone.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n\n\n@NgModule({\n  declarations: [\n    AngularIntlPhoneComponent\n  ],\n  imports: [\n    FormsModule,\n    ReactiveFormsModule\n  ],\n  exports: [\n    AngularIntlPhoneComponent\n  ]\n})\nexport class AngularIntlPhoneModule { }\n","/*\n * Public API Surface of angular-intl-phone\n */\n\nexport * from './lib/angular-intl-phone.service';\nexport * from './lib/angular-intl-phone.component';\nexport * from './lib/angular-intl-phone.module';\nexport * from './lib/angular-intl-phone';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}