{"version":3,"file":"ngx-smart-forms-smart-input-type.mjs","sources":["../../../../libs/smart-input-type/src/lib/directives/smart-input-type.directive.ts","../../../../libs/smart-input-type/src/ngx-smart-forms-smart-input-type.ts"],"sourcesContent":["import {\n  Directive,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Renderer2,\n  Self,\n  SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, NgControl } from '@angular/forms';\n\nimport { fromEvent, debounceTime } from 'rxjs';\n\n/**\n * SmartInputType\n *\n * A directive that enhances native input fields with additional validation and customization options\n * such as alphanumeric, numeric, and email validation. This directive supports spaces, case transformation,\n * and language-specific filtering, making it versatile for various input scenarios.\n */\n\n@Directive({\n  selector: '[smartType]',\n  standalone: true,\n})\nexport class SmartInputType implements OnInit, OnChanges {\n  /**\n   * Defines the smart input type. Supported types are:\n   * 'alphanumeric', 'numeric', 'alpha', 'email', 'url', 'tel', and 'pattern'.\n   * Can also be set to a valid HTML input type (e.g., 'password', 'text').\n   */\n  @Input() smartType = '';\n\n  /**\n   * Allows spaces in the input when set to true.\n   */\n  @Input() acceptSpace = false;\n\n  /**\n   * Transforms the input to uppercase or lowercase. Supports 'uppercase' and 'lowercase'.\n   */\n  @Input() case: 'uppercase' | 'lowercase' | null = null;\n\n  /**\n   * Sets the language set for input filtering. Supported languages are 'en', 'es', 'fr'. or custom patterns.\n   */\n  @Input() languageSet = '';\n\n  /**\n   * Debounce time in milliseconds to delay input validation\n   * (e.g., 300ms to wait for user input before validating).\n   * Set to 0 to disable debounce.\n   * Default is 0.\n   */\n  @Input() debounceTime = 0;\n\n  /**\n   * Custom regex pattern for input validation.\n   */\n  @Input() pattern?: string;\n\n  // Form control instance\n  private formControl: AbstractControl | null = null;\n\n  // Language map for filtering\n  private languageMap: { [key: string]: string } = {\n    en: 'a-zA-Z0-9',\n    es: 'a-zA-Z0-9áéíóúñ',\n    fr: 'a-zA-Z0-9àâäçéèêëîïôùûüÿ',\n  };\n\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2,\n    @Optional() @Self() private ngControl: NgControl\n  ) {}\n\n  /**\n   * Initializes validation logic and handles input changes.\n   */\n  ngOnInit(): void {\n    this.initValidation();\n    this.handleInputChanges();\n  }\n\n  /**\n   * Detects input changes and revalidates the input.\n   * @param changes SimpleChanges\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['smartType']) {\n      this.validateInput();\n    }\n  }\n\n  /**\n   * Initializes the validation mechanism by setting up form control and running the first validation.\n   */\n  private initValidation(): void {\n    this.formControl = this.ngControl?.control;\n    this.validateInput();\n  }\n\n  /**\n   * Handles input changes and applies validation based on the smartType.\n   * If debounceTime is set, it will debounce the input event.\n   * If debounceTime is 0, it will validate the input on every input event.\n   */\n  private handleInputChanges(): void {\n    if (this.debounceTime > 0) {\n      fromEvent(this.el.nativeElement, 'input')\n        .pipe(debounceTime(this.debounceTime))\n        .subscribe(() => this.validateInput());\n    } else {\n      this.el.nativeElement.addEventListener('input', () =>\n        this.validateInput()\n      );\n    }\n  }\n\n  /**\n   * Validates the input value based on the smartType and other parameters like case and languageSet.\n   * Applies appropriate visual feedback and form control errors if necessary.\n   */\n  private validateInput(): void {\n    if (!this.isSmartTypeValid() && !this.isValidHtmlType(this.smartType)) {\n      console.warn(\n        `Invalid smartType \"${this.smartType}\". Allowed types are: alphanumeric, numeric, alpha, email, url, tel, pattern, or valid HTML input types.`\n      );\n    }\n\n    if (!this.isCompatibleWithNativeInput()) {\n      console.warn(\n        `smartType \"${this.smartType}\" is not compatible with native input type \"${this.el.nativeElement.type}\".`\n      );\n      return;\n    }\n\n    if (this.isValidHtmlType(this.smartType) && !this.isSmartTypeValid()) {\n      this.el.nativeElement.type = this.smartType;\n      if (this.smartType !== 'text') {\n        return;\n      }\n    }\n\n    let value: string = this.el.nativeElement.value;\n    const errors: { [key: string]: boolean } = {};\n\n    // Handle case transformation\n    if (this.case) {\n      value =\n        this.case === 'uppercase' ? value.toUpperCase() : value.toLowerCase();\n    }\n    // Apply language set filtering\n    if (this.languageSet) {\n      value = this.filterByLanguageSet(value);\n    }\n\n    // Process multiple smartTypes if present\n    value = this.applySmartTypeValidation(this.smartType, value, errors);\n\n    // Update the native input element's value\n    this.el.nativeElement.value = value;\n\n    // Sync with FormControl if exists\n    if (this.formControl) {\n      this.formControl.setValue(value, { emitEvent: false });\n      this.applyFormErrors(errors);\n    }\n\n    // Apply user-friendly visual feedback\n    this.applyVisualFeedback(errors);\n  }\n\n  /**\n   * Applies validation logic based on the specified smartType (e.g., alphanumeric, email).\n   * Returns the sanitized input value.\n   * @param type string\n   * @param value string\n   * @param errors object\n   * @returns string\n   */\n  private applySmartTypeValidation(\n    type: string,\n    value: string,\n    errors: { [key: string]: boolean }\n  ): string {\n    switch (type) {\n      case 'alphanumeric':\n        value = this.acceptSpace\n          ? value.replace(/[^a-zA-Z0-9 ]/g, '')\n          : value.replace(/[^a-zA-Z0-9]/g, '');\n        break;\n      case 'alpha':\n        value = this.acceptSpace\n          ? value.replace(/[^a-zA-Z ]/g, '')\n          : value.replace(/[^a-zA-Z]/g, '');\n        break;\n      case 'numeric':\n        value = this.acceptSpace\n          ? value.replace(/[^0-9 ]/g, '')\n          : value.replace(/[^0-9]/g, '');\n        break;\n      case 'email': {\n        const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n        if (!emailPattern.test(value) && value !== '') {\n          errors['strictEmail'] = true;\n        }\n        break;\n      }\n      case 'url': {\n        const urlPattern =\n          /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/;\n        if (!urlPattern.test(value) && value !== '') {\n          errors['strictUrl'] = true;\n        }\n        break;\n      }\n      case 'tel': {\n        const telPattern =\n          /^\\+?(\\d{1,3})?[-.\\s]?(\\(?\\d{1,4}\\)?)?[-.\\s]?\\d{1,4}[-.\\s]?\\d{1,4}[-.\\s]?\\d{1,9}$/;\n        if (!telPattern.test(value) && value !== '') {\n          errors['strictTel'] = true;\n        }\n        break;\n      }\n      case 'pattern':\n        if (this.pattern) {\n          value = value.replace(new RegExp(`[^${this.pattern}]`, 'g'), '');\n        }\n        break;\n      default:\n        break;\n    }\n    return value;\n  }\n\n  /**\n   * Filters the input value based on the allowed character set of the specified language.\n   * Returns the filtered input value.\n   * @param value string\n   * @returns string\n   */\n  private filterByLanguageSet(value: string): string {\n    const languagePattern = new RegExp(\n      `[^${this.languageMap[this.languageSet] ?? this.languageSet}]`,\n      'g'\n    );\n    return value.replace(languagePattern, '');\n  }\n\n  /**\n   * Updates the form control with validation errors, or removes errors if none exist.\n   * @param errors object\n   * @returns void\n   */\n  private applyFormErrors(errors: { [key: string]: boolean }): void {\n    if (this.formControl) {\n      const currentErrors = this.formControl.errors || {};\n      const newErrors = Object.assign({}, currentErrors, errors);\n      this.formControl.setErrors(\n        Object.keys(newErrors).length ? newErrors : null\n      );\n    }\n  }\n\n  /**\n   * Adds or removes CSS classes based on validation errors to provide visual feedback.\n   * If there are no errors, the 'has-error' class is removed.\n   * @param errors object\n   * @returns void\n   */\n  private applyVisualFeedback(errors: { [key: string]: boolean }): void {\n    if (Object.keys(errors).length) {\n      this.renderer.addClass(this.el.nativeElement, 'has-error');\n    } else {\n      this.renderer.removeClass(this.el.nativeElement, 'has-error');\n    }\n  }\n\n  /**\n   * Checks if the specified smartType is a valid HTML input type.\n   * Returns true if the type is valid, false otherwise.\n   * @param type string\n   * @returns boolean\n   */\n  private isValidHtmlType(type: string): boolean {\n    const input = document.createElement('input');\n    input.setAttribute('type', type);\n    return input.type === type;\n  }\n\n  /**\n   * Checks if the specified smartType is a valid smart type (e.g., alphanumeric, numeric).\n   * Returns true if the type is valid, false otherwise.\n   * @returns boolean\n   */\n  private isSmartTypeValid(): boolean {\n    const validSmartTypes = [\n      'alphanumeric',\n      'numeric',\n      'alpha',\n      'email',\n      'url',\n      'tel',\n      'pattern',\n    ];\n\n    return validSmartTypes.includes(this.smartType);\n  }\n\n  /**\n   * Checks if the smartType is compatible with the native input type.\n   * Returns true if the smartType is compatible, false otherwise.\n   * @returns boolean\n   */\n  private isCompatibleWithNativeInput(): boolean {\n    const nativeType = this.el.nativeElement.type;\n\n    const smartTypeCompatibility: { [key: string]: string[] } = {\n      alphanumeric: ['text'],\n      alpha: ['text'],\n      numeric: ['number', 'text'],\n      email: ['email', 'text'],\n      url: ['url', 'text'],\n      tel: ['tel', 'text'],\n    };\n\n    return smartTypeCompatibility[this.smartType]?.includes(nativeType) ?? true;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}