{"version":3,"file":"pv-frontend-pv-shared-components-mobile-input.mjs","sources":["../../../projects/pv-shared-components/mobile-input/mobile-input.component.ts","../../../projects/pv-shared-components/mobile-input/mobile-input.component.html","../../../projects/pv-shared-components/mobile-input/mobile-input.module.ts","../../../projects/pv-shared-components/mobile-input/pv-frontend-pv-shared-components-mobile-input.ts"],"sourcesContent":["import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  HostListener,\n  Input,\n  SimpleChanges,\n  ViewChild,\n  OnChanges,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALUE_ACCESSOR,\n  Validators,\n} from '@angular/forms';\nimport { OverrideStyleConfig } from '@pv-frontend/pv-shared-components/common/types';\nimport { Dropdown } from 'primeng/dropdown';\n\nexport interface MobileNumber {\n  number: string;\n  countryId: string;\n  callingCode: string;\n  maxLength?: number;\n  minLength?: number;\n}\n\nexport interface Country {\n  name: string;\n  callingCode: string;\n  flagUrl: string;\n  id: string;\n  maxLength: number;\n  minLength: number;\n}\n\nexport interface MobileNumberInputStyleConfig {\n  container?: OverrideStyleConfig;\n  label?: OverrideStyleConfig;\n  inputBox?: OverrideStyleConfig;\n  input?: OverrideStyleConfig;\n  error?: OverrideStyleConfig;\n  dropdownStyles?: DropdownStyleConfig;\n}\n\nexport interface DropdownStyleConfig {\n  searchIconStyles?: OverrideStyleConfig;\n  dropdownIconStyles?: OverrideStyleConfig;\n  selectedCountryflagStyles?: OverrideStyleConfig;\n  /**\n   * Custom styles for the dropdown panel.\n   *\n   * Use this property to define specific styles for the panel that appears when\n   * the dropdown is opened. This can include background color, border, padding,\n   * etc. The styles should be provided in a format that is compatible with\n   * CSS-in-JS solutions or inline styles.\n   */\n  customPanelStyles?: OverrideStyleConfig;\n  countryNameStyles?: OverrideStyleConfig;\n  flagStyles?: OverrideStyleConfig;\n}\n\ninterface CountrySelectionEvent {\n  value: Country;\n}\n\nexport const DEFAULT_COUNTRY_VALUE = {\n  CALLING_CODE: '91',\n  MIN_LENGTH: 10,\n  MAX_LENGTH: 10,\n  FLAG_URL: 'https://images.poshvine.com/flags/ind.jpg',\n  NAME: 'India',\n  //sandbox countryId\n  id: 'efb468c6-2d84-4caa-a826-ff0ab253d0c6',\n};\n\n@Component({\n  selector: 'pv-mobile-input',\n  templateUrl: './mobile-input.component.html',\n  styleUrls: ['./mobile-input.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: MobileInput,\n      multi: true,\n    },\n  ],\n})\nexport class MobileInput\n  implements ControlValueAccessor, AfterViewInit, OnChanges\n{\n  public onChange?: (value: MobileNumber) => void;\n  public onTouched?: () => void;\n  public _input = new FormControl('', Validators.required);\n  private isDropdownVisible: boolean = false;\n\n  public ngAfterViewInit(): void {\n    if (this.autoFocus && !this.isIOS()) {\n      this.inputEl.nativeElement.focus();\n    }\n  }\n\n  // This allows us to check the click outside of the dropdown which helps to toggle the dropdown visibility\n  @ViewChild('dropdown', { static: false }) public dropdown!: Dropdown;\n\n  // This is only and solely used for autofocus use case\n  @ViewChild('pvOtpInputEl')\n  public inputEl!: ElementRef<HTMLInputElement>;\n\n  @Input()\n  public label: string = '';\n\n  @Input()\n  public autoFocus: boolean = false;\n\n  @Input()\n  public style?: MobileNumberInputStyleConfig = {};\n\n  /**\n   * Explicitly send this flag when backend sends some erroneous response for passed mobile number\n   */\n  @Input()\n  public isInvalid: boolean = false;\n\n  /**\n   * Countries data which contains country name, calling code flag and minmum and maximum mobile numbers\n   */\n  @Input()\n  public countries?: Country[] = [];\n\n  /**\n   * To enable international mobile numbers which allows us to select the countries from the dropdown\n   */\n  @Input()\n  public isCountrySelectEnabled?: boolean = false;\n\n  /**\n   * We can either enable flag or country code\n   */\n  @Input()\n  public isFlagShowing?: boolean = false;\n\n  /**\n   * Placeholder for search component by default it's search country\n   */\n  @Input()\n  public countrySearchPlaceHolder?: string = 'search country';\n\n  /**\n   * Placeholder for input component by default i kept it as the previous one\n   */\n\n  @Input()\n  public placeholder?: string = 'Enter 10-digit number';\n\n  /**\n   * Error message to be shown below the mobile number input\n   */\n  @Input()\n  public errorMessage: string = '';\n\n  /**\n   * This property can be set based on environment configurations.\n   * Making this as mandatory field.\n   * When provided, it is used to find the corresponding country from the countries data.\n   */\n  @Input()\n  public countryId: string = '';\n\n  public isCountryDropDownOpen: boolean = false;\n  public defaultCountry: Country = {\n    callingCode: DEFAULT_COUNTRY_VALUE.CALLING_CODE,\n    minLength: DEFAULT_COUNTRY_VALUE.MIN_LENGTH,\n    maxLength: DEFAULT_COUNTRY_VALUE.MAX_LENGTH,\n    flagUrl: DEFAULT_COUNTRY_VALUE.FLAG_URL,\n    name: DEFAULT_COUNTRY_VALUE.NAME,\n    id: DEFAULT_COUNTRY_VALUE.id,\n  };\n  public selectedCountry: Country = this.defaultCountry;\n\n  public handleInput(event: Event): void {\n    this.#updateWiredValue((event.target as HTMLInputElement).value);\n  }\n\n  public handleKeyDown(event: KeyboardEvent): void {\n    // allow whitelisted keys like tab, backspace, enter and delete\n    if (['Tab', 'Backspace', 'Delete', 'Enter'].includes(event.key)) {\n      return;\n    }\n\n    // Safari fires Cmd + V through keyPress event as well\n    // So we need to handle it here and let it through, this is then handled by the paste handler\n    if (event.key === 'v' && event.metaKey) {\n      return;\n    }\n\n    const isDigit = /\\d/.test(event.key);\n\n    // if the user has already entered max allowable digits, do not change input on further changes\n    if (\n      isDigit &&\n      (event.target as HTMLInputElement).value.length >=\n        this.selectedCountry.maxLength\n    ) {\n      event.preventDefault();\n    }\n\n    // return if a non-numeric and unallowed character is pressed\n    if (!isDigit) {\n      event.preventDefault();\n      return;\n    }\n  }\n\n  private isIOS(): boolean {\n    return (\n      [\n        'iPad Simulator',\n        'iPhone Simulator',\n        'iPod Simulator',\n        'iPad',\n        'iPhone',\n        'iPod',\n      ].includes(navigator.platform) ||\n      // iPad on iOS 13 detection\n      (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n    );\n  }\n\n  public handlePaste(event: ClipboardEvent): void {\n    event.preventDefault();\n    const pasteData = event.clipboardData?.getData('text');\n\n    // test that the pasted number should have min and max length as defined\n    const allowedNumberRegex = new RegExp(\n      `^\\\\d{${this.selectedCountry.minLength},${this.selectedCountry.maxLength}}$`\n    );\n    if (pasteData && allowedNumberRegex.test(pasteData)) {\n      this._input.setValue(pasteData);\n      // this.inputEl.nativeElement.value = pasteData;\n      this.#updateWiredValue(pasteData);\n      this.onTouched?.();\n    } else {\n      console.error('pasted number is invalid ', pasteData);\n    }\n  }\n\n  #updateWiredValue(value: string): void {\n    this.onChange?.({\n      number: value,\n      callingCode: this.selectedCountry.callingCode,\n      countryId: this.selectedCountry.id,\n      maxLength: this.selectedCountry.maxLength,\n      minLength: this.selectedCountry.minLength,\n    });\n  }\n\n  public writeValue(obj: MobileNumber): void {\n    this._input.setValue(obj?.number);\n    this.#updateWiredValue(obj?.number);\n  }\n\n  public registerOnChange(fn: (value: MobileNumber) => void): void {\n    this.onChange = fn;\n  }\n\n  public registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  public setDisabledState?(isDisabled: boolean): void {\n    if (isDisabled) {\n      this._input.disable();\n    } else {\n      this._input.enable();\n    }\n  }\n  public filteredCountries = this.countries || [];\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes['countries'] && this.isCountrySelectEnabled) {\n      this.initCountryDetails();\n    }\n  }\n\n  private initCountryDetails(): void {\n    if (!this.countries?.length) return;\n    this.filteredCountries = this.countries;\n    this.selectedCountry =\n      this.countries.find((country) => country.id === this.countryId) ??\n      this.selectedCountry;\n  }\n\n  public handleOnChange(event: CountrySelectionEvent): void {\n    const countryData = event.value;\n    this.selectedCountry = countryData;\n    //Updating this wiredValue so that when ever the we are changing the country after entering mobile number so that it will update the country data as well.\n    this.#updateWiredValue(this._input.value ?? '');\n  }\n\n  public toggleDropdown(event: Event): void {\n    this.isDropdownVisible = !this.isDropdownVisible;\n    if (this.isDropdownVisible) {\n      this.dropdown.show();\n    } else {\n      this.dropdown.hide();\n      this.inputEl.nativeElement.focus();\n    }\n    // Prevent event from bubbling up to avoid triggering parent handlers.\n    event.stopPropagation();\n  }\n\n  // since we are manually trigerring the dropdown this function toggles the boolean value of isDropdownVisible when we click outside.\n  @HostListener('document:click', ['$event'])\n  public onDocumentClick(event: Event): void {\n    if (\n      this.isDropdownVisible &&\n      !this.dropdown.el.nativeElement.contains(event.target)\n    ) {\n      this.dropdown.hide();\n      this.isDropdownVisible = false;\n    }\n  }\n}\n","<div\n  class=\"pv-mobile-input-container flex flex-column w-25rem\"\n  [style]=\"this.style?.container\">\n  <label\n    *ngIf=\"this.label\"\n    class=\"pv-mobile-input-label mb-3 surface-text-subtle-low-contrast text-sm\"\n    [style]=\"this.style?.label\">\n    {{ this.label }}\n  </label>\n  <div\n    class=\"pv-mobile-input-box surface-action-icon-low-contrast pv-border-solid p-1 border-round-xs flex flex-row align-items-center text-sm bg-white\"\n    [class.is-invalid-mobile]=\"this.isInvalid\"\n    [style]=\"this.style?.inputBox\">\n    <div\n      class=\"flex justify-content-center align-items-center gap-1\"\n      (click)=\"isCountrySelectEnabled ? toggleDropdown($event) : null\"\n      [class.cursor-pointer]=\"isCountrySelectEnabled\">\n      <span\n        class=\"pv-mobile-input-box-calling-code\"\n        *ngIf=\"!isFlagShowing; else showFlag\">\n        +{{ selectedCountry.callingCode }}\n      </span>\n      <ng-template #showFlag>\n        <div class=\"flex justify-content-center align-items-center gap-1\">\n          <img\n            [src]=\"selectedCountry.flagUrl\"\n            [alt]=\"selectedCountry.name\"\n            [style]=\"style?.dropdownStyles?.selectedCountryflagStyles\"\n            class=\"selected-flag\" />\n        </div>\n      </ng-template>\n      <pv-svg-icon\n        name=\"chevron-down\"\n        [style]=\"style?.dropdownStyles?.dropdownIconStyles\"\n        *ngIf=\"isCountrySelectEnabled\"></pv-svg-icon>\n      <p-dropdown\n        #dropdown\n        [options]=\"countries ?? []\"\n        optionLabel=\"name\"\n        [filter]=\"true\"\n        filterBy=\"name\"\n        [autoDisplayFirst]=\"false\"\n        [(ngModel)]=\"selectedCountry\"\n        (onChange)=\"handleOnChange($event)\"\n        [panelStyle]=\"style?.dropdownStyles?.customPanelStyles\"\n        [resetFilterOnHide]=\"true\">\n        <ng-template pTemplate=\"filter\" let-options=\"options\">\n          <div class=\"search-container flex align-items-center border-1 p-1\">\n            <input\n              class=\"search-component fnt-14 w-full border-none outline-none\"\n              [attr.placeholder]=\"countrySearchPlaceHolder\"\n              (input)=\"options.filter($event)\" />\n            <pv-svg-icon\n              name=\"search\"\n              [style]=\"style?.dropdownStyles?.searchIconStyles\"></pv-svg-icon>\n          </div>\n        </ng-template>\n        <ng-template pTemplate=\"item\" let-country>\n          <div class=\"flex align-items-center gap-2\">\n            <div class=\"country-item align-items-center flex py-2\">\n              <div\n                class=\"country-img px-2\"\n                [style]=\"style?.dropdownStyles?.flagStyles\">\n                <img\n                  [src]=\"country.flagUrl\"\n                  class=\"img-fluid\"\n                  alt=\"Flag of {{ country?.name }}\" />\n              </div>\n              <div\n                class=\"country-name\"\n                [style]=\"style?.dropdownStyles?.countryNameStyles\">\n                <span>{{ country?.name ?? '' }}</span>\n              </div>\n            </div>\n          </div>\n        </ng-template>\n      </p-dropdown>\n    </div>\n    <pv-divider\n      [layout]=\"'vertical'\"\n      class=\"surface-border-normal pt-1 pb-1 mx-2\"></pv-divider>\n    <input\n      #pvOtpInputEl\n      [formControl]=\"_input\"\n      pInput\n      class=\"pv-mobile-input-ele w-full h-full text-sm bg-transparent p-0\"\n      [placeholder]=\"placeholder\"\n      type=\"tel\"\n      autocomplete=\"on\"\n      (input)=\"this.handleInput($event)\"\n      (keydown)=\"this.handleKeyDown($event)\"\n      (paste)=\"this.handlePaste($event)\"\n      [style]=\"this.style?.input\" />\n  </div>\n  <span\n    *ngIf=\"this.isInvalid && this.errorMessage\"\n    class=\"pv-invalid-mobile-label feedback-text-negative w-max text-sm mt-2\"\n    [style]=\"this.style?.error\">\n    {{ this.errorMessage }}\n  </span>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormsModule } from '@angular/forms';\nimport { PvDividerModule } from '@pv-frontend/pv-shared-components/divider';\nimport { SvgIconModule } from '@pv-frontend/pv-shared-components/svg-icon';\nimport { DropdownModule } from 'primeng/dropdown';\n\nimport { MobileInput } from './mobile-input.component';\n@NgModule({\n  imports: [\n    CommonModule,\n    PvDividerModule,\n    ReactiveFormsModule,\n    DropdownModule,\n    SvgIconModule,\n    FormsModule,\n  ],\n  declarations: [MobileInput],\n  exports: [MobileInput],\n})\nexport class PvMobileInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}