{"version":3,"file":"core.mjs","sources":["../../../../projects/ng-dynamic-forms/core/src/lib/utils/core.utils.ts","../../../../projects/ng-dynamic-forms/core/src/lib/component/dynamic-form-control.component.ts","../../../../projects/ng-dynamic-forms/core/src/lib/component/dynamic-form-array.component.ts","../../../../projects/ng-dynamic-forms/core/src/lib/component/dynamic-form-group.component.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form-component.service.ts","../../../../projects/ng-dynamic-forms/core/src/lib/component/dynamic-form.component.ts","../../../../projects/ng-dynamic-forms/core/src/lib/component/dynamic-form-control-event.ts","../../../../projects/ng-dynamic-forms/core/src/lib/decorator/serializable.decorator.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/dynamic-form-control.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/dynamic-form-value-control.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/form-array/dynamic-form-array.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/dynamic-check-control.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/checkbox/dynamic-checkbox.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/dynamic-input-control.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/input/dynamic-input.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/directive/dynamic-template.directive.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form-layout.service.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/misc/dynamic-form-control-validation.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form-validators.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form-validation-matchers.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form-validation.service.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/form-group/dynamic-form-group.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/checkbox/dynamic-checkbox-group.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/colorpicker/dynamic-colorpicker.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/dynamic-date-control.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/datepicker/dynamic-datepicker.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/editor/dynamic-editor.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/dynamic-file-control.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/file-upload/dynamic-file-upload.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/dynamic-option-control.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/radio/dynamic-radio-group.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/rating/dynamic-rating.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/select/dynamic-select.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/slider/dynamic-slider.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/switch/dynamic-switch.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/textarea/dynamic-textarea.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/model/timepicker/dynamic-timepicker.model.ts","../../../../projects/ng-dynamic-forms/core/src/lib/utils/json.utils.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form.service.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form-relation-matchers.ts","../../../../projects/ng-dynamic-forms/core/src/lib/service/dynamic-form-relation.service.ts","../../../../projects/ng-dynamic-forms/core/src/lib/component/dynamic-form-control-container.component.ts","../../../../projects/ng-dynamic-forms/core/src/lib/component/dynamic-form-control-with-template.component.ts","../../../../projects/ng-dynamic-forms/core/src/lib/directive/dynamic-list.directive.ts","../../../../projects/ng-dynamic-forms/core/src/lib/utils/autofill.utils.ts","../../../../projects/ng-dynamic-forms/core/src/lib/core.module.ts","../../../../projects/ng-dynamic-forms/core/src/core.ts"],"sourcesContent":["export function isBoolean(value: any): value is boolean {\n    return typeof value === \"boolean\";\n}\n\n// tslint:disable-next-line:ban-types\nexport function isFunction(value: any): value is Function {\n    return typeof value === \"function\";\n}\n\nexport function isNumber(value: any): value is number {\n    return typeof value === \"number\";\n}\n\nexport function isObject(value: any): value is object {\n    return typeof value === \"object\" && value !== null;\n}\n\nexport function isString(value: any): value is string {\n    return typeof value === \"string\";\n}\n","import { EventEmitter } from \"@angular/core\";\nimport { AbstractControl, UntypedFormGroup } from \"@angular/forms\";\nimport { DynamicFormControl } from \"./dynamic-form-control-interface\";\nimport { DynamicFormControlCustomEvent } from \"./dynamic-form-control-event\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport {\n    DynamicFormControlLayout,\n    DynamicFormControlLayoutContext,\n    DynamicFormControlLayoutPlace\n} from \"../model/misc/dynamic-form-control-layout.model\";\nimport { DynamicFormValidationService } from \"../service/dynamic-form-validation.service\";\nimport {\n    DynamicFormLayout,\n    DynamicFormLayoutService,\n    DynamicFormControlTemplates\n} from \"../service/dynamic-form-layout.service\";\nimport { isString } from \"../utils/core.utils\";\n\nexport abstract class DynamicFormControlComponent implements DynamicFormControl {\n    formLayout?: DynamicFormLayout;\n    group!: UntypedFormGroup;\n    layout?: DynamicFormControlLayout;\n    model!: DynamicFormControlModel;\n    templates?: DynamicFormControlTemplates;\n\n    blur!: EventEmitter<any>;\n    change!: EventEmitter<any>;\n    customEvent?: EventEmitter<DynamicFormControlCustomEvent>;\n    focus!: EventEmitter<any>;\n\n    private _hasFocus = false;\n\n    protected constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) {\n    }\n\n    get control(): AbstractControl | never {\n        const control = this.group.get(this.model.id);\n\n        if (control === null) {\n            throw new Error(`form group does not contain an abstract control with id ${this.model.id}`);\n        }\n\n        return control;\n    }\n\n    get id(): string {\n        return this.layoutService.getElementId(this.model);\n    }\n\n    get hasFocus(): boolean {\n        return this._hasFocus;\n    }\n\n    get isInvalid(): boolean {\n        return this.control.invalid;\n    }\n\n    get isValid(): boolean {\n        return this.control.valid;\n    }\n\n    get errorMessages(): string[] {\n        return this.validationService.createErrorMessages(this.control, this.model);\n    }\n\n    get showErrorMessages(): boolean {\n        return this.validationService.showErrorMessages(this.control, this.model, this.hasFocus);\n    }\n\n    getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace,\n             model: DynamicFormControlModel = this.model): string {\n        const controlLayout = model === this.model ? this.layout :\n            this.layoutService.findByModel(model, this.formLayout) ?? model.layout as DynamicFormControlLayout;\n\n        return this.layoutService.getClass(controlLayout, context, place);\n    }\n\n    onBlur($event: any) {\n        if ($event instanceof Event) {\n            $event.stopPropagation();\n        }\n\n        this._hasFocus = false;\n        this.blur.emit($event);\n    }\n\n    onChange($event: any) {\n        if ($event instanceof Event) {\n            $event.stopPropagation();\n        }\n\n        this.change.emit($event);\n    }\n\n    onCustomEvent($event: any, type: string | null = null, bypass: boolean = false) {\n        if (bypass) {\n            this.customEvent?.emit($event);\n\n        } else if (isString(type)) {\n            this.customEvent?.emit({customEvent: $event, customEventType: type});\n        }\n    }\n\n    onFocus($event: any) {\n        if ($event instanceof Event) {\n            $event.stopPropagation();\n        }\n\n        this._hasFocus = true;\n        this.focus.emit($event);\n    }\n}\n","import { QueryList } from \"@angular/core\";\nimport { UntypedFormArray } from \"@angular/forms\";\nimport { DynamicFormControlComponent } from \"./dynamic-form-control.component\";\nimport { DynamicTemplateDirective } from \"../directive/dynamic-template.directive\";\nimport { DynamicFormArrayModel } from \"../model/form-array/dynamic-form-array.model\";\nimport { DynamicFormControlContainerComponent } from \"./dynamic-form-control-container.component\";\n\nexport abstract class DynamicFormArrayComponent extends DynamicFormControlComponent {\n    components!: QueryList<DynamicFormControlContainerComponent>;\n    model!: DynamicFormArrayModel;\n    templates?: QueryList<DynamicTemplateDirective>;\n\n    get array(): UntypedFormArray {\n        return this.control as UntypedFormArray;\n    }\n\n    get startTemplate(): DynamicTemplateDirective | undefined {\n        return this.layoutService.getStartTemplate(this.model, this.templates);\n    }\n\n    get endTemplate(): DynamicTemplateDirective | undefined {\n        return this.layoutService.getEndTemplate(this.model, this.templates);\n    }\n\n    markForCheck() {\n        if (this.components instanceof QueryList) {\n            this.components.forEach(component => component.markForCheck());\n        }\n    }\n}\n","import { DynamicFormControlComponent } from \"./dynamic-form-control.component\";\nimport { DynamicFormGroupModel } from \"../model/form-group/dynamic-form-group.model\";\nimport { QueryList } from \"@angular/core\";\nimport { DynamicFormControlContainerComponent } from \"./dynamic-form-control-container.component\";\n\nexport abstract class DynamicFormGroupComponent extends DynamicFormControlComponent {\n    components!: QueryList<DynamicFormControlContainerComponent>;\n    model!: DynamicFormGroupModel;\n\n    markForCheck() {\n        if (this.components instanceof QueryList) {\n            this.components.forEach(component => component.markForCheck());\n        }\n    }\n}\n","import { ComponentRef, Inject, Injectable, InjectionToken, Optional, Type } from \"@angular/core\";\nimport { DynamicFormControl } from \"../component/dynamic-form-control-interface\";\nimport { DynamicFormComponent } from \"../component/dynamic-form.component\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { isFunction, isNumber } from \"../utils/core.utils\";\n\nexport type DynamicFormControlRef = ComponentRef<DynamicFormControl>;\nexport type DynamicFormControlMapFn = (model: DynamicFormControlModel) => Type<DynamicFormControl> | null;\n\nexport const DYNAMIC_FORM_CONTROL_MAP_FN = new InjectionToken<DynamicFormControlMapFn>(\"DYNAMIC_FORM_CONTROL_MAP_FN\");\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class DynamicFormComponentService {\n    private forms: DynamicFormComponent[] = [];\n    private formControls: { [key: string]: DynamicFormControlRef | DynamicFormControlRef[] } = {};\n\n    constructor(@Inject(DYNAMIC_FORM_CONTROL_MAP_FN) @Optional() private readonly DYNAMIC_FORM_CONTROL_MAP_FN: any) {\n        this.DYNAMIC_FORM_CONTROL_MAP_FN = DYNAMIC_FORM_CONTROL_MAP_FN as DynamicFormControlMapFn;\n    }\n\n    getForms(): IterableIterator<DynamicFormComponent> {\n        return this.forms.values();\n    }\n\n    registerForm(component: DynamicFormComponent): void {\n        this.forms.push(component);\n    }\n\n    unregisterForm(component: DynamicFormComponent): void {\n        const indexOf = this.forms.indexOf(component);\n\n        if (indexOf !== -1) {\n            this.forms.splice(indexOf, 1);\n        }\n    }\n\n    getFormControlRef(modelId: string, index?: number): DynamicFormControlRef | undefined {\n        const ref: DynamicFormControlRef | DynamicFormControlRef[] = this.formControls[modelId];\n\n        if (isNumber(index)) {\n            return Array.isArray(ref) ? ref[index] : undefined;\n\n        } else {\n            return ref as DynamicFormControlRef;\n        }\n    }\n\n    registerFormControl(model: DynamicFormControlModel, ref: DynamicFormControlRef, index?: number): void {\n        if (isNumber(index)) { // threat model as array child\n            const arrayRef: DynamicFormControlRef[] = this.formControls[model.id] as DynamicFormControlRef[] || [];\n\n            if (Array.isArray(arrayRef)) {\n                arrayRef.splice(index, 0, ref);\n                this.formControls[model.id] = arrayRef;\n\n            } else {\n                console.warn(`registerFormControlRef is called with index for a non-array form control: ${model.id}`);\n            }\n\n        } else {\n            this.formControls[model.id] = ref;\n        }\n    }\n\n    unregisterFormControl(modelId: string, index?: number): void {\n        const componentRef = this.formControls[modelId];\n\n        if (isNumber(index)) {\n            if (Array.isArray(componentRef) && componentRef[index] !== undefined) {\n                componentRef.splice(index, 1);\n            }\n\n        } else if (componentRef !== undefined) {\n            delete this.formControls[modelId];\n        }\n    }\n\n    getCustomComponentType(model: DynamicFormControlModel): Type<DynamicFormControl> | null {\n        return isFunction(this.DYNAMIC_FORM_CONTROL_MAP_FN) ? this.DYNAMIC_FORM_CONTROL_MAP_FN(model) : null;\n    }\n}\n","import { ChangeDetectorRef, Directive, EventEmitter, OnDestroy, OnInit, QueryList } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\nimport { DynamicFormControlContainerComponent } from \"./dynamic-form-control-container.component\";\nimport { DynamicFormControlEvent } from \"./dynamic-form-control-event\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { DynamicFormModel } from \"../model/dynamic-form.model\";\nimport { DynamicTemplateDirective } from \"../directive/dynamic-template.directive\";\nimport { DynamicFormLayout } from \"../service/dynamic-form-layout.service\";\nimport { DynamicFormComponentService } from \"../service/dynamic-form-component.service\";\n\n@Directive()\n// tslint:disable-next-line:directive-class-suffix\nexport abstract class DynamicFormComponent implements OnInit, OnDestroy {\n    group!: UntypedFormGroup;\n    model!: DynamicFormModel;\n    layout?: DynamicFormLayout;\n\n    components!: QueryList<DynamicFormControlContainerComponent>;\n    templates!: QueryList<DynamicTemplateDirective>;\n\n    blur?: EventEmitter<DynamicFormControlEvent>;\n    change?: EventEmitter<DynamicFormControlEvent>;\n    focus?: EventEmitter<DynamicFormControlEvent>;\n\n    protected constructor(protected changeDetectorRef: ChangeDetectorRef, protected componentService: DynamicFormComponentService) {\n    }\n\n    ngOnInit(): void {\n        this.componentService.registerForm(this);\n    }\n\n    ngOnDestroy(): void {\n        this.componentService.unregisterForm(this);\n    }\n\n    trackByFn(_index: number, model: DynamicFormControlModel): string {\n        return model.id;\n    }\n\n    markForCheck(): void {\n        this.changeDetectorRef.markForCheck();\n\n        if (this.components instanceof QueryList) {\n            this.components.forEach(component => component.markForCheck());\n        }\n    }\n\n    detectChanges(): void {\n        this.changeDetectorRef.detectChanges();\n    }\n\n    onBlur($event: DynamicFormControlEvent) {\n        this.blur?.emit($event);\n    }\n\n    onChange($event: DynamicFormControlEvent) {\n        this.change?.emit($event);\n    }\n\n    onFocus($event: DynamicFormControlEvent) {\n        this.focus?.emit($event);\n    }\n\n    onCustomEvent($event: DynamicFormControlEvent, customEventEmitter: EventEmitter<DynamicFormControlEvent>) {\n        customEventEmitter.emit($event);\n    }\n}\n","import { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { DynamicFormArrayGroupModel } from \"../model/form-array/dynamic-form-array.model\";\nimport { isObject } from \"../utils/core.utils\";\n\nexport enum DynamicFormControlEventType {\n    Blur = \"blur\",\n    Change = \"change\",\n    Focus = \"focus\"\n}\n\nexport interface DynamicFormControlEvent {\n    $event: Event | FocusEvent | DynamicFormControlEvent | any;\n    context: DynamicFormArrayGroupModel | null;\n    control: UntypedFormControl;\n    group: UntypedFormGroup;\n    model: DynamicFormControlModel;\n    type: string;\n}\n\nexport interface DynamicFormControlCustomEvent {\n    customEvent: any;\n    customEventType: string;\n}\n\nexport function isDynamicFormControlEvent($event: any): $event is DynamicFormControlEvent {\n    return isObject($event) && $event.hasOwnProperty(\"$event\");\n}\n","import \"reflect-metadata\";\n\ndeclare let Reflect: any;\n\nexport const METADATA_KEY_SERIALIZABLE = \"SERIALIZABLE\";\n\nexport interface SerializableProperty {\n    key: string;\n    name: string;\n}\n\nexport function serializable(name?: string): (target: any, key: string) => void {\n    return (target, key) => {\n        Reflect.defineMetadata(METADATA_KEY_SERIALIZABLE, {key, name: name || key}, target, key);\n    };\n}\n\nexport function getSerializables(target: any): SerializableProperty[] {\n    const serializables = [];\n\n    // tslint:disable-next-line:forin\n    for (const key in target) {\n        const metadata = Reflect.getMetadata(METADATA_KEY_SERIALIZABLE, target, key);\n\n        if (metadata) {\n            serializables.push(metadata);\n        }\n    }\n\n    return serializables;\n}\n\nexport function serialize(target: any, prototype?: any): object {\n    return getSerializables(prototype || target).reduce((prev: any, prop: SerializableProperty) => {\n\n        prev[prop.name] = target[prop.key];\n\n        return prev;\n\n    }, {});\n}\n","import { BehaviorSubject, Observable } from \"rxjs\";\nimport { DynamicFormControlLayout } from \"./misc/dynamic-form-control-layout.model\";\nimport { DynamicPathable } from \"./misc/dynamic-form-control-path.model\";\nimport { DynamicFormControlRelation } from \"./misc/dynamic-form-control-relation.model\";\nimport { DynamicFormHook, DynamicValidatorsConfig } from \"./misc/dynamic-form-control-validation.model\";\nimport { serializable, serialize } from \"../decorator/serializable.decorator\";\nimport { isBoolean, isObject, isString } from \"../utils/core.utils\";\n\nexport interface DynamicFormControlModelConfig {\n    asyncValidators?: DynamicValidatorsConfig;\n    disabled?: boolean;\n    errorMessages?: DynamicValidatorsConfig;\n    hidden?: boolean;\n    id: string;\n    label?: string;\n    labelTooltip?: string;\n    controlTooltip?: string;\n    name?: string;\n    relations?: DynamicFormControlRelation[];\n    updateOn?: DynamicFormHook;\n    validators?: DynamicValidatorsConfig;\n}\n\nexport abstract class DynamicFormControlModel implements DynamicPathable {\n    @serializable() asyncValidators: DynamicValidatorsConfig | null;\n    @serializable(\"disabled\") _disabled: boolean;\n    @serializable() errorMessages: DynamicValidatorsConfig | null;\n    @serializable() hidden: boolean;\n    @serializable() id: string;\n    @serializable() label: string | null;\n    @serializable() labelTooltip: string | null;\n    @serializable() controlTooltip: string | null;\n    @serializable() layout: DynamicFormControlLayout | null;\n    @serializable() name: string;\n    parent: DynamicPathable | null = null;\n    @serializable() relations: DynamicFormControlRelation[];\n    @serializable() updateOn: DynamicFormHook | null;\n    @serializable() validators: DynamicValidatorsConfig | null;\n\n    private readonly disabled$: BehaviorSubject<boolean>;\n\n    readonly disabledChanges: Observable<boolean>;\n\n    abstract readonly type: string;\n\n    protected constructor(config: DynamicFormControlModelConfig, layout: DynamicFormControlLayout | null = null) {\n        this.asyncValidators = config.asyncValidators ?? null;\n        this.errorMessages = config.errorMessages ?? null;\n        this.hidden = isBoolean(config.hidden) ? config.hidden : false;\n        this.id = config.id;\n        this.label = config.label ?? null;\n        this.labelTooltip = config.labelTooltip ?? null;\n        this.controlTooltip = config.controlTooltip ?? null;\n        this.layout = layout;\n        this.name = config.name ?? config.id;\n        this.relations = Array.isArray(config.relations) ? config.relations : [];\n        this.updateOn = isString(config.updateOn) ? config.updateOn : null;\n        this.validators = config.validators ?? null;\n\n        this._disabled = isBoolean(config.disabled) ? config.disabled : false;\n        this.disabled$ = new BehaviorSubject(this._disabled);\n        this.disabled$.subscribe(disabled => this._disabled = disabled);\n        this.disabledChanges = this.disabled$.asObservable();\n    }\n\n    get disabled(): boolean {\n        return this.disabled$.getValue();\n    }\n\n    set disabled(disabled: boolean) {\n        this.disabled$.next(disabled);\n    }\n\n    get hasErrorMessages(): boolean {\n        return isObject(this.errorMessages);\n    }\n\n    toJSON() {\n        return serialize(this);\n    }\n}\n","import { BehaviorSubject, Observable } from \"rxjs\";\nimport { DynamicFormControlModel, DynamicFormControlModelConfig } from \"./dynamic-form-control.model\";\nimport { DynamicFormControlLayout } from \"./misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../decorator/serializable.decorator\";\nimport { isBoolean, isObject } from \"../utils/core.utils\";\n\nexport interface DynamicFormValueControlModelConfig<T> extends DynamicFormControlModelConfig {\n    additional?: { [key: string]: any };\n    hint?: string;\n    required?: boolean;\n    tabIndex?: number;\n    value?: T;\n}\n\nexport abstract class DynamicFormValueControlModel<T> extends DynamicFormControlModel {\n    @serializable() additional: { [key: string]: any } | null;\n    @serializable() hint: string | null;\n    @serializable() required: boolean;\n    @serializable() tabIndex: number | null;\n    @serializable(\"value\") private _value: T | null;\n\n    private readonly value$: BehaviorSubject<T | null>;\n\n    readonly valueChanges: Observable<T | null>;\n\n    protected constructor(config: DynamicFormValueControlModelConfig<T>, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.additional = isObject(config.additional) ? config.additional : null;\n        this.hint = config.hint ?? null;\n        this.required = isBoolean(config.required) ? config.required : false;\n        this.tabIndex = config.tabIndex ?? null;\n\n        this._value = config.value ?? null;\n        this.value$ = new BehaviorSubject(this._value);\n        this.value$.subscribe(value => this._value = value);\n        this.valueChanges = this.value$.asObservable();\n    }\n\n    get value(): T | null {\n        return this.value$.getValue();\n    }\n\n    set value(value: T | null) {\n        this.value$.next(value);\n    }\n\n    getAdditional(key: string, defaultValue?: any | null): any {\n        return this.additional !== null && this.additional.hasOwnProperty(key) ? this.additional[key] : defaultValue;\n    }\n}\n","import { DynamicFormControlModel, DynamicFormControlModelConfig } from \"../dynamic-form-control.model\";\nimport { DynamicFormModel } from \"../dynamic-form.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { DynamicPathable } from \"../misc/dynamic-form-control-path.model\";\nimport { DynamicValidatorsConfig } from \"../misc/dynamic-form-control-validation.model\";\nimport { serializable, serialize } from \"../../decorator/serializable.decorator\";\nimport { isFunction, isNumber } from \"../../utils/core.utils\";\n\nexport class DynamicFormArrayGroupModel implements DynamicPathable {\n    $implicit: DynamicFormArrayGroupModel;\n    context: DynamicFormArrayModel;\n    @serializable() group: DynamicFormModel;\n    @serializable() index: number;\n\n    constructor(context: DynamicFormArrayModel, group: DynamicFormModel = [], index: number = -1) {\n        this.$implicit = this;\n        this.context = context;\n        this.group = group;\n        this.index = index;\n    }\n\n    get parent(): DynamicFormArrayModel {\n        return this.context;\n    }\n\n    get(index: number): DynamicFormControlModel {\n        return this.group[index];\n    }\n\n    toJSON() {\n        return serialize(this);\n    }\n}\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_ARRAY = \"ARRAY\";\n\nexport interface DynamicFormArrayModelConfig extends DynamicFormControlModelConfig {\n    groupAsyncValidators?: DynamicValidatorsConfig;\n    groupFactory?: () => DynamicFormModel;\n    groupValidators?: DynamicValidatorsConfig;\n    groups?: DynamicFormArrayGroupModel[] | null;\n    initialCount?: number;\n}\n\nexport class DynamicFormArrayModel extends DynamicFormControlModel {\n    @serializable() groupAsyncValidators: DynamicValidatorsConfig | null;\n    groupFactory: () => DynamicFormModel;\n    @serializable() groupValidators: DynamicValidatorsConfig | null;\n    @serializable() groups: DynamicFormArrayGroupModel[] = [];\n    @serializable() initialCount: number;\n\n    @serializable() readonly groupPrototype: DynamicFormModel; // only to recreate model from JSON\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_ARRAY;\n\n    constructor(config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        if (isFunction(config.groupFactory)) {\n            this.groupFactory = config.groupFactory;\n        } else {\n            throw new Error(\"group factory function must be specified for DynamicFormArrayModel\");\n        }\n\n        this.groupAsyncValidators = config.groupAsyncValidators ?? null;\n        this.groupPrototype = this.groupFactory();\n        this.groupValidators = config.groupValidators ?? null;\n        this.initialCount = isNumber(config.initialCount) ? config.initialCount : 1;\n\n        if (Array.isArray(config.groups)) {\n            config.groups.forEach((arrayGroup, index) => {\n                this.groups.push(new DynamicFormArrayGroupModel(this, arrayGroup.group, arrayGroup.index ?? index));\n            });\n\n        } else {\n            for (let index = 0; index < this.initialCount; index++) {\n                this.addGroup();\n            }\n        }\n    }\n\n    private updateGroupIndex(): void {\n        this.groups.forEach((group, index) => group.index = index);\n    }\n\n    get size(): number {\n        return this.groups.length;\n    }\n\n    get(index: number): DynamicFormArrayGroupModel {\n        return this.groups[index];\n    }\n\n    addGroup(): DynamicFormArrayGroupModel {\n        return this.insertGroup(this.groups.length);\n    }\n\n    insertGroup(index: number): DynamicFormArrayGroupModel {\n        const group = new DynamicFormArrayGroupModel(this, this.groupFactory());\n\n        this.groups.splice(index, 0, group);\n        this.updateGroupIndex();\n\n        return group;\n    }\n\n    moveGroup(index: number, step: number): void {\n        this.groups.splice(index + step, 0, ...this.groups.splice(index, 1));\n        this.updateGroupIndex();\n    }\n\n    removeGroup(index: number): void {\n        this.groups.splice(index, 1);\n        this.updateGroupIndex();\n    }\n\n    clear(): void {\n        this.groups.splice(0);\n        this.updateGroupIndex();\n    }\n}\n","import { DynamicFormValueControlModel, DynamicFormValueControlModelConfig } from \"./dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"./misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../decorator/serializable.decorator\";\nimport { isBoolean } from \"../utils/core.utils\";\n\nexport interface DynamicCheckControlModelConfig extends DynamicFormValueControlModelConfig<boolean> {\n    labelPosition?: string;\n}\n\nexport abstract class DynamicCheckControlModel extends DynamicFormValueControlModel<boolean> {\n    @serializable() labelPosition: string | null;\n\n    protected constructor(config: DynamicCheckControlModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.labelPosition = config.labelPosition ?? null;\n        this.checked = isBoolean(this.value) ? this.value : false;\n    }\n\n    get checked(): boolean {\n        return this.value ?? false;\n    }\n\n    set checked(checked: boolean) {\n        this.value = checked;\n    }\n\n    toggle(): void {\n        this.checked = !this.checked;\n    }\n}\n","import { DynamicCheckControlModel, DynamicCheckControlModelConfig } from \"../dynamic-check-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX = \"CHECKBOX\";\n\nexport interface DynamicCheckboxModelConfig extends DynamicCheckControlModelConfig {\n    indeterminate?: boolean;\n}\n\nexport class DynamicCheckboxModel extends DynamicCheckControlModel {\n    @serializable() indeterminate: boolean;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX;\n\n    constructor(config: DynamicCheckboxModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.indeterminate = isBoolean(config.indeterminate) ? config.indeterminate : false;\n    }\n}\n","import { DynamicFormValueControlModel, DynamicFormValueControlModelConfig } from \"./dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"./misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../decorator/serializable.decorator\";\nimport { isBoolean, isNumber } from \"../utils/core.utils\";\n\nexport interface DynamicInputControlModelConfig<T> extends DynamicFormValueControlModelConfig<T> {\n    autoComplete?: string;\n    autoFocus?: boolean;\n    maxLength?: number;\n    minLength?: number;\n    placeholder?: string;\n    prefix?: string;\n    readOnly?: boolean;\n    spellCheck?: boolean;\n    suffix?: string;\n}\n\nexport abstract class DynamicInputControlModel<T> extends DynamicFormValueControlModel<T> {\n    @serializable() autoComplete: string;\n    @serializable() autoFocus: boolean;\n    @serializable() maxLength: number | null;\n    @serializable() minLength: number | null;\n    @serializable() placeholder: string;\n    @serializable() prefix: string | null;\n    @serializable() readOnly: boolean;\n    @serializable() spellCheck: boolean;\n    @serializable() suffix: string | null;\n\n    protected constructor(config: DynamicInputControlModelConfig<T>, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.autoComplete = config.autoComplete ?? \"on\";\n        this.autoFocus = isBoolean(config.autoFocus) ? config.autoFocus : false;\n        this.maxLength = isNumber(config.maxLength) ? config.maxLength : null;\n        this.minLength = isNumber(config.minLength) ? config.minLength : null;\n        this.placeholder = config.placeholder ?? \"\";\n        this.prefix = config.prefix ?? null;\n        this.readOnly = isBoolean(config.readOnly) ? config.readOnly : false;\n        this.spellCheck = isBoolean(config.spellCheck) ? config.spellCheck : false;\n        this.suffix = config.suffix ?? null;\n    }\n}\n","import { DynamicInputControlModel, DynamicInputControlModelConfig } from \"../dynamic-input-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean, isNumber } from \"../../utils/core.utils\";\nimport { Observable, isObservable, of } from \"rxjs\";\nimport { tap } from \"rxjs/operators\";\nimport { IConfig, initialConfig } from \"ngx-mask\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_INPUT = \"INPUT\";\n\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_COLOR = \"color\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATE = \"date\";\n// export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATETIME = \"datetime\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATETIME_LOCAL = \"datetime-local\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_EMAIL = \"email\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE = \"file\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_MONTH = \"month\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_NUMBER = \"number\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_PASSWORD = \"password\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_RANGE = \"range\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_SEARCH = \"search\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEL = \"tel\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT = \"text\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TIME = \"time\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_URL = \"url\";\nexport const DYNAMIC_FORM_CONTROL_INPUT_TYPE_WEEK = \"week\";\n\nexport interface DynamicInputModelConfig extends DynamicInputControlModelConfig<string | number | Date | string[]> {\n    accept?: string;\n    inputType?: string;\n    list?: any[] | Observable<any[]>;\n    mask?: string;\n    maskConfig?: Partial<IConfig>;\n    max?: number | string | Date;\n    min?: number | string | Date;\n    multiple?: boolean;\n    pattern?: string;\n    step?: number;\n}\n\nexport class DynamicInputModel extends DynamicInputControlModel<string | number | Date | string[]> {\n    @serializable() accept: string | null;\n    @serializable() inputType: string;\n    files: FileList | null = null;\n    list$: Observable<any[]> | null = null;\n    @serializable() mask: string;\n    @serializable() maskConfig: IConfig;\n    @serializable() max: number | string | Date | null;\n    @serializable() min: number | string | Date | null;\n    @serializable() multiple: boolean | null;\n    @serializable() pattern: string | null;\n    @serializable() step: number | null;\n\n    @serializable(\"list\") private _list: any[] | null = null;\n    private readonly _listId: string | null = null;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_INPUT;\n\n    constructor(config: DynamicInputModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.accept = config.accept ?? null;\n        this.inputType = config.inputType ?? DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT;\n        this.mask = config.mask ?? \"\";\n        this.maskConfig = config.maskConfig ? {...initialConfig, ...config.maskConfig} : initialConfig;\n        this.max = config.max !== undefined ? config.max : null;\n        this.min = config.min !== undefined ? config.min : null;\n        this.multiple = isBoolean(config.multiple) ? config.multiple : null;\n        this.pattern = config.pattern ?? null;\n        this.step = isNumber(config.step) ? config.step : null;\n\n        if (config.list !== undefined) {\n            this.list = config.list;\n            this._listId = `${this.id}List`;\n        }\n    }\n\n    get listId(): string | null {\n        return this._listId;\n    }\n\n    get hasList(): boolean {\n        return isObservable(this.list$);\n    }\n\n    set list(list: any[] | Observable<any[]> | null) {\n        if (Array.isArray(list)) {\n            this._list = list;\n            this.list$ = of(this._list);\n\n        } else if (isObservable(list)) {\n            this.list$ = list.pipe(\n                tap(_list => this._list = _list)\n            );\n\n        } else {\n            this._list = null;\n            this.list$ = null;\n        }\n    }\n}\n","import { Directive, Input, TemplateRef } from \"@angular/core\";\n\nexport enum DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT {\n    Start = \"START\",\n    End = \"END\"\n}\n\n@Directive({\n    selector: \"ng-template[modelId],ng-template[modelType]\",\n    standalone: true\n})\nexport class DynamicTemplateDirective {\n    @Input() align: string = DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End;\n    @Input() as: string | null = null;\n    @Input() index?: number;\n    @Input() modelId?: string;\n    @Input() modelType?: string;\n\n    constructor(public templateRef: TemplateRef<any>) {\n    }\n}\n","import { Injectable, QueryList } from \"@angular/core\";\nimport {\n    DynamicFormControlLayout,\n    DynamicFormControlLayoutConfig,\n    DynamicFormControlLayoutContext,\n    DynamicFormControlLayoutPlace\n} from \"../model/misc/dynamic-form-control-layout.model\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { DynamicFormArrayGroupModel } from \"../model/form-array/dynamic-form-array.model\";\nimport { DynamicTemplateDirective, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT } from \"../directive/dynamic-template.directive\";\nimport { isObject, isString } from \"../utils/core.utils\";\n\nexport type DynamicFormLayout = { [id: string]: DynamicFormControlLayout };\n\nexport type DynamicFormControlTemplates = QueryList<DynamicTemplateDirective> | DynamicTemplateDirective[] | undefined;\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class DynamicFormLayoutService {\n\n    findById(id: string, formLayout: DynamicFormLayout | null): DynamicFormControlLayout | null {\n        if (isObject(formLayout)) {\n            for (const key of Object.keys(formLayout)) {\n                if (key === id) {\n                    return formLayout[key];\n                }\n            }\n        }\n\n        return null;\n    }\n\n    findByModel(model: DynamicFormControlModel, formLayout: DynamicFormLayout | null | undefined): DynamicFormControlLayout | null {\n        let controlLayout: DynamicFormControlLayout | null = null;\n\n        if (isObject(formLayout)) {\n            for (const key of Object.keys(formLayout)) {\n                key.split(\",\").forEach(substring => {\n                    const selector = substring.trim();\n\n                    if (selector === model.id || selector === model.type) {\n                        controlLayout = formLayout[key];\n                    }\n                });\n            }\n        }\n\n        return controlLayout;\n    }\n\n    filterTemplatesByModel(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective[] {\n        const filterCallback: (template: DynamicTemplateDirective) => boolean = (template: DynamicTemplateDirective) => {\n            return template.modelId === model.id || template.modelType === model.type;\n        };\n\n        if (templates instanceof QueryList) {\n            return templates.filter(filterCallback);\n\n        } else if (Array.isArray(templates)) {\n            return templates.filter(filterCallback);\n        }\n\n        return [];\n    }\n\n    getAlignedTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates,\n                       alignment: DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT): DynamicTemplateDirective | undefined {\n\n        return this.filterTemplatesByModel(model, templates)\n            .find(template => template.as === null && template.align === alignment);\n    }\n\n    /*\n    getIndexedTemplates(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective[] | undefined {\n        return this.filterTemplatesByModel(model, templates).filter(template => template.as === null);\n    }\n    */\n    getStartTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective | undefined {\n        return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.Start);\n    }\n\n    getEndTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective | undefined {\n        return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End);\n    }\n\n    getClass(layout: DynamicFormControlLayout | null | undefined, context: DynamicFormControlLayoutContext,\n             place: DynamicFormControlLayoutPlace): string {\n\n        if (isObject(layout) && layout.hasOwnProperty(context)) {\n            const config = layout[context] as DynamicFormControlLayoutConfig;\n            if (config.hasOwnProperty(place)) {\n                return config[place] as string;\n            }\n        }\n\n        return \"\";\n    }\n\n    getHostClass(layout: DynamicFormControlLayout | null | undefined): string {\n        const keys: (keyof DynamicFormControlLayout)[] = [\"element\", \"grid\"];\n        let cls = \"\";\n\n        if (isObject(layout)) {\n            keys.forEach(key => {\n                if (isObject(layout[key]) && isString(layout[key]?.host)) {\n                    cls = cls + ` ${layout[key]?.host}`;\n                }\n            });\n        }\n\n        return cls;\n    }\n\n    getElementId(model: DynamicFormControlModel): string {\n        let id = model.id;\n        let parent = model.parent;\n\n        while (parent !== null) {\n            if (parent instanceof DynamicFormArrayGroupModel) {\n                id = `${parent.context.id}-${parent.index}-${model.id}`;\n                break;\n            }\n\n            parent = parent.parent;\n        }\n\n        return id;\n    }\n}\n","export interface DynamicValidatorDescriptor {\n    name: string;\n    args: any;\n}\n\nexport type DynamicValidatorsConfig = { [validatorKey: string]: any | DynamicValidatorDescriptor };\n\nexport enum DynamicFormHook {\n    Blur = \"blur\",\n    Change = \"change\",\n    Submit = \"submit\"\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { AsyncValidatorFn, ValidatorFn } from \"@angular/forms\";\n\nexport type Validator = ValidatorFn | AsyncValidatorFn;\n\nexport type ValidatorFactory = (args: any) => Validator;\n\nexport type ValidatorsToken = Validator[];\n\nexport type ValidatorsMap = Map<string, Validator | ValidatorFactory>;\n\nexport const DYNAMIC_VALIDATORS = new InjectionToken<ValidatorsMap>(\"DYNAMIC_VALIDATORS\");\n","import { InjectionToken } from \"@angular/core\";\nimport { AbstractControl } from \"@angular/forms\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { DynamicFormHook } from \"../model/misc/dynamic-form-control-validation.model\";\n\nexport type DynamicErrorMessagesMatcher = (control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean) => boolean;\n\nexport const DEFAULT_ERROR_STATE_MATCHER: DynamicErrorMessagesMatcher =\n    (control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean) => {\n        return control.touched && !hasFocus;\n    };\n\nexport const CHANGE_ERROR_STATE_MATCHER: DynamicErrorMessagesMatcher =\n    (control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean) => {\n        return (model.updateOn === DynamicFormHook.Change || model.updateOn === null) ? control.dirty : control.touched && !hasFocus;\n    };\n\nexport const DYNAMIC_ERROR_MESSAGES_MATCHER = new InjectionToken<DynamicErrorMessagesMatcher>(\"DYNAMIC_ERROR_MESSAGES_MATCHER\");\n","import { Injectable, Inject, Optional } from \"@angular/core\";\nimport {\n    AbstractControl,\n    AsyncValidatorFn,\n    ValidatorFn,\n    Validators,\n    NG_VALIDATORS,\n    NG_ASYNC_VALIDATORS\n} from \"@angular/forms\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport {\n    DynamicFormHook,\n    DynamicValidatorDescriptor,\n    DynamicValidatorsConfig\n} from \"../model/misc/dynamic-form-control-validation.model\";\nimport { isObject, isString } from \"../utils/core.utils\";\nimport { DYNAMIC_VALIDATORS, Validator, ValidatorFactory, ValidatorsToken } from \"./dynamic-form-validators\";\nimport {\n    DEFAULT_ERROR_STATE_MATCHER,\n    DYNAMIC_ERROR_MESSAGES_MATCHER,\n    DynamicErrorMessagesMatcher\n} from \"./dynamic-form-validation-matchers\";\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class DynamicFormValidationService {\n\n    constructor(@Optional() @Inject(NG_VALIDATORS) private _NG_VALIDATORS: ValidatorFn[],\n                @Optional() @Inject(NG_ASYNC_VALIDATORS) private _NG_ASYNC_VALIDATORS: AsyncValidatorFn[],\n                @Optional() @Inject(DYNAMIC_VALIDATORS) private _DYNAMIC_VALIDATORS: Map<string, Validator | ValidatorFactory>,\n                @Optional() @Inject(DYNAMIC_ERROR_MESSAGES_MATCHER) private _DYNAMIC_ERROR_MESSAGES_MATCHER: DynamicErrorMessagesMatcher) {\n    }\n\n    private getValidatorFn(validatorName: string, validatorArgs: any = null,\n                           validatorsToken: ValidatorsToken = this._NG_VALIDATORS): Validator | never {\n\n        let validatorFn: ValidatorFactory | Validator | undefined;\n\n        if (Validators.hasOwnProperty(validatorName)) { // Built-in Angular Validators\n            validatorFn = (Validators as any)[validatorName];\n\n        } else { // Custom Validators\n            if (this._DYNAMIC_VALIDATORS && this._DYNAMIC_VALIDATORS.has(validatorName)) {\n                validatorFn = this._DYNAMIC_VALIDATORS.get(validatorName);\n\n            } else if (validatorsToken) {\n                validatorFn = validatorsToken.find(validator => validator.name === validatorName);\n            }\n        }\n\n        if (validatorFn === undefined) { // throw when no validator could be resolved\n            throw new Error(\n                `validator \"${validatorName}\" is not provided via NG_VALIDATORS, NG_ASYNC_VALIDATORS or DYNAMIC_FORM_VALIDATORS`);\n        }\n\n        if (validatorArgs !== null) {\n            return (validatorFn as ValidatorFactory)(validatorArgs);\n        }\n\n        return validatorFn as Validator;\n    }\n\n    private getValidatorFns(validatorsConfig: DynamicValidatorsConfig,\n                            validatorsToken: ValidatorsToken = this._NG_VALIDATORS): Validator[] {\n\n        let validatorFns: Validator[] = [];\n\n        if (isObject(validatorsConfig)) {\n\n            validatorFns = Object.keys(validatorsConfig).map(validatorConfigKey => {\n                const validatorConfigValue = (validatorsConfig as DynamicValidatorsConfig)[validatorConfigKey];\n\n                if (this.isValidatorDescriptor(validatorConfigValue)) {\n                    const descriptor = validatorConfigValue as DynamicValidatorDescriptor;\n\n                    return this.getValidatorFn(descriptor.name, descriptor.args, validatorsToken);\n                }\n\n                return this.getValidatorFn(validatorConfigKey, validatorConfigValue, validatorsToken);\n            });\n        }\n\n        return validatorFns;\n    }\n\n    getValidator(validatorName: string, validatorArgs: any = null): ValidatorFn {\n        return this.getValidatorFn(validatorName, validatorArgs) as ValidatorFn;\n    }\n\n    getAsyncValidator(validatorName: string, validatorArgs: any = null): AsyncValidatorFn {\n        return this.getValidatorFn(validatorName, validatorArgs, this._NG_ASYNC_VALIDATORS) as AsyncValidatorFn;\n    }\n\n    getValidators(validatorsConfig: DynamicValidatorsConfig): ValidatorFn[] {\n        return this.getValidatorFns(validatorsConfig) as ValidatorFn[];\n    }\n\n    getAsyncValidators(asyncValidatorsConfig: DynamicValidatorsConfig): AsyncValidatorFn[] {\n        return this.getValidatorFns(asyncValidatorsConfig, this._NG_ASYNC_VALIDATORS) as AsyncValidatorFn[];\n    }\n\n    updateValidators(validatorsConfig: DynamicValidatorsConfig | null, control: AbstractControl,\n                     model: DynamicFormControlModel): void {\n\n        model.validators = validatorsConfig;\n\n        if (validatorsConfig === null) {\n            control.clearValidators();\n\n        } else {\n            control.setValidators(this.getValidators(validatorsConfig));\n        }\n\n        control.updateValueAndValidity();\n    }\n\n    updateAsyncValidators(asyncValidatorsConfig: DynamicValidatorsConfig | null, control: AbstractControl,\n                          model: DynamicFormControlModel): void {\n\n        model.asyncValidators = asyncValidatorsConfig;\n\n        if (asyncValidatorsConfig === null) {\n            control.clearAsyncValidators();\n\n        } else {\n            control.setAsyncValidators(this.getAsyncValidators(asyncValidatorsConfig));\n        }\n\n        control.updateValueAndValidity();\n    }\n\n    showErrorMessages(control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean): boolean {\n        const precondition = control.invalid && model.hasErrorMessages;\n        const matcher = this._DYNAMIC_ERROR_MESSAGES_MATCHER ? this._DYNAMIC_ERROR_MESSAGES_MATCHER(control, model, hasFocus) :\n            DEFAULT_ERROR_STATE_MATCHER(control, model, hasFocus);\n\n        return precondition && matcher;\n    }\n\n    parseErrorMessageConfig(template: string, model: DynamicFormControlModel, error: any = null): string {\n        return template.replace(/{{\\s*(.+?)\\s*}}/mg, (_match: string, expression: string) => {\n            let propertySource: any = model;\n            let propertyName: string = expression;\n\n            if (expression.indexOf(\"validator.\") >= 0 && error) {\n                propertySource = error;\n                propertyName = expression.replace(\"validator.\", \"\");\n            }\n\n            return propertySource[propertyName] !== null && propertySource[propertyName] !== undefined ?\n                propertySource[propertyName] : null;\n        });\n    }\n\n    createErrorMessages(control: AbstractControl, model: DynamicFormControlModel): string[] {\n        const messages: string[] = [];\n\n        if (model.hasErrorMessages) {\n            const messagesConfig = model.errorMessages as DynamicValidatorsConfig;\n\n            Object.keys(control.errors || {}).forEach(validationErrorKey => {\n                let messageKey = validationErrorKey;\n\n                if (validationErrorKey === \"minlength\" || validationErrorKey === \"maxlength\") {\n                    messageKey = messageKey.replace(\"length\", \"Length\");\n                }\n\n                if (messagesConfig.hasOwnProperty(messageKey)) {\n                    const validationError = control.getError(validationErrorKey);\n                    const messageTemplate = messagesConfig[messageKey] as string;\n\n                    messages.push(this.parseErrorMessageConfig(messageTemplate, model, validationError));\n                }\n            });\n        }\n\n        return messages;\n    }\n\n    isFormHook(value: any): boolean {\n        return isString(value) && (Object.values(DynamicFormHook) as string[]).includes(value);\n    }\n\n    isValidatorDescriptor(value: any): boolean {\n        if (isObject(value)) {\n            return value.hasOwnProperty(\"name\") && value.hasOwnProperty(\"args\");\n        }\n\n        return false;\n    }\n}\n","import { DynamicFormControlModel, DynamicFormControlModelConfig } from \"../dynamic-form-control.model\";\nimport { DynamicFormModel } from \"../dynamic-form.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_GROUP = \"GROUP\";\n\nexport interface DynamicFormGroupModelConfig extends DynamicFormControlModelConfig {\n    group?: DynamicFormModel;\n    legend?: string;\n}\n\nexport class DynamicFormGroupModel extends DynamicFormControlModel {\n    @serializable() group: DynamicFormModel;\n    @serializable() legend: string | null;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_GROUP;\n\n    constructor(config: DynamicFormGroupModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.group = Array.isArray(config.group) ? config.group : [];\n        this.legend = config.legend ?? null;\n    }\n\n    get(index: number): DynamicFormControlModel {\n        return this.group[index];\n    }\n\n    set(index: number, controlModel: DynamicFormControlModel): void {\n        this.group[index] = controlModel;\n    }\n\n    add(controlModel: DynamicFormControlModel): void {\n        this.group.push(controlModel);\n    }\n\n    insert(index: number, controlModel: DynamicFormControlModel): void {\n        this.group.splice(index, 0, controlModel);\n    }\n\n    move(index: number, step: number): void {\n        this.group.splice(index + step, 0, ...this.group.splice(index, 1));\n    }\n\n    remove(index: number) {\n        this.group.splice(index, 1);\n    }\n\n    size(): number {\n        return this.group.length;\n    }\n}\n","import { DynamicFormGroupModel, DynamicFormGroupModelConfig } from \"../form-group/dynamic-form-group.model\";\nimport { DynamicCheckboxModel } from \"./dynamic-checkbox.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP = \"CHECKBOX_GROUP\";\n\nexport class DynamicCheckboxGroupModel extends DynamicFormGroupModel {\n    @serializable() group!: DynamicCheckboxModel[];\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP;\n\n    constructor(config: DynamicFormGroupModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n    }\n\n    check(...indices: number[]): void {\n        indices.forEach(index => this.group[index].checked = true);\n    }\n\n    uncheck(...indices: number[]): void {\n        indices.forEach(index => this.group[index].checked = false);\n    }\n\n    checkAll(): void {\n        this.group.forEach(model => model.checked = true);\n    }\n\n    uncheckAll(): void {\n        this.group.forEach(model => model.checked = false);\n    }\n}\n","import { DynamicFormValueControlModelConfig, DynamicFormValueControlModel } from \"../dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean, isString } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER = \"COLORPICKER\";\n\nexport interface DynamicColorPickerModelConfig extends DynamicFormValueControlModelConfig<string | object> {\n    format?: string;\n    inline?: boolean;\n}\n\nexport class DynamicColorPickerModel extends DynamicFormValueControlModel<string | object> {\n    @serializable() format: string | null;\n    @serializable() inline: boolean;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER;\n\n    constructor(config: DynamicColorPickerModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.format = isString(config.format) ? config.format : null;\n        this.inline = isBoolean(config.inline) ? config.inline : false;\n    }\n}\n","import { DynamicFormValueControlModelConfig, DynamicFormValueControlModel } from \"./dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"./misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../decorator/serializable.decorator\";\n\nexport type DynamicDateControlValue = string | object | Date;\n\nexport interface DynamicDateControlModelConfig extends DynamicFormValueControlModelConfig<DynamicDateControlValue> {\n    format?: string;\n    max?: DynamicDateControlValue;\n    min?: DynamicDateControlValue;\n    placeholder?: string;\n}\n\nexport abstract class DynamicDateControlModel extends DynamicFormValueControlModel<DynamicDateControlValue> {\n    @serializable() format: string | null;\n    @serializable() max: DynamicDateControlValue | null;\n    @serializable() min: DynamicDateControlValue | null;\n    @serializable() placeholder: string | null;\n\n    protected constructor(config: DynamicDateControlModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.format = config.format ?? null;\n        this.max = config.max ?? null;\n        this.min = config.min ?? null;\n        this.placeholder = config.placeholder ?? null;\n    }\n}\n","import {\n    DynamicDateControlModel,\n    DynamicDateControlModelConfig,\n    DynamicDateControlValue\n} from \"../dynamic-date-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean, isString } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER = \"DATEPICKER\";\n\nexport interface DynamicDatePickerModelConfig extends DynamicDateControlModelConfig {\n    autoFocus?: boolean;\n    focusedDate?: DynamicDateControlValue;\n    inline?: boolean;\n    prefix?: string;\n    readOnly?: boolean;\n    suffix?: string;\n    toggleIcon?: string;\n    toggleLabel?: string;\n}\n\nexport class DynamicDatePickerModel extends DynamicDateControlModel {\n    @serializable() autoFocus: boolean;\n    @serializable() focusedDate: DynamicDateControlValue | null;\n    @serializable() inline: boolean;\n    @serializable() prefix: string | null;\n    @serializable() readOnly: boolean;\n    @serializable() suffix: string | null;\n    @serializable() toggleIcon: string | null;\n    @serializable() toggleLabel: string | null;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER;\n\n    constructor(config: DynamicDatePickerModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.autoFocus = isBoolean(config.autoFocus) ? config.autoFocus : false;\n        this.focusedDate = config.focusedDate ?? null;\n        this.inline = isBoolean(config.inline) ? config.inline : false;\n        this.prefix = config.prefix ?? null;\n        this.readOnly = isBoolean(config.readOnly) ? config.readOnly : false;\n        this.toggleIcon = isString(config.toggleIcon) ? config.toggleIcon : null;\n        this.toggleLabel = isString(config.toggleLabel) ? config.toggleLabel : null;\n        this.suffix = config.suffix ?? null;\n    }\n}\n","import { DynamicInputControlModel, DynamicInputControlModelConfig } from \"../dynamic-input-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_EDITOR = \"EDITOR\";\n\nexport interface DynamicEditorModelConfig extends DynamicInputControlModelConfig<string> {\n}\n\nexport class DynamicEditorModel extends DynamicInputControlModel<string> {\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_EDITOR;\n\n    constructor(config: DynamicEditorModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n    }\n}\n","import { DynamicFormValueControlModelConfig, DynamicFormValueControlModel } from \"./dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"./misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../decorator/serializable.decorator\";\nimport { isBoolean } from \"../utils/core.utils\";\n\nexport interface DynamicFileControlModelConfig extends DynamicFormValueControlModelConfig<File | File[]> {\n    multiple?: boolean;\n}\n\nexport abstract class DynamicFileControlModel extends DynamicFormValueControlModel<File | File[]> {\n    @serializable() multiple: boolean;\n\n    protected constructor(config: DynamicFileControlModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.multiple = isBoolean(config.multiple) ? config.multiple : false;\n    }\n}\n","import { DynamicFileControlModelConfig, DynamicFileControlModel } from \"../dynamic-file-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean, isNumber } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD = \"FILE_UPLOAD\";\n\nexport interface DynamicFileUploadModelConfig extends DynamicFileControlModelConfig {\n    accept?: string[];\n    autoUpload?: boolean;\n    maxSize?: number;\n    minSize?: number;\n    removeUrl?: string;\n    showFileList?: boolean;\n    url?: string;\n}\n\nexport class DynamicFileUploadModel extends DynamicFileControlModel {\n    @serializable() accept: string[] | null;\n    @serializable() autoUpload: boolean;\n    @serializable() maxSize: number | null;\n    @serializable() minSize: number | null;\n    @serializable() removeUrl: string | null;\n    @serializable() showFileList: boolean;\n    @serializable() url: string | null;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD;\n\n    constructor(config: DynamicFileUploadModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.accept = Array.isArray(config.accept) ? config.accept : null;\n        this.autoUpload = isBoolean(config.autoUpload) ? config.autoUpload : true;\n        this.maxSize = isNumber(config.maxSize) ? config.maxSize : null;\n        this.minSize = isNumber(config.minSize) ? config.minSize : null;\n        this.removeUrl = config.removeUrl ?? null;\n        this.showFileList = isBoolean(config.showFileList) ? config.showFileList : true;\n        this.url = config.url ?? null;\n    }\n}\n","import { Observable, isObservable, of } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { DynamicFormValueControlModel, DynamicFormValueControlModelConfig } from \"./dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"./misc/dynamic-form-control-layout.model\";\nimport { serializable, serialize } from \"../decorator/serializable.decorator\";\nimport { isBoolean } from \"../utils/core.utils\";\n\nexport interface DynamicFormOptionConfig<T> {\n    disabled?: boolean;\n    label?: string;\n    value: T;\n}\n\nexport class DynamicFormOption<T> {\n    @serializable() disabled: boolean;\n    @serializable() label: string | null;\n    @serializable() value: T;\n\n    constructor(config: DynamicFormOptionConfig<T>) {\n        this.disabled = isBoolean(config.disabled) ? config.disabled : false;\n        this.label = config.label ?? null;\n        this.value = config.value;\n    }\n\n    get text() {\n        return this.label;\n    }\n\n    set text(text: string | null) {\n        this.label = text;\n    }\n\n    toJSON() {\n        return serialize(this);\n    }\n}\n\nexport interface DynamicOptionControlModelConfig<T> extends DynamicFormValueControlModelConfig<T | T[]> {\n    options?: DynamicFormOptionConfig<T>[] | Observable<DynamicFormOptionConfig<T>[]>;\n}\n\nexport abstract class DynamicOptionControlModel<T> extends DynamicFormValueControlModel<T | T[]> {\n    @serializable(\"options\") private _options: DynamicFormOption<T>[] = [];\n    options$!: Observable<DynamicFormOption<T>[]>;\n\n    protected constructor(config: DynamicOptionControlModelConfig<T>, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.options = config.options;\n    }\n\n    private updateOptions$(): void {\n        this.options$ = of(this.options);\n    }\n\n    set options(options: any) {\n        if (Array.isArray(options)) {\n            this._options = (options as DynamicFormOptionConfig<T>[]).map(optionConfig => new DynamicFormOption<T>(optionConfig));\n            this.updateOptions$();\n\n        } else if (isObservable(options)) {\n            this.options$ = (options as Observable<DynamicFormOptionConfig<T>[]>).pipe(\n                map(optionsConfig => {\n                    this._options = optionsConfig.map(optionConfig => new DynamicFormOption<T>(optionConfig));\n                    return this._options;\n                }));\n\n        } else {\n            this.updateOptions$();\n        }\n    }\n\n    get options(): any {\n        return this._options;\n    }\n\n    add(optionConfig: DynamicFormOptionConfig<T>): DynamicFormOption<T> {\n        return this.insert(this.options.length, optionConfig);\n    }\n\n    get(index: number): DynamicFormOption<T> {\n        return this.options[index];\n    }\n\n    insert(index: number, optionConfig: DynamicFormOptionConfig<T>): DynamicFormOption<T> {\n        const option = new DynamicFormOption(optionConfig);\n\n        this.options.splice(index, 0, option);\n        this.updateOptions$();\n\n        return option;\n    }\n\n    remove(...indices: number[]): void {\n        indices.forEach(index => this.options.splice(index, 1));\n        this.updateOptions$();\n    }\n\n    abstract select(...indices: number[]): void;\n}\n","import { DynamicOptionControlModel, DynamicOptionControlModelConfig } from \"../dynamic-option-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP = \"RADIO_GROUP\";\n\nexport interface DynamicRadioGroupModelConfig<T> extends DynamicOptionControlModelConfig<T> {\n    legend?: string;\n}\n\nexport class DynamicRadioGroupModel<T> extends DynamicOptionControlModel<T> {\n    @serializable() legend: string | null;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP;\n\n    constructor(config: DynamicRadioGroupModelConfig<T>, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.legend = config.legend ?? null;\n    }\n\n    select(index: number): void {\n        this.value = this.get(index).value;\n    }\n}\n","import { DynamicFormValueControlModelConfig, DynamicFormValueControlModel } from \"../dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isNumber } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_RATING = \"RATING\";\n\nexport interface DynamicRatingModelConfig extends DynamicFormValueControlModelConfig<number> {\n    max?: number;\n}\n\nexport class DynamicRatingModel extends DynamicFormValueControlModel<number> {\n    @serializable() max: number | null;\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_RATING;\n\n    constructor(config: DynamicRatingModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.max = isNumber(config.max) ? config.max : 10;\n    }\n}\n","import { DynamicOptionControlModel, DynamicOptionControlModelConfig } from \"../dynamic-option-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean, isFunction } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_SELECT = \"SELECT\";\n\nexport interface DynamicSelectModelConfig<T> extends DynamicOptionControlModelConfig<T> {\n    compareWithFn?: (o1: any, o2: any) => boolean;\n    filterable?: boolean;\n    multiple?: boolean;\n    placeholder?: string;\n    prefix?: string;\n    suffix?: string;\n}\n\nexport class DynamicSelectModel<T> extends DynamicOptionControlModel<T> {\n    compareWithFn: (value1: any, value2: any) => boolean;\n    @serializable() filterable: boolean;\n    @serializable() multiple: boolean;\n    @serializable() placeholder: string;\n    @serializable() prefix: string | null;\n    @serializable() suffix: string | null;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_SELECT;\n\n    constructor(config: DynamicSelectModelConfig<T>, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.compareWithFn = isFunction(config.compareWithFn) ? config.compareWithFn : Object.is;\n        this.filterable = isBoolean(config.filterable) ? config.filterable : false;\n        this.multiple = isBoolean(config.multiple) ? config.multiple : false;\n        this.placeholder = config.placeholder ?? \"\";\n        this.prefix = config.prefix ?? null;\n        this.suffix = config.suffix ?? null;\n    }\n\n    select(...indices: number[]): void {\n        this.value = this.multiple ? indices.map(index => this.get(index).value) : this.get(indices[0]).value;\n    }\n}\n","import { DynamicFormValueControlModelConfig, DynamicFormValueControlModel } from \"../dynamic-form-value-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean, isNumber } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_SLIDER = \"SLIDER\";\n\nexport interface DynamicSliderModelConfig extends DynamicFormValueControlModelConfig<number> {\n    max?: number;\n    min?: number;\n    step?: number;\n    vertical?: boolean;\n}\n\nexport class DynamicSliderModel extends DynamicFormValueControlModel<number> {\n    @serializable() max: number | null;\n    @serializable() min: number | null;\n    @serializable() step: number | null;\n    @serializable() vertical: boolean;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_SLIDER;\n\n    constructor(config: DynamicSliderModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.max = isNumber(config.max) ? config.max : 10;\n        this.min = isNumber(config.min) ? config.min : 0;\n        this.step = isNumber(config.step) ? config.step : 1;\n        this.vertical = isBoolean(config.vertical) ? config.vertical : false;\n    }\n}\n","import { DynamicCheckControlModel, DynamicCheckControlModelConfig } from \"../dynamic-check-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_SWITCH = \"SWITCH\";\n\nexport interface DynamicSwitchModelConfig extends DynamicCheckControlModelConfig {\n    offLabel?: string;\n    onLabel?: string;\n}\n\nexport class DynamicSwitchModel extends DynamicCheckControlModel {\n    @serializable() offLabel: string | null;\n    @serializable() onLabel: string | null;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_SWITCH;\n\n    constructor(config: DynamicSwitchModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.offLabel = config.offLabel ?? null;\n        this.onLabel = config.onLabel ?? null;\n    }\n}\n","import { DynamicInputControlModel, DynamicInputControlModelConfig } from \"../dynamic-input-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isNumber } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA = \"TEXTAREA\";\n\nexport const DYNAMIC_FORM_TEXTAREA_WRAP_HARD = \"hard\";\nexport const DYNAMIC_FORM_TEXTAREA_WRAP_SOFT = \"soft\";\n\nexport interface DynamicTextAreaModelConfig extends DynamicInputControlModelConfig<string> {\n    cols?: number;\n    rows?: number;\n    wrap?: string;\n}\n\nexport class DynamicTextAreaModel extends DynamicInputControlModel<string> {\n    @serializable() cols: number;\n    @serializable() rows: number;\n    @serializable() wrap: string;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA;\n\n    constructor(config: DynamicTextAreaModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.cols = isNumber(config.cols) ? config.cols : 20;\n        this.rows = isNumber(config.rows) ? config.rows : 2;\n        this.wrap = config.wrap ?? DYNAMIC_FORM_TEXTAREA_WRAP_SOFT;\n    }\n}\n","import { DynamicDateControlModel, DynamicDateControlModelConfig } from \"../dynamic-date-control.model\";\nimport { DynamicFormControlLayout } from \"../misc/dynamic-form-control-layout.model\";\nimport { serializable } from \"../../decorator/serializable.decorator\";\nimport { isBoolean } from \"../../utils/core.utils\";\n\nexport const DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER = \"TIMEPICKER\";\n\nexport interface DynamicTimePickerModelConfig extends DynamicDateControlModelConfig {\n    meridian?: boolean;\n    showSeconds?: boolean;\n}\n\nexport class DynamicTimePickerModel extends DynamicDateControlModel {\n    @serializable() meridian: boolean;\n    @serializable() showSeconds: boolean;\n\n    @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER;\n\n    constructor(config: DynamicTimePickerModelConfig, layout?: DynamicFormControlLayout) {\n        super(config, layout);\n\n        this.meridian = isBoolean(config.meridian) ? config.meridian : false;\n        this.showSeconds = isBoolean(config.showSeconds) ? config.showSeconds : false;\n    }\n}\n","import { isString } from \"./core.utils\";\n\nexport function maskToString(mask: string | RegExp | (string | RegExp)[]): string | string[] | null {\n    if (isString(mask)) {\n        return mask as string;\n\n    } else if (mask instanceof RegExp) {\n        return mask.toString();\n\n    } else if (Array.isArray(mask)) {\n        return mask.map(value => maskToString(value)) as string[];\n    }\n\n    return null;\n}\n\nexport function maskFromString(mask: string | string[]): string | RegExp | (string | RegExp)[] | null {\n    if (isString(mask)) {\n        const isRegExp = (mask as string).startsWith(\"/\") && (mask as string).endsWith(\"/\");\n        return isRegExp ? new RegExp((mask as string).slice(1, mask.length - 1)) : mask;\n\n    } else if (Array.isArray(mask)) {\n        return (mask as string[]).map(value => maskFromString(value)) as string[];\n    }\n\n    return null;\n}\n\nexport function parseReviver(_key: string, value: any): any {\n    const regexDateISO = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*))(?:Z|([+\\-])([\\d|:]*))?$/;\n    return isString(value) && regexDateISO.test(value) ? new Date(value) : value;\n}\n","import { Injectable } from \"@angular/core\";\nimport { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\nimport { AbstractControlOptions } from \"@angular/forms\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { DynamicFormValueControlModel } from \"../model/dynamic-form-value-control.model\";\nimport {\n    DynamicFormArrayModel,\n    DYNAMIC_FORM_CONTROL_TYPE_ARRAY,\n    DynamicFormArrayGroupModel\n} from \"../model/form-array/dynamic-form-array.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_GROUP, DynamicFormGroupModel } from \"../model/form-group/dynamic-form-group.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP,\n    DynamicCheckboxGroupModel\n} from \"../model/checkbox/dynamic-checkbox-group.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DynamicCheckboxModel } from \"../model/checkbox/dynamic-checkbox.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER,\n    DynamicColorPickerModel\n} from \"../model/colorpicker/dynamic-colorpicker.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER,\n    DynamicDatePickerModel\n} from \"../model/datepicker/dynamic-datepicker.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_EDITOR, DynamicEditorModel } from \"../model/editor/dynamic-editor.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD,\n    DynamicFileUploadModel\n} from \"../model/file-upload/dynamic-file-upload.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_INPUT, DynamicInputModel } from \"../model/input/dynamic-input.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP,\n    DynamicRadioGroupModel\n} from \"../model/radio/dynamic-radio-group.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_RATING, DynamicRatingModel } from \"../model/rating/dynamic-rating.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_SELECT, DynamicSelectModel } from \"../model/select/dynamic-select.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_SLIDER, DynamicSliderModel } from \"../model/slider/dynamic-slider.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_SWITCH, DynamicSwitchModel } from \"../model/switch/dynamic-switch.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, DynamicTextAreaModel } from \"../model/textarea/dynamic-textarea.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER,\n    DynamicTimePickerModel\n} from \"../model/timepicker/dynamic-timepicker.model\";\nimport { DynamicFormValidationService } from \"./dynamic-form-validation.service\";\nimport { DynamicFormModel, DynamicUnionFormModel } from \"../model/dynamic-form.model\";\nimport { DynamicPathable } from \"../model/misc/dynamic-form-control-path.model\";\nimport { DynamicFormHook, DynamicValidatorsConfig } from \"../model/misc/dynamic-form-control-validation.model\";\nimport { parseReviver } from \"../utils/json.utils\";\nimport { isString } from \"../utils/core.utils\";\nimport { DynamicFormComponent } from \"../component/dynamic-form.component\";\nimport { DynamicFormComponentService } from \"./dynamic-form-component.service\";\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class DynamicFormService {\n\n    constructor(private componentService: DynamicFormComponentService, private validationService: DynamicFormValidationService) {\n    }\n\n    private createAbstractControlOptions(validatorsConfig: DynamicValidatorsConfig | null = null,\n                                         asyncValidatorsConfig: DynamicValidatorsConfig | null = null,\n                                         updateOn: DynamicFormHook | null = null): AbstractControlOptions {\n        return {\n            asyncValidators: asyncValidatorsConfig !== null ? this.validationService.getAsyncValidators(asyncValidatorsConfig) : null,\n            validators: validatorsConfig !== null ? this.validationService.getValidators(validatorsConfig) : null,\n            updateOn: updateOn !== null && this.validationService.isFormHook(updateOn) ? updateOn : DynamicFormHook.Change\n        };\n    }\n\n    createFormArray(formArrayModel: DynamicFormArrayModel): UntypedFormArray {\n        const controls: AbstractControl[] = [];\n        const options = this.createAbstractControlOptions(formArrayModel.validators, formArrayModel.asyncValidators,\n            formArrayModel.updateOn);\n\n        for (let index = 0; index < formArrayModel.size; index++) {\n            const groupModel = formArrayModel.get(index);\n            const groupOptions = this.createAbstractControlOptions(formArrayModel.groupValidators,\n                formArrayModel.groupAsyncValidators, formArrayModel.updateOn);\n\n            controls.push(this.createFormGroup(groupModel.group, groupOptions, groupModel));\n        }\n\n        return new UntypedFormArray(controls, options);\n    }\n\n    createFormGroup(formModel: DynamicFormModel, options: AbstractControlOptions | null = null,\n                    parent: DynamicPathable | null = null): UntypedFormGroup {\n        const controls: { [controlId: string]: AbstractControl; } = {};\n\n        formModel.forEach(model => {\n            model.parent = parent;\n\n            switch (model.type) {\n\n                case DYNAMIC_FORM_CONTROL_TYPE_ARRAY:\n                    controls[model.id] = this.createFormArray(model as DynamicFormArrayModel);\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_GROUP:\n                case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP:\n                    const groupModel = model as DynamicFormGroupModel;\n                    const groupOptions = this.createAbstractControlOptions(groupModel.validators,\n                        groupModel.asyncValidators, groupModel.updateOn);\n\n                    controls[model.id] = this.createFormGroup(groupModel.group, groupOptions, groupModel);\n                    break;\n\n                default:\n                    const controlModel = model as DynamicFormValueControlModel<any>;\n                    const controlState = {value: controlModel.value, disabled: controlModel.disabled};\n                    const controlOptions = this.createAbstractControlOptions(controlModel.validators,\n                        controlModel.asyncValidators, controlModel.updateOn);\n\n                    controls[model.id] = new UntypedFormControl(controlState, controlOptions);\n            }\n        });\n\n        return new UntypedFormGroup(controls, options);\n    }\n\n    getPathSegment(model: DynamicPathable): string {\n        return model instanceof DynamicFormArrayGroupModel ? model.index.toString() : (model as DynamicFormControlModel).id;\n    }\n\n    getPath(model: DynamicPathable, join: boolean = false): string[] | string {\n        const path = [this.getPathSegment(model)];\n        let parent = model.parent;\n\n        while (parent) {\n            path.unshift(this.getPathSegment(parent));\n            parent = parent.parent;\n        }\n\n        return join ? path.join(\".\") : path;\n    }\n\n    addFormGroupControl(formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel, ...models: DynamicFormModel): void {\n        if (formModel instanceof DynamicFormGroupModel) {\n            this.insertFormGroupControl(formModel.size(), formGroup, formModel, ...models);\n\n        } else {\n            const model = formModel as DynamicFormModel;\n            this.insertFormGroupControl(model.length, formGroup, model, ...models);\n        }\n    }\n\n    moveFormGroupControl(index: number, step: number, formModel: DynamicUnionFormModel): void {\n        if (formModel instanceof DynamicFormGroupModel) {\n            formModel.move(index, step);\n\n        } else {\n            const model = formModel as DynamicFormModel;\n            model.splice(index + step, 0, ...model.splice(index, 1));\n        }\n    }\n\n    insertFormGroupControl(index: number, formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel, ...models: DynamicFormModel): void {\n        const parent = formModel instanceof DynamicFormGroupModel ? formModel : null;\n        const controls = this.createFormGroup(models, null, parent).controls;\n\n        Object.keys(controls).forEach((controlName, idx) => {\n            const controlModel = models[idx];\n\n            if (formModel instanceof DynamicFormGroupModel) {\n                formModel.insert(index, controlModel);\n\n            } else {\n                (formModel as DynamicFormModel).splice(index, 0, controlModel);\n            }\n\n            formGroup.addControl(controlName, controls[controlName]);\n        });\n    }\n\n    removeFormGroupControl(index: number, formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel): void {\n        if (formModel instanceof DynamicFormGroupModel) {\n            formGroup.removeControl(formModel.get(index).id);\n            formModel.remove(index);\n\n        } else {\n            formGroup.removeControl(formModel[index].id);\n            (formModel as DynamicFormModel).splice(index, 1);\n        }\n    }\n\n    addFormArrayGroup(formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void {\n        const groupModel = formArrayModel.addGroup();\n        formArray.push(this.createFormGroup(groupModel.group, null, groupModel));\n    }\n\n    insertFormArrayGroup(index: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void {\n        const groupModel = formArrayModel.insertGroup(index);\n        formArray.insert(index, this.createFormGroup(groupModel.group, null, groupModel));\n    }\n\n    moveFormArrayGroup(index: number, step: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void {\n        const newIndex = index + step;\n        const moveUp = step >= 0;\n\n        if ((index >= 0 && index < formArrayModel.size) && (newIndex >= 0 && newIndex < formArrayModel.size)) {\n            const movingGroups: AbstractControl[] = [];\n\n            for (let i = moveUp ? index : newIndex; i <= (moveUp ? newIndex : index); i++) {\n                movingGroups.push(formArray.at(i));\n            }\n\n            movingGroups.forEach((formControl, idx) => {\n                let position;\n\n                if (moveUp) {\n                    position = idx === 0 ? newIndex : index + idx - 1;\n\n                } else {\n                    position = idx === movingGroups.length - 1 ? newIndex : newIndex + idx + 1;\n                }\n\n                formArray.setControl(position, formControl);\n            });\n\n            formArrayModel.moveGroup(index, step);\n\n        } else {\n            throw new Error(`form array group cannot be moved due to index or new index being out of bounds`);\n        }\n    }\n\n    removeFormArrayGroup(index: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void {\n        formArray.removeAt(index);\n        formArrayModel.removeGroup(index);\n    }\n\n    clearFormArray(formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void {\n        formArray.clear();\n        formArrayModel.clear();\n    }\n\n    findById(id: string, formModel: DynamicFormModel): DynamicFormControlModel | null {\n        const findByIdFn = (modelId: string, groupModel: DynamicFormModel): void => {\n            for (const controlModel of groupModel) {\n\n                if (controlModel.id === modelId) {\n                    result = controlModel;\n                    break;\n                }\n\n                if (controlModel instanceof DynamicFormGroupModel) {\n                    findByIdFn(modelId, (controlModel as DynamicFormGroupModel).group);\n                }\n            }\n        };\n        let result = null;\n\n        findByIdFn(id, formModel);\n\n        return result;\n    }\n\n    findModelById<T extends DynamicFormControlModel>(id: string, formModel: DynamicFormModel): T | null {\n        return this.findById(id, formModel) as T;\n    }\n\n    findControlByModel<T extends AbstractControl>(model: DynamicFormControlModel, group: UntypedFormGroup): T | null {\n        return group.root.get(this.getPath(model, true)) as T;\n    }\n\n    detectChanges(formComponent?: DynamicFormComponent): void {\n        if (formComponent instanceof DynamicFormComponent) {\n            formComponent.markForCheck();\n            formComponent.detectChanges();\n\n        } else {\n            for (const form of this.componentService.getForms()) {\n                form.markForCheck();\n                form.detectChanges();\n            }\n        }\n    }\n\n    fromJSON(json: string | object[]): DynamicFormModel | never {\n        const formModelJSON = isString(json) ? JSON.parse(json, parseReviver) : json;\n        const formModel: DynamicFormModel = [];\n\n        formModelJSON.forEach((model: any) => {\n            const layout = model.layout ?? null;\n\n            switch (model.type) {\n\n                case DYNAMIC_FORM_CONTROL_TYPE_ARRAY:\n                    const formArrayModel = model as DynamicFormArrayModel;\n\n                    if (Array.isArray(formArrayModel.groups)) {\n                        formArrayModel.groups.forEach((groupModel: DynamicFormArrayGroupModel) => {\n                            groupModel.group = this.fromJSON(groupModel.group) as DynamicFormModel;\n                        });\n                    }\n\n                    formArrayModel.groupFactory = () => this.fromJSON(formArrayModel.groupPrototype);\n\n                    formModel.push(new DynamicFormArrayModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX:\n                    formModel.push(new DynamicCheckboxModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP:\n                    model.group = this.fromJSON(model.group) as DynamicCheckboxModel[];\n                    formModel.push(new DynamicCheckboxGroupModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER:\n                    formModel.push(new DynamicColorPickerModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER:\n                    formModel.push(new DynamicDatePickerModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_EDITOR:\n                    formModel.push(new DynamicEditorModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD:\n                    model.value = null;\n                    formModel.push(new DynamicFileUploadModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_GROUP:\n                    model.group = this.fromJSON(model.group);\n                    formModel.push(new DynamicFormGroupModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_INPUT:\n                    formModel.push(new DynamicInputModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP:\n                    formModel.push(new DynamicRadioGroupModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_RATING:\n                    formModel.push(new DynamicRatingModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_SELECT:\n                    formModel.push(new DynamicSelectModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_SLIDER:\n                    formModel.push(new DynamicSliderModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_SWITCH:\n                    formModel.push(new DynamicSwitchModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA:\n                    formModel.push(new DynamicTextAreaModel(model, layout));\n                    break;\n\n                case DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER:\n                    formModel.push(new DynamicTimePickerModel(model, layout));\n                    break;\n\n                default:\n                    throw new Error(`unknown form control model type defined on JSON object with id \"${model.id}\"`);\n            }\n        });\n\n        return formModel;\n    }\n}\n","import { InjectionToken, Injector, ValueProvider } from \"@angular/core\";\nimport { UntypedFormControl } from \"@angular/forms\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { DynamicFormValidationService } from \"./dynamic-form-validation.service\";\nimport { isObject } from \"../utils/core.utils\";\nimport { DynamicValidatorsConfig } from \"../model/misc/dynamic-form-control-validation.model\";\nimport { DynamicFormService } from \"./dynamic-form.service\";\n\nexport const MATCH_DISABLED = \"DISABLED\";\nexport const MATCH_ENABLED = \"ENABLED\";\nexport const MATCH_HIDDEN = \"HIDDEN\";\nexport const MATCH_OPTIONAL = \"OPTIONAL\";\nexport const MATCH_REQUIRED = \"REQUIRED\";\nexport const MATCH_VISIBLE = \"VISIBLE\";\n\nexport const AND_OPERATOR = \"AND\";\nexport const OR_OPERATOR = \"OR\";\n\nexport interface DynamicFormControlMatcher {\n    match: string;\n    opposingMatch: string | null;\n\n    onChange(hasMatch: boolean, model: DynamicFormControlModel, control: UntypedFormControl, injector: Injector): void;\n}\n\nexport const DYNAMIC_MATCHERS = new InjectionToken<DynamicFormControlMatcher>(\"DYNAMIC_MATCHERS\");\n\nexport const DISABLED_MATCHER: DynamicFormControlMatcher = {\n    match: MATCH_DISABLED,\n    opposingMatch: MATCH_ENABLED,\n    onChange(hasMatch, model) {\n        model.disabled = hasMatch;\n    }\n};\n\nexport const HIDDEN_MATCHER: DynamicFormControlMatcher = {\n    match: MATCH_HIDDEN,\n    opposingMatch: MATCH_VISIBLE,\n    onChange(hasMatch, model) {\n        model.hidden = hasMatch;\n    }\n};\n\nexport const REQUIRED_MATCHER: DynamicFormControlMatcher = {\n    match: MATCH_REQUIRED,\n    opposingMatch: MATCH_OPTIONAL,\n    onChange(hasMatch, model, control, injector) {\n        let validatorsConfig = null;\n\n        if (hasMatch) {\n            validatorsConfig = isObject(model.validators) ? {...model.validators, required: null} : {required: null};\n\n        } else {\n            if (isObject(model.validators)) {\n                delete (model.validators as Pick<DynamicValidatorsConfig, \"required\">).required;\n                validatorsConfig = {...model.validators};\n            }\n        }\n\n        injector.get(DynamicFormValidationService).updateValidators(validatorsConfig, control, model);\n        injector.get(DynamicFormService).detectChanges();\n    }\n};\n\nexport const DISABLED_MATCHER_PROVIDER: ValueProvider = {\n    provide: DYNAMIC_MATCHERS,\n    useValue: DISABLED_MATCHER,\n    multi: true\n};\n\nexport const HIDDEN_MATCHER_PROVIDER: ValueProvider = {\n    provide: DYNAMIC_MATCHERS,\n    useValue: HIDDEN_MATCHER,\n    multi: true\n};\n\nexport const REQUIRED_MATCHER_PROVIDER: ValueProvider = {\n    provide: DYNAMIC_MATCHERS,\n    useValue: REQUIRED_MATCHER,\n    multi: true\n};\n\nexport const DYNAMIC_MATCHER_PROVIDERS = [DISABLED_MATCHER_PROVIDER, HIDDEN_MATCHER_PROVIDER, REQUIRED_MATCHER_PROVIDER];\n","import { Inject, Injectable, Injector, Optional } from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport {\n    AND_OPERATOR,\n    DYNAMIC_MATCHERS,\n    DynamicFormControlMatcher,\n    OR_OPERATOR\n} from \"./dynamic-form-relation-matchers\";\nimport { DynamicFormControlCondition, DynamicFormControlRelation } from \"../model/misc/dynamic-form-control-relation.model\";\nimport { distinctUntilChanged, startWith } from \"rxjs/operators\";\nimport { merge, Subscription } from \"rxjs\";\nimport { isString } from \"../utils/core.utils\";\n\nexport type DynamicRelatedFormControls = { [path: string]: UntypedFormControl };\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class DynamicFormRelationService {\n\n    constructor(@Optional() @Inject(DYNAMIC_MATCHERS) private MATCHERS: DynamicFormControlMatcher[], private injector: Injector) {\n    }\n\n    getRelatedFormControls(model: DynamicFormControlModel, group: UntypedFormGroup): DynamicRelatedFormControls {\n        const conditionReducer = (controls: DynamicRelatedFormControls, condition: DynamicFormControlCondition) => {\n            const path = condition.rootPath ?? condition.id;\n\n            if (isString(path) && !controls.hasOwnProperty(path)) {\n                const control = condition.rootPath ? group.root.get(condition.rootPath) : group.get(condition.id!);\n                control instanceof UntypedFormControl ?\n                    controls[path] = control : console.warn(`No related form control with id ${condition.id} could be found`);\n            }\n\n            return controls;\n        };\n\n        const relationReducer = (controls: DynamicRelatedFormControls, relation: DynamicFormControlRelation) =>\n            relation.when.reduce(conditionReducer, controls);\n\n        return model.relations.reduce(relationReducer, {});\n    }\n\n    findRelationByMatcher(relations: DynamicFormControlRelation[],\n                          matcher: DynamicFormControlMatcher): DynamicFormControlRelation | undefined {\n        return relations.find(relation => [matcher.match, matcher.opposingMatch].includes(relation.match));\n    }\n\n    matchesCondition(relation: DynamicFormControlRelation,\n                     relatedFormControls: DynamicRelatedFormControls,\n                     matcher: DynamicFormControlMatcher): boolean {\n        const operator = relation.operator ?? OR_OPERATOR;\n\n        return relation.when.reduce<boolean>((hasMatched, condition, index) => {\n            const path = condition.rootPath ?? condition.id;\n            let relatedFormControl;\n\n            for (const [key, control] of Object.entries(relatedFormControls)) {\n                if (key === path) {\n                    relatedFormControl = control;\n                    break;\n                }\n            }\n\n            if (relatedFormControl && relation.match === matcher.match) {\n                if (index > 0 && operator === AND_OPERATOR && !hasMatched) {\n                    return false;\n                }\n\n                if (index > 0 && operator === OR_OPERATOR && hasMatched) {\n                    return true;\n                }\n\n                return condition.value === relatedFormControl.value || condition.status === relatedFormControl.status;\n            }\n\n            if (relatedFormControl && relation.match === matcher.opposingMatch) {\n                if (index > 0 && operator === AND_OPERATOR && hasMatched) {\n                    return true;\n                }\n\n                if (index > 0 && operator === OR_OPERATOR && !hasMatched) {\n                    return false;\n                }\n\n                return !(condition.value === relatedFormControl.value || condition.status === relatedFormControl.status);\n            }\n\n            return false;\n\n        }, false);\n    }\n\n    subscribeRelations(model: DynamicFormControlModel, group: UntypedFormGroup, control: UntypedFormControl): Subscription[] {\n        const relatedFormControls = this.getRelatedFormControls(model, group);\n        const subscriptions: Subscription[] = [];\n\n        Object.values(relatedFormControls).forEach(relatedControl => {\n            const valueChanges = relatedControl.valueChanges.pipe(startWith(relatedControl.value), distinctUntilChanged());\n            const statusChanges = relatedControl.statusChanges.pipe(startWith(relatedControl.status), distinctUntilChanged());\n\n            subscriptions.push(merge(valueChanges, statusChanges).subscribe(() => {\n                this.MATCHERS.forEach(matcher => {\n                    const relation = this.findRelationByMatcher(model.relations, matcher);\n\n                    if (relation !== undefined) {\n                        const hasMatch = this.matchesCondition(relation, relatedFormControls, matcher);\n                        matcher.onChange(hasMatch, model, control, this.injector);\n                    }\n                });\n            }));\n        });\n\n        return subscriptions;\n    }\n}\n","import {\n    ChangeDetectorRef,\n    ComponentFactoryResolver,\n    ComponentRef, Directive,\n    EventEmitter,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    QueryList,\n    SimpleChanges,\n    Type,\n    ViewContainerRef\n} from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\nimport { Subscription } from \"rxjs\";\nimport {\n    DynamicFormControlCustomEvent,\n    DynamicFormControlEvent,\n    DynamicFormControlEventType,\n    isDynamicFormControlEvent\n} from \"./dynamic-form-control-event\";\nimport { DynamicFormControlModel } from \"../model/dynamic-form-control.model\";\nimport { DynamicFormValueControlModel } from \"../model/dynamic-form-value-control.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_TYPE_ARRAY,\n    DynamicFormArrayGroupModel\n} from \"../model/form-array/dynamic-form-array.model\";\nimport { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from \"../model/checkbox/dynamic-checkbox.model\";\nimport {\n    DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE,\n    DYNAMIC_FORM_CONTROL_TYPE_INPUT,\n    DynamicInputModel\n} from \"../model/input/dynamic-input.model\";\nimport {\n    DynamicFormControlLayout,\n    DynamicFormControlLayoutContext,\n    DynamicFormControlLayoutPlace\n} from \"../model/misc/dynamic-form-control-layout.model\";\nimport { DynamicFormControl } from \"./dynamic-form-control-interface\";\nimport { DynamicTemplateDirective } from \"../directive/dynamic-template.directive\";\nimport { DynamicFormLayout, DynamicFormLayoutService } from \"../service/dynamic-form-layout.service\";\nimport { DynamicFormValidationService } from \"../service/dynamic-form-validation.service\";\nimport { DynamicFormComponentService } from \"../service/dynamic-form-component.service\";\nimport { isString } from \"../utils/core.utils\";\nimport { DynamicFormRelationService } from \"../service/dynamic-form-relation.service\";\nimport { DynamicFormGroupComponent } from \"./dynamic-form-group.component\";\nimport { DynamicFormArrayComponent } from \"./dynamic-form-array.component\";\nimport { bufferCount, filter, map } from \"rxjs/operators\";\n\n@Directive()\n// tslint:disable-next-line:directive-class-suffix\nexport abstract class DynamicFormControlContainerComponent implements OnChanges, OnInit, OnDestroy {\n    private _hasFocus = false;\n\n    context: DynamicFormArrayGroupModel | null = null;\n    control!: UntypedFormControl;\n    group!: UntypedFormGroup;\n    hostClass?: string[];\n    klass?: string;\n    layout?: DynamicFormLayout;\n    model!: DynamicFormControlModel;\n\n    contentTemplateList?: QueryList<DynamicTemplateDirective>;\n    inputTemplateList?: QueryList<DynamicTemplateDirective>;\n\n    blur!: EventEmitter<DynamicFormControlEvent>;\n    change!: EventEmitter<DynamicFormControlEvent>;\n    customEvent?: EventEmitter<DynamicFormControlEvent>;\n    focus!: EventEmitter<DynamicFormControlEvent>;\n\n    componentViewContainerRef!: ViewContainerRef;\n\n    protected componentRef!: ComponentRef<DynamicFormControl>;\n    protected componentSubscriptions: Subscription[] = [];\n    protected controlLayout?: DynamicFormControlLayout;\n    protected subscriptions: Subscription[] = [];\n\n    protected constructor(protected changeDetectorRef: ChangeDetectorRef,\n                          protected componentFactoryResolver: ComponentFactoryResolver,\n                          protected layoutService: DynamicFormLayoutService,\n                          protected validationService: DynamicFormValidationService,\n                          protected componentService: DynamicFormComponentService,\n                          protected relationService: DynamicFormRelationService) {\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const groupChange = (changes as Pick<SimpleChanges, \"group\">).group;\n        const layoutChange = (changes as Pick<SimpleChanges, \"layout\">).layout;\n        const modelChange = (changes as Pick<SimpleChanges, \"model\">).model;\n\n        if (layoutChange || modelChange) {\n            this.onLayoutOrModelChange();\n        }\n\n        if (modelChange) {\n            this.onModelChange();\n        }\n\n        if (groupChange || modelChange) {\n            this.onGroupOrModelChange();\n        }\n    }\n\n    ngOnInit(): void {\n        this.subscriptions.push(this.control.statusChanges.pipe(\n            bufferCount(2, 1),\n            map(states => states[0]),\n            filter(previousState => previousState === \"PENDING\")\n        ).subscribe(_status => this.markForCheck()));\n    }\n\n    ngOnDestroy(): void {\n        this.destroyFormControlComponent();\n        this.unsubscribe();\n    }\n\n    abstract get componentType(): Type<DynamicFormControl> | null;\n\n    get id(): string {\n        return this.layoutService.getElementId(this.model);\n    }\n\n    get hasFocus(): boolean {\n        return this._hasFocus;\n    }\n\n    get isInvalid(): boolean {\n        return this.control.invalid;\n    }\n\n    get isValid(): boolean {\n        return this.control.valid;\n    }\n\n    get errorMessages(): string[] {\n        return this.validationService.createErrorMessages(this.control, this.model);\n    }\n\n    get showErrorMessages(): boolean {\n        return this.validationService.showErrorMessages(this.control, this.model, this.hasFocus);\n    }\n\n    get hasLabel(): boolean {\n        return isString(this.model.label);\n    }\n\n    get hasHint(): boolean {\n        return isString((this.model as DynamicFormValueControlModel<any>).hint);\n    }\n\n    get hint(): string | null {\n        return (this.model as DynamicFormValueControlModel<any>).hint ?? null;\n    }\n\n    get isCheckbox(): boolean {\n        return this.model.type === DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX;\n    }\n\n    get templates(): QueryList<DynamicTemplateDirective> | undefined {\n        return this.inputTemplateList !== undefined ? this.inputTemplateList : this.contentTemplateList;\n    }\n\n    get startTemplate(): DynamicTemplateDirective | undefined {\n        return this.model.type !== DYNAMIC_FORM_CONTROL_TYPE_ARRAY ?\n            this.layoutService.getStartTemplate(this.model, this.templates) : undefined;\n    }\n\n    get endTemplate(): DynamicTemplateDirective | undefined {\n        return this.model.type !== DYNAMIC_FORM_CONTROL_TYPE_ARRAY ?\n            this.layoutService.getEndTemplate(this.model, this.templates) : undefined;\n    }\n\n    getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace): string {\n        return this.layoutService.getClass(this.controlLayout, context, place);\n    }\n\n    markForCheck(): void {\n        this.changeDetectorRef.markForCheck();\n\n        const component = this.componentRef && this.componentRef.instance;\n\n        if (component && (component instanceof DynamicFormGroupComponent || component instanceof DynamicFormArrayComponent)) {\n            component.markForCheck();\n        }\n    }\n\n    protected createFormControlComponent(): void {\n        const componentType = this.componentType;\n\n        if (componentType !== null) {\n            const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);\n\n            this.componentViewContainerRef.clear();\n            this.componentRef = this.componentViewContainerRef.createComponent(componentFactory);\n\n            const component = this.componentRef.instance;\n\n            component.formLayout = this.layout;\n            component.group = this.group;\n            component.layout = this.controlLayout;\n            component.model = this.model;\n\n            if (this.templates) {\n                component.templates = this.templates;\n            }\n\n            this.componentSubscriptions.push(component.blur.subscribe(($event: any) => this.onBlur($event)));\n            this.componentSubscriptions.push(component.change.subscribe(($event: any) => this.onChange($event)));\n            this.componentSubscriptions.push(component.focus.subscribe(($event: any) => this.onFocus($event)));\n\n            if (component.customEvent !== undefined) {\n                this.componentSubscriptions.push(\n                    component.customEvent.subscribe(($event: any) => this.onCustomEvent($event)));\n            }\n\n            this.registerFormControlComponentRef(this.componentRef);\n        }\n    }\n\n    protected destroyFormControlComponent(): void {\n        if (this.componentRef) {\n            this.componentSubscriptions.forEach(subscription => subscription.unsubscribe());\n            this.componentSubscriptions = [];\n\n            this.unregisterFormControlComponentRef();\n            this.componentRef.destroy();\n        }\n    }\n\n    protected createDynamicFormControlEvent($event: any, type: string): DynamicFormControlEvent {\n        return {$event, context: this.context, control: this.control, group: this.group, model: this.model, type};\n    }\n\n    unsubscribe(): void {\n        // this.componentSubscriptions.forEach(subscription => subscription.unsubscribe());\n        // this.componentSubscriptions = [];\n\n        this.subscriptions.forEach(subscription => subscription.unsubscribe());\n        this.subscriptions = [];\n    }\n\n    onControlValueChanges(value: any): void {\n        if (this.model instanceof DynamicFormValueControlModel && this.model.value !== value) {\n            this.model.value = value;\n        }\n    }\n\n    onModelValueUpdates(value: any): void {\n        if (this.control.value !== value) {\n            this.control.setValue(value);\n        }\n    }\n\n    onModelDisabledUpdates(disabled: boolean): void {\n        disabled ? this.control.disable() : this.control.enable();\n    }\n\n    onLayoutOrModelChange(): void {\n        this.controlLayout = this.layoutService.findByModel(this.model, this.layout) ?? this.model.layout as DynamicFormControlLayout;\n        this.klass = `${Array.isArray(this.hostClass) ? this.hostClass.join(\" \") : \"\"} ${this.layoutService.getHostClass(this.controlLayout)}`;\n    }\n\n    onModelChange(): void {\n        this.destroyFormControlComponent();\n        this.createFormControlComponent();\n    }\n\n    onGroupOrModelChange(): void {\n        if (this.model) {\n            this.unsubscribe();\n\n            if (this.group) {\n                this.control = this.group.get(this.model.id) as UntypedFormControl;\n                this.subscriptions.push(this.control.valueChanges.subscribe(value => this.onControlValueChanges(value)));\n            }\n\n            this.subscriptions.push(this.model.disabledChanges.subscribe(value => this.onModelDisabledUpdates(value)));\n\n            if (this.model instanceof DynamicFormValueControlModel) {\n                const model = this.model as DynamicFormValueControlModel<any>;\n\n                this.subscriptions.push(model.valueChanges.subscribe(value => this.onModelValueUpdates(value)));\n            }\n\n            if (this.model.relations.length > 0) {\n                this.subscriptions.push(...this.relationService.subscribeRelations(this.model, this.group, this.control));\n            }\n        }\n    }\n\n    onChange($event: Event | DynamicFormControlEvent | any): void {\n        if ($event instanceof Event) { // native HTML5 change event\n            if (this.model.type === DYNAMIC_FORM_CONTROL_TYPE_INPUT) {\n                const model = this.model as DynamicInputModel;\n\n                if (model.inputType === DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE) {\n                    const inputElement: any = $event.target;\n\n                    model.files = inputElement.files as FileList;\n                }\n            }\n\n            this.change.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Change));\n\n        } else if (isDynamicFormControlEvent($event)) { // event bypass\n            this.change.emit($event);\n\n        } else { // custom library value change event\n            this.change.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Change));\n        }\n    }\n\n    onBlur($event: FocusEvent | DynamicFormControlEvent | any): void {\n        if (isDynamicFormControlEvent($event)) { // event bypass\n            this.blur.emit($event);\n\n        } else { // native HTML 5 or UI library blur event\n            this._hasFocus = false;\n            this.blur.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Blur));\n        }\n    }\n\n    onFocus($event: FocusEvent | DynamicFormControlEvent | any): void {\n        if (isDynamicFormControlEvent($event)) { // event bypass\n            this.focus.emit($event);\n\n        } else { // native HTML 5 or UI library focus event\n            this._hasFocus = true;\n            this.focus.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Focus));\n        }\n    }\n\n    onCustomEvent($event: DynamicFormControlEvent | DynamicFormControlCustomEvent): void {\n        const emitter = this.customEvent as EventEmitter<DynamicFormControlEvent>;\n\n        if (isDynamicFormControlEvent($event)) { // child event bypass\n            emitter.emit($event);\n\n        } else { // native UI library custom event\n            emitter.emit(this.createDynamicFormControlEvent($event.customEvent, $event.customEventType));\n        }\n    }\n\n    private registerFormControlComponentRef(ref: ComponentRef<DynamicFormControl>): void {\n        if (this.context instanceof DynamicFormArrayGroupModel) {\n            this.componentService.registerFormControl(this.model, ref, this.context.index);\n\n        } else {\n            this.componentService.registerFormControl(this.model, ref);\n        }\n    }\n\n    private unregisterFormControlComponentRef(): void {\n        if (this.context instanceof DynamicFormArrayGroupModel) {\n            this.componentService.unregisterFormControl(this.model.id, this.context.index);\n\n        } else {\n            this.componentService.unregisterFormControl(this.model.id);\n        }\n    }\n}\n","import { AfterViewInit, Directive, QueryList, TemplateRef } from \"@angular/core\";\nimport { DynamicFormControlWithTemplate } from \"./dynamic-form-control-with-template-interface\";\nimport { DynamicTemplateDirective } from \"../directive/dynamic-template.directive\";\nimport { DynamicFormControlComponent } from \"./dynamic-form-control.component\";\nimport { isString } from \"../utils/core.utils\";\nimport { DynamicFormLayoutService } from \"../service/dynamic-form-layout.service\";\nimport { DynamicFormValidationService } from \"../service/dynamic-form-validation.service\";\n\n@Directive()\n// tslint:disable-next-line:directive-class-suffix\nexport abstract class DynamicFormControlWithTemplateComponent extends DynamicFormControlComponent\n    implements DynamicFormControlWithTemplate, AfterViewInit {\n\n    readonly templateDirectives!: Map<string, string>;\n\n    templates?: QueryList<DynamicTemplateDirective> | DynamicTemplateDirective[];\n\n    protected constructor(protected layoutService: DynamicFormLayoutService,\n                          protected validationService: DynamicFormValidationService) {\n        super(layoutService, validationService);\n    }\n\n    ngAfterViewInit() {\n        this.layoutService\n            .filterTemplatesByModel(this.model, this.templates)\n            .forEach(template => this.bindTemplate(template));\n    }\n\n    abstract get viewChild(): any;\n\n    abstract mapTemplate(template: DynamicTemplateDirective): DynamicTemplateDirective | TemplateRef<any>;\n\n    bindTemplate(template: DynamicTemplateDirective) {\n        if (isString(template.as) && this.templateDirectives.has(template.as)) {\n            const property = this.templateDirectives.get(template.as) as string;\n\n            this.viewChild[property] = this.mapTemplate(template);\n        }\n    }\n}\n","import { Directive, ElementRef, Input, Renderer2, AfterViewInit } from \"@angular/core\";\nimport { isString } from \"../utils/core.utils\";\n\n@Directive({\n    selector: \"[dynamicList]\",\n    standalone: true\n})\nexport class DynamicListDirective implements AfterViewInit {\n    @Input(\"dynamicList\") listId?: string;\n\n    constructor(private elementRef: ElementRef, private renderer: Renderer2) {\n    }\n\n    ngAfterViewInit() {\n        if (isString(this.listId)) {\n            this.renderer.setAttribute(this.elementRef.nativeElement, \"list\", this.listId as string);\n        }\n    }\n}\n","export const AUTOCOMPLETE_OFF = \"off\";\nexport const AUTOCOMPLETE_ON = \"on\";\n\nexport const AUTOFILL_TOKEN_BILLING = \"billing\";\nexport const AUTOFILL_TOKEN_SHIPPING = \"shipping\";\n\nexport const AUTOFILL_TOKENS_ADDRESS = [AUTOFILL_TOKEN_BILLING, AUTOFILL_TOKEN_SHIPPING];\n\nexport const AUTOFILL_TOKEN_HOME = \"home\";\nexport const AUTOFILL_TOKEN_WORK = \"work\";\nexport const AUTOFILL_TOKEN_MOBILE = \"mobile\";\nexport const AUTOFILL_TOKEN_FAX = \"fax\";\nexport const AUTOFILL_TOKEN_PAGER = \"pager\";\n\nexport const AUTOFILL_TOKENS_CONTACT = [\n    AUTOFILL_TOKEN_FAX, AUTOFILL_TOKEN_HOME, AUTOFILL_TOKEN_MOBILE, AUTOFILL_TOKEN_PAGER, AUTOFILL_TOKEN_WORK\n];\n\nexport const AUTOFILL_FIELD_STREET_ADDRESS = \"street-address\";\nexport const AUTOFILL_FIELD_ADDRESS_LINE_1 = \"address-line1\";\nexport const AUTOFILL_FIELD_ADDRESS_LINE_2 = \"address-line2\";\nexport const AUTOFILL_FIELD_ADDRESS_LINE_3 = \"address-line3\";\nexport const AUTOFILL_FIELD_ADDRESS_LEVEL_4 = \"address-level4\";\nexport const AUTOFILL_FIELD_ADDRESS_LEVEL_3 = \"address-level3\";\nexport const AUTOFILL_FIELD_ADDRESS_LEVEL_2 = \"address-level2\";\nexport const AUTOFILL_FIELD_ADDRESS_LEVEL_1 = \"address-level1\";\n\nexport const AUTOFILL_FIELD_NAME = \"name\";\nexport const AUTOFILL_FIELD_HONORIFIC_PREFIX = \"honorific-prefix\";\nexport const AUTOFILL_FIELD_GIVEN_NAME = \"given-name\";\nexport const AUTOFILL_FIELD_ADDITIONAL_NAME = \"additional-name\";\nexport const AUTOFILL_FIELD_FAMILY_NAME = \"family-name\";\nexport const AUTOFILL_FIELD_HONORIFIC_SUFFIX = \"honorific-suffix\";\nexport const AUTOFILL_FIELD_NICKNAME = \"nickname\";\nexport const AUTOFILL_FIELD_USERNAME = \"username\";\n\nexport const AUTOFILL_FIELD_NEW_PASSWORD = \"new-password\";\nexport const AUTOFILL_FIELD_CURRENT_PASSWORD = \"current-password\";\n\nexport const AUTOFILL_FIELD_ORGANIZATION_TITLE = \"organization-title\";\nexport const AUTOFILL_FIELD_ORGANIZATION = \"organization\";\n\nexport const AUTOFILL_FIELD_COUNTRY = \"country\";\nexport const AUTOFILL_FIELD_COUNTRY_NAME = \"country-name\";\nexport const AUTOFILL_FIELD_POSTAL_CODE = \"postal-code\";\n\nexport const AUTOFILL_FIELD_CC_NAME = \"cc-name\";\nexport const AUTOFILL_FIELD_CC_GIVEN_NAME = \"cc-given-name\";\nexport const AUTOFILL_FIELD_CC_ADDITIONAL_NAME = \"cc-additional-name\";\nexport const AUTOFILL_FIELD_CC_FAMILY_NAME = \"cc-family-name\";\nexport const AUTOFILL_FIELD_CC_NUMBER = \"cc-number\";\nexport const AUTOFILL_FIELD_CC_EXP = \"cc-exp\";\nexport const AUTOFILL_FIELD_CC_EXP_MONTH = \"cc-exp-month\";\nexport const AUTOFILL_FIELD_CC_EXP_YEAR = \"cc-exp-year\";\nexport const AUTOFILL_FIELD_CC_CSC = \"cc-csc\";\nexport const AUTOFILL_FIELD_CC_TYPE = \"cc-type\";\n\nexport const AUTOFILL_FIELD_TRANSACTION_CURRENCY = \"transaction-currency\";\nexport const AUTOFILL_FIELD_TRANSACTION_AMOUNT = \"transaction-amount\";\n\nexport const AUTOFILL_FIELD_LANGUAGE = \"language\";\n\nexport const AUTOFILL_FIELD_BDAY = \"bday\";\nexport const AUTOFILL_FIELD_BDAY_DAY = \"bday-day\";\nexport const AUTOFILL_FIELD_BDAY_MONTH = \"bday-month\";\nexport const AUTOFILL_FIELD_BDAY_YEAR = \"bday-year\";\n\nexport const AUTOFILL_FIELD_SEX = \"sex\";\n\nexport const AUTOFILL_FIELD_URL = \"url\";\n\nexport const AUTOFILL_FIELD_PHOTO = \"photo\";\n\nexport const AUTOFILL_FIELDS = [\n    AUTOFILL_FIELD_STREET_ADDRESS, AUTOFILL_FIELD_ADDRESS_LINE_1, AUTOFILL_FIELD_ADDRESS_LINE_2,\n    AUTOFILL_FIELD_ADDRESS_LINE_3, AUTOFILL_FIELD_ADDRESS_LEVEL_4, AUTOFILL_FIELD_ADDRESS_LEVEL_3,\n    AUTOFILL_FIELD_ADDRESS_LEVEL_2, AUTOFILL_FIELD_ADDRESS_LEVEL_1, AUTOFILL_FIELD_NAME,\n    AUTOFILL_FIELD_HONORIFIC_PREFIX, AUTOFILL_FIELD_GIVEN_NAME, AUTOFILL_FIELD_ADDITIONAL_NAME,\n    AUTOFILL_FIELD_FAMILY_NAME, AUTOFILL_FIELD_HONORIFIC_SUFFIX, AUTOFILL_FIELD_NICKNAME, AUTOFILL_FIELD_USERNAME,\n    AUTOFILL_FIELD_NEW_PASSWORD, AUTOFILL_FIELD_CURRENT_PASSWORD, AUTOFILL_FIELD_ORGANIZATION_TITLE,\n    AUTOFILL_FIELD_ORGANIZATION, AUTOFILL_FIELD_COUNTRY, AUTOFILL_FIELD_COUNTRY_NAME, AUTOFILL_FIELD_POSTAL_CODE,\n    AUTOFILL_FIELD_CC_NAME, AUTOFILL_FIELD_CC_GIVEN_NAME, AUTOFILL_FIELD_CC_ADDITIONAL_NAME,\n    AUTOFILL_FIELD_CC_FAMILY_NAME, AUTOFILL_FIELD_CC_NUMBER, AUTOFILL_FIELD_CC_EXP, AUTOFILL_FIELD_CC_EXP_MONTH,\n    AUTOFILL_FIELD_CC_EXP_YEAR, AUTOFILL_FIELD_CC_CSC, AUTOFILL_FIELD_CC_TYPE, AUTOFILL_FIELD_TRANSACTION_CURRENCY,\n    AUTOFILL_FIELD_TRANSACTION_AMOUNT, AUTOFILL_FIELD_LANGUAGE, AUTOFILL_FIELD_BDAY, AUTOFILL_FIELD_BDAY_DAY,\n    AUTOFILL_FIELD_BDAY_MONTH, AUTOFILL_FIELD_BDAY_YEAR, AUTOFILL_FIELD_SEX, AUTOFILL_FIELD_URL, AUTOFILL_FIELD_PHOTO\n];\n\nexport const AUTOFILL_FIELD_TEL = \"tel\";\nexport const AUTOFILL_FIELD_TEL_COUNTRY_CODE = \"tel-country-code\";\nexport const AUTOFILL_FIELD_TEL_NATIONAL = \"tel-national\";\nexport const AUTOFILL_FIELD_TEL_AREA_CODE = \"tel-area-code\";\nexport const AUTOFILL_FIELD_TEL_LOCAL = \"tel-local\";\nexport const AUTOFILL_FIELD_TEL_LOCAL_PREFIX = \"tel-local-prefix\";\nexport const AUTOFILL_FIELD_TEL_LOCAL_SUFFIX = \"tel-local-suffix\";\nexport const AUTOFILL_FIELD_TEL_LOCAL_EXTENSION = \"tel-extension\";\nexport const AUTOFILL_FIELD_EMAIL = \"email\";\nexport const AUTOFILL_FIELD_IMPP = \"impp\";\n\nexport const AUTOFILL_FIELDS_CONTACT = [\n    AUTOFILL_FIELD_TEL, AUTOFILL_FIELD_TEL_COUNTRY_CODE, AUTOFILL_FIELD_TEL_NATIONAL, AUTOFILL_FIELD_TEL_AREA_CODE,\n    AUTOFILL_FIELD_TEL_LOCAL, AUTOFILL_FIELD_TEL_LOCAL_PREFIX, AUTOFILL_FIELD_TEL_LOCAL_SUFFIX,\n    AUTOFILL_FIELD_TEL_LOCAL_EXTENSION, AUTOFILL_FIELD_EMAIL, AUTOFILL_FIELD_IMPP\n];\n\nexport function isAddressToken(token: string): boolean {\n    return AUTOFILL_TOKENS_ADDRESS.indexOf(token) > -1;\n}\n\nexport function isContactField(token: string): boolean {\n    return AUTOFILL_FIELDS_CONTACT.indexOf(token) > -1;\n}\n\nexport function isContactToken(token: string): boolean {\n    return AUTOFILL_TOKENS_CONTACT.indexOf(token) > -1;\n}\n\nexport function isField(token: string): boolean {\n    return AUTOFILL_FIELDS.indexOf(token) > -1;\n}\n\nexport function isSectionToken(token: string): boolean {\n    return token.startsWith(\"section-\");\n}\n\nexport function validate(tokens: string): boolean {\n\n    const toExpression = (total: string, currentValue: string) => `${total}|${currentValue}`;\n    const tokensAddress = AUTOFILL_TOKENS_ADDRESS.reduce(toExpression);\n    const tokensContact = AUTOFILL_TOKENS_CONTACT.reduce(toExpression);\n    const fields = AUTOFILL_FIELDS.reduce(toExpression);\n    const fieldsContact = AUTOFILL_FIELDS_CONTACT.reduce(toExpression);\n    const regex = new RegExp(`^(section-\\\\w+\\\\s{1})?((${tokensAddress}){1}\\\\s)?((${fields}){1}|((${tokensContact}){1}\\\\s{1}(${fieldsContact})))$`);\n\n    return regex.test(tokens);\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { DynamicListDirective } from \"./directive/dynamic-list.directive\";\nimport { DynamicTemplateDirective } from \"./directive/dynamic-template.directive\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        DynamicListDirective,\n        DynamicTemplateDirective\n    ],\n    exports: [\n        DynamicListDirective,\n        DynamicTemplateDirective\n    ]\n})\nexport class DynamicFormsCoreModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DynamicFormComponentService","i2.DynamicFormValidationService","i1.DynamicFormLayoutService","i3.DynamicFormComponentService","i4.DynamicFormRelationService"],"mappings":"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"}