{"version":3,"file":"kronscht-former.mjs","sources":["../../../projects/former/src/lib/former.service.ts","../../../projects/former/src/lib/elements/base-element.component.ts","../../../projects/former/src/lib/elements/validation-error/validation-error.component.ts","../../../projects/former/src/lib/elements/validation-error/validation-error.component.html","../../../projects/former/src/lib/elements/calendar-element/calendar-element.component.ts","../../../projects/former/src/lib/elements/calendar-element/calendar-element.component.html","../../../projects/former/src/lib/elements/dropdown-element/dropdown-element.component.ts","../../../projects/former/src/lib/elements/dropdown-element/dropdown-element.component.html","../../../projects/former/src/lib/elements/input-group-element/input-group-element.component.ts","../../../projects/former/src/lib/elements/input-group-element/input-group-element.component.html","../../../projects/former/src/lib/elements/text-element/text-element.component.ts","../../../projects/former/src/lib/elements/text-element/text-element.component.html","../../../projects/former/src/lib/model/elements/autocomplete.model.ts","../../../projects/former/src/lib/elements/autocomplete-element/autocomplete-element.component.ts","../../../projects/former/src/lib/elements/autocomplete-element/autocomplete-element.component.html","../../../projects/former/src/lib/elements/checkbox-element/checkbox-element.component.ts","../../../projects/former/src/lib/elements/checkbox-element/checkbox-element.component.html","../../../projects/former/src/lib/elements/number-element/number-element.component.ts","../../../projects/former/src/lib/elements/number-element/number-element.component.html","../../../projects/former/src/lib/elements/text-area-element/text-area-element.component.ts","../../../projects/former/src/lib/elements/text-area-element/text-area-element.component.html","../../../projects/former/src/lib/elements/display-text-element/display-text-element.component.ts","../../../projects/former/src/lib/elements/display-text-element/display-text-element.component.html","../../../projects/former/src/lib/elements/template-element/template-element.component.ts","../../../projects/former/src/lib/elements/template-element/template-element.component.html","../../../projects/former/src/lib/generated-form-element/generated-form-element.component.ts","../../../projects/former/src/lib/generated-form-element/generated-form-element.component.html","../../../projects/former/src/lib/elements/grid-layout-element/grid-layout-element.component.html","../../../projects/former/src/lib/elements/grid-column-element/grid-column-element.component.html","../../../projects/former/src/lib/elements/group-element/group-element.component.html","../../../projects/former/src/lib/elements/card-element/card-element.component.html","../../../projects/former/src/lib/directive/template-name.directive.ts","../../../projects/former/src/lib/generated-form/generated-form.component.ts","../../../projects/former/src/lib/generated-form/generated-form.component.html","../../../projects/former/src/lib/former.utils.ts","../../../projects/former/src/lib/generated-form-actions/generated-form-actions.component.ts","../../../projects/former/src/lib/generated-form-actions/generated-form-actions.component.html","../../../projects/former/src/lib/former.module.ts","../../../projects/former/src/lib/model/former.model.ts","../../../projects/former/src/public-api.ts","../../../projects/former/src/kronscht-former.ts"],"sourcesContent":["/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { inject, Injectable } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\nimport { ElementType, ValidationType } from './model/former.enum';\nimport { BaseElement, Element, Elements, FormDefinition, MaxFormValidator, MaxLengthFormValidator, MinFormValidator, MinLengthFormValidator, PatternFormValidator } from './model/former.model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FormerService {\n  readonly fb = inject(FormBuilder);\n\n  generateForm(formDefinition: FormDefinition): FormGroup {\n    const formGroup = this.fb.group({});\n\n    this.addControlRecursive(formGroup, formDefinition.elements);\n\n    return formGroup;\n  }\n\n  addControlRecursive(formGroup: FormGroup, elements: Elements) {\n    for (const key of Object.keys(elements)) {\n      const element: Element = elements[key];\n      switch (element.type) {\n        case ElementType.GroupElement: {\n          const nestedGroup = this.fb.group({});\n          this.addControlRecursive(nestedGroup, element.elements);\n          formGroup.addControl(key, nestedGroup);\n          break;\n        }\n        case ElementType.GridColumnElement:\n        case ElementType.GridLayoutElement:\n        case ElementType.CardElement:\n          this.addControlRecursive(formGroup, element.elements);\n          break;\n        case ElementType.TemplateElement:\n          break;\n        default:\n          formGroup.addControl(key, new FormControl(undefined, this.addValidators(element)));\n      }\n    }\n  }\n\n  addValidators(element: BaseElement): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (element.validators) {\n      for (const validator of element.validators) {\n        switch (validator.validationType) {\n          case ValidationType.Min:\n            validators.push(Validators.max((validator as MinFormValidator).min));\n            break;\n          case ValidationType.Max:\n            validators.push(Validators.max((validator as MaxFormValidator).max));\n            break;\n          case ValidationType.Required:\n            validators.push(Validators.required);\n            break;\n          case ValidationType.Email:\n            validators.push(Validators.email);\n            break;\n          case ValidationType.MinLength:\n            validators.push(Validators.minLength((validator as MinLengthFormValidator).minLength));\n            break;\n          case ValidationType.MaxLength:\n            validators.push(Validators.maxLength((validator as MaxLengthFormValidator).maxLength));\n            break;\n          case ValidationType.Pattern:\n            validators.push(Validators.pattern((validator as PatternFormValidator).pattern));\n            break;\n          default:\n            break;\n        }\n      }\n    }\n\n    return validators;\n  }\n}\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { KeyValue } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { DisableElement } from '../model/former.model';\n\n@Component({\n  selector: 'lib-base-element-component',\n  template: '<div>do not use directly</div>',\n  standalone: false,\n})\nexport abstract class BaseElementComponent<T extends object> implements OnInit {\n  @Input() parentKey = '';\n  @Input() element!: KeyValue<string, T>;\n  @Input() formGroup!: FormGroup;\n\n  get key(): string {\n    return this.element.key;\n  }\n\n  get field(): T {\n    return this.element.value;\n  }\n\n  get control(): AbstractControl {\n    return this.formGroup.get(this.key) as AbstractControl;\n  }\n\n  ngOnInit(): void {\n    if (this.control && (this.field as DisableElement)) {\n      if ((this.field as DisableElement).disabled) {\n        this.control.disable();\n      } else {\n        this.control.enable();\n      }\n    }\n  }\n}\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component, Input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { BaseElement } from '../../model/former.model';\n\n@Component({\n  selector: 'lib-validation-error',\n  templateUrl: './validation-error.component.html',\n  styleUrls: ['./validation-error.component.css'],\n  standalone: false,\n})\nexport class ValidationErrorComponent {\n  @Input() control?: AbstractControl;\n  @Input() field?: BaseElement;\n  @Input() key?: string;\n}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div *ngIf=\"control?.invalid\">\n  <div *ngFor=\"let validator of field?.validators\">\n    <small *ngIf=\"control?.hasError(validator.validationType)\" [id]=\"key + '-message'\" class=\"p-error\">{{ validator.messageKey | translate: validator.messageArgs }}</small>\n  </div>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component } from '@angular/core';\nimport { CalendarElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-calendar-element',\n  templateUrl: './calendar-element.component.html',\n  styleUrls: ['./calendar-element.component.css'],\n  standalone: false,\n})\nexport class CalendarElementComponent extends BaseElementComponent<CalendarElement> {}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <p-floatlabel [class]=\"field.wrapperClass\" [variant]=\"field.floatLabel ? field.floatLabel : 'over'\">\n    <p-datePicker [id]=\"key\" [name]=\"key\" [formControlName]=\"key\" [dateFormat]=\"element.value.dateFormat\" [styleClass]=\"element.value.styleClass\" [panelStyle]=\"{ minWidth: 'initial' }\"></p-datePicker>\n    <label [for]=\"key\">{{ element.value.title }}</label>\n  </p-floatlabel>\n  <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component } from '@angular/core';\nimport { DropdownElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-dropdown-element',\n  templateUrl: './dropdown-element.component.html',\n  styleUrls: ['./dropdown-element.component.css'],\n  standalone: false,\n})\nexport class DropdownElementComponent extends BaseElementComponent<DropdownElement> {}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <p-floatlabel [class]=\"field.wrapperClass\" [variant]=\"field.floatLabel ? field.floatLabel : 'over'\">\n    <p-select [formControlName]=\"key\" [options]=\"element.value.options | async\" [showClear]=\"true\" optionLabel=\"{{ element.value.optionLabel || 'name' }}\" optionValue=\"{{ element.value.optionValue || 'code' }}\" [styleClass]=\"'w-full'\"> </p-select>\n    <label [for]=\"key\">{{ element.value.title }}</label>\n  </p-floatlabel>\n  <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component } from '@angular/core';\nimport { InputGroupElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-input-group-element',\n  templateUrl: './input-group-element.component.html',\n  styleUrls: ['./input-group-element.component.css'],\n  standalone: false,\n})\nexport class InputGroupElementComponent extends BaseElementComponent<InputGroupElement> {}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <p-inputgroup [class]=\"field.wrapperClass\">\n    <p-inputgroup-addon *ngIf=\"field.icon\">{{ field.icon }}</p-inputgroup-addon>\n    <p-floatlabel [variant]=\"field.floatLabel ? field.floatLabel : 'over'\">\n      <input pInputText [id]=\"key\" [name]=\"key\" [formControlName]=\"key\" [pKeyFilter]=\"field.keyFilter\" />\n      <label [for]=\"key\">{{ element.value.title }}</label>\n    </p-floatlabel>\n    <p-inputgroup-addon *ngIf=\"field.unit\">{{ field.unit }}</p-inputgroup-addon>\n  </p-inputgroup>\n  <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component } from '@angular/core';\nimport { TextElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-text-element',\n  templateUrl: './text-element.component.html',\n  styleUrls: ['./text-element.component.css'],\n  standalone: false,\n})\nexport class TextElementComponent extends BaseElementComponent<TextElement> {}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <div>\n    <p-floatlabel [class]=\"field.wrapperClass\" [variant]=\"field.floatLabel ? field.floatLabel : 'over'\">\n      <input pInputText [id]=\"key\" [name]=\"key\" [class]=\"field.cssClass\" [formControlName]=\"key\" />\n      <label [for]=\"key\">{{ element.value.title }}</label>\n    </p-floatlabel>\n    <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n  </div>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\n\nimport { ElementType } from '../former.enum';\nimport { Observable } from 'rxjs';\nimport { BaseElement, DisableElement } from '../former.model';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { ScrollerOptions } from 'primeng/api';\n\nexport type FilterProvider = LocalFilterProvider | RemoteFilterProvider;\n\nexport interface LocalFilterProvider {\n  local: (event: AutoCompleteCompleteEvent, data: any[], field?: string) => any[];\n}\n\nexport interface RemoteFilterProvider {\n  remote: string;\n}\n\nexport function isRemoteFilterProvider(value: FilterProvider): value is RemoteFilterProvider {\n  return 'remote' in value;\n}\n\nexport function isLocalFilterProvider(value: FilterProvider): value is LocalFilterProvider {\n  return 'local' in value;\n}\n\nexport type Suggestions = StaticSuggestions | ObservableSuggestions | RemoteSuggestions;\n\nexport interface RemoteSuggestions {\n  remote: string;\n}\n\nexport interface StaticSuggestions {\n  static: any[];\n}\n\nexport interface ObservableSuggestions {\n  observable: Observable<any[]>;\n}\n\n/**\n * Checks, if the suggestion are remote suggestion, i.e. loaded by a specific REST endpoint\n */\nexport function isRemoteSuggestions(value: Suggestions): value is RemoteSuggestions {\n  return 'remote' in value;\n}\n\n/**\n * Checks, if the suggestions are static suggestions, i.e. an array of plain strings or complex objects\n * @param value\n */\nexport function isStaticSuggestions(value: Suggestions): value is StaticSuggestions {\n  return 'static' in value;\n}\n\n/**\n * Checks, if the suggestions are observable suggestions, i.e. suggestions provided by an observable as an array of plain strings or complex objects\n * @param value\n */\nexport function isObservableSuggestions(value: Suggestions): value is ObservableSuggestions {\n  return 'observable' in value;\n}\n\nexport interface AutoCompleteElement extends BaseElement, DisableElement {\n  type: ElementType.AutocompleteElement;\n  suggestions: Suggestions;\n  field?: string;\n  filter?: FilterProvider;\n  width?: string;\n  options?: AutoCompleteOptions;\n}\n\n// Reflects all properties from https://primeng.org/autocomplete\nexport interface AutoCompleteOptions {\n  minLength?: number; // default 1\n  delay?: number; // default 300\n  style?: Record<string, any> | null | undefined;\n  panelStyle?: Record<string, any> | null | undefined;\n  styleClass?: string | undefined;\n  panelStyleClass?: string | undefined;\n  inputStyle?: Record<string, any> | null | undefined;\n  inputId?: string | undefined;\n  inputStyleClass?: string | undefined;\n  placeholder?: string | undefined;\n  readonly?: boolean | undefined;\n  disabled?: boolean | undefined;\n  scrollHeight?: string;\n  lazy?: boolean;\n  virtualScroll?: ScrollerOptions | undefined;\n  virtualScrollItemSize?: number;\n  virtualScrollOptions?: ScrollerOptions | undefined;\n  maxLength?: number | undefined;\n  name?: string;\n  size?: number;\n  appendTo?: any; // Target element to attach the overlay\n  autoHighlight?: boolean;\n  forceSelection?: boolean;\n  type?: string;\n  autoZIndex?: boolean;\n  baseZIndex?: boolean;\n}\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { BaseElementComponent } from '../base-element.component';\n\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n  AutoCompleteElement,\n  AutoCompleteOptions,\n  FilterProvider,\n  isLocalFilterProvider,\n  isObservableSuggestions,\n  isRemoteSuggestions,\n  isStaticSuggestions,\n  ObservableSuggestions,\n  RemoteSuggestions,\n  StaticSuggestions,\n  Suggestions,\n} from '../../model/elements/autocomplete.model';\n\n@Component({\n  selector: 'lib-autocomplete-element',\n  templateUrl: './autocomplete-element.component.html',\n  styleUrls: ['./autocomplete-element.component.css'],\n  standalone: false,\n})\nexport class AutocompleteElementComponent extends BaseElementComponent<AutoCompleteElement> implements OnInit, AfterViewInit {\n  @ViewChild('autoCompleteElement') elementRef?: ElementRef;\n\n  private readonly http: HttpClient = inject(HttpClient);\n\n  // This is the internal list of all available suggestions.\n  internalSuggestions: any[] = [];\n\n  // Filtered suggestions\n  filteredSuggestions$: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);\n\n  defaultFilter = (query: string, data: any[]) => {\n    const result = data.filter(d => d.toLowerCase().includes(query.toLowerCase()));\n    return result;\n  };\n\n  defaultComplexFilter = (query: string, field: string, data: any[]) => {\n    return data.filter(d => d[field].toLowerCase().includes(query.toLowerCase()));\n  };\n\n  /**\n   * Static suggestion can be a list of strings or a list of complex objects.\n   * @param suggestions\n   * @param query\n   * @param field\n   */\n  handleStaticSuggestions(suggestions: StaticSuggestions, query: string, field?: string, filter?: FilterProvider): any[] {\n    const data = suggestions.static;\n    let filtered: any[] = [];\n    if (this.isArrayOfStrings(data)) {\n      filtered = this.defaultFilter(query, this.internalSuggestions);\n      // filtered = this.filterWithFallback(filter, this.defaultFilter);\n    } else {\n      if (field) {\n        filtered = this.defaultComplexFilter(query, field, this.internalSuggestions);\n      } else {\n        throw new Error('Need to provide a field to filter a complex data structure');\n      }\n    }\n    return filtered;\n  }\n\n  // filterWithFallback(filter?: FilterProvider, defaultFilter: FilterProvider) {\n  //   let result = defaultFilter;\n  //   if (filter) {\n  //     result = filter;\n  //   }\n  //   return result;\n  // }\n\n  // filterReworked(event: AutoCompleteCompleteEvent) {\n  //   const query = event.query;\n  //   const suggestions: Suggestions = this.field.suggestions;\n  //   const filter = this.field.filter;\n  //   const filterField = this.field.field;\n  //\n  //   if (isStaticSuggestions(suggestions)) {\n  //     this.filteredSuggestions$.next(this.handleStaticSuggestions(suggestions, query, filterField, filter));\n  //   } else if (isObservableSuggestions(suggestions)) {\n  //   } else if (isRemoteSuggestions(suggestions)) {\n  //   } else {\n  //     console.warn('Provided suggestion type is not supported', suggestions);\n  //   }\n  // }\n\n  filter(event: AutoCompleteCompleteEvent) {\n    let filtered: any[] = [];\n    const query = event.query;\n\n    const suggestions: Suggestions = this.field.suggestions;\n    const filter = this.field.filter;\n\n    if (filter) {\n      if (isLocalFilterProvider(filter)) {\n        filtered = filter.local(event, this.internalSuggestions, this.field.field);\n      } else {\n        const evaluated = eval(filter.remote);\n        filtered = evaluated(event, this.internalSuggestions, this.field.field);\n      }\n      this.filteredSuggestions$.next(filtered);\n    } else {\n      if (isStaticSuggestions(suggestions)) {\n        filtered = this.handleStaticSuggestions(suggestions, query, this.field.field);\n        this.filteredSuggestions$.next(filtered);\n      } else if (isObservableSuggestions(this.field.suggestions)) {\n        if (!this.isArrayOfStrings(this.internalSuggestions)) {\n          if (!this.field.field) {\n            throw new Error('You have to provide a custom filter function or a field to filter on complex suggestions.');\n          }\n\n          for (const suggestion of this.internalSuggestions as any[]) {\n            if (suggestion[this.field.field!].toLowerCase().includes(query.toLowerCase())) {\n              filtered.push(suggestion);\n            }\n          }\n        } else {\n          for (const suggestion of this.internalSuggestions as any[]) {\n            if (suggestion.toLowerCase().includes(query.toLowerCase())) {\n              filtered.push(suggestion);\n            }\n          }\n        }\n        this.filteredSuggestions$.next(filtered);\n      } else if (isRemoteSuggestions(this.field.suggestions)) {\n        this.http.get<any[]>(this.field.suggestions.remote + '?name=' + query).subscribe(data => this.filteredSuggestions$.next(data as any[]));\n      } else {\n        console.error('Suggestion type unknown');\n      }\n    }\n  }\n\n  getAvailableFields(data: any[]) {\n    if (data && data.length > 1) {\n      return Object.getOwnPropertyNames(data[0]);\n    } else {\n      return '';\n    }\n  }\n\n  checkSuggestionsIncludesField(field: string): boolean {\n    return this.internalSuggestions && this.internalSuggestions.every(i => Object.prototype.hasOwnProperty.call(i, field));\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n\n    this.validateParameters();\n\n    if (isRemoteSuggestions(this.element.value.suggestions)) {\n      this.http.get<any[]>((this.element.value.suggestions as RemoteSuggestions).remote).subscribe(data => (this.internalSuggestions = data));\n    }\n\n    if (isStaticSuggestions(this.element.value.suggestions)) {\n      this.internalSuggestions = (this.element.value.suggestions as StaticSuggestions).static;\n      console.log('static');\n    }\n\n    if (isObservableSuggestions(this.element.value.suggestions)) {\n      // TODO: destroy\n      (this.element.value.suggestions as ObservableSuggestions).observable.subscribe(data => (this.internalSuggestions = data));\n      console.log('observable');\n    }\n\n    // if (isObservable(this.element.value.suggestions)) {\n    //   (this.field.suggestions as Observable<any>)?.subscribe((data: any) => (this.internalSuggestions = data));\n    // } else {\n    //   this.internalSuggestions = this.element.value.suggestions as any[];\n    // }\n    // this.field.suggestions.subscribe((data: any) => (this.suggestions = data));\n  }\n\n  ngAfterViewInit(): void {\n    if (this.field.options) {\n      Object.keys(this.field.options).forEach(option => {\n        // if (this.elementRef?.hasOwnProperty(option)) {\n        if (Object.prototype.hasOwnProperty.call(this.elementRef, option)) {\n          (this.elementRef as any)[option] = (this.field.options as any)[option as keyof AutoCompleteOptions];\n        }\n      });\n    }\n  }\n\n  isArrayOfStrings(value: unknown): value is string[] {\n    return Array.isArray(value) && value.every(item => typeof item === 'string');\n  }\n\n  validateParameters(): void {\n    if (this.element.value.suggestions) {\n      if (isStaticSuggestions(this.element.value.suggestions)) {\n        if (!this.element.value.field && !this.isArrayOfStrings(this.element.value.suggestions.static)) {\n          throw new Error('You have to provide a field to filter on complex static suggestions.');\n        }\n      }\n\n      // if (isObservableSuggestions(this.element.value.suggestions)) {\n      //   if (!this.element.value.field && !this.isArrayOfStrings(this.element.value.suggestions.observable)) {\n      //     throw new Error('You have to provide a field to filter on complex static suggestions.');\n      //   }\n      // }\n    }\n\n    // if (!isObservable(this.element.value.suggestions)) {\n    //   if (this.element.value.suggestions && !this.element.value.field && !this.isArrayOfStrings(this.element.value.suggestions)) {\n    //     throw new Error('You have to provide a field to filter on complex static suggestions.');\n    //   }\n    // }\n  }\n}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <p-floatlabel [class]=\"field.wrapperClass\" [variant]=\"field.floatLabel ? field.floatLabel : 'over'\">\n    <p-autoComplete\n      #autoCompleteElement\n      [formControlName]=\"key\"\n      [suggestions]=\"(filteredSuggestions$ | async) || []\"\n      [optionLabel]=\"field.field\"\n      (completeMethod)=\"filter($event)\"\n      [style]=\"{ width: field.width ?? '100%' }\"\n      [inputStyle]=\"{ width: '100%' }\"\n      [inputId]=\"key\"></p-autoComplete>\n    <label [for]=\"key\">{{ element.value.title }}</label>\n  </p-floatlabel>\n  <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component } from '@angular/core';\nimport { CheckboxElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-checkbox-element',\n  templateUrl: './checkbox-element.component.html',\n  styleUrls: ['./checkbox-element.component.css'],\n  standalone: false,\n})\nexport class CheckboxElementComponent extends BaseElementComponent<CheckboxElement> {}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\" [class]=\"field.wrapperClass\">\n  <p-checkbox [formControlName]=\"key\" [value]=\"field.value\" [id]=\"key\"></p-checkbox>\n  <label for=\"{{ key }}\">{{ field.title }}</label>\n  <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component, OnInit } from '@angular/core';\nimport { NumberElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\nimport { NumberMode } from '../../model/former.enum';\n\n@Component({\n  selector: 'lib-number-element',\n  templateUrl: './number-element.component.html',\n  styleUrls: ['./number-element.component.css'],\n  standalone: false,\n})\nexport class NumberElementComponent extends BaseElementComponent<NumberElement> implements OnInit {\n  get mode() {\n    if (this.field && this.field.mode) {\n      return this.field.mode;\n    } else {\n      return NumberMode.Decimal;\n    }\n  }\n\n  get currency() {\n    if (this.field && this.field.currency) {\n      return this.field.currency;\n    } else {\n      return 'EUR';\n    }\n  }\n}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <div>\n    <p-floatlabel [class]=\"field.wrapperClass\" [variant]=\"field.floatLabel ? field.floatLabel : 'over'\">\n      <p-inputNumber [id]=\"key\" [name]=\"key\" [mode]=\"mode\" [currency]=\"currency\" [locale]=\"field.locale\" [minFractionDigits]=\"field.minFractionDigits\" [maxFractionDigits]=\"field.maxFractionDigits\" [class]=\"field.cssClass\" [formControlName]=\"key\" />\n      <label [for]=\"key\">{{ element.value.title }}</label>\n    </p-floatlabel>\n    <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n  </div>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component } from '@angular/core';\nimport { TextAreaElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-text-area-element',\n  templateUrl: './text-area-element.component.html',\n  styleUrls: ['./text-area-element.component.css'],\n  standalone: false,\n})\nexport class TextAreaElementComponent extends BaseElementComponent<TextAreaElement> {}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <div>\n    <p-floatlabel [class]=\"field.wrapperClass\" [variant]=\"field.floatLabel ? field.floatLabel : 'over'\">\n      <textarea pTextarea [id]=\"key\" [name]=\"key\" [rows]=\"field.rows\" [cols]=\"field.cols\" [class]=\"field.cssClass\" [formControlName]=\"key\" [autoResize]=\"false\"></textarea>\n      <label [for]=\"key\">{{ element.value.title }}</label>\n    </p-floatlabel>\n    <lib-validation-error [control]=\"control\" [key]=\"key\" [field]=\"field\"></lib-validation-error>\n  </div>\n</div>\n","import { Component } from '@angular/core';\nimport { DisplayTextElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-display-text-element',\n  templateUrl: './display-text-element.component.html',\n  styleUrls: ['./display-text-element.component.css'],\n  standalone: false,\n})\nexport class DisplayTextElementComponent extends BaseElementComponent<DisplayTextElement> {}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <div>\n    <span [class]=\"field.wrapperClass\">\n      <label [class]=\"field.labelClass\" [for]=\"key\">{{ element.value.title }}</label>\n      <span [id]=\"key\">{{ control.value }}</span>\n    </span>\n  </div>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Component, Input, OnChanges, QueryList, SimpleChanges, TemplateRef } from '@angular/core';\nimport { TemplateNameDirective } from '../../directive/template-name.directive';\nimport { TemplateElement } from '../../model/former.model';\nimport { BaseElementComponent } from '../base-element.component';\n\n@Component({\n  selector: 'lib-template-element',\n  templateUrl: './template-element.component.html',\n  styleUrls: ['./template-element.component.css'],\n  standalone: false,\n})\nexport class TemplateElementComponent extends BaseElementComponent<TemplateElement> implements OnChanges {\n  @Input() templates?: QueryList<TemplateNameDirective>;\n\n  template?: TemplateRef<any>;\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.templates) {\n      this.template = this.templates.find(template => template.name === this.field.templateId)?.template;\n    }\n  }\n}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<ng-container [ngTemplateOutlet]=\"template!\"></ng-container>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { KeyValue } from '@angular/common';\nimport { Component, inject, Input, QueryList, Sanitizer } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ElementType } from '../model/former.enum';\nimport { CardElement, Element, GridColumnElement, GridLayoutElement, GroupElement, LayoutElement } from '../model/former.model';\nimport { BaseElementComponent } from '../elements/base-element.component';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: '[lib-generated-form-element]',\n  templateUrl: './generated-form-element.component.html',\n  styleUrls: ['./generated-form-element.component.css'],\n  standalone: false,\n})\nexport class GeneratedFormElementComponent {\n  protected readonly TextElement = ElementType.TextElement;\n  protected readonly DisplayTextElement = ElementType.DisplayTextElement;\n  protected readonly TextAreaElement = ElementType.TextAreaElement;\n  protected readonly NumberElement = ElementType.NumberElement;\n  protected readonly GroupElement = ElementType.GroupElement;\n  protected readonly CalendarElement = ElementType.CalendarElement;\n  protected readonly DropdownElement = ElementType.DropdownElement;\n  protected readonly InputGroupElement = ElementType.InputGroupElement;\n  protected readonly GridLayoutElement = ElementType.GridLayoutElement;\n  protected readonly GridColumnElement = ElementType.GridColumnElement;\n  protected readonly AutocompleteElement = ElementType.AutocompleteElement;\n  protected readonly CheckboxElement = ElementType.CheckboxElement;\n  protected readonly CardElement = ElementType.CardElement;\n  protected readonly TemplateElement = ElementType.TemplateElement;\n\n  @Input() parentKey = '';\n  @Input() element!: KeyValue<string, Element>;\n  @Input() formGroup!: FormGroup;\n  @Input() class!: string;\n\n  @Input() templates?: QueryList<any>;\n\n  get anyElement(): any {\n    return this.element as any;\n  }\n}\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: '[lib-grid-layout-element]',\n  templateUrl: '../elements/grid-layout-element/grid-layout-element.component.html',\n  styleUrls: ['../elements/grid-layout-element/grid-layout-element.component.css'],\n  standalone: false,\n})\nexport class GridLayoutElementComponent extends BaseElementComponent<GridLayoutElement> {\n  sanitizer = inject(DomSanitizer);\n\n  getElementClass(element: any) {\n    if ((element.value as any).type === ElementType.GridColumnElement) {\n      return (element.value as any as LayoutElement).class + ' col-no-padding';\n    } else {\n      return '';\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  originalOrder = (a: KeyValue<any, any>, b: KeyValue<any, any>): number => {\n    return 0;\n  };\n}\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: '[lib-grid-column-element]',\n  templateUrl: '../elements/grid-column-element/grid-column-element.component.html',\n  styleUrls: ['../elements/grid-column-element/grid-column-element.component.css'],\n  standalone: false,\n})\nexport class GridColumnElementComponent extends BaseElementComponent<GridColumnElement> {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  originalOrder = (a: KeyValue<any, any>, b: KeyValue<any, any>): number => {\n    return 0;\n  };\n}\n\n@Component({\n  selector: 'lib-group-element',\n  templateUrl: '../elements/group-element/group-element.component.html',\n  styleUrls: ['../elements/group-element/group-element.component.css'],\n  standalone: false,\n})\nexport class GroupElementComponent extends BaseElementComponent<GroupElement> {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  originalOrder = (a: KeyValue<any, any>, b: KeyValue<any, any>): number => {\n    return 0;\n  };\n\n  get childGroup() {\n    return this.formGroup.get(this.key) as FormGroup;\n  }\n}\n\n@Component({\n  selector: 'lib-card-element',\n  templateUrl: '../elements/card-element/card-element.component.html',\n  styleUrls: ['../elements/card-element/card-element.component.css'],\n  standalone: false,\n})\nexport class CardElementComponent extends BaseElementComponent<CardElement> {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  originalOrder = (a: KeyValue<any, any>, b: KeyValue<any, any>): number => {\n    return 0;\n  };\n}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [ngSwitch]=\"element.value.type\">\n  <lib-text-element *ngSwitchCase=\"TextElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-text-element>\n  <lib-display-text-element *ngSwitchCase=\"DisplayTextElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-display-text-element>\n  <lib-text-area-element *ngSwitchCase=\"TextAreaElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-text-area-element>\n  <lib-number-element *ngSwitchCase=\"NumberElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-number-element>\n  <lib-group-element *ngSwitchCase=\"GroupElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-group-element>\n  <lib-calendar-element *ngSwitchCase=\"CalendarElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-calendar-element>\n  <lib-dropdown-element *ngSwitchCase=\"DropdownElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-dropdown-element>\n  <lib-checkbox-element *ngSwitchCase=\"CheckboxElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-checkbox-element>\n  <lib-input-group-element *ngSwitchCase=\"InputGroupElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-input-group-element>\n  <lib-autocomplete-element *ngSwitchCase=\"AutocompleteElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-autocomplete-element>\n  <lib-card-element *ngSwitchCase=\"CardElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></lib-card-element>\n  <div lib-grid-layout-element *ngSwitchCase=\"GridLayoutElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></div>\n  <lib-template-element *ngSwitchCase=\"TemplateElement\" [element]=\"anyElement\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\" [templates]=\"templates\"></lib-template-element>\n</div>\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [class]=\"field.class + ' no-top-margin'\">\n  <ng-container *ngFor=\"let element of field.elements | keyvalue: originalOrder\">\n    <div [class]=\"getElementClass(element)\">\n      <div lib-grid-column-element [element]=\"element\" [formGroup]=\"formGroup\" [parentKey]=\"parentKey\"></div>\n    </div>\n  </ng-container>\n</div>\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<ng-container *ngFor=\"let element of field.elements | keyvalue: originalOrder\">\n  <div lib-generated-form-element [formGroup]=\"formGroup\" [element]=\"element\" [parentKey]=\"key\"></div>\n</ng-container>\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div [formGroup]=\"formGroup\">\n  <div *ngFor=\"let element of field.elements | keyvalue: originalOrder\" [formGroupName]=\"key\">\n    <div lib-generated-form-element [formGroup]=\"childGroup\" [element]=\"element\" [parentKey]=\"key\"></div>\n  </div>\n</div>\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<p-card [header]=\"field.title\" [styleClass]=\"field.cssClass\">\n  <div *ngFor=\"let element of field.elements | keyvalue: originalOrder\">\n    <div lib-generated-form-element [formGroup]=\"formGroup\" [element]=\"element\" [parentKey]=\"key\"></div>\n  </div>\n</p-card>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'ng-template[name]',\n  standalone: false,\n})\nexport class TemplateNameDirective {\n  @Input() name?: string;\n\n  constructor(public template: TemplateRef<any>) {}\n}\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { KeyValue } from '@angular/common';\nimport { AfterContentChecked, ChangeDetectorRef, Component, ContentChildren, EventEmitter, inject, Input, OnChanges, OnInit, Output, QueryList, SimpleChanges } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { TemplateNameDirective } from '../directive/template-name.directive';\nimport { FormerService } from '../former.service';\nimport { ActionType } from '../model/former.enum';\nimport { ActionButton, ActionResult, FormDefinition } from '../model/former.model';\n\n@Component({\n  selector: 'lib-generated-form',\n  templateUrl: './generated-form.component.html',\n  styleUrls: ['./generated-form.component.css'],\n  standalone: false,\n})\nexport class GeneratedFormComponent implements OnInit, OnChanges, AfterContentChecked {\n  readonly formerService = inject(FormerService);\n  readonly cdr = inject(ChangeDetectorRef);\n\n  @ContentChildren(TemplateNameDirective)\n  templates!: QueryList<TemplateNameDirective>;\n\n  @Input() formDefinition!: FormDefinition;\n\n  @Input() formValues!: any;\n\n  form!: FormGroup;\n\n  @Output() changesEvent = new EventEmitter<any>();\n  @Output() submitEvent = new EventEmitter<ActionResult>();\n\n  actionHandler?: ActionButton;\n\n  ngOnInit(): void {\n    this.form = this.formerService.generateForm(this.formDefinition);\n    this.form.valueChanges.subscribe(data => this.changesEvent.emit(data));\n    this.form.patchValue(this.formValues);\n\n    this.form.valueChanges.subscribe(() => this.updateButtonState());\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.form && changes['formValues']) {\n      this.form.patchValue(this.formValues, { emitEvent: false });\n    }\n  }\n\n  ngAfterContentChecked(): void {\n    this.cdr.detectChanges();\n  }\n\n  // Preserve original property order\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  originalOrder = (a: KeyValue<any, any>, b: KeyValue<any, any>): number => {\n    return 0;\n  };\n\n  setActionHandler(action: ActionButton) {\n    this.actionHandler = action;\n  }\n\n  callActionHandler() {\n    if (this.actionHandler) {\n      this.submitEvent.emit({\n        action: this.actionHandler,\n        payload: this.form.value,\n      });\n    }\n  }\n\n  public isButtonDisabled(action: KeyValue<string, ActionButton>) {\n    return action.value.disabled;\n  }\n\n  findActionForKey(action: KeyValue<string, ActionButton>): ActionButton | undefined {\n    return this.formDefinition.actions[action.key ?? ''];\n  }\n\n  findSubmitAction(): ActionButton | undefined {\n    return Object.values(this.formDefinition.actions).find(action => action.type === ActionType.Submit);\n  }\n\n  private updateButtonState() {\n    if (this.findSubmitAction()) {\n      if (this.form.invalid) {\n        this.findSubmitAction()!.disabled = true;\n      } else {\n        this.findSubmitAction()!.disabled = false;\n      }\n    }\n  }\n\n  public reset() {\n    this.form.reset();\n  }\n}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div>\n  <form [formGroup]=\"form\">\n    <div *ngFor=\"let element of formDefinition.elements | keyvalue: originalOrder\">\n      <div lib-generated-form-element [element]=\"element\" [formGroup]=\"form\" [templates]=\"templates\"></div>\n    </div>\n  </form>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { KeyValue } from '@angular/common';\n\nexport default class FormerUtils {\n  static asKeyValueArray<V>(obj: Record<string, V>): KeyValue<string, V>[] {\n    return Array.from(FormerUtils.keyValueGenerator(obj));\n  }\n\n  static *keyValueGenerator<V>(obj: Record<string, V>): Iterable<KeyValue<string, V>> {\n    for (const key of Object.keys(obj)) {\n      const value = obj[key];\n      yield { key, value };\n    }\n  }\n}\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { KeyValue } from '@angular/common';\nimport { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport FormerUtils from '../former.utils';\nimport { GeneratedFormComponent } from '../generated-form/generated-form.component';\nimport { Align } from '../model/former.enum';\nimport { ActionButton } from '../model/former.model';\n\n@Component({\n  selector: 'lib-generated-form-actions',\n  templateUrl: './generated-form-actions.component.html',\n  styleUrls: ['./generated-form-actions.component.css'],\n  standalone: false,\n})\nexport class GeneratedFormActionsComponent implements OnInit, OnChanges {\n  @Input() form?: GeneratedFormComponent;\n\n  leftActions: KeyValue<string, ActionButton>[] = [];\n  rightActions: KeyValue<string, ActionButton>[] = [];\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.form && this.form.formDefinition && this.form.formDefinition.actions && changes['form']) {\n      this.initActions();\n    }\n  }\n\n  onButtonClick(action: ActionButton) {\n    const form = this.form;\n    if (form) {\n      form.setActionHandler(action);\n      form.callActionHandler();\n    }\n  }\n\n  isButtonDisabled(action: KeyValue<string, ActionButton>) {\n    return this.form?.isButtonDisabled(action);\n  }\n\n  ngOnInit(): void {\n    this.initActions();\n  }\n\n  initActions() {\n    if (this.form && this.form.formDefinition && this.form.formDefinition.actions) {\n      this.leftActions = FormerUtils.asKeyValueArray(this.form?.formDefinition.actions).filter(action => action.value.align === Align.left);\n      this.rightActions = FormerUtils.asKeyValueArray(this.form?.formDefinition.actions).filter(action => action.value.align !== Align.left);\n    }\n  }\n}\n","<!--\n  ~ Apache-2.0 Licence\n  ~ Copyright (c) 2023 Tobias Kronschnabl\n  ~\n  ~ Please see LICENCE for complete licence text.\n  -->\n<div class=\"flex flex-row justify-between flex-wrap\">\n  <div class=\"mt-2 flex items-center justify-center gap-1\">\n    <button *ngFor=\"let action of leftActions\" pButton [label]=\"action.value.label\" [disabled]=\"isButtonDisabled(action)\" (click)=\"onButtonClick(action.value)\"></button>\n  </div>\n\n  <div class=\"mt-2 flex items-center justify-center gap-1\">\n    <button *ngFor=\"let action of rightActions\" pButton [label]=\"action.value.label\" [disabled]=\"isButtonDisabled(action)\" (click)=\"onButtonClick(action.value)\"></button>\n  </div>\n</div>\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { MessageModule } from 'primeng/message';\nimport { CalendarElementComponent } from './elements/calendar-element/calendar-element.component';\nimport { DropdownElementComponent } from './elements/dropdown-element/dropdown-element.component';\nimport { InputGroupElementComponent } from './elements/input-group-element/input-group-element.component';\nimport { TextElementComponent } from './elements/text-element/text-element.component';\nimport { CardElementComponent, GeneratedFormElementComponent, GridColumnElementComponent, GridLayoutElementComponent, GroupElementComponent } from './generated-form-element/generated-form-element.component';\nimport { GeneratedFormComponent } from './generated-form/generated-form.component';\nimport { AutocompleteElementComponent } from './elements/autocomplete-element/autocomplete-element.component';\nimport { CheckboxElementComponent } from './elements/checkbox-element/checkbox-element.component';\nimport { GeneratedFormActionsComponent } from './generated-form-actions/generated-form-actions.component';\nimport { ValidationErrorComponent } from './elements/validation-error/validation-error.component';\nimport { NumberElementComponent } from './elements/number-element/number-element.component';\nimport { TextAreaElementComponent } from './elements/text-area-element/text-area-element.component';\nimport { DisplayTextElementComponent } from './elements/display-text-element/display-text-element.component';\nimport { TemplateElementComponent } from './elements/template-element/template-element.component';\nimport { TemplateNameDirective } from './directive/template-name.directive';\nimport { TextareaModule } from 'primeng/textarea';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { SelectModule } from 'primeng/select';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\n\nconst primeng = [\n  CardModule,\n  InputTextModule,\n  DatePickerModule,\n  SelectModule,\n  MessageModule,\n  KeyFilterModule,\n  AutoCompleteModule,\n  CheckboxModule,\n  ButtonModule,\n  InputNumberModule,\n  TextareaModule,\n  FloatLabelModule,\n  InputGroupModule,\n  InputGroupAddonModule,\n];\n\n@NgModule({\n  declarations: [\n    GeneratedFormComponent,\n    GeneratedFormElementComponent,\n    TextElementComponent,\n    GroupElementComponent,\n    CalendarElementComponent,\n    DropdownElementComponent,\n    InputGroupElementComponent,\n    GridLayoutElementComponent,\n    GridColumnElementComponent,\n    AutocompleteElementComponent,\n    CheckboxElementComponent,\n    GeneratedFormActionsComponent,\n    ValidationErrorComponent,\n    CardElementComponent,\n    NumberElementComponent,\n    TextAreaElementComponent,\n    DisplayTextElementComponent,\n    TemplateElementComponent,\n    TemplateNameDirective,\n  ],\n  imports: [CommonModule, TranslateModule, ReactiveFormsModule, ...primeng],\n  exports: [GeneratedFormComponent, GeneratedFormActionsComponent, TemplateNameDirective, ...primeng],\n  // providers: [provideAnimationsAsync(), providePrimeNG({ theme: { preset: Aura } })],\n})\nexport class FormerModule {}\n","/*\n * Apache-2.0 Licence\n * Copyright (c) 2023 Tobias Kronschnabl\n *\n * Please see LICENCE for complete licence text.\n */\nimport { KeyFilterPattern } from 'primeng/keyfilter';\nimport { Observable } from 'rxjs';\nimport { ActionType, Align, ElementType, NumberMode, ValidationType } from './former.enum';\nimport { AutoCompleteElement } from './elements/autocomplete.model';\n\nexport interface FormDefinition {\n  title?: string;\n  elements: Elements;\n  actions: Actions;\n}\n\nexport type Element =\n  | TextElement\n  | DisplayTextElement\n  | TextAreaElement\n  | NumberElement\n  | GroupElement\n  | CalendarElement\n  | DropdownElement\n  | InputGroupElement\n  | AutoCompleteElement\n  | CheckboxElement\n  | CardElement\n  | GridLayoutElement\n  | GridColumnElement\n  | TemplateElement;\n\nexport type Elements = Record<string, Element>;\n\nexport type LayoutElements = Record<string, GridColumnElement>;\n\nexport type FloatLabelType = 'in' | 'over' | 'on';\n\nexport interface BaseElement {\n  title?: string;\n  cssClass?: string;\n  validators?: FormValidator[];\n  wrapperClass?: string;\n  floatLabel?: FloatLabelType;\n  styleClass?: string;\n}\n\nexport interface DisableElement {\n  disabled?: boolean;\n}\n\nexport interface UnitElement {\n  icon?: string;\n  unit?: string;\n  keyFilter?: RegExp | KeyFilterPattern | null | undefined;\n}\n\nexport interface TextElement extends BaseElement, DisableElement {\n  type: ElementType.TextElement;\n}\n\nexport interface DisplayTextElement extends BaseElement, DisableElement {\n  type: ElementType.DisplayTextElement;\n  labelClass?: string;\n}\n\nexport interface TextAreaElement extends BaseElement, DisableElement {\n  type: ElementType.TextAreaElement;\n  rows: number;\n  cols?: number;\n}\n\nexport interface NumberElement extends BaseElement, DisableElement {\n  type: ElementType.NumberElement;\n  mode?: NumberMode;\n  currency?: string;\n  locale?: string;\n  minFractionDigits?: number;\n  maxFractionDigits?: number;\n}\n\nexport interface InputGroupElement extends BaseElement, DisableElement, UnitElement {\n  type: ElementType.InputGroupElement;\n}\n\nexport interface GroupElement extends BaseElement, DisableElement {\n  type: ElementType.GroupElement;\n  elements: Elements;\n}\n\nexport interface CalendarElement extends BaseElement, DisableElement {\n  type: ElementType.CalendarElement;\n  dateFormat: string;\n}\n\nexport interface DropdownElement extends BaseElement, DisableElement {\n  type: ElementType.DropdownElement;\n  options: Observable<any>;\n  optionLabel?: string;\n  optionValue?: string;\n}\n\n// export interface AutoCompleteElement extends BaseElement, DisableElement {\n//   type: ElementType.AutocompleteElement;\n//   suggestions: Observable<any>;\n//   field?: string;\n//   filter?: (event: AutoCompleteCompleteEvent, data: any[]) => any[];\n//   width?: string;\n//   options?: AutoCompleteOptions;\n// }\n\n// export interface AutoCompleteOptions {\n//   minLength?: number;\n//   delay?: number;\n//   style?: Record<string, any> | null | undefined;\n//   panelStyle?: Record<string, any> | null | undefined;\n//   styleClass?: string | undefined;\n//   panelStyleClass?: string | undefined;\n//   inputStyle?: Record<string, any> | null | undefined;\n//   inputId?: string | undefined;\n//   inputStyleClass?: string | undefined;\n//   placeholder?: string | undefined;\n//   readonly?: boolean | undefined;\n//   disabled?: boolean | undefined;\n//   scrollHeight?: string;\n//   lazy?: boolean;\n//   virtualScroll?: ScrollerOptions | undefined;\n//   maxLength?: number | undefined;\n// }\n\nexport interface CheckboxElement extends BaseElement, DisableElement {\n  type: ElementType.CheckboxElement;\n  value: string;\n}\n\nexport interface CardElement extends BaseElement {\n  type: ElementType.CardElement;\n  elements: Elements;\n}\n\nexport interface TemplateElement extends BaseElement {\n  type: ElementType.TemplateElement;\n  templateId: string;\n}\n\n// region Layout Elements\n\nexport interface LayoutElement {\n  class: string;\n}\n\nexport interface GridLayoutElement extends LayoutElement {\n  type: ElementType.GridLayoutElement;\n  elements: LayoutElements;\n}\n\nexport interface GridColumnElement extends LayoutElement {\n  type: ElementType.GridColumnElement;\n  elements: Elements;\n}\n\n// endregion\n\n// region Buttons\n\nexport interface AlignableButton {\n  align?: Align;\n}\n\nexport interface FormButton extends AlignableButton, DisableElement {\n  type: ActionType.Button;\n  label: string;\n}\n\nexport interface SubmitButton extends AlignableButton, DisableElement {\n  type: ActionType.Submit;\n  label: string;\n}\n\nexport interface CancelButton extends AlignableButton, DisableElement {\n  type: ActionType.CancelButton;\n  label: string;\n}\n\nexport type ActionButton = FormButton | SubmitButton | CancelButton;\n\nexport type Actions = Record<string, ActionButton>;\n\nexport interface ActionResult {\n  action: ActionButton;\n  payload: any;\n}\n\n// endregion\n\n// region Validation\n\nexport type FormValidator = RequiredFormValidator | MinLengthFormValidator | MaxLengthFormValidator | MinFormValidator | MaxFormValidator | PatternFormValidator | EmailFormValidator;\n\nexport interface BaseFormValidator {\n  validationType: ValidationType;\n  messageKey: string;\n  messageArgs?: any;\n}\n\nexport type RequiredFormValidator = BaseFormValidator;\n\nexport interface MinLengthFormValidator extends BaseFormValidator {\n  minLength: number;\n}\n\nexport interface MaxLengthFormValidator extends BaseFormValidator {\n  maxLength: number;\n}\n\nexport interface MinFormValidator extends BaseFormValidator {\n  min: number;\n}\n\nexport interface MaxFormValidator extends BaseFormValidator {\n  max: number;\n}\n\nexport interface PatternFormValidator extends BaseFormValidator {\n  pattern: RegExp | string;\n}\n\nexport type EmailFormValidator = BaseFormValidator;\n\n// endregion\n","/*\n * Public API Surface of former\n */\n\nexport * from './lib/former.service';\nexport * from './lib/former.module';\nexport * from './lib/generated-form/generated-form.component';\nexport * from './lib/generated-form-actions/generated-form-actions.component';\nexport * from './lib/model/former.model';\nexport * from './lib/model/former.enum';\nexport * from './lib/directive/template-name.directive';\nexport * from './lib/model/elements/autocomplete.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4.ValidationErrorComponent","i5","i3","i8.ValidationErrorComponent","i3.ValidationErrorComponent","i3.TextElementComponent","i4.CalendarElementComponent","i5.DropdownElementComponent","i6.InputGroupElementComponent","i9.NumberElementComponent","i10.TextAreaElementComponent","i11.DisplayTextElementComponent","i12.TemplateElementComponent","i3.GeneratedFormElementComponent"],"mappings":"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"}