{"version":3,"file":"angular-dynamic-forms-ai.mjs","sources":["../../../projects/dynamic-forms/src/lib/services/ai-validation.service.ts","../../../projects/dynamic-forms/src/lib/components/dynamic-form.component.ts","../../../projects/dynamic-forms/src/lib/dynamic-forms.module.ts","../../../projects/dynamic-forms/src/public-api.ts","../../../projects/dynamic-forms/src/angular-dynamic-forms-ai.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { FormFieldConfig } from '../interfaces/form-field.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AiValidationService {\n  private validationRules = new Map<string, RegExp>([\n    ['email', /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/],\n    ['phone', /^\\+?[\\d\\s-]{10,}$/],\n    ['url', /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/],\n    ['zipcode', /^\\d{5}(-\\d{4})?$/],\n  ]);\n\n  suggestValidations(field: FormFieldConfig): FormFieldConfig {\n    const fieldNameLower = field.name.toLowerCase();\n    const validations = { ...field.validations } || {};\n\n    // Email validation\n    if (fieldNameLower.includes('email')) {\n      validations.email = true;\n      validations.required = true;\n      field.type = 'email';\n    }\n\n    // Password validation\n    if (fieldNameLower.includes('password')) {\n      validations.required = true;\n      validations.minLength = 6;\n      field.type = 'password';\n      validations.pattern = '^(?=.*[A-Za-z])(?=.*\\\\d)[A-Za-z\\\\d]{6,}$';\n    }\n\n    // Phone validation\n    if (fieldNameLower.includes('phone')) {\n      validations.pattern = this.validationRules.get('phone')?.toString().slice(1, -1);\n      validations.required = true;\n    }\n\n    // Name validation\n    if (fieldNameLower.includes('name')) {\n      validations.required = true;\n      validations.minLength = 2;\n    }\n\n    // URL validation\n    if (fieldNameLower.includes('url') || fieldNameLower.includes('website')) {\n      validations.pattern = this.validationRules.get('url')?.toString().slice(1, -1);\n    }\n\n    // Zip code validation\n    if (fieldNameLower.includes('zip')) {\n      validations.pattern = this.validationRules.get('zipcode')?.toString().slice(1, -1);\n    }\n\n    field.validations = validations;\n    field.errorMessages = this.generateErrorMessages(field);\n\n    return field;\n  }\n\n  private generateErrorMessages(field: FormFieldConfig): { [key: string]: string } {\n    const messages: { [key: string]: string } = {};\n    const validations = field.validations || {};\n\n    if (validations.required) {\n      messages.required = `${field.label} is required`;\n    }\n\n    if (validations.minLength) {\n      messages.minlength = `${field.label} must be at least ${validations.minLength} characters`;\n    }\n\n    if (validations.maxLength) {\n      messages.maxlength = `${field.label} cannot exceed ${validations.maxLength} characters`;\n    }\n\n    if (validations.email) {\n      messages.email = `Please enter a valid email address`;\n    }\n\n    if (validations.pattern) {\n      messages.pattern = this.getPatternErrorMessage(field.name);\n    }\n\n    return messages;\n  }\n\n  private getPatternErrorMessage(fieldName: string): string {\n    const fieldNameLower = fieldName.toLowerCase();\n    \n    if (fieldNameLower.includes('password')) {\n      return 'Password must contain at least one letter and one number';\n    }\n    if (fieldNameLower.includes('phone')) {\n      return 'Please enter a valid phone number';\n    }\n    if (fieldNameLower.includes('url') || fieldNameLower.includes('website')) {\n      return 'Please enter a valid URL';\n    }\n    if (fieldNameLower.includes('zip')) {\n      return 'Please enter a valid ZIP code';\n    }\n\n    return 'Please enter a valid value';\n  }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { FormConfig, FormFieldConfig } from '../interfaces/form-field.interface';\nimport { AiValidationService } from '../services/ai-validation.service';\n\n@Component({\n  selector: 'lib-dynamic-form',\n  template: `\n    <form #form=\"ngForm\" (ngSubmit)=\"onSubmit(form)\" class=\"dynamic-form\" [attr.aria-label]=\"formConfig.fields[0]?.label + ' form'\">\n      <div *ngFor=\"let field of formConfig.fields\" class=\"form-field\" [ngClass]=\"{'hidden': !isFieldVisible(field)}\">\n        <label [for]=\"field.name\" class=\"form-label\">\n          {{ field.label }}\n          <span *ngIf=\"field.validations?.required\" class=\"required-marker\">*</span>\n        </label>\n\n        <ng-container [ngSwitch]=\"field.type\">\n          <!-- Text, Email, Number, Password inputs -->\n          <input *ngSwitchCase=\"'text'\" \n                 [type]=\"field.type\"\n                 [id]=\"field.name\"\n                 [name]=\"field.name\"\n                 [placeholder]=\"field.placeholder || ''\"\n                 [(ngModel)]=\"field.value\"\n                 #fieldModel=\"ngModel\"\n                 [required]=\"field.validations?.required\"\n                 [minlength]=\"field.validations?.minLength\"\n                 [maxlength]=\"field.validations?.maxLength\"\n                 [pattern]=\"field.validations?.pattern\"\n                 [email]=\"field.validations?.email\"\n                 class=\"form-input\"\n                 [ngClass]=\"{'error': fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)}\"\n                 [attr.aria-invalid]=\"fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)\"\n                 [attr.aria-describedby]=\"field.name + '-error'\">\n\n          <input *ngSwitchCase=\"'email'\"\n                 type=\"email\"\n                 [id]=\"field.name\"\n                 [name]=\"field.name\"\n                 [placeholder]=\"field.placeholder || ''\"\n                 [(ngModel)]=\"field.value\"\n                 #fieldModel=\"ngModel\"\n                 [required]=\"field.validations?.required\"\n                 [email]=\"true\"\n                 class=\"form-input\"\n                 [ngClass]=\"{'error': fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)}\"\n                 [attr.aria-invalid]=\"fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)\"\n                 [attr.aria-describedby]=\"field.name + '-error'\">\n\n          <input *ngSwitchCase=\"'number'\"\n                 type=\"number\"\n                 [id]=\"field.name\"\n                 [name]=\"field.name\"\n                 [placeholder]=\"field.placeholder || ''\"\n                 [(ngModel)]=\"field.value\"\n                 #fieldModel=\"ngModel\"\n                 [required]=\"field.validations?.required\"\n                 class=\"form-input\"\n                 [ngClass]=\"{'error': fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)}\"\n                 [attr.aria-invalid]=\"fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)\"\n                 [attr.aria-describedby]=\"field.name + '-error'\">\n\n          <input *ngSwitchCase=\"'password'\"\n                 type=\"password\"\n                 [id]=\"field.name\"\n                 [name]=\"field.name\"\n                 [placeholder]=\"field.placeholder || ''\"\n                 [(ngModel)]=\"field.value\"\n                 #fieldModel=\"ngModel\"\n                 [required]=\"field.validations?.required\"\n                 [minlength]=\"field.validations?.minLength\"\n                 [pattern]=\"field.validations?.pattern\"\n                 class=\"form-input\"\n                 [ngClass]=\"{'error': fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)}\"\n                 [attr.aria-invalid]=\"fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)\"\n                 [attr.aria-describedby]=\"field.name + '-error'\">\n\n          <!-- Select dropdown -->\n          <select *ngSwitchCase=\"'select'\"\n                  [id]=\"field.name\"\n                  [name]=\"field.name\"\n                  [(ngModel)]=\"field.value\"\n                  #fieldModel=\"ngModel\"\n                  [required]=\"field.validations?.required\"\n                  class=\"form-select\"\n                  [ngClass]=\"{'error': fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)}\"\n                  [attr.aria-invalid]=\"fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)\"\n                  [attr.aria-describedby]=\"field.name + '-error'\">\n            <option value=\"\">Select {{ field.label }}</option>\n            <option *ngFor=\"let option of field.options\" [value]=\"option.value\">\n              {{ option.label }}\n            </option>\n          </select>\n\n          <!-- Textarea -->\n          <textarea *ngSwitchCase=\"'textarea'\"\n                    [id]=\"field.name\"\n                    [name]=\"field.name\"\n                    [placeholder]=\"field.placeholder || ''\"\n                    [(ngModel)]=\"field.value\"\n                    #fieldModel=\"ngModel\"\n                    [required]=\"field.validations?.required\"\n                    [minlength]=\"field.validations?.minLength\"\n                    [maxlength]=\"field.validations?.maxLength\"\n                    class=\"form-textarea\"\n                    [ngClass]=\"{'error': fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)}\"\n                    [attr.aria-invalid]=\"fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)\"\n                    [attr.aria-describedby]=\"field.name + '-error'\">\n          </textarea>\n        </ng-container>\n\n        <!-- Error messages -->\n        <div *ngIf=\"fieldModel.invalid && (fieldModel.dirty || fieldModel.touched)\"\n             class=\"error-messages\"\n             [id]=\"field.name + '-error'\"\n             role=\"alert\">\n          <div *ngIf=\"fieldModel.errors?.required\">\n            {{ field.errorMessages?.required }}\n          </div>\n          <div *ngIf=\"fieldModel.errors?.minlength\">\n            {{ field.errorMessages?.minlength }}\n          </div>\n          <div *ngIf=\"fieldModel.errors?.maxlength\">\n            {{ field.errorMessages?.maxlength }}\n          </div>\n          <div *ngIf=\"fieldModel.errors?.email\">\n            {{ field.errorMessages?.email }}\n          </div>\n          <div *ngIf=\"fieldModel.errors?.pattern\">\n            {{ field.errorMessages?.pattern }}\n          </div>\n        </div>\n      </div>\n\n      <button type=\"submit\"\n              [disabled]=\"!form.valid\"\n              [class]=\"formConfig.submitButton?.class || 'submit-button'\"\n              [attr.aria-disabled]=\"!form.valid\">\n        {{ formConfig.submitButton?.text || 'Submit' }}\n      </button>\n    </form>\n  `,\n  styles: [`\n    .dynamic-form {\n      max-width: 600px;\n      margin: 0 auto;\n      padding: 20px;\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n    }\n\n    .form-field {\n      margin-bottom: 20px;\n    }\n\n    .form-label {\n      display: block;\n      margin-bottom: 8px;\n      font-weight: 500;\n      color: #333;\n    }\n\n    .required-marker {\n      color: #dc3545;\n      margin-left: 4px;\n    }\n\n    .form-input,\n    .form-select,\n    .form-textarea {\n      width: 100%;\n      padding: 8px 12px;\n      border: 1px solid #ced4da;\n      border-radius: 4px;\n      font-size: 16px;\n      transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    }\n\n    .form-textarea {\n      min-height: 100px;\n      resize: vertical;\n    }\n\n    .form-input:focus,\n    .form-select:focus,\n    .form-textarea:focus {\n      border-color: #80bdff;\n      outline: 0;\n      box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n    }\n\n    .error {\n      border-color: #dc3545;\n    }\n\n    .error:focus {\n      border-color: #dc3545;\n      box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n    }\n\n    .error-messages {\n      margin-top: 5px;\n      color: #dc3545;\n      font-size: 14px;\n    }\n\n    .hidden {\n      display: none;\n    }\n\n    .submit-button {\n      background-color: #007bff;\n      color: white;\n      padding: 10px 20px;\n      border: none;\n      border-radius: 4px;\n      font-size: 16px;\n      cursor: pointer;\n      transition: background-color 0.15s ease-in-out;\n    }\n\n    .submit-button:hover:not(:disabled) {\n      background-color: #0056b3;\n    }\n\n    .submit-button:disabled {\n      background-color: #6c757d;\n      cursor: not-allowed;\n      opacity: 0.65;\n    }\n\n    @media (max-width: 768px) {\n      .dynamic-form {\n        padding: 15px;\n      }\n    }\n  `]\n})\nexport class DynamicFormComponent implements OnInit {\n  @Input() formConfig!: FormConfig;\n  @Output() formSubmit = new EventEmitter<any>();\n\n  constructor(private aiValidationService: AiValidationService) {}\n\n  ngOnInit() {\n    // Apply AI-based validation rules to each field\n    this.formConfig.fields = this.formConfig.fields.map(field => \n      this.aiValidationService.suggestValidations(field)\n    );\n  }\n\n  isFieldVisible(field: FormFieldConfig): boolean {\n    if (!field.conditionalDisplay) {\n      return true;\n    }\n\n    const dependentField = this.formConfig.fields.find(\n      f => f.name === field.conditionalDisplay?.dependsOn\n    );\n\n    return dependentField?.value === field.conditionalDisplay.showWhen;\n  }\n\n  onSubmit(form: NgForm) {\n    if (form.valid) {\n      const formData = this.formConfig.fields.reduce((acc, field) => {\n        if (this.isFieldVisible(field)) {\n          acc[field.name] = field.value;\n        }\n        return acc;\n      }, {} as any);\n\n      this.formSubmit.emit(formData);\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DynamicFormComponent } from './components/dynamic-form.component';\nimport { AiValidationService } from './services/ai-validation.service';\n\n@NgModule({\n  declarations: [\n    DynamicFormComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule\n  ],\n  exports: [\n    DynamicFormComponent\n  ],\n  providers: [\n    AiValidationService\n  ]\n})\nexport class DynamicFormsModule { }\n","/*\n * Public API Surface of dynamic-forms\n */\n\nexport * from './lib/dynamic-forms.module';\nexport * from './lib/interfaces/form-field.interface';\nexport * from './lib/services/ai-validation.service';\nexport * from './lib/components/dynamic-form.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AiValidationService"],"mappings":"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"}