{"version":3,"file":"ng-dyno-form.mjs","sources":["../../../projects/ng-dyno-form/src/lib/ng-dyno-form.service.ts","../../../projects/ng-dyno-form/src/lib/ng-dyno-form.component.ts","../../../projects/ng-dyno-form/src/lib/ng-dyno-form.component.html","../../../projects/ng-dyno-form/src/lib/ng-dyno-form.module.ts","../../../projects/ng-dyno-form/src/public-api.ts","../../../projects/ng-dyno-form/src/ng-dyno-form.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgDynoFormService {\n\n  constructor() { }\n}\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\nimport { DynoFormConfig } from './ng-dyno-form-config.model';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\n\n@Component({\n  selector: 'dyno-form',\n  templateUrl: './ng-dyno-form.component.html',\n  styleUrls: ['./ng-dyno-form.component.scss']\n})\nexport class NgDynoFormComponent {\n\n  @Input() config!:DynoFormConfig[]|any;\n  @Input() mainClass:any;\n  @Input() mode:'light'|'dark'='light';\n  @Output('callBack') callBack: EventEmitter<any> = new EventEmitter();\n\n  dynamicForm:FormGroup;\n  passwordVisibility:{ [fieldName: string]: boolean } = {};\n  requiredFields:{ [fieldName: string]: boolean } = {};\n  selectList:{ [fieldName: string]: any[] } = {};\n  nonFormTypes:string[] = ['button','heading'];\n\n  constructor(private fb: FormBuilder) {\n    this.dynamicForm = this.fb.group({});\n  }\n\n  ngOnInit(): void {\n    this.buildForm();\n  }\n\n  ngOnChanges(changes: SimpleChanges){\n    if(changes['config']){\n      this.buildForm();\n    }\n  }\n\n  buildForm(){\n    this.dynamicForm = this.fb.group({});\n    if(this.config && this.config?.length){\n      this.config.forEach((field:any) => {\n        if(field.name && !this.nonFormTypes.includes(field.type)){\n          let validators = [];\n          field?.required? validators.push(Validators.required): null;\n          field?.pattern? validators.push(Validators.pattern(field.pattern)): null;\n          this.dynamicForm.addControl(field.name, new FormControl({value:field.value||null,disabled:field.disable||false}, validators));\n          if(field.type==='file') this.dynamicForm.addControl(field.name+'_name', new FormControl(field?.extra?.fileName||null));\n          if (field.type === 'password') this.passwordVisibility[field.name] = false;\n          if (field.type === 'select') this.selectList[field.name] = field?.extra?.options||[];\n          if(field.name) this.requiredFields[field.name] = field?.required||false;\n        }\n      });\n    }\n  }\n\n  get controls() { return this.dynamicForm.controls}\n\n  get allKeys() { return Object.keys(this.dynamicForm.getRawValue())}\n\n  get rawValues() { return this.dynamicForm.getRawValue()}\n\n  get formValues() { return this.dynamicForm.value}\n\n  hasCtrl = (ctrl:any) => this.allKeys.includes(ctrl);\n\n  hasAllKeys = (arr:any[]) => arr.every(elem => this.allKeys.includes(elem));\n\n  filterConfig = (key:any,val?:any,bool?:boolean) => this.config.filter((ele:any) => val ? ele[key]===val : (bool?ele[key]:!ele[key]));\n  \n  getTypeKeys = (type:any,value?:any,bool?:boolean) => (this.filterConfig(type,value,bool)).map((ele:any)=>ele['name']);\n\n  getTypeValues = (type:any,value?:any,bool?:boolean) => this.getTypeKeys(type,value,bool).reduce((acc:any, key:any) => (this.rawValues.hasOwnProperty(key)? { ...acc, [key]: this.rawValues[key] } : acc), {});\n\n\n  addValidation(validation:any[],...ctrls:string[]){\n    ctrls.forEach((ctrl:any)=>{\n      if(this.hasCtrl(ctrl)){\n        this.dynamicForm.get(ctrl)?.addValidators(validation);\n        this.dynamicForm.get(ctrl)?.updateValueAndValidity();\n        if(this.dynamicForm.get(ctrl)?.validator)this.requiredFields[ctrl]=true;\n      }\n    });\n  }\n\n  clearValidation(...ctrls:string[]){\n    ctrls.forEach((ctrl:any)=>{\n      if(this.hasCtrl(ctrl)){\n        this.dynamicForm.get(ctrl)?.clearValidators();\n        this.dynamicForm.get(ctrl)?.updateValueAndValidity();\n        this.requiredFields[ctrl] = false;\n      }\n    });\n  }\n\n  setValue(ctrl:string,value:any){\n    if(this.hasCtrl(ctrl)){\n      this.dynamicForm.get(ctrl)?.setValue(value);\n      this.dynamicForm.get(ctrl)?.updateValueAndValidity();\n    }\n  }\n\n  patchValue(obj:any){\n    if(obj && this.hasAllKeys(Object.keys(obj))){\n      this.dynamicForm.patchValue(obj);\n    }\n  }\n\n  resetValue(type:'section'|'all',...ctrls:any){\n    if(type==='section'){\n      let section = arguments.length===2?ctrls[0]:'' ;\n      let controls = this.filterConfig('section',section?section:undefined,false).map((e:any)=>e.name);\n      controls?.forEach((ctrl:any)=>{\n        this.setValue(ctrl,null);\n      })\n    }\n    else{\n      if(ctrls?.length===1 && !ctrls[0]) this.dynamicForm.reset();\n      else{\n        ctrls.forEach((ctrl:any)=>{\n          if(this.hasCtrl(ctrl)) this.setValue(ctrl,null);\n        })\n      }\n    }\n  }\n\n  disableField(...ctrls:any){\n    if(ctrls?.length===1 && ctrls[0]==='all') ctrls = Object.keys(this.dynamicForm.getRawValue());\n    ctrls.forEach((ctrl:any)=>{\n      if(this.hasCtrl(ctrl)){\n        this.dynamicForm.get(ctrl)?.disable();\n      }\n    })\n  }\n\n  enableField(...ctrls:any){\n    if(ctrls?.length===1 && ctrls[0]==='all') ctrls = Object.keys(this.dynamicForm.getRawValue());\n    ctrls.forEach((ctrl:any)=>{\n      if(this.hasCtrl(ctrl)){\n        this.dynamicForm.get(ctrl)?.enable();\n      }\n    })\n  }\n\n  sectionValidator(section?:string){\n    if(section||section===''){\n      let ctrls = this.filterConfig('section',section?section:undefined,false).map((e:any)=>e.name);\n      ctrls?.forEach((ctrl:any)=>{\n        this.dynamicForm.get(ctrl)?.markAsTouched();\n      })\n      return ctrls?.every((ctrl:any)=>this.dynamicForm?.get(ctrl)?.valid);\n    } else{\n      this.dynamicForm.markAllAsTouched();\n      return this.dynamicForm.valid;\n    }\n  }\n\n  sectionSubmit(section:string){\n    let valid = this.sectionValidator(section);\n    return {\n      valid : valid,\n      values : (section||section==='') ? this.getTypeValues('section',section?section:undefined,false) : this.rawValues\n    }\n  }\n\n  eventCall(e:any,type:string,section:any,name:string,submit?:any){\n    let values = null;\n    if(submit){\n      values = this.sectionSubmit(section);\n    }\n    this.callBack.emit({\n      event : submit?values:e,\n      type: type,\n      section: section,\n      name : name\n    });\n  }\n\n  onFileSelected(event:any,section:any,name:string){\n    let config = this.config.find((e:any)=>e.name===name);\n    const file = event.target.files[0];\n    if (file && config && (config?.extra?.format?.includes(file.type)||!config?.extra?.format)) {\n      const reader = new FileReader();\n        reader.onload = (e: any) => {\n          this.setValue(name,e.target.result);\n          this.setValue(name+'_name',file.name);\n        };\n        reader.readAsDataURL(file);\n    } else{\n      this.setValue(name,'');\n      this.setValue(name+'_name','');\n      event.target.value=null;\n    }\n    this.eventCall(event,'file',section,name);\n  }\n  \n}","<!-- Form Element -->\r\n<form [formGroup]=\"dynamicForm\" [attr.data-bs-theme]=\"mode\">\r\n  <div class=\"{{ mainClass }}\">\r\n    <!-- Loop through form fields -->\r\n    <ng-container *ngFor=\"let field of config; let i = index\">\r\n      <div *ngIf=\"!field.condition || field.condition(dynamicForm.value)\" class=\"{{ field.parentClass }} {{['file',\r\n      'password'].includes(field.type)?'position-relative':''}}\">\r\n        <!-- Label for form types non floating -->\r\n        <label *ngIf=\"!nonFormTypes.includes(field.type) && field.label && !field.floatLabel\" class=\"{{ field.labelClass }}\">\r\n          {{ field.label }}\r\n          <span style=\"color: red;\" *ngIf=\"requiredFields[field.name] && !field.hideAsterisk\">*</span>\r\n        </label>\r\n        <!-- Check for checkbox type -->\r\n        <ng-container *ngIf=\"field.type === 'checkbox'\">\r\n          <input\r\n            [formControlName]=\"field.name\"\r\n            type=\"checkbox\"\r\n            class=\"{{ field.class }}\"\r\n            (change)=\"eventCall($event, 'change', field?.section, field.name)\"\r\n          />\r\n        </ng-container>\r\n        <!-- Input fields for text, number, email, password -->\r\n        <ng-container *ngIf=\"['text', 'number', 'email', 'password'].includes(field.type)\">\r\n          <input required\r\n            [formControlName]=\"field.name\" [placeholder]=\"field?.placeholder||''\"\r\n            [type]=\"field.type === 'password' ? (passwordVisibility[field.name] ? 'text' : 'password') : field.type\"\r\n            class=\"{{ field.class }} {{field.type === 'password'?'password':''}}\"\r\n            (input)=\"eventCall($event, 'input', field?.section, field.name)\"\r\n            (focus)=\"eventCall($event, 'focus', field?.section, field.name)\"\r\n            (blur)=\"eventCall($event, 'input', field?.section, field.name)\"\r\n          />\r\n          <span class=\"view-icon\" *ngIf=\"field.type === 'password' && !field?.extra?.hideEye\" (click)=\"passwordVisibility[field.name] = !passwordVisibility[field.name]\"\r\n            [ngClass]=\"!passwordVisibility[field.name] ? 'eye' : 'eye-slash'\" style=\"cursor: pointer;\">\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" *ngIf=\"!passwordVisibility[field.name]\" viewBox=\"0 0 256 256\"><g fill=\"currentColor\"><path d=\"M128 56c-80 0-112 72-112 72s32 72 112 72s112-72 112-72s-32-72-112-72Zm0 112a40 40 0 1 1 40-40a40 40 0 0 1-40 40Z\" opacity=\".2\"/><path d=\"M247.31 124.76c-.35-.79-8.82-19.58-27.65-38.41C194.57 61.26 162.88 48 128 48S61.43 61.26 36.34 86.35C17.51 105.18 9 124 8.69 124.76a8 8 0 0 0 0 6.5c.35.79 8.82 19.57 27.65 38.4C61.43 194.74 93.12 208 128 208s66.57-13.26 91.66-38.34c18.83-18.83 27.3-37.61 27.65-38.4a8 8 0 0 0 0-6.5ZM128 192c-30.78 0-57.67-11.19-79.93-33.25A133.47 133.47 0 0 1 25 128a133.33 133.33 0 0 1 23.07-30.75C70.33 75.19 97.22 64 128 64s57.67 11.19 79.93 33.25A133.46 133.46 0 0 1 231.05 128c-7.21 13.46-38.62 64-103.05 64Zm0-112a48 48 0 1 0 48 48a48.05 48.05 0 0 0-48-48Zm0 80a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z\"/></g></svg>\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" *ngIf=\"passwordVisibility[field.name]\" viewBox=\"0 0 256 256\"><g fill=\"currentColor\"><path d=\"M128 56c-80 0-112 72-112 72s32 72 112 72s112-72 112-72s-32-72-112-72Zm0 112a40 40 0 1 1 40-40a40 40 0 0 1-40 40Z\" opacity=\".2\"/><path d=\"M53.92 34.62a8 8 0 1 0-11.84 10.76l19.24 21.17C25 88.84 9.38 123.2 8.69 124.76a8 8 0 0 0 0 6.5c.35.79 8.82 19.57 27.65 38.4C61.43 194.74 93.12 208 128 208a127.11 127.11 0 0 0 52.07-10.83l22 24.21a8 8 0 1 0 11.84-10.76Zm47.33 75.84l41.67 45.85a32 32 0 0 1-41.67-45.85ZM128 192c-30.78 0-57.67-11.19-79.93-33.25A133.16 133.16 0 0 1 25 128c4.69-8.79 19.66-33.39 47.35-49.38l18 19.75a48 48 0 0 0 63.66 70l14.73 16.2A112 112 0 0 1 128 192Zm6-95.43a8 8 0 0 1 3-15.72a48.16 48.16 0 0 1 38.77 42.64a8 8 0 0 1-7.22 8.71a6.39 6.39 0 0 1-.75 0a8 8 0 0 1-8-7.26A32.09 32.09 0 0 0 134 96.57Zm113.28 34.69c-.42.94-10.55 23.37-33.36 43.8a8 8 0 1 1-10.67-11.92a132.77 132.77 0 0 0 27.8-35.14a133.15 133.15 0 0 0-23.12-30.77C185.67 75.19 158.78 64 128 64a118.37 118.37 0 0 0-19.36 1.57A8 8 0 1 1 106 49.79A134 134 0 0 1 128 48c34.88 0 66.57 13.26 91.66 38.35c18.83 18.83 27.3 37.62 27.65 38.41a8 8 0 0 1 0 6.5Z\"/></g></svg>\r\n          </span>\r\n        </ng-container>\r\n        <!-- Textarea field -->\r\n        <ng-container *ngIf=\"field.type === 'textarea'\">\r\n          <textarea required\r\n            [formControlName]=\"field.name\"\r\n            class=\"{{ field.class }}\" [placeholder]=\"field?.placeholder||''\"\r\n            rows=\"{{ field?.extra?.rows || 1 }}\"\r\n            (input)=\"eventCall($event, 'input', field?.section, field.name)\"\r\n            (focus)=\"eventCall($event, 'focus', field?.section, field.name)\"\r\n            (blur)=\"eventCall($event, 'input', field?.section, field.name)\"\r\n          ></textarea>\r\n        </ng-container>\r\n        <!-- Select dropdown -->\r\n        <ng-container *ngIf=\"field.type === 'select'\">\r\n          <!-- Dropdown component with various event listeners -->\r\n          <ng-select #select\r\n            [formControlName]=\"field.name\"\r\n            class=\"{{ field.class }}\" [placeholder]=\"field?.placeholder||''\"\r\n            [items]=\"selectList[field.name]\"\r\n            [multiple]=\"field?.extra?.multi || false\"\r\n            [bindLabel]=\"field?.extra?.label || ''\"\r\n            [bindValue]=\"field?.extra?.key || ''\"\r\n            [searchable]=\"false\"\r\n            (change)=\"eventCall($event, 'change', field?.section, field.name)\"\r\n            (close)=\"eventCall($event, 'close', field?.section, field.name)\"\r\n            (open)=\"eventCall($event, 'focus', field?.section, field.name)\"\r\n            (clear)=\"eventCall($event, 'clear', field?.section, field.name)\"\r\n            (focus)=\"eventCall($event, 'focus', field?.section, field.name)\"\r\n            (search)=\"eventCall($event, 'search', field?.section, field.name)\"\r\n            (blur)=\"eventCall($event, 'blur', field?.section, field.name)\"\r\n          >\r\n            <!-- Custom search input -->\r\n            <ng-template ng-header-tmp>\r\n              <input #check style=\"width: 100%; line-height: 24px;\" type=\"text\" name=\"type\" placeholder=\"Search Key\"\r\n                (input)=\"select.filter(check.value)\" />\r\n            </ng-template>\r\n          </ng-select>\r\n        </ng-container>\r\n        <!-- Heading -->\r\n        <ng-container *ngIf=\"field.type === 'heading'\">\r\n          <div class=\"{{ field.class }}\" [innerHTML]=\"field.label\"></div>\r\n        </ng-container>\r\n        <!-- Radio buttons -->\r\n        <ng-container *ngIf=\"field.type === 'radio'\">\r\n          <div class=\"{{ field?.extra?.customClass }}\">\r\n            <ng-container *ngFor=\"let item of field?.extra?.options || []\">\r\n              <div class=\"{{ field.class }}\">\r\n                <input\r\n                  [formControlName]=\"field.name\"\r\n                  type=\"radio\"\r\n                  id=\"radio-{{ i }}\"\r\n                  class=\"{{ field.class }}-input\"\r\n                  [value]=\"field?.extra?.key ? item[field.extra?.key || ''] : item\"\r\n                  (change)=\"eventCall($event, 'change', field?.section, field.name)\"\r\n                />\r\n                <label class=\"{{ field.class }}-label\" for=\"radio-{{ i }}\">\r\n                  {{ field?.extra?.label ? item[field.extra?.label || ''] : item }}\r\n                </label>\r\n              </div>\r\n            </ng-container>\r\n          </div>\r\n        </ng-container>\r\n        <!-- Date input -->\r\n        <ng-container *ngIf=\"field.type === 'date'\">\r\n          <input type=\"text\" required\r\n            [formControlName]=\"field.name\"\r\n            class=\"{{ field.class }}\"\r\n            [placeholder]=\"field?.placeholder||''\"\r\n            [bsConfig]=\"{\r\n              dateInputFormat: field?.extra?.format || 'DD-MM-YYYY',\r\n              adaptivePosition: true,\r\n              containerClass: field?.extra?.theme || 'theme-dark-blue',\r\n              minMode: field?.extra?.mode || 'day'\r\n            }\"\r\n            [minDate]=\"field?.extra?.minDate || undefined\"\r\n            [maxDate]=\"field?.extra?.maxDate || undefined\"\r\n            (bsValueChange)=\"eventCall($event, 'date', field?.section, field.name)\"\r\n            bsDatepicker>\r\n        </ng-container>\r\n        <!-- Date range input -->\r\n        <ng-container *ngIf=\"field.type === 'daterange'\">\r\n          <input type=\"text\" required\r\n            [formControlName]=\"field.name\"\r\n            class=\"{{ field.class }}\"\r\n            [placeholder]=\"field?.placeholder||''\"\r\n            [bsConfig]=\"{\r\n              rangeInputFormat: field?.extra?.format || 'DD-MM-YYYY',\r\n              adaptivePosition: true,\r\n              containerClass: field?.extra?.theme || 'theme-dark-blue',\r\n              minMode: field?.extra?.mode || 'day'\r\n            }\"\r\n            [minDate]=\"field?.extra?.minDate || undefined\"\r\n            [maxDate]=\"field?.extra?.maxDate || undefined\"\r\n            (bsValueChange)=\"eventCall($event, 'date', field?.section, field.name)\"\r\n            bsDaterangepicker>\r\n        </ng-container>\r\n        <!-- File input -->\r\n        <ng-container *ngIf=\"field.type === 'file'\">\r\n          <input\r\n            [type]=\"'file'\"\r\n            id=\"fileInput-{{ i }}\"\r\n            class=\"{{ field.class }} {{ field?.extra?.customText ? 'd-none' : '' }}\"\r\n            (change)=\"onFileSelected($event, field?.section, field.name)\"\r\n            [accept]=\"field?.extra?.format\"\r\n            [disabled]=\"field.disable\">\r\n          <label\r\n            for=\"fileInput-{{ i }}\"\r\n            class=\"{{ field?.extra?.customClass }} {{ field.disable ? 'disabled' : '' }}\"\r\n            *ngIf=\"field?.extra?.customClass\">\r\n            {{ dynamicForm.get(field.name + '_name')?.value ? dynamicForm.get(field.name + '_name')?.value : (field?.extra?.customText || 'No file chosen') }}\r\n          </label>\r\n        </ng-container>\r\n        <!-- Button -->\r\n        <ng-container *ngIf=\"field.type === 'button'\">\r\n          <button class=\"{{ field.class }}\" (click)=\"eventCall($event, 'click', field?.section, field.name, field?.extra?.submit || false)\">\r\n            {{ field.label }}\r\n          </button>\r\n        </ng-container>\r\n        <!-- Label for form types floating -->\r\n        <label *ngIf=\"!nonFormTypes.includes(field.type) && field.label && field.floatLabel\" class=\"{{ field.labelClass }}\">\r\n          {{ field.label }}\r\n          <span style=\"color: red;\" *ngIf=\"requiredFields[field.name] && !field.hideAsterisk\">*</span>\r\n        </label>\r\n        <!-- Validation error messages -->\r\n        <div *ngIf=\"!controls[field.name]?.valid && controls[field.name]?.touched && field?.extra?.validationMessages\"\r\n          class=\"validation-error\">\r\n          <span class=\"text-danger\" *ngIf=\"controls[field.name]?.errors?.['required']\">\r\n            {{ field?.extra?.validationMessages?.required }}\r\n          </span>\r\n          <span class=\"text-danger\" *ngIf=\"controls[field.name]?.errors?.['pattern']\">\r\n            {{ field?.extra?.validationMessages?.pattern }}\r\n          </span>\r\n        </div>\r\n      </div>\r\n    </ng-container>\r\n    <ng-content></ng-content>\r\n  </div>\r\n</form>\r\n","import { NgModule } from '@angular/core';\nimport { NgDynoFormComponent } from './ng-dyno-form.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\n\n\n@NgModule({\n  declarations: [\n    NgDynoFormComponent\n  ],\n  imports: [\n    CommonModule,FormsModule,ReactiveFormsModule,BrowserModule,BrowserAnimationsModule, BsDatepickerModule, NgSelectModule\n  ],\n  exports: [\n    NgDynoFormComponent\n  ]\n})\nexport class NgDynoFormModule { }\n","/*\n * Public API Surface of ng-dyno-form\n */\n\nexport * from './lib/ng-dyno-form.service';\nexport * from './lib/ng-dyno-form.component';\nexport * from './lib/ng-dyno-form.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}