{"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            [attr.pattern]=\"digitsOnly ? (allowLeadingPlus ? '\\\\\\\\+?[0-9]*' : '[0-9]*') : null\"\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\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  @Input() nationalMode: boolean = false;\r\n  @Input() separateDialCode: boolean = false;\r\n  @Input() allowDropdown: boolean = true;\r\n\r\n  @Input() lockWhenValid: boolean = true;\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: boolean = 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: boolean = true;\r\n  @Input() autoFocus: boolean = false;\r\n  @Input() selectOnFocus: boolean = false;\r\n  @Input() formatOnBlur: boolean = true;\r\n  @Input() showErrorWhenTouched: boolean = true;\r\n\r\n  /* Dropdown plumbing */\r\n  @Input() dropdownAttachToBody: boolean = true;\r\n  @Input() dropdownZIndex: number = 2000;\r\n\r\n  /* Localization + RTL */\r\n  @Input('i18n') i18n?: IntlTelI18n;\r\n\r\n  @Input('telI18n') set telI18n(v: IntlTelI18n | undefined) {\r\n    this.i18n = v;\r\n  }\r\n\r\n  @Input('localizedCountries') localizedCountries?: CountryMap;\r\n\r\n  @Input('telLocalizedCountries') set telLocalizedCountries(v: CountryMap | undefined) {\r\n    this.localizedCountries = v;\r\n  }\r\n\r\n  @Input() clearAriaLabel: string = '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'; // default OFF since no utils fallback\r\n  @Input() utilsScript?: string;\r\n  @Input() customPlaceholder?: (example: string, country: any) => string;\r\n\r\n  @Input() formatWhenValid: 'off' | 'blur' | 'typing' = 'blur';\r\n\r\n  /* Digits-only controls */\r\n  @Input() digitsOnly: boolean = true;\r\n  @Input() allowLeadingPlus: boolean = true;\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  };\r\n  private onTouchedCb: () => void = () => {\r\n  };\r\n  private validatorChange?: () => void;\r\n  private lastEmittedValid = false;\r\n  private pendingWrite: string | null = null;\r\n  private touched: boolean = false;\r\n\r\n  readonly resolvedId: string = this.inputId || ('tel-' + Math.random().toString(36).slice(2));\r\n\r\n  private readonly platformId = inject(PLATFORM_ID);\r\n\r\n  constructor(\r\n    private readonly zone: NgZone,\r\n    private readonly tel: NgxsmkTelInputService\r\n  ) {\r\n  }\r\n\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      this.setInputValue(this.pendingWrite);\r\n      this.handleInput();\r\n      this.pendingWrite = null;\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', 'nationalMode',\r\n      'i18n', 'localizedCountries', 'dir',\r\n      'autoPlaceholder', 'utilsScript', 'customPlaceholder',\r\n      'digitsOnly', 'allowLeadingPlus'\r\n    ].some(k => k in changes && !changes[k]?.firstChange);\r\n    if (configChanged && this.iti) {\r\n      this.reinitPlugin();\r\n      this.validatorChange?.();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroyPlugin();\r\n  }\r\n\r\n  // ----- CVA -----\r\n  writeValue(val: string | null): void {\r\n    if (!this.inputRef) return;\r\n    if (!this.iti) {\r\n      this.pendingWrite = val ?? '';\r\n      return;\r\n    }\r\n    this.setInputValue(val ?? '');\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouchedCb = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n    if (this.inputRef) this.inputRef.nativeElement.disabled = isDisabled;\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 {\r\n    this.validatorChange = fn;\r\n  }\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() {\r\n    this.setInputValue('');\r\n    this.handleInput();\r\n    this.inputRef.nativeElement.focus();\r\n  }\r\n\r\n  // ----- Plugin 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) {\r\n        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      }\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: this.nationalMode,\r\n      allowDropdown: this.allowDropdown,\r\n      separateDialCode: this.separateDialCode,\r\n      geoIpLookup: (cb: (iso2: string) => void) => cb('us'),\r\n\r\n      // placeholders\r\n      autoPlaceholder: this.autoPlaceholder,\r\n      utilsScript: this.utilsScript,\r\n      customPlaceholder: this.customPlaceholder,\r\n\r\n      // localization\r\n      i18n: this.i18n,\r\n      localizedCountries: toLowerKeys(this.localizedCountries),\r\n\r\n      // dropdown container\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  }\r\n\r\n  private reinitPlugin() {\r\n    const current = this.currentRaw();\r\n    this.destroyPlugin();\r\n    this.initIntlTelInput().then(() => {\r\n      if (current) {\r\n        this.setInputValue(current);\r\n        this.handleInput();\r\n      }\r\n    });\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      el.parentNode?.replaceChild(clone, el);\r\n      (this.inputRef as any).nativeElement = clone;\r\n    }\r\n  }\r\n\r\n  // ----- Input filtering (digits-only) -----\r\n  private sanitizeDigits(value: string): string {\r\n    if (!this.digitsOnly) return value;\r\n    let v = value.replace(/[^\\d+]/g, '');\r\n    if (this.allowLeadingPlus) {\r\n      const hasLeadingPlus = v.startsWith('+');\r\n      v = (hasLeadingPlus ? '+' : '') + v.replace(/\\+/g, '');\r\n    } else {\r\n      v = v.replace(/\\+/g, '');\r\n    }\r\n    return v;\r\n  }\r\n\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\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          const isPlusAtStart = this.allowLeadingPlus && data === '+' && (el.selectionStart ?? 0) === 0 && !el.value.includes('+');\r\n\r\n          if (selCollapsed && (isDigit || isPlusAtStart)) {\r\n            ev.preventDefault();\r\n            return;\r\n          }\r\n        }\r\n\r\n        // normal filtering when not valid (or replacing text)\r\n        if (!data || ev.inputType !== 'insertText') return;\r\n\r\n        const pos = el.selectionStart ?? 0;\r\n        const isDigit = data >= '0' && data <= '9';\r\n        const isPlusAtStart = this.allowLeadingPlus && data === '+' && pos === 0 && !el.value.includes('+');\r\n\r\n        if (!isDigit && !isPlusAtStart) ev.preventDefault();\r\n      });\r\n\r\n      el.addEventListener('paste', (e: ClipboardEvent) => {\r\n        if (!this.digitsOnly) return;\r\n\r\n        const text = (e.clipboardData || (window as any).clipboardData).getData('text') || '';\r\n        const hasAnyDigit = /[0-9]/.test(text);\r\n\r\n        // block pasting extra digits if valid and there is no selection\r\n        if (this.lockWhenValid && this.isCurrentlyValid()) {\r\n          const selCollapsed = (el.selectionStart ?? 0) === (el.selectionEnd ?? 0);\r\n          if (selCollapsed && hasAnyDigit) {\r\n            e.preventDefault();\r\n            return;\r\n          }\r\n        }\r\n\r\n        // sanitize paste\r\n        e.preventDefault();\r\n        const sanitized = this.sanitizeDigits(text);\r\n        const start = el.selectionStart ?? el.value.length;\r\n        const end = el.selectionEnd ?? el.value.length;\r\n        el.setRangeText(sanitized, start, end, 'end');\r\n        queueMicrotask(() => this.handleInput());\r\n      });\r\n\r\n      el.addEventListener('input', () => {\r\n        if (this.digitsOnly) {\r\n          const val = el.value;\r\n          const sanitized = this.sanitizeDigits(val);\r\n          if (val !== sanitized) {\r\n            const caret = el.selectionStart ?? sanitized.length;\r\n            el.value = sanitized;\r\n            el.setSelectionRange(caret, caret);\r\n          }\r\n        }\r\n        this.handleInput();\r\n      });\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  onBlur() {\r\n    this.touched = true;\r\n    this.zone.run(() => this.onTouchedCb());\r\n    if (!this.formatOnBlur) return;\r\n\r\n    const raw = this.currentRaw();\r\n    if (!raw) return;\r\n\r\n    const iso2 = this.currentIso2();\r\n    const parsed = this.tel.parse(raw, iso2);\r\n\r\n    // only format on blur if valid\r\n    if (parsed.isValid && this.nationalMode && parsed.national) {\r\n      this.setInputValue((parsed.national || '').replace(/\\s{2,}/g, ' '));\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  private handleInput() {\r\n    let raw = this.currentRaw();\r\n    const iso2 = this.currentIso2();\r\n\r\n    // Parse once\r\n    const parsed = this.tel.parse(raw, iso2);\r\n\r\n    // live format only when valid\r\n    if (this.formatWhenValid === 'typing' && raw && parsed.isValid) {\r\n      const formatted = this.formatAsYouType(raw, iso2);\r\n      if (formatted !== raw) {\r\n        this.setInputValue(formatted);\r\n        raw = formatted;\r\n      }\r\n    }\r\n\r\n    // emit\r\n    this.zone.run(() => this.onChange(parsed.e164)); // E.164 or null\r\n    this.zone.run(() => this.inputChange.emit({ raw, e164: parsed.e164, iso2 }));\r\n\r\n    // national pretty-print normalization, only if valid\r\n    if (raw && this.nationalMode && parsed.isValid && parsed.national) {\r\n      const normalized = parsed.national.replace(/\\s{2,}/g, ' ');\r\n      if (normalized !== raw) this.setInputValue(normalized);\r\n    }\r\n  }\r\n\r\n  private formatAsYouType(raw: string, iso2: CountryCode): string {\r\n    try {\r\n      // When a region is provided, AsYouType returns NATIONAL formatting\r\n      const fmt = new AsYouType(iso2);\r\n      return fmt.input(raw);\r\n    } catch {\r\n      return raw;\r\n    }\r\n  }\r\n\r\n  currentRaw(): string {\r\n    return (this.inputRef?.nativeElement.value ?? '').trim();\r\n  }\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) {\r\n    this.inputRef.nativeElement.value = v ?? '';\r\n  }\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 {\r\n    return this.tel.isValid(this.currentRaw(), this.currentIso2());\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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"}