{"version":3,"file":"ngxsmk-tel-input.mjs","sources":["../../../projects/ngxsmk-tel-input/src/lib/ngxsmk-tel-input.service.ts","../../../projects/ngxsmk-tel-input/src/lib/ngxsmk-tel-input.component.ts","../../../projects/ngxsmk-tel-input/src/ngxsmk-tel-input.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { parsePhoneNumberFromString, type CountryCode } from 'libphonenumber-js';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgxsmkTelInputService {\r\n  parse(input: string, iso2: CountryCode): { e164: string | null; national: string | null; isValid: boolean } {\r\n    const phone = parsePhoneNumberFromString(input || '', iso2);\r\n    if (!phone) return { e164: null, national: null, isValid: false };\r\n    const isValid = phone.isValid();\r\n    return { e164: isValid ? phone.number : null, national: phone.formatNational(), isValid };\r\n  }\r\n\r\n  isValid(input: string, iso2: CountryCode): boolean {\r\n    const phone = parsePhoneNumberFromString(input || '', iso2);\r\n    return !!phone && phone.isValid();\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef,\r\n  inject,\r\n  Input,\r\n  NgZone,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Output,\r\n  PLATFORM_ID,\r\n  SimpleChanges,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n  AbstractControl,\r\n  ControlValueAccessor,\r\n  NG_VALIDATORS,\r\n  NG_VALUE_ACCESSOR,\r\n  ValidationErrors,\r\n  Validator\r\n} from '@angular/forms';\r\nimport { AsYouType, CountryCode } from 'libphonenumber-js';\r\nimport { NgxsmkTelInputService } from './ngxsmk-tel-input.service';\r\nimport { CountryMap, IntlTelI18n } from './types';\r\n\r\ntype IntlTelInstance = any;\r\n\r\n@Component({\r\n  selector: 'ngxsmk-tel-input',\r\n  standalone: true,\r\n  imports: [],\r\n  template: `\r\n    <div class=\"ngxsmk-tel\"\r\n         [class.disabled]=\"disabled\"\r\n         [attr.data-size]=\"size\"\r\n         [attr.data-variant]=\"variant\"\r\n         [attr.dir]=\"dir\">\r\n      @if (label) {\r\n        <label class=\"ngxsmk-tel__label\" [for]=\"resolvedId\">{{ label }}</label>\r\n      }\r\n\r\n      <div class=\"ngxsmk-tel__wrap\" [class.has-error]=\"showError\">\r\n        <div class=\"ngxsmk-tel-input__wrapper\">\r\n          <input\r\n            #telInput\r\n            type=\"tel\"\r\n            class=\"ngxsmk-tel-input__control\"\r\n            [id]=\"resolvedId\"\r\n            [attr.name]=\"name || null\"\r\n            [attr.placeholder]=\"placeholder || null\"\r\n            [attr.autocomplete]=\"autocomplete\"\r\n            [attr.inputmode]=\"digitsOnly ? 'numeric' : 'tel'\"\r\n            [disabled]=\"disabled\"\r\n            [attr.aria-invalid]=\"showError ? 'true' : 'false'\"\r\n            (blur)=\"onBlur()\"\r\n            (focus)=\"onFocus()\"\r\n          />\r\n        </div>\r\n\r\n        @if (showClear && currentRaw()) {\r\n          <button type=\"button\"\r\n                  class=\"ngxsmk-tel__clear\"\r\n                  (click)=\"clearInput()\"\r\n                  [attr.aria-label]=\"clearAriaLabel\">\r\n            ×\r\n          </button>\r\n        }\r\n      </div>\r\n\r\n      @if (hint && !showError) {\r\n        <div class=\"ngxsmk-tel__hint\">{{ hint }}</div>\r\n      }\r\n    </div>\r\n  `,\r\n  styleUrls: ['./ngxsmk-tel-input.component.scss'],\r\n  providers: [\r\n    { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxsmkTelInputComponent), multi: true },\r\n    { provide: NG_VALIDATORS, useExisting: forwardRef(() => NgxsmkTelInputComponent), multi: true }\r\n  ]\r\n})\r\nexport class NgxsmkTelInputComponent implements AfterViewInit, OnChanges, OnDestroy, ControlValueAccessor, Validator {\r\n  @ViewChild('telInput', { static: true }) inputRef!: ElementRef<HTMLInputElement>;\r\n\r\n  /* Core config */\r\n  @Input() initialCountry: CountryCode | 'auto' = 'US';\r\n  @Input() preferredCountries: CountryCode[] = ['US', 'GB'];\r\n  @Input() onlyCountries?: CountryCode[];\r\n  /** Dropdown shows dial code; input will NEVER show dial code */\r\n  @Input() separateDialCode: boolean = true;\r\n  @Input() allowDropdown: boolean = true;\r\n\r\n  /* Display / formatting */\r\n  /** 'formatted' => national with spaces; 'digits' => digits only */\r\n  @Input() nationalDisplay: 'formatted' | 'digits' = 'formatted';\r\n  /** 'typing' (live), 'blur', or 'off' */\r\n  @Input() formatWhenValid: 'off' | 'blur' | 'typing' = 'typing';\r\n\r\n  /* UX */\r\n  @Input() placeholder?: string;\r\n  @Input() autocomplete = 'tel';\r\n  @Input() name?: string;\r\n  @Input() inputId?: string;\r\n  @Input() disabled = false;\r\n\r\n  @Input() label?: string;\r\n  @Input() hint?: string;\r\n  @Input() errorText?: string;\r\n  @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n  @Input() variant: 'outline' | 'filled' | 'underline' = 'outline';\r\n  @Input() showClear = true;\r\n  @Input() autoFocus = false;\r\n  @Input() selectOnFocus = false;\r\n  @Input() showErrorWhenTouched = true;\r\n\r\n  /* Dropdown plumbing */\r\n  @Input() dropdownAttachToBody = true;\r\n  @Input() dropdownZIndex = 2000;\r\n\r\n  /* Localization + RTL */\r\n  @Input('i18n') i18n?: IntlTelI18n;\r\n  @Input('telI18n') set telI18n(v: IntlTelI18n | undefined) { this.i18n = v; }\r\n  @Input('localizedCountries') localizedCountries?: CountryMap;\r\n  @Input('telLocalizedCountries') set telLocalizedCountries(v: CountryMap | undefined) { this.localizedCountries = v; }\r\n\r\n  @Input() clearAriaLabel = 'Clear phone number';\r\n  @Input() dir: 'ltr' | 'rtl' = 'ltr';\r\n\r\n  /* Placeholders (intl-tel-input) */\r\n  @Input() autoPlaceholder: 'off' | 'polite' | 'aggressive' = 'off';\r\n  @Input() utilsScript?: string;\r\n  @Input() customPlaceholder?: (example: string, country: any) => string;\r\n\r\n  /* Input behavior */\r\n  @Input() digitsOnly = true;    // we still insert spaces when formatted\r\n  @Input() lockWhenValid = true; // optional UX guard\r\n\r\n  /* Outputs */\r\n  @Output() countryChange = new EventEmitter<{ iso2: CountryCode }>();\r\n  @Output() validityChange = new EventEmitter<boolean>();\r\n  @Output() inputChange = new EventEmitter<{ raw: string; e164: string | null; iso2: CountryCode }>();\r\n\r\n  /* Internal */\r\n  private iti: IntlTelInstance | null = null;\r\n  private onChange: (val: string | null) => void = () => {};\r\n  private onTouchedCb: () => void = () => {};\r\n  private validatorChange?: () => void;\r\n  private lastEmittedValid = false;\r\n  private pendingWrite: string | null = null;\r\n  private touched = false;\r\n\r\n  private allowDropdownWasTrue = false;\r\n  private suppressEvents = false;\r\n\r\n  readonly resolvedId: string = this.inputId || ('tel-' + Math.random().toString(36).slice(2));\r\n  private readonly platformId = inject(PLATFORM_ID);\r\n\r\n  constructor(private readonly zone: NgZone, private readonly tel: NgxsmkTelInputService) {}\r\n\r\n  // ---------- Lifecycle ----------\r\n  ngAfterViewInit(): void {\r\n    if (!isPlatformBrowser(this.platformId)) return;\r\n    void this.initAndWire();\r\n  }\r\n\r\n  private async initAndWire(): Promise<void> {\r\n    await this.initIntlTelInput();\r\n    this.bindDomListeners();\r\n\r\n    if (this.pendingWrite !== null) {\r\n      const v = this.pendingWrite;\r\n      this.pendingWrite = null;\r\n      this.writeValue(v);\r\n    }\r\n\r\n    if (this.autoFocus) setTimeout(() => this.focus(), 0);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (!isPlatformBrowser(this.platformId)) return;\r\n    const configChanged = [\r\n      'initialCountry', 'preferredCountries', 'onlyCountries',\r\n      'separateDialCode', 'allowDropdown',\r\n      'i18n', 'localizedCountries', 'dir',\r\n      'autoPlaceholder', 'utilsScript', 'customPlaceholder'\r\n    ].some(k => k in changes && !changes[k]?.firstChange);\r\n\r\n    if (configChanged && this.iti) {\r\n      this.reinitPlugin();\r\n      this.validatorChange?.();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void { this.destroyPlugin(); }\r\n\r\n  // ---------- CVA ----------\r\n  writeValue(val: string | null): void {\r\n    if (!this.inputRef) return;\r\n\r\n    if (!this.iti) { // not ready yet\r\n      this.pendingWrite = val ?? '';\r\n      return;\r\n    }\r\n\r\n    this.suppressEvents = true;\r\n    try {\r\n      // Let the plugin infer the country from E.164 (if provided).\r\n      this.iti.setNumber(val || '');\r\n\r\n      const iso2 = this.currentIso2();\r\n      const parsed = this.tel.parse(val ?? '', iso2);\r\n\r\n      // Visible input: ALWAYS NSN (no dial code, no trunk '0')\r\n      const nsn = parsed.e164\r\n        ? this.nsnFromE164(parsed.e164, iso2)\r\n        : this.stripLeadingZero(this.toNSN(parsed.national ?? (val ?? '')));\r\n\r\n      const display = this.displayValue(nsn, iso2);\r\n      this.setInputValue(display);\r\n\r\n      // FormControl value: ALWAYS E.164 (or null)\r\n      this.zone.run(() => this.onChange(parsed.e164));\r\n      this.zone.run(() => this.inputChange.emit({ raw: display, e164: parsed.e164, iso2 }));\r\n    } finally {\r\n      this.suppressEvents = false;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void { this.onChange = fn; }\r\n  registerOnTouched(fn: any): void { this.onTouchedCb = fn; }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n\r\n    // 1) native input\r\n    if (this.inputRef) this.inputRef.nativeElement.disabled = isDisabled;\r\n\r\n    // 2) toggle dropdown by re-init with allowDropdown=false when disabled\r\n    if (this.iti) {\r\n      if (isDisabled && this.allowDropdown) {\r\n        this.allowDropdownWasTrue = true;\r\n        this.allowDropdown = false;\r\n        this.reinitPlugin(); // closes popup & removes handlers\r\n      } else if (!isDisabled && this.allowDropdownWasTrue) {\r\n        this.allowDropdown = true;\r\n        this.allowDropdownWasTrue = false;\r\n        this.reinitPlugin(); // restore dropdown\r\n      } else {\r\n        this.applyDisabledUi(isDisabled);\r\n      }\r\n    } else {\r\n      this.applyDisabledUi(isDisabled);\r\n    }\r\n  }\r\n\r\n  // ---------- Validator ----------\r\n  validate(_: AbstractControl): ValidationErrors | null {\r\n    const raw = this.currentRaw();\r\n    if (!raw) return null;\r\n    const valid = this.tel.isValid(raw, this.currentIso2());\r\n    if (valid !== this.lastEmittedValid) {\r\n      this.lastEmittedValid = valid;\r\n      this.validityChange.emit(valid);\r\n    }\r\n    return valid ? null : { phoneInvalid: true };\r\n  }\r\n\r\n  registerOnValidatorChange(fn: () => void): void { this.validatorChange = fn; }\r\n\r\n  // ---------- Public helpers ----------\r\n  focus(): void {\r\n    this.inputRef?.nativeElement.focus();\r\n    if (this.selectOnFocus) {\r\n      const el = this.inputRef.nativeElement;\r\n      queueMicrotask(() => el.setSelectionRange(0, el.value.length));\r\n    }\r\n  }\r\n\r\n  selectCountry(iso2: CountryCode): void {\r\n    if (this.iti) {\r\n      this.iti.setCountry(iso2.toLowerCase());\r\n      this.handleInput();\r\n    }\r\n  }\r\n\r\n  clearInput(): void {\r\n    this.setInputValue('');\r\n    this.handleInput();\r\n    this.inputRef.nativeElement.focus();\r\n  }\r\n\r\n  // ---------- intl-tel-input wiring ----------\r\n  private async initIntlTelInput() {\r\n    const [{ default: intlTelInput }] = await Promise.all([import('intl-tel-input')]);\r\n\r\n    const toLowerKeys = (m?: CountryMap) => {\r\n      if (!m) return undefined;\r\n      const out: Record<string, string> = {};\r\n      for (const k in m) if (Object.prototype.hasOwnProperty.call(m, k)) {\r\n        const v = (m as Record<string, string | undefined>)[k];\r\n        if (v != null) out[k.toLowerCase()] = v;\r\n      }\r\n      return out;\r\n    };\r\n\r\n    const config: any = {\r\n      initialCountry: this.initialCountry === 'auto' ? 'auto' : (this.initialCountry?.toLowerCase() || 'us'),\r\n      preferredCountries: (this.preferredCountries ?? []).map(c => c.toLowerCase()),\r\n      onlyCountries: (this.onlyCountries ?? []).map(c => c.toLowerCase()),\r\n      nationalMode: true, // we control the visible value; prevents '+' in the input\r\n      allowDropdown: this.allowDropdown,\r\n      separateDialCode: this.separateDialCode,\r\n      geoIpLookup: (cb: (iso2: string) => void) => cb('us'),\r\n\r\n      autoPlaceholder: this.autoPlaceholder,\r\n      utilsScript: this.utilsScript,\r\n      customPlaceholder: this.customPlaceholder,\r\n\r\n      i18n: this.i18n,\r\n      localizedCountries: toLowerKeys(this.localizedCountries),\r\n      dropdownContainer: this.dropdownAttachToBody && typeof document !== 'undefined' ? document.body : undefined\r\n    };\r\n\r\n    this.zone.runOutsideAngular(() => {\r\n      this.iti = intlTelInput(this.inputRef.nativeElement, config);\r\n    });\r\n\r\n    (this.inputRef.nativeElement as HTMLElement).style.setProperty('--tel-dd-z', String(this.dropdownZIndex));\r\n    this.applyDisabledUi(this.disabled);\r\n  }\r\n\r\n  private async reinitPlugin() {\r\n    const prevIso2 = (this.iti?.getSelectedCountryData?.().iso2 || this.initialCountry || 'US').toString().toLowerCase();\r\n    const prevValue = this.currentRaw();\r\n\r\n    this.destroyPlugin();\r\n    await this.initIntlTelInput();\r\n    this.bindDomListeners();\r\n\r\n    try { this.iti?.setCountry(prevIso2); } catch {}\r\n    if (prevValue) {\r\n      this.setInputValue(prevValue);\r\n      this.handleInput();\r\n    }\r\n    this.applyDisabledUi(this.disabled);\r\n  }\r\n\r\n  private destroyPlugin() {\r\n    if (this.iti) {\r\n      this.iti.destroy();\r\n      this.iti = null;\r\n    }\r\n    if (this.inputRef?.nativeElement) {\r\n      const el = this.inputRef.nativeElement;\r\n      const clone = el.cloneNode(true) as HTMLInputElement;\r\n\r\n      // preserve state across clone\r\n      clone.disabled = this.disabled;\r\n      clone.id = this.resolvedId;\r\n      clone.name = this.name ?? clone.name;\r\n      clone.value = el.value;\r\n\r\n      el.parentNode?.replaceChild(clone, el);\r\n      (this.inputRef as any).nativeElement = clone;\r\n    }\r\n  }\r\n\r\n  // ---------- Input listeners ----------\r\n  private bindDomListeners() {\r\n    const el = this.inputRef.nativeElement;\r\n\r\n    this.zone.runOutsideAngular(() => {\r\n      el.addEventListener('beforeinput', (ev: InputEvent) => {\r\n        if (!this.digitsOnly) return;\r\n        const data = (ev as any).data as string | null;\r\n\r\n        // If already valid, block extra digit insertions when no selection\r\n        if (this.lockWhenValid && this.isCurrentlyValid()) {\r\n          const selCollapsed = (el.selectionStart ?? 0) === (el.selectionEnd ?? 0);\r\n          const isDigit = !!data && ev.inputType === 'insertText' && data >= '0' && data <= '9';\r\n          if (selCollapsed && isDigit) { ev.preventDefault(); return; }\r\n        }\r\n\r\n        if (!data || ev.inputType !== 'insertText') return;\r\n        const isDigit = data >= '0' && data <= '9';\r\n        if (!isDigit) ev.preventDefault(); // digits only; we add spaces ourselves\r\n      });\r\n\r\n      el.addEventListener('paste', (e: ClipboardEvent) => {\r\n        const text = (e.clipboardData || (window as any).clipboardData).getData('text') || '';\r\n        e.preventDefault();\r\n        const digits = this.toNSN(text);\r\n        const start = el.selectionStart ?? el.value.length;\r\n        const end = el.selectionEnd ?? el.value.length;\r\n        el.setRangeText(digits, start, end, 'end');\r\n        queueMicrotask(() => this.handleInput());\r\n      });\r\n\r\n      el.addEventListener('input', () => this.handleInput());\r\n\r\n      el.addEventListener('countrychange', () => {\r\n        const iso2 = this.currentIso2();\r\n        this.zone.run(() => {\r\n          this.countryChange.emit({ iso2 });\r\n          this.validatorChange?.();\r\n        });\r\n        this.handleInput();\r\n      });\r\n\r\n      el.addEventListener('blur', () => this.onBlur());\r\n    });\r\n  }\r\n\r\n  // ---------- UX handlers ----------\r\n  onBlur() {\r\n    this.touched = true;\r\n    this.zone.run(() => this.onTouchedCb());\r\n    if (this.formatWhenValid === 'off') return;\r\n\r\n    const iso2 = this.currentIso2();\r\n    const digits = this.stripLeadingZero(this.toNSN(this.currentRaw()));\r\n\r\n    const parsed = this.tel.parse(digits, iso2);\r\n    if (!parsed.e164 && !parsed.isValid) return;\r\n\r\n    const nsn = parsed.e164 ? this.nsnFromE164(parsed.e164, iso2) : digits;\r\n    if (this.formatWhenValid !== 'typing') {\r\n      this.setInputValue(this.displayValue(nsn, iso2));\r\n    }\r\n  }\r\n\r\n  onFocus() {\r\n    if (this.selectOnFocus) {\r\n      const el = this.inputRef.nativeElement;\r\n      queueMicrotask(() => el.setSelectionRange(0, el.value.length));\r\n    }\r\n  }\r\n\r\n  // ---------- Core input pipeline ----------\r\n  private handleInput() {\r\n    if (this.suppressEvents) return;\r\n\r\n    const iso2 = this.currentIso2();\r\n    // Users type national digits; remove any separators and a single trunk '0'\r\n    let digits = this.stripLeadingZero(this.toNSN(this.currentRaw()));\r\n\r\n    const parsed = this.tel.parse(digits, iso2);\r\n\r\n    // Emit E.164 to the form (or null if incomplete)\r\n    this.zone.run(() => this.onChange(parsed.e164));\r\n    this.zone.run(() => this.inputChange.emit({ raw: this.currentRaw(), e164: parsed.e164, iso2 }));\r\n\r\n    // Keep visible value as NSN (optionally formatted)\r\n    const nsn = parsed.e164 ? this.nsnFromE164(parsed.e164, iso2) : digits;\r\n    const display = this.formatWhenValid === 'typing' ? this.displayValue(nsn, iso2) : nsn;\r\n\r\n    if (display !== this.currentRaw()) this.setInputValue(display);\r\n  }\r\n\r\n  // ---------- Utilities ----------\r\n  /** Convert any string to digits only (NSN basis). */\r\n  private toNSN(v: string | null | undefined): string {\r\n    return (v ?? '').replace(/\\D/g, '');\r\n  }\r\n\r\n  /** Strip exactly one leading trunk '0' from national input. */\r\n  private stripLeadingZero(nsn: string): string {\r\n    return nsn.replace(/^0/, '');\r\n  }\r\n\r\n  /** Current country calling code (e.g. \"44\", \"94\"). */\r\n  private currentDialCode(): string {\r\n    return (this.iti?.getSelectedCountryData?.().dialCode ?? '').toString();\r\n  }\r\n\r\n  /** Convert E.164 (+<cc><nsn>) to NSN (never includes trunk '0'). */\r\n  private nsnFromE164(e164: string, iso2: CountryCode): string {\r\n    const dial = this.currentDialCode();\r\n    if (!e164 || !dial) return this.toNSN(e164);\r\n    if (e164.startsWith('+' + dial)) return e164.slice(dial.length + 1);\r\n    return this.toNSN(e164);\r\n  }\r\n\r\n  /** Format NSN for region (adds spaces but NEVER a trunk '0'). */\r\n  private formatNSN(nsn: string, iso2: CountryCode): string {\r\n    try {\r\n      const fmt = new AsYouType(iso2);\r\n      return fmt.input(nsn);\r\n    } catch {\r\n      return nsn;\r\n    }\r\n  }\r\n\r\n  /** Compose visible value based on settings. */\r\n  private displayValue(nsn: string, iso2: CountryCode): string {\r\n    return this.nationalDisplay === 'formatted' ? this.formatNSN(nsn, iso2) : nsn;\r\n    // (spaces in formatted mode; digits only otherwise)\r\n  }\r\n\r\n  currentRaw(): string { return (this.inputRef?.nativeElement.value ?? '').trim(); }\r\n\r\n  private currentIso2(): CountryCode {\r\n    const iso2 = (this.iti?.getSelectedCountryData?.().iso2 ?? this.initialCountry ?? 'US')\r\n      .toString().toUpperCase();\r\n    return iso2 as CountryCode;\r\n  }\r\n\r\n  private setInputValue(v: string) { this.inputRef.nativeElement.value = v ?? ''; }\r\n\r\n  get showError(): boolean {\r\n    const invalid = !!this.validate({} as AbstractControl);\r\n    return this.showErrorWhenTouched ? (this.touched && invalid) : invalid;\r\n  }\r\n\r\n  private isCurrentlyValid(): boolean { return this.tel.isValid(this.currentRaw(), this.currentIso2()); }\r\n\r\n  /** Make flag/dropdown non-interactive when disabled */\r\n  private applyDisabledUi(disabled: boolean) {\r\n    const input = this.inputRef?.nativeElement;\r\n    if (!input) return;\r\n    const flag = input.parentElement?.querySelector('.iti__selected-flag') as HTMLElement | null;\r\n    if (flag) {\r\n      flag.tabIndex = disabled ? -1 : 0;\r\n      flag.setAttribute('aria-disabled', String(disabled));\r\n    }\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxsmkTelInputService"],"mappings":"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"}