{"version":3,"file":"stemy-ngx-dynamic-form.mjs","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/utils/customizer.ts","../../src/ngx-dynamic-form/utils/decorators.ts","../../src/ngx-dynamic-form/utils/validation.ts","../../src/ngx-dynamic-form/utils/misc.ts","../../src/ngx-dynamic-form/utils/internal.ts","../../src/ngx-dynamic-form/services/dynamic-form-builder.service.ts","../../src/ngx-dynamic-form/services/dynamic-form-schema.service.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-field-type.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.html","../../src/ngx-dynamic-form/components/dynamic-form-array/dynamic-form-array.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-array/dynamic-form-array.component.html","../../src/ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component.html","../../src/ngx-dynamic-form/components/dynamic-form-field/dynamic-form-field.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-field/dynamic-form-field.component.html","../../src/ngx-dynamic-form/components/dynamic-form-fieldset/dynamic-form-fieldset.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-fieldset/dynamic-form-fieldset.component.html","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.html","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.html","../../src/ngx-dynamic-form/ngx-dynamic-form.imports.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {Injector, OutputRef, Signal, Type} from \"@angular/core\";\nimport {AbstractControl, FormControl, FormGroup} from \"@angular/forms\";\nimport {Observable} from \"rxjs\";\nimport {ConfigOption, FormlyFieldConfig, FormlyFieldProps} from \"@ngx-formly/core\";\nimport {FormlySelectOption} from \"@ngx-formly/core/select\";\nimport {\n    IAsyncMessage,\n    IOpenApiSchema,\n    IOpenApiSchemaProperty,\n    IRequestOptions,\n    MaybeArray,\n    MaybePromise, TabOption\n} from \"@stemy/ngx-utils\";\n\n// --- Basic frm constants ---\nexport const FORM_ROOT_ID = \"__root\";\n\n// --- Basic form types ---\n\nexport type DynamicFormStatus = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\nexport type UploadData = Record<string, any> | ArrayBuffer | FormData;\n\n// --- Basic form field interfaces ---\n\nexport type FormFieldKey = string | number | (string | number)[];\n\nexport type FormFieldLabelCustomizer = (key: string, label: string, parent: FormFieldConfig, labelPrefix: string) => string;\n\nexport interface FormBuilderOptions {\n    labelPrefix?: string;\n    labelCustomizer?: FormFieldLabelCustomizer;\n    testId?: string;\n    context?: any;\n}\n\n/**\n * This type describes additional values for form field properties\n */\nexport type FormFieldAdditional = Readonly<{[key: string]: any}>;\n\n/**\n * This type describes how one of the array actions should react based on an array item\n */\nexport type FormFieldArrayItemsAction = boolean | ((item: any, ix: number, field: FormFieldConfig) => boolean);\n\n/**\n * This interface describes what properties each form field component can have.\n */\nexport interface FormFieldProps extends FormlyFieldProps {\n    /**\n     * Other, not basic component specific values can be stored here, use the helper function \"additionalFieldValues\"\n     */\n    additional?: FormFieldAdditional;\n    /**\n     * Specifies if required marker should be hidden\n     */\n    hideRequiredMarker?: boolean;\n    /**\n     * Specifies if label should be hidden\n     */\n    hideLabel?: boolean;\n    /**\n     * In the input component, define how the browser should automatically fill in the field value.\n     */\n    autocomplete?: string;\n    /**\n     * In the number type input component, you specify what text to add at the end, e.g. some unit of measurement\n     */\n    suffix?: string;\n    /**\n     * In a checkbox type component, it specifies where the label should be placed. (Bootstrap library specific)\n     */\n    formCheck?: string;\n    /**\n     * In a checkbox type component, it specifies where the label should be placed. (Material library specific)\n     */\n    labelPosition?: \"before\" | \"after\";\n    /**\n     * Specifies that the value of the checkbox type component can be undecided.\n     */\n    indeterminate?: boolean;\n    /**\n     * Specifies that multiple values can be selected at once in the select component.\n     */\n    multiple?: boolean;\n    /**\n     * Allows empty, null values in the select component\n     */\n    allowEmpty?: boolean;\n    /**\n     * Groups selectable values based on the value of the specified key in the select component\n     */\n    groupBy?: string;\n    /**\n     * For group and array type components, specifies whether the field hides groups or array elements under tabs and always displays only the selected element.\n     */\n    useTabs?: boolean;\n    /**\n     * In the case of an array type component, it specifies the key from which each element to extract the text displayed on the tab.\n     * If not specified or the value is undefined, it is replaced with the index of the array element.\n     */\n    tabsLabel?: string;\n    /**\n     * Specifies whether new elements can be inserted into existing elements of an array component.\n     */\n    insertItem?: FormFieldArrayItemsAction;\n    /**\n     * Specifies whether an existing element of an array type component can be cloned.\n     */\n    cloneItem?: FormFieldArrayItemsAction;\n    /**\n     * Specifies whether an existing element of an array type component can be moved.\n     */\n    moveItem?: FormFieldArrayItemsAction;\n    /**\n     * Specifies whether an existing element of an array type component can be deleted.\n     */\n    removeItem?: FormFieldArrayItemsAction;\n    /**\n     * Specifies whether a new element can be added to the array type component.\n     */\n    addItem?: boolean;\n    /**\n     * Specifies whether all the items can be removed from the array type component.\n     */\n    clearItems?: boolean;\n    /**\n     * Specifies that the file upload component value is stored inline, so instead of an API call, the file Blob is inserted into the field value.\n     */\n    inline?: boolean;\n    /**\n     * Specifies what types of files the file upload component can accept. (.jpg, .png)\n     */\n    accept?: string | string[];\n    url?: string;\n    maxSize?: number;\n    uploadOptions?: IRequestOptions;\n    createUploadData?: (file: File) => UploadData | Promise<UploadData>;\n    /**\n     * Old upload props\n     */\n    multi?: boolean;\n    asFile?: boolean;\n    uploadUrl?: string;\n    /**\n     * Angular material specific props\n     */\n    floatLabel?: \"always\" | \"auto\";\n    appearance?: \"fill\" | \"outline\";\n    subscriptSizing?: \"fixed\" | \"dynamic\";\n    color?: \"primary\" | \"accent\" | \"warn\";\n    hideFieldUnderline?: boolean;\n}\n\nexport type FormFieldSerializer = (field: FormFieldConfig, injector: Injector) => MaybePromise<any>;\n\nexport declare type FormHookFn = (field: FormFieldConfig) => any;\n\nexport interface FormHookConfig {\n    onInit?: FormHookFn;\n    onChanges?: FormHookFn;\n    afterContentInit?: FormHookFn;\n    afterViewInit?: FormHookFn;\n    onDestroy?: FormHookFn;\n}\n\nexport type FormFieldExpression<T = any> = string | ((field: FormFieldConfig) => T) | Observable<T>;\nexport type FormFieldExpressions = {\n    [property: string]: FormFieldExpression;\n} & {\n    className?: FormFieldExpression<string>;\n    hide?: FormFieldExpression<boolean>;\n    \"props.disabled\"?: FormFieldExpression<boolean>;\n    \"props.required\"?: FormFieldExpression<boolean>;\n};\n\nexport interface FormFieldConfig<T = FormFieldProps> extends FormlyFieldConfig<T> {\n    serializer?: FormFieldSerializer;\n    serialize?: boolean;\n    fieldSet?: string;\n    parent?: FormFieldConfig;\n    fieldGroup?: FormFieldConfig[];\n    fieldArray?: FormFieldConfig;\n    hooks: FormHookConfig;\n    expressions: FormFieldExpressions;\n    readonly additional?: FormFieldAdditional;\n    readonly display?: boolean;\n    readonly valid?: boolean;\n    readonly path?: string;\n    readonly testId?: string;\n    [additionalProperties: string]: any;\n}\n\nexport interface FormFieldType<T = FormFieldProps> extends FormFieldConfig<T> {\n    formControl: FormControl;\n    props: NonNullable<T>;\n}\n\nexport interface FormFieldChangeEvent {\n    field: FormFieldConfig;\n    type: string;\n    value: any;\n    [meta: string]: any;\n}\n\nexport interface FormSerializeResult {\n    [key: string]: any;\n}\n\nexport interface FormSelectOption extends FormlySelectOption {\n    className?: string;\n    classes?: string[] | string;\n    id?: any;\n}\n\nexport type FormSelectOptions = FormSelectOption[] | Observable<FormSelectOption[]>;\n\nexport interface IDynamicForm {\n\n    readonly fieldChanges: Observable<FormFieldChangeEvent>;\n    readonly config: Signal<FormFieldConfig[]>;\n    readonly group: Signal<FormGroup>;\n    readonly status: Signal<DynamicFormStatus>;\n    readonly onSubmit: OutputRef<IDynamicForm>;\n\n    reset(): void;\n}\n\n// --- Validation types ---\n\ntype FormFieldValidatorFn<T> = ((control: AbstractControl, field?: FormlyFieldConfig) => T) & {\n    validatorName?: string\n};\n\nexport type ValidationMessageFn = (error: any, field: FormFieldConfig) => string | Observable<string>;\n\ninterface FormFieldValidatorExpression<T> {\n    expression: FormFieldValidatorFn<T>;\n    message: ValidationMessageFn;\n}\n\ntype FormFieldValidation<T, R> = {\n    validation?: (string | T)[];\n} & {\n    [key: string]: FormFieldValidatorFn<R> | FormFieldValidatorExpression<R>;\n}\n\nexport type ValidatorFn = FormFieldValidatorFn<boolean>;\n\nexport type ValidatorExpression = FormFieldValidatorExpression<boolean>;\n\nexport type Validators = FormFieldValidation<ValidatorFn, boolean>;\n\nexport type AsyncBoolean = Promise<boolean> | Observable<boolean>;\n\nexport type AsyncValidatorFn = FormFieldValidatorFn<AsyncBoolean>;\n\nexport type AsyncValidatorExpression = FormFieldValidatorExpression<AsyncBoolean>;\n\nexport type AsyncValidators = FormFieldValidation<AsyncValidatorFn, AsyncBoolean>;\n\nexport interface AllValidationErrors {\n    control: AbstractControl;\n    path: string;\n    errorKey: string;\n    errorValue: any;\n}\n\n// --- Form field data types ---\n\nexport type FormFieldCustom = Pick<FormFieldConfig, \"wrappers\" | \"hooks\" | \"fieldGroup\" | \"fieldArray\">;\n\nexport type FormFieldData = Pick<FormFieldProps, \"hidden\" | \"disabled\" | \"label\" | \"additional\" | \"hideRequiredMarker\" | \"hideLabel\">\n    & {\n    validators?: Validators | ValidatorFn[];\n    serializer?: FormFieldSerializer;\n    serialize?: boolean;\n    fieldSet?: string;\n    componentType?: string | Type<any>;\n    classes?: string[] | string;\n};\n\nexport type FormInputData = FormFieldData\n    & Pick<FormFieldProps, \"type\" | \"pattern\" | \"placeholder\" | \"step\" | \"min\" | \"max\" | \"minLength\" | \"maxLength\" | \"autocomplete\" | \"suffix\" | \"indeterminate\" | \"cols\" | \"rows\">;\n\nexport type FormSelectData = FormFieldData\n    & Pick<FormFieldProps, \"multiple\" | \"type\" | \"allowEmpty\" | \"groupBy\"> & {\n    options?: (field: FormFieldConfig) => FormSelectOptions | Promise<FormSelectOption[]>;\n};\n\nexport type FormUploadData = FormFieldData\n    & Pick<FormFieldProps, \"inline\" | \"multiple\" | \"accept\" | \"url\" | \"maxSize\" | \"uploadOptions\" | \"createUploadData\" | \"multi\" | \"asFile\" | \"uploadUrl\">;\n\nexport type FormGroupData = FormFieldData & Pick<FormFieldProps, \"useTabs\">;\n\nexport type FormArrayData = FormFieldData\n    & Pick<FormFieldProps, \"useTabs\" | \"tabsLabel\" | \"insertItem\" | \"cloneItem\" | \"moveItem\" | \"removeItem\" | \"addItem\" | \"clearItems\">;\n\n// --- Async submit ---\n\nexport type AsyncSubmitMode = \"click\" | \"submit\" | \"all\";\nexport type AsyncSubmitMethod = (form: IDynamicForm, context?: any) => Promise<IAsyncMessage>;\n\n// --- JSON schema interfaces ---\n\nexport type FormFieldCustomizer = (\n    field: FormFieldConfig, options: FormBuilderOptions, injector: Injector,\n    property: IOpenApiSchemaProperty, schema: IOpenApiSchema\n) => MaybePromise<MaybeArray<FormFieldConfig>>;\n\nexport interface ConfigForSchemaOptions extends FormBuilderOptions {\n    fieldCustomizer?: FormFieldCustomizer;\n}\n\nexport type CustomizerOrSchemaOptions = FormFieldCustomizer | ConfigForSchemaOptions;\n\nexport interface IDynamicFormModuleConfig {\n    options?: ConfigOption[];\n}\n","import {\n    cachedFactory,\n    CachedProvider,\n    IOpenApiSchema,\n    IOpenApiSchemaProperty,\n    MaybeArray,\n    MaybePromise\n} from \"@stemy/ngx-utils\";\n\nimport {FormBuilderOptions, FormFieldConfig, FormFieldCustomizer} from \"../common-types\";\n\nexport interface IFormFieldCustomizer {\n    acceptField(\n        field: FormFieldConfig,\n        property: IOpenApiSchemaProperty,\n        schema: IOpenApiSchema\n    ): boolean;\n    customizeField(\n        field: FormFieldConfig,\n        options: FormBuilderOptions,\n        property: IOpenApiSchemaProperty,\n        schema: IOpenApiSchema\n    ): MaybePromise<MaybeArray<FormFieldConfig>>;\n}\n\nexport function customizeFormField(...providers: CachedProvider<IFormFieldCustomizer>[]): FormFieldCustomizer {\n    const factory = cachedFactory(providers);\n    return async (field, options, injector, property, schema) => {\n        const customizers = factory(injector);\n        const fields = [field];\n        for (const customizer of customizers) {\n            const index = fields.findIndex(m => customizer.acceptField(m, property, schema));\n            if (index >= 0) {\n                const custom = await customizer.customizeField(\n                    fields[index], options, property, schema\n                );\n                const result = Array.isArray(custom) ? custom : [custom];\n                fields.splice(index, 1, ...result);\n            }\n        }\n        return fields;\n    }\n}\n","import {ObjectUtils, ReflectUtils} from \"@stemy/ngx-utils\";\nimport {\n    FormArrayData,\n    FormFieldSerializer,\n    FormGroupData,\n    FormInputData,\n    FormSelectData,\n    FormUploadData\n} from \"../common-types\";\nimport {FormFieldBuilder} from \"../services/dynamic-form-builder.service\";\nimport {Type} from \"@angular/core\";\n\nfunction defineFormControl(target: any, propertyKey: string, cb: FormFieldBuilder): void {\n    const fields: Set<string> = ReflectUtils.getMetadata(\"dynamicFormFields\", target) || new Set();\n    const existing: FormFieldBuilder = ReflectUtils.getMetadata(\"dynamicFormField\", target, propertyKey);\n    const builder: FormFieldBuilder = !ObjectUtils.isFunction(existing) ? cb : ((fb, opts, path) => {\n        const data = existing(fb, opts, path);\n        return ObjectUtils.assign(data || {}, cb(fb, opts, path) || {});\n    });\n    fields.add(propertyKey);\n    ReflectUtils.defineMetadata(\"dynamicFormField\", builder, target, propertyKey);\n    ReflectUtils.defineMetadata(\"dynamicFormFields\", fields, target);\n}\n\nexport function FormSerializable(serializer?: FormFieldSerializer): PropertyDecorator {\n    return (target: any, key: string): void => {\n        defineFormControl(target, key, () => ({\n            key,\n            serializer,\n            serialize: true\n        }));\n    };\n}\n\nexport function FormInput(data?: FormInputData): PropertyDecorator {\n    data = data || {};\n    return (target: any, key: string): void => {\n        const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, key);\n        const type = meta ? meta.name : \"\";\n        let inputType = key.indexOf(\"password\") < 0 ? \"text\" : \"password\";\n        switch (type) {\n            case \"Number\":\n                inputType = \"number\";\n                break;\n            case \"Boolean\":\n                inputType = \"checkbox\";\n                break;\n        }\n        data.type = data.type || inputType;\n        defineFormControl(\n            target, key,\n            (fb, path, options) =>\n                fb.createFormInput(key, data, path, options)\n        );\n    };\n}\n\nexport function FormSelect(data?: FormSelectData): PropertyDecorator {\n    data = data || {};\n    return (target: any, key: string): void => {\n        defineFormControl(\n            target, key,\n            (fb, path, options) =>\n                fb.createFormSelect(key, data, path, options)\n        );\n    };\n}\n\nexport function FormUpload(data?: FormUploadData): PropertyDecorator {\n    data = data || {};\n    return (target: any, key: string): void => {\n        defineFormControl(\n            target, key,\n            (fb, path, options) =>\n                fb.createFormUpload(key, data, path, options)\n        );\n    };\n}\n\nexport function FormFile(data?: FormUploadData): PropertyDecorator {\n    console.warn(`@FormFile decorator is deprecated, use @FormUpload instead`);\n    return FormUpload(data);\n}\n\nexport function FormGroup(data?: FormGroupData): PropertyDecorator {\n    data = data || {};\n    return (target: any, key: string): void => {\n        defineFormControl(\n            target, key,\n            (fb, parent, options) => {\n                const targetType = ReflectUtils.getOwnMetadata(\"design:type\", target, key);\n                return fb.resolveFormGroup(key, targetType, data, parent, options);\n            }\n        );\n    };\n}\n\nexport function FormArray(itemType: string | FormInputData | Type<any>, data?: FormArrayData): PropertyDecorator {\n    data = data || {};\n    return (target: any, key: string): void => {\n        defineFormControl(\n            target, key,\n            (fb, parent, options) => {\n                return fb.resolveFormArray(key, itemType, data, parent, options);\n            }\n        );\n    };\n}\n\nexport function FormModel(data?: FormGroupData): PropertyDecorator {\n    console.warn(`@FormModel decorator is deprecated, use @FormGroup instead`);\n    return FormGroup(data);\n}\n","import {Injector} from \"@angular/core\";\nimport {LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\nimport {FormFieldConfig, ValidationMessageFn, ValidatorFn, Validators} from \"../common-types\";\n\nfunction validationMessage(errorKey: string): ValidationMessageFn {\n    const key = `form.error.${errorKey}`;\n    return (_, field) => {\n        const injector = field.options.formState?.injector as Injector;\n        const language = injector?.get(LANGUAGE_SERVICE);\n        return !language ? key : language.getTranslationSync(key, field);\n    }\n}\n\nfunction withName(fn: ValidatorFn, name: string): ValidatorFn {\n    fn.validatorName = name;\n    return fn;\n}\n\nfunction validateEach(each: boolean, cb: (value: any) => boolean, name: string): ValidatorFn {\n    return withName((control) => {\n        const value = control.value;\n        return each ? Array.isArray(value) && value.every(cb) : cb(value);\n    }, name);\n}\n\nexport function addFieldValidators(field: FormFieldConfig, validators: Validators | ValidatorFn[]): void {\n    field.validators = field.validators || {};\n    const validation = field.validation || {};\n    const messages = validation.messages || {};\n    if (Array.isArray(validators)) {\n        validators.forEach((validator, ix) => {\n            const name = validator.validatorName || `validator_${ix}`;\n            field.validators[name] = validator;\n            messages[name] = validationMessage(name);\n        });\n    } else if (validators) {\n        Object.keys(validators).forEach(name => {\n            field.validators[name] = validators[name];\n            messages[name] = validationMessage(name);\n        });\n    }\n    field.validation = {\n        ...validation,\n        messages\n    };\n}\n\nexport function removeFieldValidators(field: FormFieldConfig, ...names: string[]): void {\n    const validators = Object.assign({}, field.validators || {});\n    const validation = field.validation || {};\n    const messages = Object.assign({}, validation.messages || {});\n    names.forEach(name => {\n        delete validators[name];\n        delete messages[name];\n    });\n    field.validators = validators;\n    field.validation = {\n        ...validation,\n        messages\n    };\n}\n\nexport function jsonValidation(): ValidatorFn {\n    return withName((control) => {\n        const value = control.value;\n        if (!value) return false;\n        try {\n            JSON.parse(value);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }, \"json\");\n}\n\nexport function requiredValidation(): ValidatorFn {\n    return withName((control) =>\n            ObjectUtils.isString(control.value) ? control.value.length > 0 : ObjectUtils.isDefined(control.value),\n        \"required\"\n    )\n}\n\nexport function translationValidation(langs: string[] = [\"de\", \"en\"]): ValidatorFn {\n    return withName((control) => {\n        const value: any[] = control.value;\n        if (!value || value.length == 0) return false;\n        return value.findIndex(t => langs.includes(t.lang) && !t.translation) < 0;\n    }, \"translation\");\n}\n\nexport function phoneValidation(): ValidatorFn {\n    return withName((control) => {\n        const value = control.value;\n        if (!value) return true;\n        const phoneRegexp = /^\\d{10,12}$/;\n        return phoneRegexp.test(value);\n    }, \"phone\");\n}\n\nexport function emailValidation(): ValidatorFn {\n    return withName((control) => {\n        const value = control.value;\n        if (!value) return true;\n        const emailRegexp = /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g;\n        return emailRegexp.test(value);\n    }, \"email\");\n}\n\nexport function minLengthValidation(minLength: number, each?: boolean): ValidatorFn {\n    return validateEach(each, v => typeof v == \"string\" && v.length >= minLength, \"minLength\");\n}\n\nexport function maxLengthValidation(maxLength: number, each?: boolean): ValidatorFn {\n    return validateEach(each, v => typeof v == \"string\" && v.length <= maxLength, \"maxLength\");\n}\n\nexport function minValueValidation(min: number, each?: boolean): ValidatorFn {\n    return validateEach(each, v => typeof v == \"number\" && v >= min, \"minValue\");\n}\n\nexport function maxValueValidation(max: number, each?: boolean): ValidatorFn {\n    return validateEach(each, v => typeof v == \"number\" && v <= max, \"maxValue\");\n}\n","import {AbstractControl} from \"@angular/forms\";\nimport {firstValueFrom, merge, Observable, of} from \"rxjs\";\nimport {debounceTime} from \"rxjs/operators\";\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\nimport {\n    DynamicFormStatus,\n    FormFieldConfig,\n    FormFieldKey,\n    FormFieldProps,\n    FormHookConfig,\n    FormHookFn,\n    FormSelectOption\n} from \"../common-types\";\n\nexport function replaceSpecialChars(str: string, to: string = \"-\"): string {\n    return `${str}`.replace(/[&\\/\\\\#, +()$~%.@'\":*?<>{}]/g, to);\n}\n\n/**\n * Creates a new observable that always starts with the controls current value.\n * @param control AbstractControl to retrieve value changes from\n * @param timeout Additional timeout\n */\nexport function controlValues(control: AbstractControl, timeout: number = 500): Observable<any> {\n    const initial$ = of(control.value); // Emit immediately\n    const changes$ = control.valueChanges.pipe(\n        debounceTime(timeout)\n    );\n    return merge(initial$, changes$);\n}\n\n/**\n * Creates a new observable that always starts with the controls current status.\n * @param control AbstractControl to retrieve status changes from\n * @param timeout Additional timeout\n */\nexport function controlStatus(control: AbstractControl, timeout: number = 10): Observable<DynamicFormStatus> {\n    const initial$ = of(control.status); // Emit immediately\n    const changes$ = control.statusChanges.pipe(\n        debounceTime(timeout)\n    );\n    return merge(initial$, changes$);\n}\n\nexport function getFieldByPath(field: FormFieldConfig, path: string): FormFieldConfig | null {\n    if (field.path === path) {\n        return field;\n    }\n    if (!field.fieldGroup) return null;\n    for (const sf of field.fieldGroup) {\n        const found = getFieldByPath(sf, path);\n        if (found) return found;\n    }\n    return null;\n}\n\nexport function getFieldsByPredicate(field: FormFieldConfig, cb: (field: FormFieldConfig) => boolean): FormFieldConfig[] {\n    if (cb(field)) {\n        return [field];\n    }\n    if (!field.fieldGroup) return [];\n    const results: FormFieldConfig[] = [];\n    for (const sf of field.fieldGroup) {\n        results.push(...getFieldsByPredicate(sf, cb));\n    }\n    return results;\n}\n\nexport function getFieldsByKey(field: FormFieldConfig, key: FormFieldKey): FormFieldConfig[] {\n    return getFieldsByPredicate(field, f => f.key === key);\n}\n\nexport async function getSelectOptions(field: FormFieldConfig): Promise<FormSelectOption[]> {\n    const options = field.props?.options || [];\n    if (options instanceof Observable) {\n        return firstValueFrom(options);\n    }\n    return options;\n}\n\nexport function replaceFieldArray(field: FormFieldConfig, items: any[]): void {\n    const model = field.model || [];\n    model.splice(0, model.length, ...items);\n    field.options.build(field);\n}\n\nexport function clearFieldArray(field: FormFieldConfig): void {\n    const model = field.model || [];\n    model.splice(0, model.length);\n    field.options.build(field);\n}\n\nexport function insertToFieldArray(field: FormFieldConfig, item: any, ix?: number): void {\n    const model = field.model || [];\n    ix = ix == null ? model.length : ix;\n    model.splice(ix, 0, item);\n    field.options.build(field);\n}\n\nexport function removeFromFieldArray(field: FormFieldConfig, ix: number): void {\n    const model = field.model || [];\n    model.splice(ix, 1);\n    field.options.build(field);\n}\n\nexport function setFieldProp<P extends keyof FormFieldProps, V extends FormFieldProps[P]>(\n    field: FormFieldConfig, prop: P, value: V): void {\n    field.props = {\n        ...(field.props || {}),\n        [prop]: value\n    };\n}\n\nexport function setFieldHidden(field: FormFieldConfig, hidden: boolean = true): void {\n    setFieldProp(field, \"hidden\", hidden);\n}\n\nexport function setFieldDisabled(field: FormFieldConfig, disabled: boolean = true): void {\n    setFieldProp(field, \"disabled\", disabled);\n}\n\nexport function setFieldHooks(field: FormFieldConfig, hooks: FormHookConfig): void {\n    field.hooks = field.hooks || {};\n    Object.keys(hooks).forEach(name => {\n        const original = field.hooks[name] as FormHookFn;\n        const hook = hooks[name] as FormHookFn;\n        if (!ObjectUtils.isFunction(hook)) return;\n        field.hooks[name] = ObjectUtils.isFunction(original)\n            ? ((field: FormFieldConfig) => {\n                original(field);\n                hook(field);\n            })\n            : hooks[name];\n    });\n}\n\nexport function additionalFieldValue(field: FormFieldConfig, path: string): any {\n    return ObjectUtils.getValue(field.additional, path, null, false);\n}\n\nexport function additionalFieldValues(field: FormFieldConfig, values: {[key: string]: any}): void {\n    const additional = field.props?.additional || {};\n    setFieldProp(field, \"additional\", ObjectUtils.assign(additional, values || {}));\n}\n\nexport const MIN_INPUT_NUM = -1999999999;\n\nexport const MAX_INPUT_NUM = 1999999999;\n\nexport const EDITOR_FORMATS = [\"php\", \"json\", \"html\", \"css\", \"scss\"];\n","import {Injector} from \"@angular/core\";\nimport {\n    IOpenApiSchema,\n    IOpenApiSchemaProperty,\n    MaybeArray,\n    ObjectUtils,\n    ForbiddenZone,\n    KeysOfType\n} from \"@stemy/ngx-utils\";\nimport {\n    AllValidationErrors,\n    ConfigForSchemaOptions,\n    CustomizerOrSchemaOptions,\n    FormBuilderOptions, FormFieldArrayItemsAction,\n    FormFieldConfig,\n    FormFieldCustomizer, FormFieldExpression, FormFieldProps\n} from \"../common-types\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\n\nexport type ConfigForSchemaWrapMode = \"wrap\" | \"customizer\";\n\nexport interface ConfigForSchemaWrapOptions extends Required<FormBuilderOptions> {\n    readonly injector: Injector;\n    readonly schema: IOpenApiSchema;\n    customize(field: FormFieldConfig, property: IOpenApiSchemaProperty, schema: IOpenApiSchema): Promise<FormFieldConfig[]>;\n}\n\nclass ConfigForSchemaWrap implements ConfigForSchemaWrapOptions {\n\n    get labelPrefix() {\n        return this.opts.labelPrefix;\n    }\n\n    get labelCustomizer() {\n        return this.opts.labelCustomizer;\n    }\n\n    get testId() {\n        return this.opts.testId;\n    }\n\n    get context() {\n        return this.opts.context;\n    }\n\n    protected fieldCustomizer: FormFieldCustomizer;\n\n    constructor(\n        protected readonly opts: ConfigForSchemaOptions,\n        protected readonly mode: ConfigForSchemaWrapMode,\n        readonly injector: Injector,\n        readonly schema: IOpenApiSchema\n    ) {\n        this.fieldCustomizer = this.mode !== \"wrap\" || !ObjectUtils.isFunction(this.opts.fieldCustomizer)\n            ? field => field\n            : this.opts.fieldCustomizer;\n    }\n\n    async customize(field: FormFieldConfig, property: IOpenApiSchemaProperty, schema: IOpenApiSchema) {\n        field.defaultValue = `${field.props?.type}`.startsWith(\"date\")\n            ? convertToDate(property.default) : property.default;\n        const res = await ForbiddenZone.run(\"customizer\", () =>\n            this.fieldCustomizer(\n                field, this.forCustomizer(), this.injector,\n                property, schema\n            )\n        );\n        return !res ? [field] : handleConfigs(res);\n    }\n\n    forCustomizer(): FormBuilderOptions {\n        return new ConfigForSchemaWrap(this.opts, \"customizer\", this.injector, this.schema);\n    }\n\n    forSchema(schema: IOpenApiSchema): ConfigForSchemaWrapOptions {\n        return new ConfigForSchemaWrap(this.opts,  this.mode, this.injector, schema);\n    }\n}\n\nexport async function toWrapOptions(customizeOrOptions: CustomizerOrSchemaOptions | ConfigForSchemaWrapOptions,\n                                    injector: Injector,\n                                    schema: IOpenApiSchema,\n                                    errorMsg?: string): Promise<ConfigForSchemaWrapOptions> {\n    if (errorMsg && ForbiddenZone.isForbidden(\"customizer\")) {\n        throw new Error(errorMsg);\n    }\n    if (customizeOrOptions instanceof ConfigForSchemaWrap) {\n        return customizeOrOptions;\n    }\n    let schemaOptions = customizeOrOptions as ConfigForSchemaOptions;\n    if (!ObjectUtils.isObject(schemaOptions)) {\n        schemaOptions = {\n            fieldCustomizer: customizeOrOptions as FormFieldCustomizer\n        };\n    }\n    return new ConfigForSchemaWrap(schemaOptions, \"wrap\", injector, schema);\n}\n\nexport function convertToDate(value: any): any {\n    if (ObjectUtils.isNullOrUndefined(value)) return null;\n    const date = ObjectUtils.isDate(value)\n        ? value\n        : new Date(value);\n    return isNaN(date as any) ? new Date() : date;\n}\n\nexport function handleConfigs(configs: MaybeArray<FormFieldConfig>) {\n    return Array.isArray(configs) ? configs : [configs];\n}\n\nexport function isStringWithVal(val: any): boolean {\n    return typeof val == \"string\" && val.length > 0;\n}\n\nexport function findRefs(property: IOpenApiSchemaProperty): string[] {\n    const refs = Array.isArray(property.allOf)\n        ? property.allOf.map(o => o.$ref).filter(isStringWithVal)\n        : [property.items?.$ref, property.$ref].filter(isStringWithVal);\n    return refs.map(t => t.split(\"/\").pop());\n}\n\nexport function arrayItemActionToExpression(actionName: KeysOfType<FormFieldProps, FormFieldArrayItemsAction>): FormFieldExpression {\n    return (field: FormFieldConfig) => {\n        const action = field.parent?.props?.[actionName];\n        // Needed to immediately reflect the changes on the view\n        field.options.detectChanges(field);\n        if (action === false) return false;\n        // Returns the actual calculated value\n        return ObjectUtils.isFunction(action)\n            ? action(field.formControl?.value, Number(field.key), field)\n            : true;\n    };\n}\n\nexport function mergeFormFields(formFields: FormFieldConfig[][]): FormFieldConfig[] {\n    const res: FormFieldConfig[] = [];\n    for (const formModel of formFields) {\n        for (const subModel of formModel) {\n            const index = res.findIndex(t => t.key == subModel.key);\n            if (index >= 0) {\n                res[index] = subModel;\n                continue;\n            }\n            res.push(subModel);\n        }\n    }\n    return res;\n}\n\ninterface FormGroupControls {\n    [key: string]: AbstractControl;\n}\n\nexport function getFormValidationErrors(controls: FormGroupControls, parentPath: string = \"\"): AllValidationErrors[] {\n    const errors: AllValidationErrors[] = [];\n    Object.entries(controls).forEach(([name, control], ix) => {\n        const path = !parentPath ? name : `${parentPath}.${name}`;\n        if (control instanceof FormGroup) {\n            getFormValidationErrors(control.controls, path).forEach(error => errors.push(error));\n            return;\n        }\n        if (control instanceof FormArray) {\n            control.controls.forEach((control: FormGroup, ix) => {\n                getFormValidationErrors(control.controls, `${path}.${ix}`).forEach(error => errors.push(error));\n            });\n            return;\n        }\n        Object.entries(control.errors || {}).forEach(([errorKey, errorValue]) => {\n            errors.push({control, path, errorKey, errorValue});\n        });\n    });\n    return errors;\n}\n","import {Inject, Injectable, Injector, Type} from \"@angular/core\";\nimport {BehaviorSubject, combineLatestWith, Observable, switchMap} from \"rxjs\";\nimport {\n    API_SERVICE,\n    EventsService,\n    IApiService,\n    ILanguageService,\n    LANGUAGE_SERVICE,\n    MaybePromise,\n    ObjectUtils,\n    ReflectUtils\n} from \"@stemy/ngx-utils\";\n\nimport {\n    FormArrayData,\n    FormBuilderOptions,\n    FormFieldConfig,\n    FormFieldData,\n    FormFieldExpressions,\n    FormFieldProps,\n    FormGroupData,\n    FormInputData,\n    FormSelectData,\n    FormSelectOption,\n    FormUploadData\n} from \"../common-types\";\nimport {addFieldValidators} from \"../utils/validation\";\nimport {controlValues, MAX_INPUT_NUM, MIN_INPUT_NUM, setFieldHooks, setFieldProp} from \"../utils/misc\";\nimport {arrayItemActionToExpression, isStringWithVal} from \"../utils/internal\";\n\nexport type FormFieldBuilder = (fb: DynamicFormBuilderService, parent: FormFieldConfig, options: FormBuilderOptions) => Partial<FormFieldConfig>;\n\n@Injectable()\nexport class DynamicFormBuilderService {\n\n    readonly language: Observable<string>;\n\n    constructor(readonly injector: Injector,\n                readonly events: EventsService,\n                @Inject(API_SERVICE) readonly api: IApiService,\n                @Inject(LANGUAGE_SERVICE) protected readonly languages: ILanguageService) {\n        const lang = new BehaviorSubject(this.languages.currentLanguage);\n        this.events.languageChanged.subscribe(value => lang.next(value));\n        this.language = lang;\n    }\n\n    resolveFormFields(target: Type<any>, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig[] {\n        const prototype = target?.prototype || {};\n        const fields: Set<string> = ReflectUtils.getMetadata(\"dynamicFormFields\", target?.prototype || {}) || new Set();\n        const result: FormFieldConfig[] = [];\n        for (const key of fields) {\n            const builder: FormFieldBuilder = ReflectUtils.getMetadata(\"dynamicFormField\", prototype, key);\n            const field = builder(this, parent, options) as FormFieldConfig;\n            if (field) {\n                result.push(field);\n            }\n        }\n        return this.createFieldSets(result, parent, options);\n    }\n\n    resolveFormGroup(key: string, target: Type<any>, data: FormGroupData, parent: FormFieldConfig = null, options: FormBuilderOptions = {}): FormFieldConfig {\n        return this.createFormGroup(key, sp => this.resolveFormFields(\n            target, sp, options\n        ), data, parent, options);\n    }\n\n    resolveFormArray(key: string, itemType: string | FormInputData | Type<any>, data: FormArrayData, parent: FormFieldConfig = null, options: FormBuilderOptions = {}): FormFieldConfig {\n        return this.createFormArray(key, sp => {\n            return typeof itemType === \"function\" ? this.resolveFormFields(\n                itemType, sp, options\n            ) : this.createFormInput(\"\", typeof itemType === \"string\" ? {type: `${itemType}`} : itemType, sp, options);\n        }, data, parent, options);\n    }\n\n    createFieldSets(fields: FormFieldConfig[], parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig[] {\n        const others: FormFieldConfig[] = [];\n        const groups: { [fs: string]: FormFieldConfig[] } = {};\n        fields = fields.filter(f => {\n            if (Array.isArray(f.fieldGroup) && Array.isArray(f.wrappers) && f.wrappers[0] === \"form-fieldset\") {\n                // This field is an already existing set\n                groups[f.id] = f.fieldGroup;\n                return false;\n            }\n            return true;\n        });\n\n        for (const field of fields) {\n            const fsName = String(field.fieldSet || \"\");\n            // If we have a fieldset name defined, then push the property fields into a group\n            if (fsName) {\n                const fsId = !parent?.path ? fsName : `${parent.path}.${fsName}`;\n                const group = groups[fsId] || [];\n                groups[fsId] = group;\n                group.push(field);\n                continue;\n            }\n            // Otherwise just push the fields to the others\n            others.push(field);\n        }\n\n        // Create a field-set wrapper for each group and concat the other fields to the end\n        return Object.keys(groups).map(id => {\n            const key = id.split(\".\").pop();\n            const fieldSet: FormFieldConfig = {\n                id,\n                parent,\n                fieldGroup: groups[id],\n                wrappers: [\"form-fieldset\"],\n                props: {\n                    label: this.getLabel(key, key, parent, options),\n                    hidden: false,\n                    additional: {\n                        className: `dynamic-form-fieldset dynamic-form-fieldset-${id}`\n                    }\n                },\n                hooks: {},\n                expressions: {}\n            };\n            this.setExpressions(fieldSet, options);\n            return fieldSet;\n        }).concat(others);\n    }\n\n    createFormInput(key: string, data: FormInputData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n        data = data || {};\n        const type = `${data.type || \"text\"}`;\n        const autocomplete = data.autocomplete || (type === \"password\" ? \"new-password\" : \"none\");\n        const props: FormFieldProps = {\n            type,\n            autocomplete,\n            pattern: ObjectUtils.isString(data.pattern) ? data.pattern : \"\",\n            step: data.step,\n            cols: data.cols || null,\n            rows: data.rows || 10,\n            placeholder: data.placeholder || \"\",\n            indeterminate: data.indeterminate || false,\n            suffix: data.suffix || \"\",\n            attributes: {\n                autocomplete\n            },\n        };\n        switch (type) {\n            case \"number\":\n            case \"integer\":\n                props.min = isNaN(data.min) ? MIN_INPUT_NUM : data.min;\n                props.max = isNaN(data.max) ? MAX_INPUT_NUM : data.max;\n                break;\n            case \"string\":\n            case \"text\":\n            case \"textarea\":\n                props.minLength = isNaN(data.minLength) ? 0 : data.minLength;\n                props.maxLength = isNaN(data.maxLength) ? MAX_INPUT_NUM : data.maxLength;\n                break;\n        }\n        return this.createFormField(\n            key, type === \"checkbox\" || type === \"textarea\" ? type : \"input\",\n            data, props, parent, options\n        );\n    }\n\n    createFormSelect(key: string, data: FormSelectData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n        data = data || {};\n        const type = `${data.type || \"select\"}`;\n        const field = this.createFormField(key, type === \"radio\" ? type : \"select\", data, {\n            type,\n            multiple: data.multiple,\n            groupBy: data.groupBy,\n            allowEmpty: data.allowEmpty\n        }, parent, options);\n        setFieldHooks(field, {\n            onInit: target => {\n                const options = data.options(target);\n                const root = target.formControl.root;\n                setFieldProp(target, \"options\", options instanceof Observable\n                    ? options\n                    : controlValues(root).pipe(\n                        combineLatestWith(this.language),\n                        switchMap(async () => {\n                            const results: FormSelectOption[] = await (data.options(target) as any) || [];\n                            return this.fixSelectOptions(target, results);\n                        })\n                    ));\n            }\n        });\n        return field;\n    }\n\n    createFormUpload(key: string, data: FormUploadData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n        data = data || {};\n\n        if (data.asFile) {\n            data.inline = true;\n            console.warn(`File upload property \"asFile\" is deprecated. Use \"inline\" instead.`);\n        }\n\n        if (data.multi) {\n            data.multiple = true;\n            console.warn(`File upload property \"multi\" is deprecated. Use \"multiple\" instead.`);\n        }\n\n        return this.createFormField(key, \"upload\", data, {\n            inline: data.inline === true,\n            multiple: data.multiple === true,\n            accept: data.accept || [\".png\", \".jpg\"],\n            url: data.url?.startsWith(\"http\") ? data.url : this.api.url(data.url || \"assets\"),\n            maxSize: isNaN(data.maxSize) ? MAX_INPUT_NUM : data.maxSize,\n            uploadOptions: data.uploadOptions || {},\n            createUploadData: data.createUploadData\n        }, parent, options);\n    }\n\n    createFormGroup(key: string, fields: (parent: FormFieldConfig) => FormFieldConfig[], data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig\n    createFormGroup(key: string, fields: (parent: FormFieldConfig) => Promise<FormFieldConfig[]>, data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): Promise<FormFieldConfig>\n    createFormGroup(key: string, fields: (parent: FormFieldConfig) => any, data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): MaybePromise<FormFieldConfig> {\n        data = data || {};\n        const group = this.createFormField(key, undefined, data, {\n            useTabs: data.useTabs === true,\n        }, parent, options);\n        group.defaultValue = {};\n        group.wrappers = [\"form-group\"];\n        const result = fields(group);\n        const handleGroup = (fieldGroup: FormFieldConfig[]) => {\n            group.fieldGroup = fieldGroup;\n            return group;\n        };\n        return result instanceof Promise\n            ? result.then(handleGroup)\n            : handleGroup(result);\n    }\n\n    createFormArray(key: string, fields: (parent: FormFieldConfig) => FormFieldConfig | FormFieldConfig[], data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig\n    createFormArray(key: string, fields: (parent: FormFieldConfig) => Promise<FormFieldConfig | FormFieldConfig[]>, data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): Promise<FormFieldConfig>\n    createFormArray(key: string, fields: (parent: FormFieldConfig) => any, data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): MaybePromise<FormFieldConfig> {\n        data = data || {};\n        const array = this.createFormField(key, \"array\", data, {\n            // initialCount: data.initialCount || 0,\n            // sortable: data.sortable || false,\n            useTabs: data.useTabs === true,\n            tabsLabel: `${data.tabsLabel || \"label\"}`,\n            insertItem: data.insertItem,\n            cloneItem: data.cloneItem,\n            moveItem: data.moveItem,\n            removeItem: data.removeItem,\n            addItem: data.addItem !== false,\n            clearItems: data.clearItems !== false\n        }, parent, options);\n        const result = fields(array);\n        const handleItems = (items: FormFieldConfig | FormFieldConfig[]) => {\n            const expressions: FormFieldExpressions = {\n                insertItem: arrayItemActionToExpression(\"insertItem\"),\n                cloneItem: arrayItemActionToExpression(\"cloneItem\"),\n                moveItem: arrayItemActionToExpression(\"moveItem\"),\n                removeItem: arrayItemActionToExpression(\"removeItem\")\n            };\n            if (Array.isArray(items)) {\n                array.fieldArray = {\n                    wrappers: [\"form-group\"],\n                    fieldGroup: items,\n                    props: {\n                        additional: {\n                            className: \"dynamic-form-field dynamic-form-group\",\n                        }\n                    },\n                    defaultValue: [],\n                    hooks: {},\n                    expressions\n                };\n                this.setExpressions(array.fieldArray, options);\n                return array;\n            }\n            const props = items.props || {};\n            if (props.type === \"text\" || props.type === \"number\") {\n                array.type = \"chips\";\n                array.wrappers = [\"form-field\"];\n                array.props = {\n                    ...props,\n                    ...array.props,\n                    multiple: true\n                };\n                return array;\n            }\n            array.fieldArray = {\n                ...items,\n                props: {\n                    ...items.props,\n                    label: \"\",\n                },\n                defaultValue: [],\n                hooks: {},\n                expressions\n            };\n            return array;\n        };\n        return result instanceof Promise\n            ? result.then(handleItems)\n            : handleItems(result);\n    }\n\n    async fixSelectOptions(field: FormFieldConfig, options: FormSelectOption[]): Promise<FormSelectOption[]> {\n        if (!Array.isArray(options)) return [];\n        options = await Promise.all(options.map(async option => {\n            const classes = Array.isArray(option.classes) ? option.classes : [`${option.classes}`];\n            option = Object.assign({}, option);\n            option.className = classes.filter(isStringWithVal).join(\" \");\n            option.label = await this.languages.getTranslation(option.label);\n            option.value = option.value ?? option.id;\n            option.id = option.id ?? option.value;\n            return option;\n        }));\n        const control = field.formControl;\n        field.defaultValue = options[0]?.value ?? null;\n        if (field.props.multiple || options.length === 0 || options.findIndex(o => o.value === control.value) >= 0) return options;\n        control.setValue(field.defaultValue);\n        return options;\n    }\n\n    protected getLabel(key: string, label: string, parent: FormFieldConfig, options: FormBuilderOptions): string {\n        const labelPrefix = !ObjectUtils.isString(options.labelPrefix) ? `` : options.labelPrefix;\n        const pathPrefix = `${parent?.props?.label || labelPrefix}`;\n        const labelItems = ObjectUtils.isString(label)\n            ? (!label ? [] : [labelPrefix, label])\n            : [pathPrefix, `${key || \"\"}`]\n        return labelItems.filter(l => l.length > 0).join(\".\");\n    }\n\n    protected createFormField(key: string, type: string, data: FormFieldData, props: FormFieldProps, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n\n        const field: FormFieldConfig = {\n            key,\n            type: data.componentType || type,\n            fieldSet: String(data.fieldSet || \"\"),\n            resetOnHide: false,\n            validators: {},\n            validation: {},\n            props: {\n                ...props,\n                disabled: data.disabled === true,\n                hidden: data.hidden === true,\n                label: options.labelCustomizer?.(key, data.label, parent, options.labelPrefix)\n                    ?? this.getLabel(key, data.label, parent, options),\n                hideLabel: data.hideLabel === true,\n                hideRequiredMarker: data.hideRequiredMarker === true,\n                formCheck: \"nolabel\",\n                labelPosition: \"before\",\n                additional: {\n                    ...(data.additional || {}),\n                    classes: data.classes || []\n                }\n            },\n            modelOptions: {\n                updateOn: \"change\"\n            },\n            hooks: {},\n            expressions: {\n                serializer: () => data.serializer,\n                serialize: () => data.serialize,\n                \"props.hideRequiredMarker\": target => target.type === \"checkbox\",\n                \"props.required\": target => !!target.validators?.required\n            }\n        };\n        // Parent object will be available for customizers as a property, until it gets redefined by formly\n        Object.defineProperty(field, \"parent\", {\n            get: () => parent,\n            configurable: true\n        });\n        // Set expressions\n        addFieldValidators(field, data.validators);\n        this.setExpressions(field, options);\n        return field;\n    }\n\n    protected setExpressions(field: FormFieldConfig, options: FormBuilderOptions): void {\n        const expressions: FormFieldExpressions = {\n            display: target => {\n                const display = target.props?.hidden !== true;\n                if (Array.isArray(target.fieldGroup) && target.fieldGroup.length) {\n                    return display && target.fieldGroup.some(f => f.display);\n                }\n                return display;\n            },\n            valid: target => {\n                const control = target.formControl;\n                const valid = target.key && control ? control.disabled || control.valid : true;\n                if (Array.isArray(target.fieldGroup) && target.fieldGroup.length) {\n                    return valid && target.fieldGroup.every(f => f.valid);\n                }\n                return valid;\n            },\n            className: (target: FormFieldConfig) => {\n                if (!target.display) {\n                    return `dynamic-form-field dynamic-form-hidden`;\n                }\n                const {classes, className} = target.additional || {};\n                if (className) {\n                    return className;\n                }\n                const type = String(target.type || \"group\").replace(\"formly-\", \"\");\n                const typeName = ObjectUtils.isConstructor(type)\n                    ? `${(target.type as any).name}`.toLowerCase().replace(\"component\", \"\")\n                    : type;\n                return [`dynamic-form-field`, `dynamic-form-field-${target.key}`, `dynamic-form-${typeName}`].concat(\n                    Array.isArray(classes) ? classes : [classes || \"\"]\n                ).filter(c => c?.length > 0).join(\" \");\n            },\n            additional: (target: FormFieldConfig) => {\n                return target.props?.additional || {};\n            },\n            path: target => {\n                const tp = target.parent;\n                const prefix = tp?.path || \"\";\n                const key = !target.key ? `` : `.${target.key}`;\n                return !prefix ? String(target.key ?? \"\") : `${prefix}${key}`;\n            },\n            testId: target => {\n                const tp = target.parent;\n                const prefix = !tp?.testId ? options.testId || \"\" : tp.testId;\n                const key = !target.key ? `` : `-${target.key}`;\n                return !prefix ? String(target.key ?? \"\") : `${prefix}${key}`;\n            }\n        };\n        Object.entries(expressions).forEach(([key, expression]) => {\n            field.expressions = field.expressions ?? {};\n            field.expressions[key] = expression;\n            if (ObjectUtils.isFunction(expression)) {\n                field[key] = expression(field);\n            }\n        });\n    }\n}\n","import {Injectable, Injector} from \"@angular/core\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {combineLatestWith, distinctUntilChanged, switchMap} from \"rxjs\";\nimport {\n    IApiService,\n    ILanguageService,\n    IOpenApiSchema,\n    IOpenApiSchemaProperty,\n    IPaginationData,\n    ObjectUtils,\n    OpenApiService,\n    StringUtils\n} from \"@stemy/ngx-utils\";\n\nimport {\n    CustomizerOrSchemaOptions,\n    FormFieldConfig,\n    FormFieldData,\n    FormSelectOptions,\n    Validators\n} from \"../common-types\";\n\nimport {\n    emailValidation,\n    maxLengthValidation,\n    maxValueValidation,\n    minLengthValidation,\n    minValueValidation,\n    requiredValidation\n} from \"../utils/validation\";\nimport {\n    ConfigForSchemaWrapOptions,\n    convertToDate,\n    findRefs,\n    isStringWithVal,\n    mergeFormFields,\n    toWrapOptions\n} from \"../utils/internal\";\n\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\nimport {controlValues, getSelectOptions} from \"../utils/misc\";\n\n@Injectable()\nexport class DynamicFormSchemaService {\n\n    get api(): IApiService {\n        return this.openApi.api;\n    }\n\n    get language(): ILanguageService {\n        return this.api.language;\n    }\n\n    constructor(protected readonly openApi: OpenApiService,\n                protected readonly injector: Injector,\n                protected readonly builder: DynamicFormBuilderService) {\n    }\n\n    async getSchema(name: string): Promise<IOpenApiSchema> {\n        return this.openApi.getSchema(name);\n    }\n\n    async getFormFieldsForSchema(name: string,\n                                 parent: FormFieldConfig,\n                                 customizeOrOptions: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\n        const schema = await this.getSchema(name);\n        if (!schema) return [];\n        const options = await toWrapOptions(customizeOrOptions, this.injector, schema);\n        const keys = Object.keys(schema.properties || {});\n        const fields: FormFieldConfig[] = [];\n        // Collect all properties of this schema def\n        for (const key of keys) {\n            const property = schema.properties[key];\n            const propFields = await this.getFormFieldsForProp(property, schema, options, parent);\n            fields.push(...propFields);\n        }\n        return this.builder.createFieldSets(\n            fields.filter(f => null !== f),\n            parent, options\n        );\n    }\n\n    protected async getFormFieldsForProp(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig[]> {\n        const field = await this.getFormFieldForProp(property, options, parent);\n        return !field ? [] : options.customize(field, property, schema);\n    }\n\n    protected async getFormFieldForProp(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n        const $enum = property.items?.enum || property.enum;\n        if (Array.isArray($enum) || isStringWithVal(property.optionsPath) || isStringWithVal(property.endpoint)) {\n            return this.getFormSelectConfig($enum, property, options, parent);\n        }\n        switch (property.type) {\n            // case \"object\":\n            //     return this.getFormEditorConfig(property, options, parent);\n            case \"file\":\n            case \"upload\":\n                return this.getFormUploadConfig(property, options, parent);\n            case \"boolean\":\n                return this.getFormCheckboxConfig(property, options, parent);\n            case \"array\":\n                return this.getFormArrayConfig(property, options, parent);\n        }\n        // if (this.checkIsEditorProperty(property)) {\n        //     return this.getFormEditorConfig(property, options, parent);\n        // }\n        if (findRefs(property).length > 0) {\n            return this.getFormGroupConfig(property, options, parent);\n        }\n        if (property.format == \"file\" || property.format == \"upload\") {\n            return this.getFormUploadConfig(property, options, parent);\n        }\n        if (property.format == \"textarea\") {\n            return this.getFormTextareaConfig(property, options, parent);\n        }\n        if (property.format == \"date\" || property.format == \"date-time\") {\n            return this.getFormDatepickerConfig(property, options, parent);\n        }\n        return this.getFormInputConfig(property, options, parent);\n    }\n\n    protected getFormFieldData(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions): FormFieldData {\n        const validators: Validators = {};\n        const schema = options.schema;\n        if (ObjectUtils.isArray(schema.required) && schema.required.indexOf(property.id) >= 0) {\n            validators.required = requiredValidation();\n        }\n        this.addPropertyValidators(validators, property);\n        this.addItemsValidators(validators, property.items);\n        return {\n            hidden: property.hidden === true,\n            disabled: property.disabled === true,\n            serialize: property.serialize === true,\n            componentType: property.componentType,\n            fieldSet: property.fieldSet,\n            classes: property.classes,\n            validators\n        };\n    }\n\n    protected async getFormArrayConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n        return this.builder.createFormArray(property.id, async sp => {\n            const subSchemas = findRefs(property);\n            if (subSchemas.length > 0) {\n                const subModels = await Promise.all(\n                    subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n                );\n                return mergeFormFields(ObjectUtils.copy(subModels));\n            }\n            return this.getFormFieldForProp(property.items, options, sp);\n        }, {\n            ...this.getFormFieldData(property, options),\n            // initialCount: property.initialCount || 0,\n            // sortable: property.sortable || false,\n            useTabs: property.useTabs,\n            tabsLabel: property.tabsLabel,\n            addItem: property.addItem,\n            insertItem: property.insertItem,\n            cloneItem: property.cloneItem,\n            moveItem: property.moveItem,\n            removeItem: property.removeItem,\n            clearItems: property.clearItems\n        }, parent, options);\n    }\n\n    protected async getFormGroupConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n        return this.builder.createFormGroup(property.id, async sp => {\n            const subSchemas = findRefs(property);\n            const subModels = await Promise.all(\n                subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n            );\n            return mergeFormFields(subModels);\n        }, {\n            ...this.getFormFieldData(property, options),\n        }, parent, options);\n    }\n\n    protected getFormInputConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n        let type = StringUtils.has(property.id || \"\", \"password\", \"Password\") ? \"password\" : (property.format || property.type);\n        switch (type) {\n            case \"string\":\n                type = \"text\";\n                break;\n            case \"boolean\":\n                type = \"checkbox\";\n                break;\n            case \"textarea\":\n                type = \"textarea\";\n                break;\n            case \"integer\":\n                type = \"number\";\n                break;\n        }\n        const sub = property.type == \"array\" ? property.items || property : property;\n        return this.builder.createFormInput(property.id, {\n            ...this.getFormFieldData(property, options),\n            type,\n            autocomplete: property.autocomplete,\n            pattern: property.pattern,\n            step: isNaN(sub.step) ? property.step : sub.step,\n            min: sub.minimum,\n            max: sub.maximum,\n            minLength: sub.minLength,\n            maxLength: sub.maxLength,\n            placeholder: property.placeholder,\n            indeterminate: property.indeterminate,\n            suffix: property.suffix\n        }, parent, options);\n    }\n\n    protected getFormTextareaConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n        return this.builder.createFormInput(property.id, {\n            ...this.getFormFieldData(property, options),\n            type: \"textarea\",\n            autocomplete: property.autoComplete,\n            cols: property.cols || null,\n            rows: property.rows || 10,\n            minLength: property.minLength,\n            maxLength: property.maxLength,\n            placeholder: property.placeholder || \"\"\n        }, parent, options);\n    }\n\n    // getFormEditorConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrap): DynamicEditorModelConfig {\n    //     const sub = property.type == \"array\" ? property.items || property : property;\n    //     return Object.assign(\n    //         this.getFormControlConfig(property, options),\n    //         {\n    //             inputType: property.format || \"json\",\n    //             convertObject: property.type !== \"string\",\n    //             autoComplete: property.autoComplete || \"off\",\n    //             multiple: property.type == \"array\",\n    //             accept: ObjectUtils.isString(property.accept) ? property.accept : null,\n    //             mask: ObjectUtils.isString(property.mask) ? property.mask : null,\n    //             pattern: ObjectUtils.isString(property.pattern) ? property.pattern : null,\n    //             step: isNaN(sub.step) ? (isNaN(property.step) ? 1 : property.step) : sub.step,\n    //             minLength: isNaN(sub.minLength) ? 0 : sub.minLength,\n    //             maxLength: isNaN(sub.maxLength) ? MAX_INPUT_NUM : sub.maxLength,\n    //             placeholder: property.placeholder || \"\"\n    //         }\n    //     );\n    // }\n\n    protected getFormDatepickerConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n        return this.builder.createFormInput(property.id, {\n            ...this.getFormFieldData(property, options),\n            type: property.format == \"date-time\" ? \"datetime-local\" : \"date\",\n            // format: property.dateFormat || \"dd.MM.yyyy\",\n            min: convertToDate(property.min),\n            max: convertToDate(property.max),\n        }, parent, options);\n    }\n\n    protected getFormSelectConfig($enum: string[], property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n        return this.builder.createFormSelect(property.id, {\n            ...this.getFormFieldData(property, options),\n            options: field => this.getFormSelectOptions($enum, property, options, field),\n            type: property.format || \"select\",\n            multiple: property.type == \"array\",\n            groupBy: property.groupBy,\n            allowEmpty: property.allowEmpty\n        }, parent, options);\n    }\n\n    protected getFormUploadConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n        return this.builder.createFormUpload(property.id, {\n            ...this.getFormFieldData(property, options),\n            multiple: property.type === \"array\",\n            inline: property.inline,\n            accept: property.accept,\n            url: property.url,\n            maxSize: property.maxSize,\n            uploadOptions: property.uploadOptions\n        }, parent, options);\n    }\n\n    protected getFormCheckboxConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n        return this.builder.createFormInput(property.id, {\n            ...this.getFormFieldData(property, options),\n            type: \"checkbox\",\n            indeterminate: property.indeterminate || false\n        }, parent, options);\n    }\n\n    protected getFormSelectOptions($enum: string[], property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, field: FormFieldConfig): FormSelectOptions {\n        if (Array.isArray($enum)) {\n            return this.getFormEnumOptions($enum, property.id, options, field);\n        }\n        if (isStringWithVal(property.endpoint)) {\n            return this.getFormEndpointOptions(property, field);\n        }\n        return this.getFormPathOptions(property.optionsPath, field);\n    }\n\n    protected getFormEnumOptions($enum: string[], id: string, options: ConfigForSchemaWrapOptions, field: FormFieldConfig): FormSelectOptions {\n        return this.builder.language.pipe(\n            distinctUntilChanged(),\n            switchMap(async () => {\n                return this.builder.fixSelectOptions(field, $enum.map(value => {\n                    const label = options.labelPrefix\n                        ? `${options.labelPrefix}.${id}.${value}`\n                        : `${id}.${value}`;\n                    return {value, label};\n                }));\n            })\n        );\n    }\n\n    protected getFormEndpointOptions(property: IOpenApiSchemaProperty, field: FormFieldConfig): FormSelectOptions {\n        const root = field.formControl.root as FormGroup;\n        return controlValues(root).pipe(\n            combineLatestWith(this.builder.language),\n            switchMap(async () => {\n                const entries = Object.entries(root.controls || {});\n                const endpoint = entries.reduce((res, [key, control]) => {\n                    return this.replaceOptionsEndpoint(res, key, control.value);\n                }, `${property.endpoint}`);\n                this.api.cache[endpoint] = this.api.cache[endpoint] || this.api.list(endpoint, this.api.makeListParams(1, -1));\n                const data = await this.api.cache[endpoint] as IPaginationData;\n                const items = ObjectUtils.isArray(data)\n                    ? data\n                    : (ObjectUtils.isArray(data.items) ? data.items : []);\n                return this.builder.fixSelectOptions(field, items.map(item => {\n                    item = ObjectUtils.isObject(item) ? item : {id: item};\n                    return {\n                        ...item,\n                        value: item.id || item._id,\n                        label: item[property.labelField] || item.label || item.id || item._id\n                    };\n                }));\n            })\n        );\n    }\n\n    protected getFormPathOptions(path: string, field: FormFieldConfig): FormSelectOptions {\n        let control = field.formControl;\n        let current = field;\n        if (path.startsWith(\"$root\")) {\n            path = path.substring(5);\n            control = control.root || control;\n            while (current.parent) {\n                current = current.parent;\n            }\n        }\n        while (path.startsWith(\".\")) {\n            path = path.substring(1);\n            control = control.parent || control;\n            current = current.parent || current;\n        }\n        control = !path ? control : control.get(path);\n        return controlValues(control).pipe(\n            combineLatestWith(this.builder.language),\n            switchMap(async ([ctrlValue]) => {\n                const finalOpts = await getSelectOptions(current);\n                return this.builder.fixSelectOptions(field, (!Array.isArray(ctrlValue) ? [] : ctrlValue).map(value => {\n                    const modelOption = finalOpts.find(t => t.value == value);\n                    return {value, label: modelOption?.label || value};\n                }));\n            })\n        );\n    }\n\n    protected replaceOptionsEndpoint(endpoint: string, key: string, value: any): string {\n        if (ObjectUtils.isObject(value)) {\n            return Object.entries(value).reduce((res, [k, v]) => {\n                return this.replaceOptionsEndpoint(res, `${key}.${k}`, v);\n            }, endpoint)\n        }\n        if (ObjectUtils.isArray(value)) {\n            return value.reduce((res, v, i) => {\n                return this.replaceOptionsEndpoint(res, `${key}.${i}`, v);\n            }, endpoint)\n        }\n        return endpoint.replace(new RegExp(`\\\\$${key}`, \"gi\"), `${value ?? \"\"}`);\n    }\n\n    protected showErrorsForGroup(formGroup: FormGroup): void {\n        if (!formGroup) return;\n        formGroup.markAsTouched({onlySelf: true});\n        const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\n        this.showErrorsForControls(controls);\n    }\n\n    protected showErrorsForControls(controls: AbstractControl[]): void {\n        controls.forEach(control => {\n            if (control instanceof FormGroup) {\n                this.showErrorsForGroup(control);\n                return;\n            }\n            control.markAsTouched({onlySelf: true});\n            if (control instanceof FormArray) {\n                this.showErrorsForControls(control.controls);\n            }\n        });\n    }\n\n    protected addPropertyValidators(validators: Validators, property: IOpenApiSchemaProperty): void {\n        if (!property) return;\n        if (!isNaN(property.minLength)) {\n            validators.minLength = minLengthValidation(property.minLength);\n        }\n        if (!isNaN(property.maxLength)) {\n            validators.maxLength = maxLengthValidation(property.maxLength);\n        }\n        if (!isNaN(property.minimum)) {\n            validators.min = minValueValidation(property.minimum);\n        }\n        if (!isNaN(property.maximum)) {\n            validators.max = maxValueValidation(property.maximum);\n        }\n        // if (isString(property.pattern) && property.pattern.length) {\n        //     validators.pattern = property.pattern;\n        // }\n        switch (property.format) {\n            case \"email\":\n                validators.email = emailValidation();\n                break;\n        }\n    }\n\n    protected addItemsValidators(validators: Validators, items: IOpenApiSchemaProperty): void {\n        if (!items) return;\n        if (!isNaN(items.minLength)) {\n            validators.itemsMinLength = minLengthValidation(items.minLength, true);\n        }\n        if (!isNaN(items.maxLength)) {\n            validators.itemsMaxLength = maxLengthValidation(items.maxLength, true);\n        }\n        if (!isNaN(items.minimum)) {\n            validators.itemsMinValue = minValueValidation(items.minimum, true);\n        }\n        if (!isNaN(items.maximum)) {\n            validators.itemsMaxValue = maxValueValidation(items.maximum, true);\n        }\n    }\n}\n","import {Inject, Injectable, Injector, untracked} from \"@angular/core\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {first} from \"rxjs\";\nimport {API_SERVICE, IApiService, ObjectUtils} from \"@stemy/ngx-utils\";\n\nimport {\n    CustomizerOrSchemaOptions,\n    FORM_ROOT_ID,\n    FormFieldConfig,\n    FormSerializeResult,\n    IDynamicForm\n} from \"../common-types\";\nimport {getFormValidationErrors, toWrapOptions} from \"../utils/internal\";\n\nimport {DynamicFormSchemaService} from \"./dynamic-form-schema.service\";\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\n\n@Injectable()\nexport class DynamicFormService {\n\n    constructor(protected readonly fs: DynamicFormSchemaService,\n                protected readonly fb: DynamicFormBuilderService,\n                protected readonly injector: Injector,\n                @Inject(API_SERVICE) protected readonly api: IApiService) {\n\n    }\n\n    async getFormFieldsForSchema(name: string, customizeOrOptions?: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\n        const group = await this.getFormFieldGroupBySchemaName(name, customizeOrOptions, \"getFormFieldsForSchema\");\n        return group.fieldGroup;\n    }\n\n    async getFormFieldGroupForSchema(name: string, customizeOrOptions?: CustomizerOrSchemaOptions): Promise<FormFieldConfig> {\n        return this.getFormFieldGroupBySchemaName(name, customizeOrOptions, \"getFormFieldsForSchema\");\n    }\n\n    protected async getFormFieldGroupBySchemaName(name: string, customizeOrOptions: CustomizerOrSchemaOptions, restrictedMethod: string): Promise<FormFieldConfig> {\n        const config = {\n            id: FORM_ROOT_ID,\n            path: \"\",\n            wrappers: [\"form-group\"],\n            props: {}\n        } as FormFieldConfig;\n        const schema = await this.fs.getSchema(name);\n        const wrapOptions = await toWrapOptions(\n            customizeOrOptions, this.injector, schema,\n            `\"DynamicFormService.${restrictedMethod}\" is called from a customizer, which is not allowed. Please use DynamicFormSchemaService instead!`\n        );\n        const fields = await this.fs.getFormFieldsForSchema(name, config, wrapOptions);\n        const fieldGroup = [...fields];\n\n        config.fieldGroup = fieldGroup;\n\n        // There are no actual fields in the schema, or no schema exists\n        if (fields.length === 0) return config;\n\n        // Add id fields if necessary\n        const idFields: FormFieldConfig[] = [\n            this.fb.createFormInput(\"id\", {hidden: true}, null, wrapOptions),\n            this.fb.createFormInput(\"_id\", {hidden: true}, null, wrapOptions)\n        ];\n\n        fieldGroup.unshift(...idFields\n            .filter(t => !fields.some(c => c.key == t.key))\n        );\n\n        const root = await wrapOptions.customize(config, {\n            id: FORM_ROOT_ID,\n            type: \"object\",\n            properties: schema?.properties || {}\n        }, schema);\n        // Check if the customized root wrapper returned an array\n        fields.length = 0;\n\n        for (const model of root) {\n            if (model.id === FORM_ROOT_ID) {\n                return model;\n            } else {\n                fields.push(model);\n            }\n        }\n\n        return {\n            ...config,\n            fieldGroup: fields\n        };\n    }\n\n    async validateForm(form: IDynamicForm, showErrors: boolean = true): Promise<any> {\n        const group = form.group();\n        if (!group) return Promise.resolve();\n        return new Promise<any>((resolve, reject) => {\n            group.statusChanges\n                .pipe(first(status => status == \"VALID\" || status == \"INVALID\"))\n                .subscribe(status => {\n                    if (showErrors) {\n                        this.showErrorsForGroup(group);\n                    }\n                    if (status == \"VALID\") {\n                        resolve(null);\n                        return;\n                    }\n                    reject(getFormValidationErrors(group.controls));\n                });\n            group.updateValueAndValidity();\n        });\n    }\n\n    async serializeForm(form: IDynamicForm, validate: boolean = true): Promise<FormSerializeResult> {\n        const fields = untracked(() => form.config());\n        if (!fields) return null;\n        if (validate) {\n            await this.validateForm(form);\n        }\n        return this.serialize(fields);\n    }\n\n    async serialize(fields: FormFieldConfig[]): Promise<FormSerializeResult> {\n        const result = {};\n        if (!fields) return result;\n        for (const field of fields) {\n            const serializer = field.serializer;\n            const key = `${field.key}`;\n            if (ObjectUtils.isFunction(serializer)) {\n                result[key] = await serializer(field, this.injector);\n                continue;\n            }\n            if (field.hide && !field.serialize) {\n                continue;\n            }\n            const control = field.formControl;\n            if (field.fieldGroup) {\n                const group = await this.serialize(field.fieldGroup);\n                if (field.key) {\n                    result[key] = !field.fieldArray ? group : Object.values(group);\n                    continue;\n                }\n                Object.assign(result, group);\n                continue;\n            }\n            result[key] = control.value;\n        }\n        return result;\n    }\n\n    protected showErrorsForGroup(formGroup: FormGroup): void {\n        if (!formGroup) return;\n        formGroup.markAsTouched({onlySelf: true});\n        const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\n        this.showErrorsForControls(controls);\n    }\n\n    protected showErrorsForControls(controls: AbstractControl[]): void {\n        controls.forEach(control => {\n            if (control instanceof FormGroup) {\n                this.showErrorsForGroup(control);\n                return;\n            }\n            control.markAsTouched({onlySelf: true});\n            if (control instanceof FormArray) {\n                this.showErrorsForControls(control.controls);\n            }\n        });\n    }\n}\n","import {\n    computed,\n    Directive,\n    effect,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    inject,\n    input,\n    output,\n    Renderer2,\n    signal,\n    untracked\n} from \"@angular/core\";\nimport {outputToObservable} from \"@angular/core/rxjs-interop\";\nimport {debounceTime} from \"rxjs/operators\";\nimport {IAsyncMessage, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\n\nimport {AsyncSubmitMethod, AsyncSubmitMode, IDynamicForm} from \"../common-types\";\n\n@Directive({\n    standalone: false,\n    selector: \"[async-submit]\",\n    exportAs: \"async-submit\"\n})\nexport class AsyncSubmitDirective {\n\n    readonly method = input<AsyncSubmitMethod>(null, {alias: \"async-submit\"});\n    readonly mode = input<AsyncSubmitMode>(\"click\");\n    form = input<IDynamicForm>();\n    context = input<any>();\n\n    onSuccess = output<IAsyncMessage>();\n    onError = output<IAsyncMessage>();\n\n    toaster = inject(TOASTER_SERVICE);\n    renderer = inject(Renderer2);\n    elem = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    protected status = computed(() => {\n        const form = this.form();\n        return form?.status() || null;\n    });\n\n    protected group = computed(() => {\n        const form = this.form();\n        return form?.group() || null;\n    });\n\n    protected loading = signal(false);\n    protected callback = signal<() => void>(null);\n\n    @HostBinding(\"class.disabled\")\n    get isDisabled(): boolean {\n        return this.status() !== \"VALID\";\n    }\n\n    @HostBinding(\"class.loading\")\n    get isLoading(): boolean {\n        return this.loading();\n    }\n\n    constructor() {\n        if (this.elem.nativeElement.tagName === \"BUTTON\") {\n            this.renderer.setAttribute(this.elem.nativeElement, \"type\", \"button\");\n        }\n        effect(() => {\n            const status = this.status();\n            const cb = this.callback();\n            if (!cb || status == \"PENDING\") return;\n            if (status === \"VALID\") {\n                cb();\n            }\n            this.callback.set(null);\n        });\n        effect(() => {\n            const form = this.form();\n            const mode = this.mode();\n            if (!form || mode === \"click\") return;\n            const sub = outputToObservable(form.onSubmit)\n                .pipe(debounceTime(200)).subscribe(() => this.callMethod());\n            return () => sub.unsubscribe();\n        });\n    }\n\n    @HostListener(\"click\")\n    click(): void {\n        const mode = untracked(() => this.mode());\n        if (mode === \"submit\") return;\n        const status = untracked(() => this.status());\n        if (status !== \"VALID\" && status !== \"INVALID\") {\n            this.callback.set(() => this.callMethod());\n            return;\n        }\n        this.callMethod();\n    }\n\n    callMethod(): void {\n        const loading = untracked(() => this.loading());\n        if (loading) return;\n        this.loading.set(true);\n        const [method, form, context] = untracked(() => [this.method(), this.form(), this.context()]);\n        method(form, context).then(result => {\n            this.loading.set(false);\n            if (result) {\n                this.onSuccess.emit(result);\n                this.toaster.success(result.message, result.context);\n            }\n        }, reason => {\n            if (!reason || !reason.message)\n                throw new Error(\"Reason must implement IAsyncMessage interface\");\n            this.loading.set(false);\n            this.onError.emit(reason);\n            this.toaster.error(reason.message, reason.context);\n        });\n    }\n}\n","import {AfterViewInit, Component, OnDestroy, TemplateRef, Type} from \"@angular/core\";\nimport {FieldType as CoreFieldType, ɵobserve as observe} from \"@ngx-formly/core\";\nimport {Subject} from \"rxjs\";\nimport type {MatFormField, MatFormFieldControl} from \"@angular/material/form-field\";\n\nimport {FormFieldType} from \"../../common-types\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-field-type\",\n    template: \"\"\n})\nexport class DynamicFieldType<F extends FormFieldType = FormFieldType> extends CoreFieldType<F> implements AfterViewInit, OnDestroy, MatFormFieldControl<any> {\n\n    stateChanges = new Subject<void>();\n    _errorState = false;\n    _focused = false;\n\n    ngOnDestroy() {\n        delete (this.formField as any)?._control;\n        this.stateChanges.complete();\n    }\n\n    setDescribedByIds(_ids: string[]): void {\n    }\n\n    onContainerClick(_event: MouseEvent): void {\n        this.field.focus = true;\n        this.stateChanges.next();\n    }\n\n    get errorState() {\n        const showError = this.options!.showError!(this);\n        if (showError !== this._errorState) {\n            this._errorState = showError;\n            this.stateChanges.next();\n        }\n\n        return showError;\n    }\n\n    get controlType() {\n        if (this.props.type) {\n            return this.props.type;\n        }\n\n        const type = this.field.type!;\n        return type instanceof Type ? type.prototype.constructor.name : type;\n    }\n\n    get focused() {\n        const focused = !!this.field.focus && !this.disabled;\n        if (focused !== this._focused) {\n            this._focused = focused;\n            this.stateChanges.next();\n        }\n        return focused;\n    }\n\n    get disabled() {\n        return !!this.props.disabled;\n    }\n\n    get required() {\n        return !!this.props.required;\n    }\n\n    get placeholder() {\n        return this.props.placeholder || \"\";\n    }\n\n    get shouldPlaceholderFloat() {\n        return this.shouldLabelFloat;\n    }\n\n    get value() {\n        return this.formControl?.value;\n    }\n\n    set value(value) {\n        this.formControl?.patchValue(value);\n    }\n\n    get ngControl() {\n        return this.formControl as any;\n    }\n\n    get empty() {\n        return this.value == null || this.value?.length === 0;\n    }\n\n    get shouldLabelFloat() {\n        return this.focused || !this.empty;\n    }\n\n    get formField(): MatFormField {\n        return (this.field as any)?.[\"_formField\"];\n    }\n\n    ngAfterViewInit() {\n        const control = this as MatFormFieldControl<any>;\n        if (this.formField && control !== this.formField._control) {\n            this.formField._control = control;\n\n            // temporary fix for https://github.com/angular/material2/issues/6728\n            const ngControl = control?.ngControl as any;\n            if (ngControl?.valueAccessor?.hasOwnProperty(\"_formField\")) {\n                ngControl.valueAccessor[\"_formField\"] = this.formField;\n            }\n            if (ngControl?.valueAccessor?.hasOwnProperty(\"_parentFormField\")) {\n                ngControl.valueAccessor[\"_parentFormField\"] = this.formField;\n            }\n\n            [\"prefix\", \"suffix\", \"textPrefix\", \"textSuffix\"].forEach((type) =>\n                observe<TemplateRef<any>>(\n                    this.field,\n                    [\"props\", type],\n                    ({currentValue}) =>\n                        currentValue &&\n                        Promise.resolve().then(() => {\n                            this.options.detectChanges!(this.field);\n                        }),\n                ),\n            );\n\n            // https://github.com/angular/components/issues/16209\n            const setDescribedByIds = control.setDescribedByIds.bind(control);\n            control.setDescribedByIds = (ids: string[]) => {\n                setTimeout(() => setDescribedByIds(ids));\n            };\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    effect,\n    inject,\n    Injector,\n    input,\n    output,\n    ViewEncapsulation\n} from \"@angular/core\";\nimport {rxResource, toSignal} from \"@angular/core/rxjs-interop\";\nimport {FormGroup} from \"@angular/forms\";\nimport {Subject} from \"rxjs\";\nimport {FormlyFormOptions} from \"@ngx-formly/core\";\nimport {EventsService, LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\n\nimport {\n    FormBuilderOptions,\n    FormFieldChangeEvent,\n    FormFieldConfig,\n    FormFieldLabelCustomizer,\n    IDynamicForm\n} from \"../../common-types\";\nimport {controlStatus} from \"../../utils/misc\";\nimport {DynamicFormBuilderService} from \"../../services/dynamic-form-builder.service\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-form\",\n    templateUrl: \"./dynamic-form.component.html\",\n    styleUrls: [\"./dynamic-form.component.scss\"],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicFormComponent implements IDynamicForm {\n\n    protected readonly builder = inject(DynamicFormBuilderService);\n\n    protected readonly events = inject(EventsService);\n\n    protected readonly languages = inject(LANGUAGE_SERVICE);\n\n    readonly labelPrefix = input(\"label\");\n\n    readonly labelCustomizer = input<FormFieldLabelCustomizer>(null);\n\n    readonly testId = input(\"\");\n\n    readonly useTabs = input(false);\n\n    readonly data = input<any>({});\n\n    readonly fields = input<FormFieldConfig[]>(null);\n\n    readonly fieldChanges = new Subject<FormFieldChangeEvent>();\n\n    protected readonly language = toSignal(this.events.languageChanged, {\n        initialValue: this.languages.currentLanguage\n    });\n\n    protected readonly enableTranslations = toSignal(this.events.translationsEnabled, {\n        initialValue: this.languages.enableTranslations\n    });\n\n    readonly config = computed(() => {\n        const options = {\n            labelPrefix: this.labelPrefix(),\n            labelCustomizer: this.labelCustomizer(),\n            testId: this.testId(),\n        } as FormBuilderOptions;\n        const fields = this.fields() || this.builder.resolveFormFields(this.data()?.constructor, null, options);\n        return [\n            this.builder.createFormGroup(\n                null, () => fields,\n                {\n                    label: \"\",\n                    useTabs: this.useTabs(),\n                    hidden: false,\n                    additional: {\n                        className: \"dynamic-form-root-group\"\n                    }\n                },\n                null, options\n            )\n        ];\n    });\n\n    readonly group = computed(() => {\n        this.config();\n        return new FormGroup({});\n    });\n\n    protected readonly status$ = rxResource({\n        request: () => this.group(),\n        loader: p => controlStatus(p.request),\n        defaultValue: \"PENDING\"\n    });\n\n    readonly status = computed(() => this.status$.value());\n\n    readonly onSubmit = output<IDynamicForm>();\n\n    readonly options: FormlyFormOptions = {\n        fieldChanges: this.fieldChanges,\n        formState: {\n            injector: inject(Injector)\n        }\n    };\n\n    constructor() {\n        effect(() => {\n            this.language();\n            this.enableTranslations();\n            this.config().forEach(field => {\n                if (!ObjectUtils.isFunction(field.options?.detectChanges)) return;\n                field.options.detectChanges(field);\n            });\n        });\n    }\n\n    submit() {\n        this.onSubmit.emit(this);\n    }\n\n    reset() {\n        this.options?.resetModel?.();\n    }\n}\n","@if (config() && group()) {\n    <form [formGroup]=\"group()\" (ngSubmit)=\"submit()\" autocomplete=\"off\" role=\"presentation\">\n        <input type=\"submit\" [hidden]=\"true\" />\n        <formly-form [model]=\"data()\"\n                     [fields]=\"config()\"\n                     [form]=\"group()\"\n                     [options]=\"options\"></formly-form>\n        <ng-content></ng-content>\n    </form>\n}\n","import {Component, signal, ViewEncapsulation} from \"@angular/core\";\nimport {FormArray} from \"@angular/forms\";\nimport {FieldArrayType} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-form-array\",\n    templateUrl: \"./dynamic-form-array.component.html\",\n    styleUrls: [\"./dynamic-form-array.component.scss\"],\n    encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormArrayComponent extends FieldArrayType<FormFieldConfig> {\n\n    readonly currentTab = signal(0);\n\n    clearItems(): void {\n        const control = this.formControl as FormArray;\n        while (control.length > 0) {\n            this.remove(0);\n        }\n        this.currentTab.set(0);\n    }\n\n    addItem(i?: number): void {\n        i = i == null ? this.field.fieldGroup.length : i;\n        this.add(i);\n        this.currentTab.set(i);\n    }\n\n    removeItem(i: number): void {\n        this.remove(i);\n        const length = this.field.fieldGroup.length;\n        this.currentTab.set(Math.min(this.currentTab(), length - 1));\n    }\n}\n","@if (field.display) {\n    @if (props.label && props.hideLabel !== true) {\n        <label class=\"field-label\">\n            {{ props.label | translate }}\n            <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n        </label>\n    }\n    <div class=\"field-container\">\n        <tabs class=\"form-array-items\" [(value)]=\"currentTab\">\n            @for (itemField of field.fieldGroup; track itemField.key; let ix = $index) {\n                <ng-template #fieldContent>\n                    <div class=\"form-array-buttons\">\n                        @if (itemField.removeItem) {\n                            <btn icon=\"trash\" (click)=\"removeItem(ix)\"></btn>\n                        }\n                        @if (itemField.insertItem) {\n                            <btn icon=\"plus\" (click)=\"addItem(ix)\"></btn>\n                        }\n                    </div>\n                    <formly-field [field]=\"itemField\"></formly-field>\n                </ng-template>\n                @if (props.useTabs) {\n                    <div class=\"form-array-item\"\n                         [tabsItem]=\"ix\"\n                         [label]=\"(itemField.formControl.value | getValue : props.tabsLabel) || ix + 1\">\n                        <ng-container [ngTemplateOutlet]=\"fieldContent\"></ng-container>\n                    </div>\n                } @else {\n                    <div class=\"form-array-item\">\n                        <ng-container [ngTemplateOutlet]=\"fieldContent\"></ng-container>\n                    </div>\n                }\n            }\n        </tabs>\n\n        <div class=\"form-array-buttons\">\n            @if (props.clearItems) {\n                <btn icon=\"trash\" label=\"button.clear-items\" (click)=\"clearItems()\"></btn>\n            }\n            @if (props.addItem) {\n                <btn icon=\"plus\" label=\"button.insert-item\" (click)=\"addItem()\"></btn>\n            }\n        </div>\n    </div>\n}\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from \"@angular/core\";\nimport {DynamicFieldType} from \"../base/dynamic-field-type\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-form-chips\",\n    templateUrl: \"./dynamic-form-chips.component.html\",\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormChipsComponent extends DynamicFieldType {\n\n}\n","<chips [formControl]=\"formControl\"\n       [type]=\"props.type\"\n       [step]=\"props.step\"\n       [minLength]=\"props.minLength\"\n       [maxLength]=\"props.maxLength\"\n       [min]=\"props.min\"\n       [max]=\"props.max\"\n       [multiple]=\"props.multiple\"\n       [formlyAttributes]=\"field\">\n</chips>\n","import {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-form-field\",\n    templateUrl: \"./dynamic-form-field.component.html\",\n    encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormFieldComponent extends FieldWrapper<FormFieldConfig> {\n\n}\n","@if (props.label && props.hideLabel !== true) {\n    <label class=\"field-label\" [for]=\"id\">\n        {{ props.label | translate }}\n        <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n        @if (props.required && props.hideRequiredMarker !== true) {\n            <span class=\"field-required\" aria-hidden=\"true\">*</span>\n        }\n    </label>\n}\n<div class=\"field-container\">\n    <ng-container #fieldComponent></ng-container>\n    <div *ngIf=\"showError\" class=\"field-errors invalid-feedback\">\n        <formly-validation-message\n            [field]=\"field\"\n            id=\"{{ id }}-formly-validation-error\"\n            role=\"alert\"\n        ></formly-validation-message>\n    </div>\n</div>\n","import {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-form-fieldset\",\n    templateUrl: \"./dynamic-form-fieldset.component.html\",\n    encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormFieldsetComponent extends FieldWrapper<FormFieldConfig> {\n\n}\n","@if (field.display) {\n    <legend class=\"field-legend\" *ngIf=\"props.label && !field.parent.props.useTabs\">\n        {{ props.label | translate }}\n    </legend>\n    <div class=\"field-container\">\n        @for (itemField of field.fieldGroup; track itemField) {\n            @if (itemField.display) {\n                <formly-field [field]=\"itemField\"></formly-field>\n            }\n        }\n    </div>\n}\n","import {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-form-group\",\n    templateUrl: \"./dynamic-form-group.component.html\",\n    styleUrls: [\"./dynamic-form-group.component.scss\"],\n    encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormGroupComponent extends FieldWrapper<FormFieldConfig> {\n\n}\n","@if (field.display) {\n    @if (props.label && props.hideLabel !== true) {\n        <label class=\"field-label\">\n            {{ props.label | translate }}\n            <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n        </label>\n    }\n    <tabs class=\"field-container\">\n        @for (itemField of field.fieldGroup; track itemField; let ix = $index) {\n            @if (itemField.display) {\n                @if (props.useTabs && itemField.wrappers | includes: 'form-fieldset') {\n                    <div class=\"form-fieldset-item\"\n                         [tabsItem]=\"ix\"\n                         [classes]=\"['form-fieldset-tab', itemField.valid ? 'valid' : 'invalid']\"\n                         [label]=\"itemField.props.label\">\n                        <formly-field [field]=\"itemField\"></formly-field>\n                    </div>\n                } @else {\n                    <formly-field [field]=\"itemField\"></formly-field>\n                }\n            }\n        }\n    </tabs>\n}\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from \"@angular/core\";\nimport {DynamicFieldType} from \"../base/dynamic-field-type\";\n\n@Component({\n    standalone: false,\n    selector: \"dynamic-form-upload\",\n    templateUrl: \"./dynamic-form-upload.component.html\",\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormUploadComponent extends DynamicFieldType {\n\n}\n","<upload [formControl]=\"formControl\"\n        [multiple]=\"props.multiple\"\n        [inline]=\"props.inline\"\n        [accept]=\"props.accept\"\n        [baseUrl]=\"props.url\"\n        [makeUpload]=\"props.createUploadData\"\n        [formlyAttributes]=\"field\">\n</upload>\n","import {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\n\nimport {DynamicFieldType} from \"./components/base/dynamic-field-type\";\nimport {DynamicFormComponent} from \"./components/dynamic-form/dynamic-form.component\";\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormFieldComponent} from \"./components/dynamic-form-field/dynamic-form-field.component\";\nimport {DynamicFormFieldsetComponent} from \"./components/dynamic-form-fieldset/dynamic-form-fieldset.component\";\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\n// --- Components ---\nexport const components = [\n    DynamicFieldType,\n    DynamicFormComponent,\n    DynamicFormArrayComponent,\n    DynamicFormChipsComponent,\n    DynamicFormFieldComponent,\n    DynamicFormFieldsetComponent,\n    DynamicFormGroupComponent,\n    DynamicFormUploadComponent\n];\n\n// --- Directives ---\nexport const directives = [\n    AsyncSubmitDirective,\n];\n\n// --- Pipes ---\nexport const pipes = [];\n","import {EnvironmentProviders, makeEnvironmentProviders, ModuleWithProviders, NgModule, Provider} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {FormlyModule, provideFormlyConfig, provideFormlyCore} from \"@ngx-formly/core\";\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\n\nimport {components, directives, pipes} from \"./ngx-dynamic-form.imports\";\n\nimport {IDynamicFormModuleConfig} from \"./common-types\";\n\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\nimport {DynamicFormBuilderService} from \"./services/dynamic-form-builder.service\";\nimport {DynamicFormSchemaService} from \"./services/dynamic-form-schema.service\";\n\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\nimport {DynamicFormFieldComponent} from \"./components/dynamic-form-field/dynamic-form-field.component\";\nimport {DynamicFormFieldsetComponent} from \"./components/dynamic-form-fieldset/dynamic-form-fieldset.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\n@NgModule({\n    declarations: [\n        ...components,\n        ...directives,\n        ...pipes\n    ],\n    imports: [\n        CommonModule,\n        FormsModule,\n        ReactiveFormsModule,\n        NgxUtilsModule,\n        FormlyModule\n    ],\n    exports: [\n        ...components,\n        ...directives,\n        ...pipes,\n        FormsModule,\n        ReactiveFormsModule,\n        NgxUtilsModule,\n        FormlyModule\n    ],\n    providers: [\n        ...pipes\n    ]\n})\nexport class NgxDynamicFormModule {\n\n    private static getProviders(config?: IDynamicFormModuleConfig): Provider[] {\n        const formlyConfigs = (config?.options || []).map(provideFormlyConfig);\n        return [\n            provideFormlyCore({\n                types: [\n                    {name: \"array\", component: DynamicFormArrayComponent},\n                    {name: \"chips\", component: DynamicFormChipsComponent, wrappers: [\"form-field\"]},\n                    {name: \"upload\", component: DynamicFormUploadComponent, wrappers: [\"form-field\"]}\n                ],\n                wrappers: [\n                    { name: \"form-field\", component: DynamicFormFieldComponent },\n                    { name: \"form-fieldset\", component: DynamicFormFieldsetComponent },\n                    { name: \"form-group\", component: DynamicFormGroupComponent }\n                ],\n                extras: {\n                    resetFieldOnHide: false,\n                    renderFormlyFieldElement: false\n                }\n            }),\n            ...formlyConfigs,\n            DynamicFormService,\n            DynamicFormBuilderService,\n            DynamicFormSchemaService\n        ];\n    }\n\n    static forRoot(config?: IDynamicFormModuleConfig): ModuleWithProviders<NgxDynamicFormModule> {\n        return {\n            ngModule: NgxDynamicFormModule,\n            providers: NgxDynamicFormModule.getProviders(config)\n        }\n    }\n\n    static provideForms(config?: IDynamicFormModuleConfig): EnvironmentProviders {\n        return makeEnvironmentProviders(NgxDynamicFormModule.getProviders(config));\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["FormGroup","FormArray","i1","i2.DynamicFormBuilderService","CoreFieldType","observe","i2","i3"],"mappings":"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"}