{"version":3,"file":"yyasinaslan-easyform.mjs","sources":["../../../projects/easy-form/src/lib/interfaces/advanced-control-types.ts","../../../projects/easy-form/src/lib/interfaces/basic-control-types.ts","../../../projects/easy-form/src/lib/easy-form-field.ts","../../../projects/easy-form/src/lib/easy-form-generator.ts","../../../projects/easy-form/src/lib/easy-form.ts","../../../projects/easy-form/src/lib/tokens/easy-form-config.ts","../../../projects/easy-form/src/lib/pipes/observe.ts","../../../projects/easy-form/src/lib/easy-form-control.ts","../../../projects/easy-form/src/lib/components/ef-errors/ef-errors.component.ts","../../../projects/easy-form/src/lib/components/ef-errors/ef-errors.component.html","../../../projects/easy-form/src/lib/helpers/component-helper.ts","../../../projects/easy-form/src/lib/directives/form-field.directive.ts","../../../projects/easy-form/src/lib/directives/bind-events.directive.ts","../../../projects/easy-form/src/lib/controls/ef-textarea/ef-textarea.component.ts","../../../projects/easy-form/src/lib/controls/ef-textarea/ef-textarea.component.html","../../../projects/easy-form/src/lib/controls/ef-select/ef-select.component.ts","../../../projects/easy-form/src/lib/controls/ef-select/ef-select.component.html","../../../projects/easy-form/src/lib/controls/ef-checkbox/ef-checkbox.component.ts","../../../projects/easy-form/src/lib/controls/ef-checkbox/ef-checkbox.component.html","../../../projects/easy-form/src/lib/controls/ef-radio/ef-radio.component.ts","../../../projects/easy-form/src/lib/controls/ef-radio/ef-radio.component.html","../../../projects/easy-form/src/lib/controls/ef-switch/ef-switch.component.ts","../../../projects/easy-form/src/lib/controls/ef-switch/ef-switch.component.html","../../../projects/easy-form/src/lib/controls/ef-text/ef-text.component.ts","../../../projects/easy-form/src/lib/controls/ef-text/ef-text.component.html","../../../projects/easy-form/src/lib/easy-form/easy-form.component.ts","../../../projects/easy-form/src/lib/easy-form/easy-form.component.html","../../../projects/easy-form/src/lib/directives/array-item-template.directive.ts","../../../projects/easy-form/src/lib/directives/array-wrapper-template.directive.ts","../../../projects/easy-form/src/lib/components/ef-form-array/ef-form-array.component.ts","../../../projects/easy-form/src/lib/components/ef-form-array/ef-form-array.component.html","../../../projects/easy-form/src/public-api.ts","../../../projects/easy-form/src/yyasinaslan-easyform.ts"],"sourcesContent":["export enum AdvancedControlTypes {\r\n  // Form group\r\n  Group = \"group\",\r\n\r\n  // Form array\r\n  Array = \"array\",\r\n\r\n  // Form array with single control\r\n  ArraySimple = \"arraySimple\",\r\n}\r\n","export enum BasicControlTypes {\r\n  // Textbox\r\n  Text = \"text\",\r\n\r\n  // Textarea\r\n  TextArea = \"textarea\",\r\n\r\n  // Checkbox with label\r\n  Checkbox = \"checkbox\",\r\n\r\n  // Checkbox group\r\n  CheckboxGroup = \"checkboxGroup\",\r\n\r\n  // Radio group\r\n  Radio = \"radio\",\r\n\r\n  // Select\r\n  Select = \"select\",\r\n  Combobox = \"combobox\",\r\n  Date = \"date\",\r\n  Number = \"number\",\r\n  Time = \"time\",\r\n  DateTime = \"datetime\",\r\n\r\n  // Switch with label\r\n  Switch = \"switch\",\r\n}\r\n","import {FormFieldBase} from \"./interfaces/form-field\";\r\nimport {BasicControlTypes} from \"./interfaces/basic-control-types\";\r\nimport {AdvancedControlTypes} from \"./interfaces/advanced-control-types\";\r\nimport {Validation} from \"./interfaces/validation\";\r\nimport {ValidatorFn, Validators} from \"@angular/forms\";\r\nimport {ObservableString} from \"./interfaces/observable-string\";\r\nimport {SelectOptions} from \"./interfaces/select-options\";\r\nimport {FormSchema} from \"./interfaces/form-schema\";\r\n\r\n\r\nexport class EasyFormField<FormType = any> implements FormFieldBase<FormType> {\r\n\r\n  // Optional field id\r\n  id?: string;\r\n\r\n  // Field label\r\n  label?: ObservableString;\r\n\r\n  // Hint\r\n  hint?: string;\r\n\r\n  /**\r\n   * The type of control to be rendered\r\n   */\r\n  controlType: string | BasicControlTypes | AdvancedControlTypes = '';\r\n\r\n  validations: Record<string, Validation> = {};\r\n\r\n  props?: Record<string, any>;\r\n\r\n  initialValue?: FormType;\r\n\r\n  options?: SelectOptions<any>;\r\n\r\n  // transformer?: {\r\n  //   toForm?: (value: RemoteType) => FormType;\r\n  //   fromForm?: (value: FormType) => RemoteType;\r\n  // }\r\n\r\n  // Child schema for array or group\r\n  // schema?: EasyFormField<FormType> | Record<keyof FormType, EasyFormField>;\r\n  schema?: EasyFormField<FormType> | FormSchema<FormType>;\r\n\r\n  constructor(options: FormFieldBase<FormType>) {\r\n    Object.assign(this, options);\r\n  }\r\n\r\n  /**\r\n   * Add a required validation to the field\r\n   * @param message\r\n   */\r\n  required(message: ObservableString) {\r\n    if (this.validations && this.validations[\"required\"]) return this\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"required\"] = {validator: Validators.required, message};\r\n\r\n    return this;\r\n  }\r\n\r\n\r\n  /**\r\n   * Add a requiredTrue validation to the field\r\n   * @param message\r\n   */\r\n  requiredTrue(message: ObservableString) {\r\n    if (this.validations && this.validations[\"required\"]) return this\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"required\"] = {validator: Validators.requiredTrue, message};\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Add a minLength validation to the field\r\n   * @param minLength\r\n   * @param message\r\n   */\r\n  minLength(minLength: number, message: ObservableString) {\r\n    if (this.validations && this.validations[\"minlength\"]) return this;\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"minlength\"] = {validator: Validators.minLength(minLength), message};\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Add a maxLength validation to the field\r\n   * @param maxLength\r\n   * @param message\r\n   */\r\n  maxLength(maxLength: number, message: ObservableString) {\r\n    if (this.validations && this.validations[\"maxlength\"]) return this;\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"maxlength\"] = {validator: Validators.maxLength(maxLength), message};\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Add an email validation to the field\r\n   * @param message\r\n   */\r\n  email(message: ObservableString) {\r\n    if (this.validations && this.validations[\"email\"]) return this;\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"email\"] = {validator: Validators.email, message};\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Add a pattern validation to the field\r\n   * @param pattern\r\n   * @param message\r\n   */\r\n  pattern(pattern: string | RegExp, message: ObservableString) {\r\n    if (this.validations && this.validations[\"pattern\"]) return this;\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"pattern\"] = {validator: Validators.pattern(pattern), message};\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Add a min validation to the field\r\n   * @param min\r\n   * @param message\r\n   */\r\n  min(min: number, message: ObservableString) {\r\n    if (this.validations && this.validations[\"min\"]) return this;\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"min\"] = {validator: Validators.min(min), message};\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Add a max validation to the field\r\n   * @param max\r\n   * @param message\r\n   */\r\n  max(max: number, message: ObservableString) {\r\n    if (this.validations && this.validations[\"max\"]) return this;\r\n\r\n    if (!this.validations) this.validations = {};\r\n\r\n    this.validations[\"max\"] = {validator: Validators.max(max), message};\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Add a custom validation to the field\r\n   * @param validator\r\n   * @param messages\r\n   */\r\n  customValidator(validator: ValidatorFn, messages: Record<string, ObservableString>) {\r\n    if (!this.validations) this.validations = {};\r\n\r\n    Object.keys(messages).forEach(key => {\r\n      this.validations[key] = {validator, message: messages[key]};\r\n    });\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set the initial value of the field\r\n   * @param value\r\n   */\r\n  default(value: FormType) {\r\n    this.initialValue = value;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Transform the value\r\n   * ! Not implemented yet\r\n   * @param toForm\r\n   * @notImplemented\r\n   */\r\n  // toForm(toForm: (value: RemoteType) => FormType) {\r\n  //   if (!this.transformer) this.transformer = {};\r\n  //   this.transformer.toForm = toForm;\r\n  //   return this;\r\n  // }\r\n\r\n  /**\r\n   * Transform the value\r\n   * ! Not implemented yet\r\n   * @param fromForm\r\n   * @notImplemented\r\n   */\r\n  // fromForm(fromForm: (value: FormType) => RemoteType) {\r\n  //   if (!this.transformer) this.transformer = {};\r\n  //   this.transformer.fromForm = fromForm;\r\n  //   return this;\r\n  // }\r\n}\r\n","import {FormFieldBase,} from \"./interfaces/form-field\";\r\nimport {ValidatorFn} from \"@angular/forms\";\r\nimport {BasicControlTypes} from \"./interfaces/basic-control-types\";\r\nimport {AdvancedControlTypes} from \"./interfaces/advanced-control-types\";\r\nimport {EasyFormField} from \"./easy-form-field\";\r\nimport {ObservableString} from \"./interfaces/observable-string\";\r\nimport {SelectOptions} from \"./interfaces/select-options\";\r\nimport {FormSchema} from \"./interfaces/form-schema\";\r\n\r\ninterface EfDefaultValidations {\r\n  required: (message: string) => FormFieldWithValidation;\r\n  requiredTrue: (message: string) => FormFieldWithValidation;\r\n  minLength: (minlength: number, message: string) => FormFieldWithValidation;\r\n  maxLength: (length: number, message: string) => FormFieldWithValidation;\r\n  email: (message: string) => FormFieldWithValidation;\r\n  pattern: (pattern: string | RegExp, message: string) => FormFieldWithValidation;\r\n  min: (min: number, message: string) => FormFieldWithValidation;\r\n  max: (max: number, message: string) => FormFieldWithValidation;\r\n  custom: (key: string, validator: ValidatorFn, message: string) => FormFieldWithValidation;\r\n}\r\n\r\ntype FormFieldWithValidation = FormFieldBase & EfDefaultValidations;\r\n\r\nexport type GeneratorBaseOptions = Omit<FormFieldBase, \"label\" | \"validations\">;\r\n\r\nexport abstract class EasyFormGenerator {\r\n\r\n  public static text<ValueType = string>(value: ValueType, label?: ObservableString, configs?: GeneratorBaseOptions) {\r\n    return new EasyFormField<ValueType>({...configs, label, initialValue: value, controlType: \"text\"});\r\n  }\r\n\r\n  public static textarea<ValueType = string>(value: ValueType, label?: ObservableString, configs?: GeneratorBaseOptions) {\r\n    return new EasyFormField<ValueType>({...configs, label, initialValue: value, controlType: \"textarea\"});\r\n  }\r\n\r\n  public static select<ValueType = any>(value: ValueType, options: SelectOptions<any>, label?: ObservableString, configs?: GeneratorBaseOptions) {\r\n    const vc = new EasyFormField<ValueType>({\r\n      ...configs,\r\n      label,\r\n      initialValue: value,\r\n      controlType: BasicControlTypes.Select\r\n    });\r\n    vc.options = options;\r\n    return vc;\r\n  }\r\n\r\n  public static checkbox<ValueType = boolean>(value: ValueType, label?: ObservableString, configs?: GeneratorBaseOptions) {\r\n    return new EasyFormField<ValueType>({\r\n      ...configs,\r\n      label,\r\n      initialValue: value,\r\n      controlType: BasicControlTypes.Checkbox\r\n    });\r\n  }\r\n\r\n  public static switch<ValueType = any>(value: ValueType, label?: ObservableString, configs?: GeneratorBaseOptions) {\r\n    return new EasyFormField<ValueType>({\r\n      ...configs,\r\n      label,\r\n      initialValue: value,\r\n      controlType: BasicControlTypes.Switch\r\n    });\r\n  }\r\n\r\n  public static radio<ValueType = any>(value: ValueType, options: SelectOptions<any>, label?: ObservableString, configs?: GeneratorBaseOptions) {\r\n    const vc = new EasyFormField<ValueType>({\r\n      ...configs,\r\n      label,\r\n      initialValue: value,\r\n      controlType: BasicControlTypes.Radio\r\n    });\r\n    vc.options = options;\r\n    return vc;\r\n  }\r\n\r\n  public static custom<ValueType = any>(value: ValueType, type: string, label?: ObservableString, configs?: GeneratorBaseOptions) {\r\n    return new EasyFormField<ValueType>({...configs, label, initialValue: value, controlType: type});\r\n  }\r\n\r\n  public static group<TValue>(schema: FormSchema<TValue>, configs?: GeneratorBaseOptions): EasyFormField<TValue> {\r\n    return new EasyFormField<TValue>({\r\n      ...configs,\r\n      controlType: AdvancedControlTypes.Group,\r\n      schema: schema\r\n    });\r\n  }\r\n\r\n  public static array<TItem, TArray extends TItem[]>(schema: EasyFormField<TItem> | FormSchema<TItem>, configs?: GeneratorBaseOptions) {\r\n    if (schema instanceof EasyFormField) {\r\n      return new EasyFormField<TArray>({\r\n        ...configs,\r\n        controlType: AdvancedControlTypes.ArraySimple,\r\n        schema: schema\r\n      });\r\n    }\r\n    return new EasyFormField<TArray>({\r\n      ...configs,\r\n      controlType: AdvancedControlTypes.Array,\r\n      schema: schema\r\n    });\r\n  }\r\n}\r\n","import {FormSchema} from \"./interfaces/form-schema\";\r\nimport {Validation} from \"./interfaces/validation\";\r\nimport {Signal} from \"@angular/core\";\r\nimport {Observable} from \"rxjs\";\r\nimport {FormArray, FormControl, FormGroup} from \"@angular/forms\";\r\nimport {BasicControlTypes} from \"./interfaces/basic-control-types\";\r\nimport {AdvancedControlTypes} from \"./interfaces/advanced-control-types\";\r\nimport {EasyFormGenerator} from \"./easy-form-generator\";\r\nimport {EasyFormControlComponent, LazyLoadingComponent} from \"./tokens/easy-form-config\";\r\nimport {EasyFormField} from \"./easy-form-field\";\r\n\r\nexport interface EasyFormOptions {\r\n  showErrors?: 'submitted' | 'touched' | 'dirty' | 'always' | 'never';\r\n  // Form based validations\r\n\r\n  validations?: Record<string, Validation>;\r\n  // Disabled state of the form\r\n\r\n  disabled?: boolean | Signal<boolean> | Observable<boolean>;\r\n  // Form field components\r\n\r\n  components?: Record<string, EasyFormControlComponent | LazyLoadingComponent>\r\n}\r\n\r\nexport type InferValueType<Schema extends FormSchema> = { [key in keyof Schema]: Schema[key]['initialValue'] };\r\n\r\nexport class EasyForm<ValueType = any> extends EasyFormGenerator {\r\n\r\n  /**\r\n   * Reactivity of actual form is managed by angular reactive form\r\n   */\r\n  public formGroup: FormGroup;\r\n\r\n  public schema!: FormSchema<ValueType>;\r\n  // default options\r\n  public options: EasyFormOptions = {\r\n    showErrors: 'submitted',\r\n    components: {}\r\n  };\r\n\r\n  constructor(schema: FormSchema<ValueType>, options?: EasyFormOptions) {\r\n    super();\r\n    this.schema = schema;\r\n    this.options = {...this.options, ...options};\r\n    this.formGroup = this.createFormGroup(this.schema);\r\n  }\r\n\r\n  get invalid() {\r\n    return this.formGroup.invalid;\r\n  }\r\n\r\n  get valid() {\r\n    return this.formGroup.valid;\r\n  }\r\n\r\n  get value(): ValueType {\r\n    return this.formGroup.value;\r\n  }\r\n\r\n  get valueChanges(): Observable<ValueType> {\r\n    return this.formGroup.valueChanges;\r\n  }\r\n\r\n  /**\r\n   * Create a new instance of EasyForm\r\n   * @param schema\r\n   * @param options\r\n   */\r\n  public static create<T = any>(schema: FormSchema<T>, options?: EasyFormOptions) {\r\n    return new EasyForm<T>(schema, options);\r\n  }\r\n\r\n  /**\r\n   * Traverse through schema and get definition\r\n   * @param path\r\n   */\r\n  getSchema(path: string | Array<string | number>) {\r\n    const normalisedPath = typeof path == 'string' ? path.split('.') : path;\r\n    if (!path || path.length == 0) {\r\n      return null;\r\n    }\r\n    return this._getSchemaWithPath(normalisedPath, this.schema);\r\n  }\r\n\r\n  /**\r\n   * Disable all form\r\n   */\r\n  disable() {\r\n    this.formGroup.disable()\r\n  }\r\n\r\n  /**\r\n   * Enable all form\r\n   */\r\n  enable() {\r\n    this.formGroup.enable()\r\n  }\r\n\r\n  getComponentType(type: BasicControlTypes | string) {\r\n    if (!this.options.components) {\r\n      return null;\r\n    }\r\n    const c = this.options.components[type];\r\n    if (!c) {\r\n      return null;\r\n    }\r\n    return c;\r\n  }\r\n\r\n  getControl<ControlType = FormControl>(path: string | Array<string | number>) {\r\n    return this.formGroup.get(path) as ControlType;\r\n  }\r\n\r\n  getArrayControls(path: string | Array<string | number>) {\r\n    const arrayControl = this.getControl<FormArray>(path);\r\n    if (!arrayControl) return [];\r\n    return arrayControl.controls as FormControl[];\r\n  }\r\n\r\n  getValue<ValueType = any>(path?: string | Array<string | number>): ValueType {\r\n    if (path) {\r\n      return this.formGroup.get(path)?.value;\r\n    }\r\n    return this.formGroup.value;\r\n  }\r\n\r\n  getRawValue<ValueType = any>(path?: string | Array<string | number>): ValueType {\r\n    if (path) {\r\n      return this.formGroup.get(path)?.getRawValue();\r\n    }\r\n    return this.formGroup.getRawValue();\r\n  }\r\n\r\n  setValue(value: any, path?: string | Array<string | number>) {\r\n    if (path) {\r\n      this.formGroup.get(path)?.setValue(value);\r\n      return;\r\n    }\r\n    this.formGroup.setValue(value);\r\n  }\r\n\r\n  patchValue(value: any, path?: string | Array<string | number>) {\r\n    if (path) {\r\n      this.formGroup.get(path)?.patchValue(value);\r\n      return;\r\n    }\r\n    this.formGroup.patchValue(value);\r\n  }\r\n\r\n  addToArray(path: string, value: any) {\r\n    const arr = this.formGroup.get(path) as FormArray;\r\n    const schema = this.getSchema(path);\r\n    if (!schema) {\r\n      throw new Error(`Cannot find form schema for ${path}`);\r\n    }\r\n    if (!arr) {\r\n      throw new Error(`Cannot find form array for ${path}`);\r\n    }\r\n\r\n    if (schema.controlType === AdvancedControlTypes.Array) {\r\n      const g = this.createFormGroup(schema.schema as Record<string, EasyFormField>, value);\r\n      arr.push(g);\r\n    } else if (schema.controlType === AdvancedControlTypes.ArraySimple) {\r\n      const arrayField = schema.schema as EasyFormField;\r\n      const validations = arrayField.validations ?? {};\r\n      const control = new FormControl(value, this.createValidations(validations));\r\n      arr.push(control);\r\n    }\r\n\r\n  }\r\n\r\n  removeFromArray(path: string, index: any) {\r\n    const arr = this.formGroup.get(path) as FormArray;\r\n    if (arr) {\r\n      arr.removeAt(index)\r\n    }\r\n  }\r\n\r\n  private createFormGroup(schema: FormSchema, initialValue?: any, validations?: EasyFormField['validations']): FormGroup {\r\n    const group = new FormGroup({});\r\n\r\n    for (const key in schema) {\r\n      const field = schema[key];\r\n      if (field.controlType == 'group') {\r\n        const g = this.createFormGroup(field.schema as Record<string, EasyFormField>, field.initialValue, field.validations);\r\n        group.addControl(key, g);\r\n      } else if (field.controlType == 'array') {\r\n        const a = this.createFormArray(field.schema as Record<string, EasyFormField>, field.initialValue, field.validations);\r\n        group.addControl(key, a);\r\n      } else if (field.controlType == 'arraySimple') {\r\n        const a = this.createSimpleFormArray(field as any, field.initialValue, field.validations);\r\n        group.addControl(key, a);\r\n      } else {\r\n        const control = new FormControl(field.initialValue, field.validations ? this.createValidations(field.validations) : []);\r\n        group.addControl(key, control);\r\n      }\r\n    }\r\n\r\n    if (validations) {\r\n      group.addValidators(this.createValidations(validations));\r\n    }\r\n\r\n    if (initialValue) {\r\n      group.patchValue(initialValue);\r\n    }\r\n\r\n    return group;\r\n  }\r\n\r\n  private createFormArray(schema: FormSchema, initialValue?: any, validations?: EasyFormField['validations']): FormArray {\r\n    const array = new FormArray<any>([]);\r\n\r\n    if (initialValue && Array.isArray(initialValue)) {\r\n      initialValue.forEach((item: any) => {\r\n        const group = this.createFormGroup(schema);\r\n        group.patchValue(item);\r\n        array.push(group);\r\n      });\r\n    }\r\n\r\n    if (validations) {\r\n      array.addValidators(this.createValidations(validations));\r\n    }\r\n\r\n    return array;\r\n  }\r\n\r\n  private createSimpleFormArray(schema: EasyFormField, initialValue?: any, validations?: EasyFormField['validations']): FormArray {\r\n    const array = new FormArray<any>([]);\r\n    const field = schema.schema as EasyFormField;\r\n\r\n    if (initialValue && Array.isArray(initialValue)) {\r\n      initialValue.forEach((item: any, index) => {\r\n        const control = new FormControl(item, field.validations ? this.createValidations(field.validations) : []);\r\n        array.push(control);\r\n      });\r\n    }\r\n\r\n    if (validations) {\r\n      array.addValidators(this.createValidations(validations));\r\n    }\r\n\r\n    return array;\r\n  }\r\n\r\n  private createValidations(validations: Record<string, Validation>) {\r\n    const validators = [];\r\n    if (validations) {\r\n      for (const validationKey in validations) {\r\n        const v = validations[validationKey];\r\n        validators.push(v.validator);\r\n      }\r\n    }\r\n    return validators;\r\n  }\r\n\r\n  private _getSchemaWithPath(path: (string | number)[], schema: FormSchema | EasyFormField): FormSchema | EasyFormField | null {\r\n    const head = path[0];\r\n    const tail = path.slice(1)\r\n\r\n    const hasIndex = !!head.toString().match(/^[0-9]+/);\r\n    if (hasIndex) {\r\n      if (schema instanceof EasyFormField) {\r\n        return schema ?? null;\r\n      } else {\r\n        if (tail.length == 0) {\r\n          return schema ?? null;\r\n        } else {\r\n          return this._getSchemaWithPath(tail, schema);\r\n        }\r\n      }\r\n    }\r\n\r\n\r\n    if (schema instanceof EasyFormField) {\r\n      return schema.schema ?? null;\r\n    }\r\n\r\n    const childSchema = (schema as Record<string, EasyFormField>)[head.toString()];\r\n    if (childSchema) {\r\n      if (tail.length == 0) {\r\n        return childSchema;\r\n      } else {\r\n        return this._getSchemaWithPath(tail, childSchema.schema ?? {});\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import {InjectionToken} from \"@angular/core\";\r\nimport {ComponentType} from \"../interfaces/component-type\";\r\nimport {EasyFormControl} from \"../easy-form-control\";\r\n\r\nexport type EasyFormControlComponent = ComponentType<EasyFormControl>;\r\nexport type LazyLoadingComponent = () => Promise<any | EasyFormControlComponent>;\r\n\r\nexport interface EasyFormConfig {\r\n  // Custom form control components to be used in the form\r\n  controls: Record<string, EasyFormControlComponent | LazyLoadingComponent>;\r\n}\r\n\r\nconst EASY_FORM_CONFIG_TOKEN = 'EASY_FORM_CONFIG_TOKEN';\r\nexport const EASY_FORM_CONFIG = new InjectionToken<EasyFormConfig>(EASY_FORM_CONFIG_TOKEN);\r\n","import {isObservable, Observable} from \"rxjs\";\r\nimport {ChangeDetectorRef, inject, OnDestroy, Pipe, PipeTransform} from \"@angular/core\";\r\nimport {AsyncPipe} from \"@angular/common\";\r\n\r\n\r\n/**\r\n * Observe both Observable and Signal values\r\n */\r\n@Pipe({\r\n  name: 'observe',\r\n  pure: false,\r\n  standalone: true\r\n})\r\nexport class ObservePipe<T> implements PipeTransform, OnDestroy {\r\n  private cdr = inject(ChangeDetectorRef);\r\n\r\n  private asyncPipe: AsyncPipe;\r\n\r\n  constructor() {\r\n    this.asyncPipe = new AsyncPipe(this.cdr);\r\n  }\r\n\r\n  transform(value: T | Observable<T> | undefined | null): T | null {\r\n    if (value === undefined) return null;\r\n\r\n    if (isObservable(value)) {\r\n      return this.asyncPipe.transform(value);\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.asyncPipe.ngOnDestroy();\r\n  }\r\n\r\n}\r\n","import {FormControl} from \"@angular/forms\";\r\nimport {computed, signal} from \"@angular/core\";\r\nimport {EasyFormField} from \"./easy-form-field\";\r\nimport {takeUntilDestroyed, toObservable} from \"@angular/core/rxjs-interop\";\r\nimport {of, switchMap} from \"rxjs\";\r\n\r\n\r\nexport interface EfControlData {\r\n  id: string | null;\r\n  control: FormControl<any> | null;\r\n  schema: EasyFormField | null;\r\n  // formFieldDirective: FormFieldDirective | null;\r\n}\r\n\r\n/**\r\n * Every form control should extend this class\r\n * to work with EasyFormComponent\r\n */\r\nexport class EasyFormControl {\r\n\r\n  easyFormControl = signal<EfControlData>({\r\n    id: null,\r\n    control: null,\r\n    schema: null,\r\n    // formFieldDirective: null\r\n  });\r\n\r\n  control = computed(() => this.easyFormControl().control);\r\n\r\n  schema = computed(() => this.easyFormControl().schema);\r\n\r\n  // formFieldDirective = computed(() => this.easyFormControl().formFieldDirective);\r\n\r\n  options = computed(() => {\r\n    return this.schema()?.options;\r\n  })\r\n\r\n  props = signal<Record<string, any>>({});\r\n\r\n  hasControl = computed(() => this.easyFormControl().control !== null);\r\n\r\n  hasInitialized = computed(() => {\r\n    const efData = this.easyFormControl();\r\n    return efData.control !== null && efData.schema !== null;\r\n  });\r\n\r\n  value = toObservable(this.control)\r\n    .pipe(takeUntilDestroyed(), switchMap(control => control ? control.valueChanges : of(null)))\r\n\r\n\r\n  setValue(value: any) {\r\n    this.control()?.setValue(value);\r\n  }\r\n\r\n  /**\r\n   * Emit events\r\n   * Usage: (input)=\"emitEvent($event)\"\r\n   * @param event\r\n   */\r\n  emitEvent = (event: Event) => {\r\n    // const directive = this.formFieldDirective;\r\n    // if (directive && directive.fieldEvent && directive.fieldEvent instanceof EventEmitter) {\r\n    //   // Check if there are any subscribers to the event\r\n    //   if (directive.fieldEvent.observed) {\r\n    //     directive.fieldEvent.emit(event);\r\n    //   }\r\n    // }\r\n  }\r\n}\r\n","import {Component, ContentChild, Input, TemplateRef} from '@angular/core';\r\nimport {FormControl} from \"@angular/forms\";\r\nimport {KeyValuePipe, NgTemplateOutlet} from \"@angular/common\";\r\nimport {ObservePipe} from \"../../pipes/observe\";\r\nimport {EasyForm} from \"../../easy-form\";\r\nimport {EasyFormField} from \"../../easy-form-field\";\r\n\r\n@Component({\r\n  selector: 'ef-errors',\r\n  standalone: true,\r\n  imports: [\r\n    ObservePipe,\r\n    NgTemplateOutlet,\r\n    KeyValuePipe\r\n  ],\r\n  templateUrl: './ef-errors.component.html',\r\n  styleUrl: './ef-errors.component.scss'\r\n})\r\nexport class EfErrorsComponent {\r\n  @ContentChild('messageTemplate', {read: TemplateRef}) messageTemplate?: TemplateRef<{ $implicit: string }>;\r\n\r\n  @Input() form?: EasyForm;\r\n  @Input() path?: string | (number | string)[];\r\n  @Input() control?: FormControl;\r\n  @Input() formField?: EasyFormField;\r\n\r\n  get _control() {\r\n    if (this.control) return this.control;\r\n    if (!this.path || !this.form) throw new Error('Path and form inputs are required');\r\n    return this.form.getControl(this.path);\r\n  }\r\n\r\n  get _formField() {\r\n    if (this.formField) return this.formField;\r\n    if (!this.path || !this.form) throw new Error('Path and form inputs are required');\r\n    return this.form.getSchema(this.path) as EasyFormField;\r\n  }\r\n\r\n}\r\n","<ng-template #defaultErrorMessage let-message>\r\n  @if (message) {\r\n    <div class=\"ef-errors\">{{ message | observe }}</div>\r\n  }\r\n</ng-template>\r\n\r\n@if (_control && _formField && _formField.validations) {\r\n  @for (validation of (_formField.validations | keyvalue); track validation.key) {\r\n    @if (_control.hasError(validation.key)) {\r\n      <ng-container [ngTemplateOutlet]=\"messageTemplate ?? defaultErrorMessage\"\r\n                    [ngTemplateOutletContext]=\"{$implicit: validation.value.message}\"/>\r\n    }\r\n  }\r\n}\r\n","export function isComponent(component: unknown) {\r\n  return (component as any).hasOwnProperty('ɵcmp');\r\n}\r\n","import {\r\n  ComponentRef,\r\n  DestroyRef,\r\n  Directive,\r\n  EventEmitter,\r\n  inject,\r\n  Injector,\r\n  Input,\r\n  OnChanges,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\nimport {FormControl} from \"@angular/forms\";\r\nimport {EasyFormComponent} from \"../easy-form/easy-form.component\";\r\nimport {EasyFormControl} from \"../easy-form-control\";\r\nimport {isComponent} from \"../helpers/component-helper\";\r\nimport {EasyFormControlComponent, LazyLoadingComponent} from \"../tokens/easy-form-config\";\r\nimport {filter, Observable, Subscription} from \"rxjs\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {EasyFormField} from \"../easy-form-field\";\r\n\r\n@Directive({\r\n  selector: 'ng-container[easyFormField]',\r\n  standalone: true,\r\n  exportAs: 'easyFormField',\r\n})\r\nexport class FormFieldDirective implements OnChanges {\r\n  destroyRef = inject(DestroyRef)\r\n  viewContainerRef = inject(ViewContainerRef)\r\n  easyFormComponent = inject(EasyFormComponent)\r\n\r\n  @Input() disabled = false;\r\n  @Input() props?: Record<string, any>;\r\n  // It emits control value changes\r\n  @Output() change = new EventEmitter<any>();\r\n  // Emit all events\r\n  @Output() fieldEvent = new EventEmitter<Event>();\r\n  // Filter events\r\n  @Output(\"focus\") focus = this.fieldEvent.pipe(filter(e => e.type == 'focus' || e.type == 'focusin')) as Observable<FocusEvent>;\r\n  @Output(\"blur\") blur = this.fieldEvent.pipe(filter(e => e.type == 'blur' || e.type == 'focusout')) as Observable<FocusEvent>;\r\n  // Event emitters derived from fieldEvent\r\n  @Output(\"input\") input = this.fieldEvent.pipe(filter(e => e.type == 'input')) as Observable<InputEvent>;\r\n  @Output(\"keyup\") keyup = this.fieldEvent.pipe(filter(e => e.type == 'keyup')) as Observable<KeyboardEvent>;\r\n  @Output(\"keydown\") keydown = this.fieldEvent.pipe(filter(e => e.type == 'keydown')) as Observable<KeyboardEvent>;\r\n\r\n  public instance?: EasyFormControl;\r\n\r\n  @Input({\r\n    required: true,\r\n    transform: (val: string | Array<string | number>): Array<string | number> => {\r\n      const path = val;\r\n      if (typeof path === 'string') {\r\n        return path.split('.');\r\n      }\r\n      return path;\r\n    }\r\n  }) path!: Array<string | number>;\r\n\r\n  control?: FormControl;\r\n\r\n  private componentRef?: ComponentRef<EasyFormControl>;\r\n  private valueChangeSubscription?: Subscription;\r\n\r\n  get value() {\r\n    return this.control?.value;\r\n  }\r\n\r\n  private get form() {\r\n    return this.easyFormComponent.form;\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['path']) {\r\n      this.pathChanged();\r\n    }\r\n\r\n    if (changes['disabled']) {\r\n      const control = this.control;\r\n      if (control) {\r\n        if (this.disabled) {\r\n          control.disable();\r\n        } else {\r\n          control.enable();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (changes['props'] && this.componentRef) {\r\n      this.componentRef.instance.props.set(changes['props'].currentValue);\r\n      this.componentRef.changeDetectorRef.detectChanges();\r\n    }\r\n  }\r\n\r\n  private pathChanged() {\r\n    const control = this.setControl();\r\n    if (control) {\r\n      if (this.valueChangeSubscription) {\r\n        this.valueChangeSubscription.unsubscribe();\r\n      }\r\n      this.control = control;\r\n      this.valueChangeSubscription = control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\r\n        this.change.emit(value);\r\n      });\r\n\r\n      this.render();\r\n    }\r\n  }\r\n\r\n  private setControl() {\r\n    const path = this.path;\r\n    if (!path || path.length === 0) {\r\n      return;\r\n    }\r\n\r\n    if (!this.easyFormComponent.form) {\r\n      return undefined;\r\n    }\r\n\r\n    const control = this.easyFormComponent.form.getControl(path);\r\n\r\n    if (!control) {\r\n      return undefined;\r\n    }\r\n    return control as FormControl;\r\n  }\r\n\r\n  private async render() {\r\n    await this._render();\r\n\r\n    const control = this.control;\r\n    if (control) {\r\n      setTimeout(() => {\r\n        if (this.disabled) {\r\n          control.disable();\r\n        } else {\r\n          control.enable();\r\n        }\r\n      })\r\n    }\r\n  }\r\n\r\n  private async _render() {\r\n    const path = this.path;\r\n    if (!path) {\r\n      return;\r\n    }\r\n    const schema = this.form.getSchema(path);\r\n    if (!schema) {\r\n      throw new Error(`Path not found for ${path}`);\r\n    }\r\n    let componentDefinition = typeof schema.controlType === 'string' ? this.form.getComponentType(schema.controlType) : schema.controlType;\r\n    let component: EasyFormControlComponent;\r\n    if (!componentDefinition) {\r\n      // Get component from formConfig\r\n      componentDefinition = this.easyFormComponent.getComponentType(schema.controlType as string);\r\n    }\r\n\r\n    if (!componentDefinition) {\r\n      throw new Error(`Component configuration not found for ${schema.controlType}`);\r\n    }\r\n\r\n    if (!isComponent(componentDefinition)) {\r\n      // Assume this is lazy loading component\r\n      if (typeof componentDefinition !== 'function') {\r\n        throw new Error(`${schema.controlType} is not a valid Angular component`);\r\n      }\r\n      const lazyLoadingComponent = componentDefinition as LazyLoadingComponent;\r\n      const loaded = await lazyLoadingComponent() as any;\r\n      if (loaded.default) {\r\n        component = loaded.default;\r\n      } else if (typeof loaded === 'function' && isComponent(loaded)) {\r\n        component = loaded as EasyFormControlComponent;\r\n      } else {\r\n        throw new Error(`${schema.controlType} has no default export or is not a valid Angular component`);\r\n      }\r\n    } else {\r\n      component = componentDefinition as EasyFormControlComponent;\r\n    }\r\n\r\n    // Double check if component is a valid Angular component\r\n    if (!isComponent(component)) {\r\n      throw new Error(`${schema.controlType} is not a valid Angular component. Please provide a valid Angular component for ${schema.controlType} on provider EasyFormConfig`);\r\n    }\r\n    // Forwards this instance to the child component\r\n    const injector = Injector.create({\r\n      parent: this.viewContainerRef.injector,\r\n      providers: [\r\n        {\r\n          provide: FormFieldDirective,\r\n          useValue: this\r\n        }\r\n      ]\r\n    })\r\n    this.viewContainerRef.clear();\r\n    if (this.componentRef) {\r\n      this.componentRef.destroy();\r\n    }\r\n    const componentRef = this.viewContainerRef.createComponent<EasyFormControl>(component as EasyFormControlComponent, {\r\n      injector: injector\r\n    });\r\n    this.componentRef = componentRef;\r\n    this.instance = componentRef.instance;\r\n\r\n    // This usage is removed in favor of directives props input\r\n    // if (schema.props) {\r\n    //   // Initialize props\r\n    //   this.instance.props.set(schema.props);\r\n    // }\r\n\r\n    // Set component specific properties\r\n    if (this.props) {\r\n      this.componentRef.instance.props.set(this.props);\r\n    }\r\n\r\n    componentRef.instance.easyFormControl.set({\r\n      id: path.join('_') + '_' + Math.random().toString(36).substring(2),\r\n      control: this.control!,\r\n      schema: schema as EasyFormField\r\n    });\r\n\r\n    componentRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n}\r\n","import {Directive, EventEmitter, HostListener, inject} from '@angular/core';\r\nimport {FormFieldDirective} from \"./form-field.directive\";\r\n\r\n/**\r\n * Bind events to input, textarea, select elements and emit events to the parent form field directive\r\n */\r\n@Directive({\r\n  selector: 'input[bindEvents], textarea[bindEvents], select[bindEvents]',\r\n  standalone: true\r\n})\r\nexport class BindEventsDirective {\r\n  formFieldDirective = inject(FormFieldDirective, {skipSelf: true});\r\n\r\n  @HostListener('input', ['$event']) onInput(event: Event) {\r\n    this.emitEvent(event);\r\n  }\r\n\r\n  @HostListener('focus', ['$event']) onFocus(event: Event) {\r\n    this.emitEvent(event);\r\n  }\r\n\r\n  @HostListener('blur', ['$event']) onBlur(event: Event) {\r\n    this.emitEvent(event);\r\n  }\r\n\r\n  @HostListener('keyup', ['$event']) onKeyup(event: Event) {\r\n    this.emitEvent(event);\r\n  }\r\n\r\n  @HostListener('keydown', ['$event']) onKeydown(event: Event) {\r\n    this.emitEvent(event);\r\n  }\r\n\r\n  emitEvent = (event: Event) => {\r\n    const directive = this.formFieldDirective;\r\n    if (directive.fieldEvent && directive.fieldEvent instanceof EventEmitter) {\r\n      // Check if there are any subscribers to the event\r\n      if (directive.fieldEvent.observed) {\r\n        directive.fieldEvent.emit(event);\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {ReactiveFormsModule} from \"@angular/forms\";\r\nimport {ObservePipe} from \"../../pipes/observe\";\r\nimport {EasyFormControl} from \"../../easy-form-control\";\r\nimport {EfErrorsComponent} from \"../../components/ef-errors/ef-errors.component\";\r\nimport {BindEventsDirective} from \"../../directives/bind-events.directive\";\r\n\r\n@Component({\r\n  selector: 'ef-text',\r\n  standalone: true,\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    ObservePipe,\r\n    EfErrorsComponent,\r\n    BindEventsDirective\r\n  ],\r\n  templateUrl: './ef-textarea.component.html',\r\n  styleUrl: './ef-textarea.component.scss'\r\n})\r\nexport class EfTextAreaComponent extends EasyFormControl {\r\n}\r\n","@if (hasInitialized()) {\r\n  @if (easyFormControl().schema!.label) {\r\n    <label class=\"ef-form-label\" [for]=\"easyFormControl().id\">{{ easyFormControl().schema!.label | observe }}</label>\r\n  }\r\n  <textarea bindEvents [id]=\"easyFormControl().id\" [formControl]=\"easyFormControl().control!\"\r\n         class=\"ef-input-textarea\">\r\n  </textarea>\r\n  <ef-errors [control]=\"easyFormControl().control!\" [formField]=\"easyFormControl().schema!\"/>\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {ObservePipe} from \"../../pipes/observe\";\r\nimport {EasyFormControl} from \"../../easy-form-control\";\r\nimport {EfErrorsComponent} from \"../../components/ef-errors/ef-errors.component\";\r\nimport {BindEventsDirective} from \"../../directives/bind-events.directive\";\r\n\r\n@Component({\r\n  selector: 'ef-select',\r\n  standalone: true,\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    ObservePipe,\r\n    EfErrorsComponent,\r\n    BindEventsDirective\r\n  ],\r\n  templateUrl: './ef-select.component.html',\r\n  styleUrl: './ef-select.component.scss'\r\n})\r\nexport class EfSelectComponent extends EasyFormControl {\r\n}\r\n","@if (hasInitialized()) {\r\n  @if (schema()!.label) {\r\n    <label class=\"ef-form-label\" [for]=\"easyFormControl().id\">{{ easyFormControl().schema?.label | observe }}</label>\r\n  }\r\n  <select bindEvents [id]=\"easyFormControl().id\" [formControl]=\"easyFormControl().control!\"\r\n          class=\"ef-input-select\">\r\n    @if (easyFormControl().schema?.options) {\r\n      @for (item of (easyFormControl().schema?.options | observe); track item.value) {\r\n        <option [value]=\"item.value\">{{ item.label | observe }}</option>\r\n      }\r\n    }\r\n  </select>\r\n  <ef-errors [control]=\"easyFormControl().control!\" [formField]=\"easyFormControl().schema!\"/>\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {ReactiveFormsModule} from \"@angular/forms\";\r\nimport {ObservePipe} from \"../../pipes/observe\";\r\nimport {EasyFormControl} from \"../../easy-form-control\";\r\nimport {EfErrorsComponent} from \"../../components/ef-errors/ef-errors.component\";\r\nimport {BindEventsDirective} from \"../../directives/bind-events.directive\";\r\n\r\n@Component({\r\n  selector: 'ef-checkbox',\r\n  standalone: true,\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    ObservePipe,\r\n    EfErrorsComponent,\r\n    BindEventsDirective\r\n  ],\r\n  templateUrl: './ef-checkbox.component.html',\r\n  styleUrl: './ef-checkbox.component.scss'\r\n})\r\nexport class EfCheckboxComponent extends EasyFormControl {\r\n}\r\n","@if (hasInitialized()) {\r\n  <input type=\"checkbox\" bindEvents [formControl]=\"easyFormControl().control!\" [id]=\"easyFormControl().id\">\r\n  @if (easyFormControl().schema?.label) {\r\n    <label class=\"ef-form-label\" [for]=\"easyFormControl().id\">{{ easyFormControl().schema?.label | observe }}</label>\r\n  }\r\n  <ef-errors [control]=\"easyFormControl().control!\" [formField]=\"easyFormControl().schema!\"/>\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {ObservePipe} from \"../../pipes/observe\";\r\nimport {ReactiveFormsModule} from \"@angular/forms\";\r\nimport {EasyFormControl} from \"../../easy-form-control\";\r\nimport {EfErrorsComponent} from \"../../components/ef-errors/ef-errors.component\";\r\nimport {BindEventsDirective} from \"../../directives/bind-events.directive\";\r\n\r\n@Component({\r\n  selector: 'lib-ef-radio',\r\n  standalone: true,\r\n  imports: [\r\n    ObservePipe,\r\n    ReactiveFormsModule,\r\n    EfErrorsComponent,\r\n    BindEventsDirective\r\n  ],\r\n  templateUrl: './ef-radio.component.html',\r\n  styleUrl: './ef-radio.component.scss'\r\n})\r\nexport class EfRadioComponent extends EasyFormControl {\r\n\r\n}\r\n","@if (hasInitialized()) {\r\n  @if (easyFormControl().schema?.label) {\r\n    <label class=\"ef-form-label\" [for]=\"easyFormControl().id\">{{ easyFormControl().schema?.label | observe }}</label>\r\n  }\r\n  @if (easyFormControl().schema?.options) {\r\n    <div class=\"ef-radio-container\">\r\n      @for (option of (easyFormControl().schema?.options | observe); track option.value) {\r\n        <label class=\"ef-radio-option\">\r\n          <input bindEvents type=\"radio\" [formControl]=\"easyFormControl().control!\" [name]=\"easyFormControl().id!\"\r\n                 [value]=\"option.value\" [attr.aria-describedby]=\"easyFormControl().id\">\r\n          <span class=\"ef-form-label\">{{ option.label | observe }}</span>\r\n        </label>\r\n      }\r\n    </div>\r\n  }\r\n  <ef-errors [control]=\"easyFormControl().control!\" [formField]=\"easyFormControl().schema!\"/>\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport { EasyFormControl } from '../../easy-form-control';\r\nimport { EfErrorsComponent } from '../../components/ef-errors/ef-errors.component';\r\nimport { ObservePipe } from '../../pipes/observe';\r\nimport {BindEventsDirective} from \"../../directives/bind-events.directive\";\r\n\r\n@Component({\r\n  selector: 'lib-ef-switch',\r\n  standalone: true,\r\n  imports: [\r\n    EfErrorsComponent,\r\n    FormsModule,\r\n    ObservePipe,\r\n    ReactiveFormsModule,\r\n    BindEventsDirective\r\n  ],\r\n  templateUrl: './ef-switch.component.html',\r\n  styleUrl: './ef-switch.component.scss'\r\n})\r\nexport class EfSwitchComponent extends EasyFormControl {\r\n\r\n}\r\n","@if (hasInitialized()) {\r\n  <input type=\"checkbox\" bindEvents [formControl]=\"easyFormControl().control!\" [id]=\"easyFormControl().id\">\r\n  @if (easyFormControl().schema?.label) {\r\n    <label class=\"ef-form-label\" [for]=\"easyFormControl().id\">{{ easyFormControl().schema?.label | observe }}</label>\r\n  }\r\n  <ef-errors [control]=\"easyFormControl().control!\" [formField]=\"easyFormControl().schema!\"/>\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {EasyFormControl} from \"../../easy-form-control\";\r\nimport {ReactiveFormsModule} from \"@angular/forms\";\r\nimport {ObservePipe} from \"../../pipes/observe\";\r\nimport {BindEventsDirective} from \"../../directives/bind-events.directive\";\r\nimport {EfErrorsComponent} from \"../../components/ef-errors/ef-errors.component\";\r\n\r\n@Component({\r\n  selector: 'ef-text',\r\n  standalone: true,\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    ObservePipe,\r\n    EfErrorsComponent,\r\n    BindEventsDirective\r\n  ],\r\n  templateUrl: './ef-text.component.html',\r\n  styleUrl: './ef-text.component.scss'\r\n})\r\nexport class EfTextComponent extends EasyFormControl {\r\n}\r\n","@if (hasInitialized()) {\r\n  @if (schema()?.label) {\r\n    <label class=\"ef-form-label\" [for]=\"easyFormControl().id\">{{ schema()?.label | observe }}</label>\r\n  }\r\n  <input bindEvents [id]=\"easyFormControl().id\"\r\n         [type]=\"props()['type'] ?? 'text'\"\r\n         [formControl]=\"control()!\"\r\n         [placeholder]=\"props()['placeholder'] ?? ''\"\r\n         class=\"ef-input-text\">\r\n  <ef-errors [control]=\"control()!\" [formField]=\"schema()!\"/>\r\n}\r\n","import {AfterContentInit, Component, ElementRef, EventEmitter, inject, Input, Output} from '@angular/core';\r\nimport {EASY_FORM_CONFIG, EasyFormConfig} from \"../tokens/easy-form-config\";\r\nimport {EasyForm} from \"../easy-form\";\r\nimport {FormGroup, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {EfTextAreaComponent} from \"../controls/ef-textarea/ef-textarea.component\";\r\nimport {EfSelectComponent} from \"../controls/ef-select/ef-select.component\";\r\nimport {EfCheckboxComponent} from \"../controls/ef-checkbox/ef-checkbox.component\";\r\nimport {EfRadioComponent} from \"../controls/ef-radio/ef-radio.component\";\r\nimport {EfSwitchComponent} from \"../controls/ef-switch/ef-switch.component\";\r\nimport {EfTextComponent} from \"../controls/ef-text/ef-text.component\";\r\n\r\n/**\r\n * EasyFormComponent is the main component that is used to create forms\r\n *\r\n * @see `EasyForm`\r\n */\r\n@Component({\r\n  selector: 'easy-form',\r\n  standalone: true,\r\n  imports: [\r\n    ReactiveFormsModule\r\n  ],\r\n  templateUrl: './easy-form.component.html',\r\n  styleUrl: './easy-form.component.scss',\r\n  host: {\r\n    '[class]': `'show-errors-' + form.options.showErrors`\r\n  }\r\n})\r\nexport class EasyFormComponent implements AfterContentInit {\r\n  elementRef = inject<ElementRef<HTMLDivElement>>(ElementRef);\r\n  _formConfig = inject(EASY_FORM_CONFIG, {optional: true});\r\n\r\n  formConfig: EasyFormConfig = this.defaultConfig();\r\n\r\n  /**\r\n   * EasyForm instance\r\n   *\r\n   * @type `EasyForm`\r\n   */\r\n  @Input({required: true}) form!: EasyForm;\r\n  @Input() focusFirstError = true;\r\n\r\n  /**\r\n   * Submit event output\r\n   */\r\n  @Output() efSubmit = new EventEmitter<FormGroup>();\r\n\r\n  constructor() {\r\n    if (this._formConfig) {\r\n      Object.assign(this.formConfig.controls, this._formConfig.controls);\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n\r\n  }\r\n\r\n  getComponentType(type: string) {\r\n    return this.formConfig.controls[type];\r\n  }\r\n\r\n  handleSubmit($event: any) {\r\n    if (this.form.invalid && this.focusFirstError && this.elementRef) {\r\n      const firstError = this.elementRef.nativeElement.querySelector('.ng-invalid:not(form), ef-errors:has(*)');\r\n      if (firstError) {\r\n        setTimeout(() => {\r\n          if (firstError.tagName == 'EF-ERRORS') {\r\n            firstError.scrollIntoView({behavior: 'smooth', block: 'center'})\r\n          } else {\r\n            (firstError as HTMLElement).focus()\r\n          }\r\n        }, 100)\r\n      }\r\n    }\r\n    this.efSubmit.emit(this.form.formGroup)\r\n  }\r\n\r\n  private defaultConfig() {\r\n    return {\r\n      controls: {\r\n        text: EfTextComponent,\r\n        textarea: EfTextAreaComponent,\r\n        select: EfSelectComponent,\r\n        checkbox: EfCheckboxComponent,\r\n        radio: EfRadioComponent,\r\n        switch: EfSwitchComponent\r\n      }\r\n    }\r\n  }\r\n}\r\n","@if (form) {\r\n  <form [formGroup]=\"form.formGroup\" (ngSubmit)=\"handleSubmit($event)\">\r\n    <ng-content/>\r\n  </form>\r\n}\r\n","import {Directive, inject, TemplateRef} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'ng-template[arrayItem]',\r\n  standalone: true,\r\n  exportAs: 'arrayItem'\r\n})\r\nexport class ArrayItemTemplateDirective {\r\n  public templateRef = inject(TemplateRef);\r\n\r\n  static ngTemplateContextGuard<T>(dir: ArrayItemTemplateDirective, ctx: any): ctx is {\r\n    $implicit: any,\r\n    index: number\r\n  } {\r\n    return true;\r\n  }\r\n\r\n}\r\n","import {Directive, inject, TemplateRef} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'ng-template[arrayWrapper]',\r\n  standalone: true,\r\n  exportAs: 'arrayWrapper'\r\n})\r\nexport class ArrayWrapperTemplateDirective {\r\n  public templateRef = inject(TemplateRef);\r\n\r\n  static ngTemplateContextGuard<T>(dir: ArrayWrapperTemplateDirective, ctx: any): ctx is {\r\n    $implicit: any,\r\n    itemTemplate: TemplateRef<any>\r\n  } {\r\n    return true;\r\n  }\r\n\r\n}\r\n","import {Component, ContentChild, inject, Input, TemplateRef} from '@angular/core';\r\nimport {EasyFormComponent} from \"../../easy-form/easy-form.component\";\r\nimport {NgTemplateOutlet} from \"@angular/common\";\r\nimport {FormArray} from \"@angular/forms\";\r\nimport {ArrayItemTemplateDirective} from \"../../directives/array-item-template.directive\";\r\nimport {ArrayWrapperTemplateDirective} from \"../../directives/array-wrapper-template.directive\";\r\nimport {EfErrorsComponent} from \"../ef-errors/ef-errors.component\";\r\n\r\n@Component({\r\n  selector: 'ef-form-array',\r\n  standalone: true,\r\n  imports: [\r\n    NgTemplateOutlet,\r\n    EfErrorsComponent\r\n  ],\r\n  templateUrl: './ef-form-array.component.html',\r\n  styleUrl: './ef-form-array.component.scss'\r\n})\r\nexport class EfFormArrayComponent {\r\n  @ContentChild(ArrayItemTemplateDirective, {read: TemplateRef}) itemTemplate!: TemplateRef<{\r\n    $implicit: any,\r\n    index: number\r\n  }>;\r\n\r\n  @ContentChild(ArrayWrapperTemplateDirective, {read: TemplateRef}) wrapperTemplate!: TemplateRef<{\r\n    $implicit: any,\r\n    itemTemplate: TemplateRef<any>\r\n  }>;\r\n\r\n  @Input({required: true}) path!: string;\r\n\r\n  easyFormComponent = inject(EasyFormComponent)\r\n\r\n  get schema() {\r\n    return this.easyFormComponent.form.getSchema(this.path);\r\n  }\r\n\r\n  get control() {\r\n    return this.easyFormComponent.form.getControl(this.path);\r\n  }\r\n\r\n  get arrayControls() {\r\n    const arr = this.easyFormComponent.form.formGroup.get(this.path) as FormArray;\r\n    return arr.controls ?? [];\r\n  }\r\n}\r\n","@if (wrapperTemplate) {\r\n  <ng-container [ngTemplateOutlet]=\"wrapperTemplate\" [ngTemplateOutletContext]=\"{\r\n  $implicit: arrayControls,\r\n  itemTemplate: itemTemplate\r\n  }\"/>\r\n} @else {\r\n  @if (itemTemplate) {\r\n    @for (control of arrayControls; track control) {\r\n      <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{$implicit:'', index: $index}\"/>\r\n    }\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of easy-form\r\n */\r\nexport * from './lib/easy-form';\r\nexport * from './lib/easy-form-field';\r\nexport * from './lib/easy-form/easy-form.component';\r\nexport * from './lib/directives/form-field.directive'\r\nexport * from './lib/directives/array-item-template.directive'\r\nexport * from './lib/directives/array-wrapper-template.directive'\r\nexport * from './lib/directives/bind-events.directive'\r\nexport * from './lib/components/ef-form-array/ef-form-array.component'\r\nexport * from './lib/components/ef-errors/ef-errors.component'\r\nexport * from './lib/easy-form-control'\r\nexport * from './lib/interfaces/select-options'\r\nexport * from './lib/interfaces/observable-string'\r\nexport * from './lib/pipes/observe'\r\n\r\n// Controls\r\nexport * from './lib/controls/ef-text/ef-text.component'\r\nexport * from './lib/controls/ef-textarea/ef-textarea.component'\r\nexport * from './lib/controls/ef-select/ef-select.component'\r\nexport * from './lib/controls/ef-checkbox/ef-checkbox.component'\r\nexport * from './lib/controls/ef-radio/ef-radio.component'\r\n\r\n// Tokens\r\nexport {EasyFormConfig, EASY_FORM_CONFIG} from './lib/tokens/easy-form-config'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}