@stemy/ngx-dynamic-form 19.7.3 → 19.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -786,6 +786,8 @@ class DynamicFormBuilderService {
786
786
  ...props,
787
787
  label: options.labelCustomizer?.(key, data.label, parent, options.labelPrefix)
788
788
  ?? this.getLabel(key, data.label, parent, options),
789
+ description: options.labelCustomizer?.(key, data.description, parent, options.labelPrefix)
790
+ ?? this.getLabel(key, data.description, parent, options),
789
791
  hideLabel: data.hideLabel === true,
790
792
  classes: data.classes || [],
791
793
  layout: data.layout || [],
@@ -1452,7 +1454,6 @@ class AsyncSubmitDirective {
1452
1454
  });
1453
1455
  }
1454
1456
  click() {
1455
- console.log("CLICK");
1456
1457
  const mode = untracked(() => this.mode());
1457
1458
  if (mode === "submit")
1458
1459
  return;
@@ -1881,5 +1882,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
1881
1882
  * Generated bundle index. Do not edit.
1882
1883
  */
1883
1884
 
1884
- export { AsyncSubmitDirective, DynamicFieldType, DynamicFormAlertComponent, DynamicFormArrayComponent, DynamicFormBuilderService, DynamicFormChipsComponent, DynamicFormComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormSchemaService, DynamicFormService, DynamicFormUploadComponent, EDITOR_FORMATS, FORM_ROOT_ID, FormFile, FormGroup, FormInput, FormModel, FormSelect, FormSerializable, FormUpload, MAX_INPUT_NUM, MIN_INPUT_NUM, NgxDynamicFormModule, addFieldValidators, arrayLengthValidation, clearFieldArray, controlStatus, controlValues, convertToDate, convertToDateFormat, customizeFormField, emailValidation, getFieldByPath, getFieldsByKey, getFieldsByPredicate, getSelectOptions, insertToFieldArray, jsonValidation, maxLengthValidation, maxValueValidation, minLengthValidation, minValueValidation, phoneValidation, removeFieldValidators, removeFromFieldArray, replaceFieldArray, replaceSpecialChars, requiredValidation, setFieldDefault, setFieldDisabled, setFieldHidden, setFieldHooks, setFieldProp, setFieldProps, translationValidation };
1885
+ export { AsyncSubmitDirective, DynamicFieldType, DynamicFormAlertComponent, DynamicFormArrayComponent, DynamicFormBuilderService, DynamicFormChipsComponent, DynamicFormComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormSchemaService, DynamicFormService, DynamicFormUploadComponent, EDITOR_FORMATS, FORM_ROOT_ID, FormArray, FormFile, FormGroup, FormInput, FormModel, FormSelect, FormSerializable, FormUpload, MAX_INPUT_NUM, MIN_INPUT_NUM, NgxDynamicFormModule, addFieldValidators, arrayLengthValidation, clearFieldArray, controlStatus, controlValues, convertToDate, convertToDateFormat, customizeFormField, emailValidation, getFieldByPath, getFieldsByKey, getFieldsByPredicate, getSelectOptions, insertToFieldArray, jsonValidation, maxLengthValidation, maxValueValidation, minLengthValidation, minValueValidation, phoneValidation, removeFieldValidators, removeFromFieldArray, replaceFieldArray, replaceSpecialChars, requiredValidation, setFieldDefault, setFieldDisabled, setFieldHidden, setFieldHooks, setFieldProp, setFieldProps, translationValidation };
1885
1886
  //# sourceMappingURL=stemy-ngx-dynamic-form.mjs.map
@@ -1 +1 @@
1
- {"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-upload/dynamic-form-upload.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.html","../../src/ngx-dynamic-form/components/dynamic-form-alert/dynamic-form-alert.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-alert/dynamic-form-alert.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/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 OpenApiSchema,\n OpenApiSchemaProperty,\n HttpRequestOptions,\n MaybeArray,\n MaybePromise,\n UploadData, ResolveFactory\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\";\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 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 * 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 * Custom class name(s) can be defined for a form field\n */\n classes?: string[] | string;\n /**\n * Custom class name(s) can be defined for a form field, but they get prefixed by `dynamic-form-layout-`\n */\n layout?: string[] | string;\n /**\n * This custom class name overrides the whole class list of the form field\n */\n className?: string;\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 * Specifies that the input balue does not have to be in the options of chips component if false (default: true)\n */\n strict?: boolean;\n /**\n * Allows empty, null values in the select component\n */\n allowEmpty?: boolean;\n /**\n * Groups the selectable values based on the value of the specified key in the select component\n */\n groupBy?: string;\n /**\n * Inverts the display of selected values in the select component\n */\n invert?: boolean;\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?: HttpRequestOptions;\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 * Specifies if required marker should be shown\n */\n markRequired?: boolean;\n /**\n * Additional custom field props\n */\n [additionalProperties: string]: any;\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.hidden\"?: 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 priority?: number;\n fieldGroup?: FormFieldConfig[];\n fieldArray?: FormFieldConfig;\n hooks: FormHookConfig;\n expressions: FormFieldExpressions;\n readonly parent?: FormFieldConfig;\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 Omit<FormlySelectOption, \"group\"> {\n className?: string;\n classes?: string[] | string;\n id?: any;\n [key: string]: any;\n}\n\nexport type FormSelectOptions = FormSelectOption[] | Observable<FormSelectOption[]> | Promise<FormSelectOption[]>;\n\nexport type FormSelectOptionsFactory = (field: FormFieldConfig, injector: Injector) => FormSelectOptions;\n\nexport type FormFieldConditionFn = (field: FormFieldConfig, injector: Injector) => boolean;\n\nexport type FormFieldCondition = FormFieldConditionFn | boolean;\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 readonly onChanges: OutputRef<FormFieldChangeEvent>;\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, \"label\" | \"hideRequiredMarker\" | \"hideLabel\" | \"classes\" | \"layout\" | \"className\">\n & {\n /**\n * Conditional check if the field should be hidden or not\n */\n hidden?: FormFieldCondition | ResolveFactory<FormFieldCondition>;\n /**\n * Conditional check if the field should be disabled or not\n */\n disabled?: FormFieldCondition | ResolveFactory<FormFieldCondition>;\n /**\n * This is a custom serializer callback function. (Can't be defined from JSON schema because it is a JS callback)\n */\n serializer?: FormFieldSerializer;\n /**\n * Enables normal serialization even if the field is hidden\n */\n serialize?: boolean;\n /**\n * Puts the field in a custom field set\n */\n fieldSet?: string;\n /**\n * Puts the field in a custom order\n */\n priority?: number;\n /**\n * The used component type of the field can be overridden, (Only string can be defined from JSON schema)\n */\n componentType?: string | Type<any>;\n /**\n * Custom wrappers for a form field. (Only pre-defined string wrappers can be defined from JSON schema)\n */\n wrappers?: Array<Type<any> | string>;\n /**\n * Any additional property for a form field (These gets applied before the type-specific props)\n */\n props?: Record<string, any>;\n /**\n * Custom validators for a form field.\n */\n validators?: Validators | ValidatorFn[];\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\" | \"strict\" | \"type\" | \"allowEmpty\" | \"groupBy\" | \"invert\"> & {\n options?: ResolveFactory<FormSelectOptionsFactory> | FormSelectOptionsFactory;\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: OpenApiSchemaProperty, schema: OpenApiSchema\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 TypedProvider,\n OpenApiSchema,\n OpenApiSchemaProperty,\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: OpenApiSchemaProperty,\n schema: OpenApiSchema\n ): boolean;\n customizeField(\n field: FormFieldConfig,\n options: FormBuilderOptions,\n property: OpenApiSchemaProperty,\n schema: OpenApiSchema\n ): MaybePromise<MaybeArray<FormFieldConfig>>;\n}\n\nexport function customizeFormField(...providers: TypedProvider<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 = (fb, opts, path) => {\n const data = ObjectUtils.isFunction(existing) ? existing(fb, opts, path) : {\n priority: Number.MAX_SAFE_INTEGER\n };\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 arrayLengthValidation(min: number = 1, max: number = Number.MAX_SAFE_INTEGER) {\n return withName((control) => {\n const value = control.value;\n return !Array.isArray(value) || (min <= value.length && value.length <= max);\n }, \"arrayLength\");\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 | Date, each?: boolean): ValidatorFn {\n return validateEach(each, v => {\n if (min instanceof Date) {\n const date = new Date(v) as any;\n return isNaN(date) || date >= min;\n }\n return v == null || v >= min;\n }, \"minValue\");\n}\n\nexport function maxValueValidation(max: number | Date, each?: boolean): ValidatorFn {\n return validateEach(each, v => {\n if (max instanceof Date) {\n const date = new Date(v) as any;\n return isNaN(date) || date <= max;\n }\n return v == null || v <= max;\n }, \"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 FormFieldCondition,\n FormFieldConfig,\n FormFieldKey,\n FormFieldProps,\n FormHookConfig,\n FormHookFn,\n FormSelectOption,\n FormSelectOptions\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\n/**\n * Convert value to a string with corrected date format (date, date-time)\n * @param value Value to convert to date string\n * @param format Expected date format (date, date-time)\n */\nexport function convertToDateFormat(value: any, format: string): any {\n if (!ObjectUtils.isDefined(value) || !format?.includes(\"date\")) return value;\n value = ObjectUtils.isDate(value) ? value : new Date(value);\n const date = isNaN(value) ? new Date() : value as Date;\n return format === \"datetime-local\" || format === \"date-time\"\n ? new Date(date.getTime() - date.getTimezoneOffset() * 60000)\n .toISOString()\n .slice(0, 16)\n : date.toISOString().slice(0, 10);\n}\n\n/**\n * Convert value to date object with format (date, date-time)\n * @param value Value to convert to date string\n * @param format Expected date format (date, date-time)\n */\nexport function convertToDate(value: any, format: string): any {\n return (!ObjectUtils.isDefined(value) || !format?.includes(\"date\"))\n ? value\n : new Date(convertToDateFormat(value, format));\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(fieldOrOpts: FormFieldConfig | FormSelectOptions): Promise<FormSelectOption[]> {\n const options = (fieldOrOpts as FormFieldConfig).props?.options || fieldOrOpts as FormSelectOptions;\n if (options instanceof Observable) {\n return firstValueFrom(options);\n }\n if (options instanceof Promise) {\n return await options;\n }\n return Array.isArray(options) ? 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 setFieldDefault(field: FormFieldConfig, value: any): void {\n field.defaultValue = value instanceof Date ? convertToDateFormat(value, field.props?.type || \"date\") : value;\n}\n\ninterface SetFormFieldProps extends Omit<FormFieldProps, \"min\" | \"max\"> {\n min?: number | Date;\n max?: number | Date;\n}\n\nexport function setFieldProps(field: FormFieldConfig, values: SetFormFieldProps): FormFieldConfig {\n if (!ObjectUtils.isObject(values)) return;\n const props = Object.assign({} as SetFormFieldProps, field.props || {});\n props.type = values.type || props.type;\n Object.keys(values).forEach(key => {\n const value = values[key];\n props[key] = value instanceof Date ? convertToDateFormat(value, props.type || \"date\") : value;\n });\n field.props = props;\n return field;\n}\n\nexport function setFieldProp<P extends keyof SetFormFieldProps, V extends SetFormFieldProps[P]>(field: FormFieldConfig, prop: P, value: V): FormFieldConfig {\n return setFieldProps(field, {[prop]: value});\n}\n\nexport function setFieldHidden(field: FormFieldConfig, hidden: FormFieldCondition = true): void {\n setFieldProp(field, \"__hidden\", ObjectUtils.isFunction(hidden) ? hidden : () => hidden);\n}\n\nexport function setFieldDisabled(field: FormFieldConfig, disabled: FormFieldCondition = true): void {\n setFieldProp(field, \"__disabled\", ObjectUtils.isFunction(disabled) ? 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 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 ForbiddenZone,\n KeysOfType,\n MaybeArray,\n ObjectUtils,\n OpenApiSchema,\n OpenApiSchemaProperty\n} from \"@stemy/ngx-utils\";\nimport {\n AllValidationErrors,\n ConfigForSchemaOptions,\n CustomizerOrSchemaOptions,\n FormBuilderOptions,\n FormFieldArrayItemsAction,\n FormFieldConfig,\n FormFieldCustomizer,\n FormFieldExpression,\n FormFieldProps\n} from \"../common-types\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {convertToDateFormat} from \"./misc\";\n\nexport type ConfigForSchemaWrapMode = \"wrap\" | \"customizer\";\n\nexport interface ConfigForSchemaWrapOptions extends Required<FormBuilderOptions> {\n readonly injector: Injector;\n readonly schema: OpenApiSchema;\n customize(field: FormFieldConfig, property: OpenApiSchemaProperty, schema: OpenApiSchema): 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: OpenApiSchema\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: OpenApiSchemaProperty, schema: OpenApiSchema) {\n field.defaultValue = property.format?.startsWith(\"date\")\n ? convertToDateFormat(property.default, property.format) : 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: OpenApiSchema): 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: OpenApiSchema,\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.forSchema(schema);\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 handleConfigs(configs: MaybeArray<FormFieldConfig>) {\n return Array.isArray(configs) ? configs : [configs];\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 } else if (control instanceof FormArray) {\n control.controls.forEach((control: FormGroup, ix) => {\n getFormValidationErrors(control.controls, `${path}.${ix}`).forEach(error => errors.push(error));\n });\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} 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 result: FormFieldConfig[] = [];\n const groups: { [fs: string]: FormFieldConfig[] } = {};\n fields = Array.from(fields || [])\n .sort((a, b) => a.priority - b.priority);\n fields.forEach(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 }\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 id = !parent?.path ? fsName : `${parent.path}.${fsName}`;\n let fieldGroup = groups[id];\n if (!fieldGroup) {\n fieldGroup = [];\n const fieldSet: FormFieldConfig = {\n id,\n parent,\n fieldGroup,\n wrappers: [\"form-fieldset\"],\n props: {\n label: this.getLabel(fsName, fsName, parent, options),\n hidden: false,\n className: `dynamic-form-fieldset dynamic-form-fieldset-${id}`\n },\n hooks: {},\n expressions: {}\n };\n this.setExpressions(fieldSet, options);\n groups[id] = fieldGroup;\n result.push(fieldSet);\n }\n fieldGroup.push(field);\n continue;\n }\n // Otherwise just push to result\n result.push(field);\n }\n\n return result;\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 \"date\":\n case \"datetime-local\":\n props.min = data.min;\n props.max = 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 fieldType = type === \"radio\" ? type : (data.strict === false ? \"chips\" : \"select\");\n const field = this.createFormField(key, fieldType, data, {\n type,\n multiple: data.multiple === true,\n strict: data.strict !== false,\n allowEmpty: data.allowEmpty === true,\n groupBy: data.groupBy,\n invert: data.invert === true\n }, parent, options);\n setFieldHooks(field, {\n onInit: target => {\n const factory = ReflectUtils.resolve(data.options, this.injector);\n const options = factory(target, this.injector);\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 (factory(target, this.injector) 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 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 defaultValue: [],\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 className: \"dynamic-form-field dynamic-form-group\",\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(ObjectUtils.isStringWithValue).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 const multiple = field.props.multiple;\n field.defaultValue = multiple ? [] : options[0]?.value ?? null;\n if (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 const wrappers = Array.isArray(data.wrappers) ? Array.from(data.wrappers) : [];\n if (type !== \"array\") {\n wrappers.unshift(!type ? \"form-group\" : \"form-field\");\n }\n const disabled = ReflectUtils.resolve(data.disabled, this.injector);\n const hidden = ReflectUtils.resolve(data.hidden, this.injector);\n const field: FormFieldConfig = {\n serializer: data.serializer,\n serialize: data.serialize || false,\n fieldSet: String(data.fieldSet || \"\"),\n priority: isNaN(data.priority) ? Number.MAX_SAFE_INTEGER : Number(data.priority),\n\n type: data.componentType || type,\n resetOnHide: false,\n validators: {},\n validation: {},\n props: {\n ...(data.props || {}),\n ...props,\n label: options.labelCustomizer?.(key, data.label, parent, options.labelPrefix)\n ?? this.getLabel(key, data.label, parent, options),\n hideLabel: data.hideLabel === true,\n classes: data.classes || [],\n layout: data.layout || [],\n className: data.className || \"\",\n formCheck: \"nolabel\",\n labelPosition: \"before\",\n __disabled: ObjectUtils.isFunction(disabled) ? disabled : () => disabled,\n __hidden: ObjectUtils.isFunction(hidden) ? hidden : () => hidden\n },\n modelOptions: {\n updateOn: \"change\"\n },\n hooks: {},\n expressions: {\n \"props.markRequired\": target => data.hideRequiredMarker !== true && !!target.validators?.required,\n \"props.disabled\": target => {\n const disabled = target.props?.__disabled;\n return !!disabled(target, this.injector);\n },\n \"props.hidden\": target => {\n const hidden = target.props?.__hidden;\n return !!hidden(target, this.injector);\n }\n },\n key,\n wrappers,\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 shouldDisplay(field: FormFieldConfig): boolean {\n const display = field.props?.hidden !== true;\n if (Array.isArray(field.fieldGroup) && field.fieldGroup.length) {\n return display && field.fieldGroup.some(f => this.shouldDisplay(f));\n }\n return display;\n }\n\n protected isValid(field: FormFieldConfig): boolean {\n const control = field.formControl;\n const valid = field.key && control ? (control.disabled || control.valid) !== false : true;\n if (Array.isArray(field.fieldGroup) && field.fieldGroup.length) {\n return valid && field.fieldGroup.every(f => this.isValid(f));\n }\n return valid;\n }\n\n protected setExpressions(field: FormFieldConfig, options: FormBuilderOptions): void {\n const expressions: FormFieldExpressions = {\n display: target => this.shouldDisplay(target),\n valid: target => this.isValid(target),\n className: (target: FormFieldConfig) => {\n if (!target.display) {\n return `dynamic-form-field dynamic-form-hidden`;\n }\n const {classes, layout, className} = target.props || {};\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 (Array.isArray(layout) ? layout : [layout || \"\"]).map(layout => `dynamic-form-layout-${layout}`)\n ).filter(c => c?.length > 0).join(\" \");\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 OpenApiSchema,\n OpenApiSchemaProperty,\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 mergeFormFields,\n toWrapOptions\n} from \"../utils/internal\";\n\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\nimport {controlValues, convertToDate, convertToDateFormat, 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<OpenApiSchema> {\n return this.openApi.getSchema(name);\n }\n\n async getFormFieldsForSchema(schema: OpenApiSchema,\n parent: FormFieldConfig,\n customizeOrOptions: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\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: OpenApiSchemaProperty, schema: OpenApiSchema, 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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n const $enum = property.items?.enum || property.enum;\n if (Array.isArray($enum) || ObjectUtils.isStringWithValue(property.optionsPath) || ObjectUtils.isStringWithValue(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 (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 const refs = await this.openApi.getReferences(property, options.schema);\n if (refs.length > 0) {\n return this.getFormGroupConfig(property, options, parent);\n }\n return this.getFormInputConfig(property, options, parent);\n }\n\n protected getFormFieldData(property: OpenApiSchemaProperty, 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 label: property.label,\n hideRequiredMarker: property.hideRequiredMarker === true,\n hideLabel: property.hideLabel === true,\n classes: property.classes,\n layout: property.layout,\n serialize: property.serialize === true,\n fieldSet: property.fieldSet,\n priority: property.priority,\n componentType: property.componentType,\n wrappers: property.wrappers,\n props: property,\n validators\n };\n }\n\n protected async getFormArrayConfig(property: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormArray(property.id, async sp => {\n const subSchemas = await this.openApi.getReferences(property, options.schema);\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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormGroup(property.id, async sp => {\n const subSchemas = await this.openApi.getReferences(property, options.schema);\n const subFields = await Promise.all(\n subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n );\n return mergeFormFields(subFields);\n }, {\n ...this.getFormFieldData(property, options),\n }, parent, options);\n }\n\n protected getFormInputConfig(property: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n const type = property.format == \"date-time\" ? \"datetime-local\" : \"date\";\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type,\n min: convertToDateFormat(property.min, property.format),\n max: convertToDateFormat(property.max, property.format),\n }, parent, options);\n }\n\n protected getFormSelectConfig($enum: string[], property: OpenApiSchemaProperty, 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 strict: property.strict,\n groupBy: property.groupBy,\n invert: property.invert,\n allowEmpty: property.allowEmpty\n }, parent, options);\n }\n\n protected getFormUploadConfig(property: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, field: FormFieldConfig): FormSelectOptions {\n if (Array.isArray($enum)) {\n return this.getFormEnumOptions($enum, property.id, options, field);\n }\n if (ObjectUtils.isStringWithValue(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: OpenApiSchemaProperty, 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 const data = await this.api.list(endpoint, this.api.makeListParams(1, -1), {\n cache: this.api.cached(property.cache),\n read: String(property.responseProperty || \"\")\n });\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 showErrorsForControls(controls: AbstractControl[]): void {\n controls.forEach(control => {\n if (control instanceof FormGroup) {\n const controls = Object.keys(control.controls).map(id => control.controls[id]);\n this.showErrorsForControls(controls);\n } else if (control instanceof FormArray) {\n this.showErrorsForControls(control.controls);\n }\n control.markAsTouched({onlySelf: true});\n });\n }\n\n protected addPropertyValidators(validators: Validators, property: OpenApiSchemaProperty): 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(convertToDate(property.minimum, property.format));\n }\n if (!isNaN(property.maximum)) {\n validators.max = maxValueValidation(convertToDate(property.maximum, property.format));\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: OpenApiSchemaProperty): 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(schema, 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 console.log(\"CLICK\");\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 {outputFromObservable, 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 className: \"dynamic-form-root-group\"\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 onChanges = outputFromObservable(this.fieldChanges);\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 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 @if (props.markRequired) {\n <span class=\"field-required\" aria-hidden=\"true\">*</span>\n }\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\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}\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 [strict]=\"props.strict\"\n [options]=\"props.options | formlySelectOptions | async\"\n [testId]=\"field.testId\"\n [formlyAttributes]=\"field\">\n</chips>\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 {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n/**\n * This is just a test wrapper component\n */\n@Component({\n standalone: false,\n selector: \"dynamic-form-alert\",\n templateUrl: \"./dynamic-form-alert.component.html\",\n styleUrls: [\"./dynamic-form-alert.component.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormAlertComponent extends FieldWrapper<FormFieldConfig> {\n\n}\n","<div class=\"dynamic-form-alert\">\n <ng-container #fieldComponent></ng-container>\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-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.markRequired) {\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 @if (props.markRequired) {\n <span class=\"field-required\" aria-hidden=\"true\">*</span>\n }\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 === false ? 'invalid' : 'valid']\"\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 <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 </tabs>\n}\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\";\n\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\nimport {DynamicFormAlertComponent} from \"./components/dynamic-form-alert/dynamic-form-alert.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\";\n\n// --- Components ---\nexport const components = [\n DynamicFieldType,\n DynamicFormComponent,\n\n DynamicFormArrayComponent,\n DynamicFormChipsComponent,\n DynamicFormUploadComponent,\n\n DynamicFormAlertComponent,\n DynamicFormFieldComponent,\n DynamicFormFieldsetComponent,\n DynamicFormGroupComponent,\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 {FormlySelectModule} from \"@ngx-formly/core/select\";\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 {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\nimport {DynamicFormAlertComponent} from \"./components/dynamic-form-alert/dynamic-form-alert.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\";\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 FormlySelectModule\n ],\n exports: [\n ...components,\n ...directives,\n ...pipes,\n FormsModule,\n ReactiveFormsModule,\n NgxUtilsModule,\n FormlyModule,\n FormlySelectModule\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},\n {name: \"upload\", component: DynamicFormUploadComponent}\n ],\n wrappers: [\n { name: \"form-alert\", component: DynamicFormAlertComponent },\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","i4","i3"],"mappings":"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"}
1
+ {"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-upload/dynamic-form-upload.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.html","../../src/ngx-dynamic-form/components/dynamic-form-alert/dynamic-form-alert.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-alert/dynamic-form-alert.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/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 OpenApiSchema,\n OpenApiSchemaProperty,\n HttpRequestOptions,\n MaybeArray,\n MaybePromise,\n UploadData, ResolveFactory\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\";\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 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 * 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 * Custom class name(s) can be defined for a form field\n */\n classes?: string[] | string;\n /**\n * Custom class name(s) can be defined for a form field, but they get prefixed by `dynamic-form-layout-`\n */\n layout?: string[] | string;\n /**\n * This custom class name overrides the whole class list of the form field\n */\n className?: string;\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 * Specifies that the input balue does not have to be in the options of chips component if false (default: true)\n */\n strict?: boolean;\n /**\n * Allows empty, null values in the select component\n */\n allowEmpty?: boolean;\n /**\n * Groups the selectable values based on the value of the specified key in the select component\n */\n groupBy?: string;\n /**\n * Inverts the display of selected values in the select component\n */\n invert?: boolean;\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?: HttpRequestOptions;\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 * Specifies if required marker should be shown\n */\n markRequired?: boolean;\n /**\n * Additional custom field props\n */\n [additionalProperties: string]: any;\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.hidden\"?: 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 priority?: number;\n fieldGroup?: FormFieldConfig[];\n fieldArray?: FormFieldConfig;\n hooks: FormHookConfig;\n expressions: FormFieldExpressions;\n readonly parent?: FormFieldConfig;\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 Omit<FormlySelectOption, \"group\"> {\n className?: string;\n classes?: string[] | string;\n id?: any;\n [key: string]: any;\n}\n\nexport type FormSelectOptions = FormSelectOption[] | Observable<FormSelectOption[]> | Promise<FormSelectOption[]>;\n\nexport type FormSelectOptionsFactory = (field: FormFieldConfig, injector: Injector) => FormSelectOptions;\n\nexport type FormFieldConditionFn = (field: FormFieldConfig, injector: Injector) => boolean;\n\nexport type FormFieldCondition = FormFieldConditionFn | boolean;\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 readonly onChanges: OutputRef<FormFieldChangeEvent>;\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, \"label\" | \"description\" | \"hideRequiredMarker\" | \"hideLabel\" | \"classes\" | \"layout\" | \"className\">\n & {\n /**\n * Conditional check if the field should be hidden or not\n */\n hidden?: FormFieldCondition | ResolveFactory<FormFieldCondition>;\n /**\n * Conditional check if the field should be disabled or not\n */\n disabled?: FormFieldCondition | ResolveFactory<FormFieldCondition>;\n /**\n * This is a custom serializer callback function. (Can't be defined from JSON schema because it is a JS callback)\n */\n serializer?: FormFieldSerializer;\n /**\n * Enables normal serialization even if the field is hidden\n */\n serialize?: boolean;\n /**\n * Puts the field in a custom field set\n */\n fieldSet?: string;\n /**\n * Puts the field in a custom order\n */\n priority?: number;\n /**\n * The used component type of the field can be overridden, (Only string can be defined from JSON schema)\n */\n componentType?: string | Type<any>;\n /**\n * Custom wrappers for a form field. (Only pre-defined string wrappers can be defined from JSON schema)\n */\n wrappers?: Array<Type<any> | string>;\n /**\n * Any additional property for a form field (These gets applied before the type-specific props)\n */\n props?: Record<string, any>;\n /**\n * Custom validators for a form field.\n */\n validators?: Validators | ValidatorFn[];\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\" | \"strict\" | \"type\" | \"allowEmpty\" | \"groupBy\" | \"invert\"> & {\n options?: ResolveFactory<FormSelectOptionsFactory> | FormSelectOptionsFactory;\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: OpenApiSchemaProperty, schema: OpenApiSchema\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 TypedProvider,\n OpenApiSchema,\n OpenApiSchemaProperty,\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: OpenApiSchemaProperty,\n schema: OpenApiSchema\n ): boolean;\n customizeField(\n field: FormFieldConfig,\n options: FormBuilderOptions,\n property: OpenApiSchemaProperty,\n schema: OpenApiSchema\n ): MaybePromise<MaybeArray<FormFieldConfig>>;\n}\n\nexport function customizeFormField(...providers: TypedProvider<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 = (fb, opts, path) => {\n const data = ObjectUtils.isFunction(existing) ? existing(fb, opts, path) : {\n priority: Number.MAX_SAFE_INTEGER\n };\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 arrayLengthValidation(min: number = 1, max: number = Number.MAX_SAFE_INTEGER) {\n return withName((control) => {\n const value = control.value;\n return !Array.isArray(value) || (min <= value.length && value.length <= max);\n }, \"arrayLength\");\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 | Date, each?: boolean): ValidatorFn {\n return validateEach(each, v => {\n if (min instanceof Date) {\n const date = new Date(v) as any;\n return isNaN(date) || date >= min;\n }\n return v == null || v >= min;\n }, \"minValue\");\n}\n\nexport function maxValueValidation(max: number | Date, each?: boolean): ValidatorFn {\n return validateEach(each, v => {\n if (max instanceof Date) {\n const date = new Date(v) as any;\n return isNaN(date) || date <= max;\n }\n return v == null || v <= max;\n }, \"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 FormFieldCondition,\n FormFieldConfig,\n FormFieldKey,\n FormFieldProps,\n FormHookConfig,\n FormHookFn,\n FormSelectOption,\n FormSelectOptions\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\n/**\n * Convert value to a string with corrected date format (date, date-time)\n * @param value Value to convert to date string\n * @param format Expected date format (date, date-time)\n */\nexport function convertToDateFormat(value: any, format: string): any {\n if (!ObjectUtils.isDefined(value) || !format?.includes(\"date\")) return value;\n value = ObjectUtils.isDate(value) ? value : new Date(value);\n const date = isNaN(value) ? new Date() : value as Date;\n return format === \"datetime-local\" || format === \"date-time\"\n ? new Date(date.getTime() - date.getTimezoneOffset() * 60000)\n .toISOString()\n .slice(0, 16)\n : date.toISOString().slice(0, 10);\n}\n\n/**\n * Convert value to date object with format (date, date-time)\n * @param value Value to convert to date string\n * @param format Expected date format (date, date-time)\n */\nexport function convertToDate(value: any, format: string): any {\n return (!ObjectUtils.isDefined(value) || !format?.includes(\"date\"))\n ? value\n : new Date(convertToDateFormat(value, format));\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(fieldOrOpts: FormFieldConfig | FormSelectOptions): Promise<FormSelectOption[]> {\n const options = (fieldOrOpts as FormFieldConfig).props?.options || fieldOrOpts as FormSelectOptions;\n if (options instanceof Observable) {\n return firstValueFrom(options);\n }\n if (options instanceof Promise) {\n return await options;\n }\n return Array.isArray(options) ? 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 setFieldDefault(field: FormFieldConfig, value: any): void {\n field.defaultValue = value instanceof Date ? convertToDateFormat(value, field.props?.type || \"date\") : value;\n}\n\ninterface SetFormFieldProps extends Omit<FormFieldProps, \"min\" | \"max\"> {\n min?: number | Date;\n max?: number | Date;\n}\n\nexport function setFieldProps(field: FormFieldConfig, values: SetFormFieldProps): FormFieldConfig {\n if (!ObjectUtils.isObject(values)) return;\n const props = Object.assign({} as SetFormFieldProps, field.props || {});\n props.type = values.type || props.type;\n Object.keys(values).forEach(key => {\n const value = values[key];\n props[key] = value instanceof Date ? convertToDateFormat(value, props.type || \"date\") : value;\n });\n field.props = props;\n return field;\n}\n\nexport function setFieldProp<P extends keyof SetFormFieldProps, V extends SetFormFieldProps[P]>(field: FormFieldConfig, prop: P, value: V): FormFieldConfig {\n return setFieldProps(field, {[prop]: value});\n}\n\nexport function setFieldHidden(field: FormFieldConfig, hidden: FormFieldCondition = true): void {\n setFieldProp(field, \"__hidden\", ObjectUtils.isFunction(hidden) ? hidden : () => hidden);\n}\n\nexport function setFieldDisabled(field: FormFieldConfig, disabled: FormFieldCondition = true): void {\n setFieldProp(field, \"__disabled\", ObjectUtils.isFunction(disabled) ? 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 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 ForbiddenZone,\n KeysOfType,\n MaybeArray,\n ObjectUtils,\n OpenApiSchema,\n OpenApiSchemaProperty\n} from \"@stemy/ngx-utils\";\nimport {\n AllValidationErrors,\n ConfigForSchemaOptions,\n CustomizerOrSchemaOptions,\n FormBuilderOptions,\n FormFieldArrayItemsAction,\n FormFieldConfig,\n FormFieldCustomizer,\n FormFieldExpression,\n FormFieldProps\n} from \"../common-types\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {convertToDateFormat} from \"./misc\";\n\nexport type ConfigForSchemaWrapMode = \"wrap\" | \"customizer\";\n\nexport interface ConfigForSchemaWrapOptions extends Required<FormBuilderOptions> {\n readonly injector: Injector;\n readonly schema: OpenApiSchema;\n customize(field: FormFieldConfig, property: OpenApiSchemaProperty, schema: OpenApiSchema): 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: OpenApiSchema\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: OpenApiSchemaProperty, schema: OpenApiSchema) {\n field.defaultValue = property.format?.startsWith(\"date\")\n ? convertToDateFormat(property.default, property.format) : 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: OpenApiSchema): 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: OpenApiSchema,\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.forSchema(schema);\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 handleConfigs(configs: MaybeArray<FormFieldConfig>) {\n return Array.isArray(configs) ? configs : [configs];\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 } else if (control instanceof FormArray) {\n control.controls.forEach((control: FormGroup, ix) => {\n getFormValidationErrors(control.controls, `${path}.${ix}`).forEach(error => errors.push(error));\n });\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} 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 result: FormFieldConfig[] = [];\n const groups: { [fs: string]: FormFieldConfig[] } = {};\n fields = Array.from(fields || [])\n .sort((a, b) => a.priority - b.priority);\n fields.forEach(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 }\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 id = !parent?.path ? fsName : `${parent.path}.${fsName}`;\n let fieldGroup = groups[id];\n if (!fieldGroup) {\n fieldGroup = [];\n const fieldSet: FormFieldConfig = {\n id,\n parent,\n fieldGroup,\n wrappers: [\"form-fieldset\"],\n props: {\n label: this.getLabel(fsName, fsName, parent, options),\n hidden: false,\n className: `dynamic-form-fieldset dynamic-form-fieldset-${id}`\n },\n hooks: {},\n expressions: {}\n };\n this.setExpressions(fieldSet, options);\n groups[id] = fieldGroup;\n result.push(fieldSet);\n }\n fieldGroup.push(field);\n continue;\n }\n // Otherwise just push to result\n result.push(field);\n }\n\n return result;\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 \"date\":\n case \"datetime-local\":\n props.min = data.min;\n props.max = 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 fieldType = type === \"radio\" ? type : (data.strict === false ? \"chips\" : \"select\");\n const field = this.createFormField(key, fieldType, data, {\n type,\n multiple: data.multiple === true,\n strict: data.strict !== false,\n allowEmpty: data.allowEmpty === true,\n groupBy: data.groupBy,\n invert: data.invert === true\n }, parent, options);\n setFieldHooks(field, {\n onInit: target => {\n const factory = ReflectUtils.resolve(data.options, this.injector);\n const options = factory(target, this.injector);\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 (factory(target, this.injector) 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 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 defaultValue: [],\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 className: \"dynamic-form-field dynamic-form-group\",\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(ObjectUtils.isStringWithValue).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 const multiple = field.props.multiple;\n field.defaultValue = multiple ? [] : options[0]?.value ?? null;\n if (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 const wrappers = Array.isArray(data.wrappers) ? Array.from(data.wrappers) : [];\n if (type !== \"array\") {\n wrappers.unshift(!type ? \"form-group\" : \"form-field\");\n }\n const disabled = ReflectUtils.resolve(data.disabled, this.injector);\n const hidden = ReflectUtils.resolve(data.hidden, this.injector);\n const field: FormFieldConfig = {\n serializer: data.serializer,\n serialize: data.serialize || false,\n fieldSet: String(data.fieldSet || \"\"),\n priority: isNaN(data.priority) ? Number.MAX_SAFE_INTEGER : Number(data.priority),\n\n type: data.componentType || type,\n resetOnHide: false,\n validators: {},\n validation: {},\n props: {\n ...(data.props || {}),\n ...props,\n label: options.labelCustomizer?.(key, data.label, parent, options.labelPrefix)\n ?? this.getLabel(key, data.label, parent, options),\n description: options.labelCustomizer?.(key, data.description, parent, options.labelPrefix)\n ?? this.getLabel(key, data.description, parent, options),\n hideLabel: data.hideLabel === true,\n classes: data.classes || [],\n layout: data.layout || [],\n className: data.className || \"\",\n formCheck: \"nolabel\",\n labelPosition: \"before\",\n __disabled: ObjectUtils.isFunction(disabled) ? disabled : () => disabled,\n __hidden: ObjectUtils.isFunction(hidden) ? hidden : () => hidden\n },\n modelOptions: {\n updateOn: \"change\"\n },\n hooks: {},\n expressions: {\n \"props.markRequired\": target => data.hideRequiredMarker !== true && !!target.validators?.required,\n \"props.disabled\": target => {\n const disabled = target.props?.__disabled;\n return !!disabled(target, this.injector);\n },\n \"props.hidden\": target => {\n const hidden = target.props?.__hidden;\n return !!hidden(target, this.injector);\n }\n },\n key,\n wrappers,\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 shouldDisplay(field: FormFieldConfig): boolean {\n const display = field.props?.hidden !== true;\n if (Array.isArray(field.fieldGroup) && field.fieldGroup.length) {\n return display && field.fieldGroup.some(f => this.shouldDisplay(f));\n }\n return display;\n }\n\n protected isValid(field: FormFieldConfig): boolean {\n const control = field.formControl;\n const valid = field.key && control ? (control.disabled || control.valid) !== false : true;\n if (Array.isArray(field.fieldGroup) && field.fieldGroup.length) {\n return valid && field.fieldGroup.every(f => this.isValid(f));\n }\n return valid;\n }\n\n protected setExpressions(field: FormFieldConfig, options: FormBuilderOptions): void {\n const expressions: FormFieldExpressions = {\n display: target => this.shouldDisplay(target),\n valid: target => this.isValid(target),\n className: (target: FormFieldConfig) => {\n if (!target.display) {\n return `dynamic-form-field dynamic-form-hidden`;\n }\n const {classes, layout, className} = target.props || {};\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 (Array.isArray(layout) ? layout : [layout || \"\"]).map(layout => `dynamic-form-layout-${layout}`)\n ).filter(c => c?.length > 0).join(\" \");\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 OpenApiSchema,\n OpenApiSchemaProperty,\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 mergeFormFields,\n toWrapOptions\n} from \"../utils/internal\";\n\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\nimport {controlValues, convertToDate, convertToDateFormat, 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<OpenApiSchema> {\n return this.openApi.getSchema(name);\n }\n\n async getFormFieldsForSchema(schema: OpenApiSchema,\n parent: FormFieldConfig,\n customizeOrOptions: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\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: OpenApiSchemaProperty, schema: OpenApiSchema, 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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n const $enum = property.items?.enum || property.enum;\n if (Array.isArray($enum) || ObjectUtils.isStringWithValue(property.optionsPath) || ObjectUtils.isStringWithValue(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 (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 const refs = await this.openApi.getReferences(property, options.schema);\n if (refs.length > 0) {\n return this.getFormGroupConfig(property, options, parent);\n }\n return this.getFormInputConfig(property, options, parent);\n }\n\n protected getFormFieldData(property: OpenApiSchemaProperty, 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 label: property.label,\n hideRequiredMarker: property.hideRequiredMarker === true,\n hideLabel: property.hideLabel === true,\n classes: property.classes,\n layout: property.layout,\n serialize: property.serialize === true,\n fieldSet: property.fieldSet,\n priority: property.priority,\n componentType: property.componentType,\n wrappers: property.wrappers,\n props: property,\n validators\n };\n }\n\n protected async getFormArrayConfig(property: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormArray(property.id, async sp => {\n const subSchemas = await this.openApi.getReferences(property, options.schema);\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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormGroup(property.id, async sp => {\n const subSchemas = await this.openApi.getReferences(property, options.schema);\n const subFields = await Promise.all(\n subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n );\n return mergeFormFields(subFields);\n }, {\n ...this.getFormFieldData(property, options),\n }, parent, options);\n }\n\n protected getFormInputConfig(property: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n const type = property.format == \"date-time\" ? \"datetime-local\" : \"date\";\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type,\n min: convertToDateFormat(property.min, property.format),\n max: convertToDateFormat(property.max, property.format),\n }, parent, options);\n }\n\n protected getFormSelectConfig($enum: string[], property: OpenApiSchemaProperty, 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 strict: property.strict,\n groupBy: property.groupBy,\n invert: property.invert,\n allowEmpty: property.allowEmpty\n }, parent, options);\n }\n\n protected getFormUploadConfig(property: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, 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: OpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, field: FormFieldConfig): FormSelectOptions {\n if (Array.isArray($enum)) {\n return this.getFormEnumOptions($enum, property.id, options, field);\n }\n if (ObjectUtils.isStringWithValue(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: OpenApiSchemaProperty, 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 const data = await this.api.list(endpoint, this.api.makeListParams(1, -1), {\n cache: this.api.cached(property.cache),\n read: String(property.responseProperty || \"\")\n });\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 showErrorsForControls(controls: AbstractControl[]): void {\n controls.forEach(control => {\n if (control instanceof FormGroup) {\n const controls = Object.keys(control.controls).map(id => control.controls[id]);\n this.showErrorsForControls(controls);\n } else if (control instanceof FormArray) {\n this.showErrorsForControls(control.controls);\n }\n control.markAsTouched({onlySelf: true});\n });\n }\n\n protected addPropertyValidators(validators: Validators, property: OpenApiSchemaProperty): 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(convertToDate(property.minimum, property.format));\n }\n if (!isNaN(property.maximum)) {\n validators.max = maxValueValidation(convertToDate(property.maximum, property.format));\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: OpenApiSchemaProperty): 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(schema, 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 {outputFromObservable, 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 className: \"dynamic-form-root-group\"\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 onChanges = outputFromObservable(this.fieldChanges);\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 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 @if (props.markRequired) {\n <span class=\"field-required\" aria-hidden=\"true\">*</span>\n }\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\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}\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 [strict]=\"props.strict\"\n [options]=\"props.options | formlySelectOptions | async\"\n [testId]=\"field.testId\"\n [formlyAttributes]=\"field\">\n</chips>\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 {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n/**\n * This is just a test wrapper component\n */\n@Component({\n standalone: false,\n selector: \"dynamic-form-alert\",\n templateUrl: \"./dynamic-form-alert.component.html\",\n styleUrls: [\"./dynamic-form-alert.component.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormAlertComponent extends FieldWrapper<FormFieldConfig> {\n\n}\n","<div class=\"dynamic-form-alert\">\n <ng-container #fieldComponent></ng-container>\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-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.markRequired) {\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 @if (props.markRequired) {\n <span class=\"field-required\" aria-hidden=\"true\">*</span>\n }\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 === false ? 'invalid' : 'valid']\"\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 <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 </tabs>\n}\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\";\n\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\nimport {DynamicFormAlertComponent} from \"./components/dynamic-form-alert/dynamic-form-alert.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\";\n\n// --- Components ---\nexport const components = [\n DynamicFieldType,\n DynamicFormComponent,\n\n DynamicFormArrayComponent,\n DynamicFormChipsComponent,\n DynamicFormUploadComponent,\n\n DynamicFormAlertComponent,\n DynamicFormFieldComponent,\n DynamicFormFieldsetComponent,\n DynamicFormGroupComponent,\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 {FormlySelectModule} from \"@ngx-formly/core/select\";\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 {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\nimport {DynamicFormAlertComponent} from \"./components/dynamic-form-alert/dynamic-form-alert.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\";\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 FormlySelectModule\n ],\n exports: [\n ...components,\n ...directives,\n ...pipes,\n FormsModule,\n ReactiveFormsModule,\n NgxUtilsModule,\n FormlyModule,\n FormlySelectModule\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},\n {name: \"upload\", component: DynamicFormUploadComponent}\n ],\n wrappers: [\n { name: \"form-alert\", component: DynamicFormAlertComponent },\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","i4","i3"],"mappings":"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"}
@@ -245,7 +245,7 @@ export interface AllValidationErrors {
245
245
  errorValue: any;
246
246
  }
247
247
  export type FormFieldCustom = Pick<FormFieldConfig, "wrappers" | "hooks" | "fieldGroup" | "fieldArray">;
248
- export type FormFieldData = Pick<FormFieldProps, "label" | "hideRequiredMarker" | "hideLabel" | "classes" | "layout" | "className"> & {
248
+ export type FormFieldData = Pick<FormFieldProps, "label" | "description" | "hideRequiredMarker" | "hideLabel" | "classes" | "layout" | "className"> & {
249
249
  /**
250
250
  * Conditional check if the field should be hidden or not
251
251
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stemy/ngx-dynamic-form",
3
- "version": "19.7.3",
3
+ "version": "19.7.5",
4
4
  "license": "MIT",
5
5
  "public": true,
6
6
  "repository": "https://github.com/stemyke/ngx-dynamic-form.git",
package/public_api.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { FORM_ROOT_ID, FormFieldKey, FormFieldLabelCustomizer, FormBuilderOptions, FormFieldArrayItemsAction, FormFieldProps, FormFieldSerializer, FormHookFn, FormHookConfig, FormFieldExpression, FormFieldExpressions, FormFieldConfig, FormFieldType, FormFieldChangeEvent, FormSerializeResult, FormSelectOption, FormSelectOptions, FormSelectOptionsFactory, FormFieldConditionFn, FormFieldCondition, IDynamicForm, ValidationMessageFn, ValidatorFn, ValidatorExpression, Validators, AsyncValidatorFn, AsyncValidatorExpression, AsyncValidators, AllValidationErrors, FormFieldCustom, FormFieldData, FormInputData, FormSelectData, FormUploadData, FormGroupData, FormArrayData, AsyncSubmitMode, AsyncSubmitMethod, FormFieldCustomizer, ConfigForSchemaOptions, DynamicFormStatus, DynamicFormUpdateOn, IDynamicFormModuleConfig, } from "./ngx-dynamic-form/common-types";
2
2
  export { IFormFieldCustomizer, customizeFormField } from "./ngx-dynamic-form/utils/customizer";
3
- export { FormSerializable, FormInput, FormSelect, FormUpload, FormFile, FormGroup, FormModel } from "./ngx-dynamic-form/utils/decorators";
3
+ export { FormSerializable, FormInput, FormSelect, FormUpload, FormFile, FormGroup, FormArray, FormModel } from "./ngx-dynamic-form/utils/decorators";
4
4
  export { addFieldValidators, removeFieldValidators, jsonValidation, requiredValidation, translationValidation, phoneValidation, emailValidation, arrayLengthValidation, minLengthValidation, maxLengthValidation, minValueValidation, maxValueValidation } from "./ngx-dynamic-form/utils/validation";
5
5
  export { replaceSpecialChars, controlValues, controlStatus, convertToDateFormat, convertToDate, getFieldByPath, getFieldsByPredicate, getFieldsByKey, getSelectOptions, replaceFieldArray, clearFieldArray, insertToFieldArray, removeFromFieldArray, setFieldDefault, setFieldProps, setFieldProp, setFieldHidden, setFieldDisabled, setFieldHooks, MIN_INPUT_NUM, MAX_INPUT_NUM, EDITOR_FORMATS } from "./ngx-dynamic-form/utils/misc";
6
6
  export { DynamicFormBuilderService } from "./ngx-dynamic-form/services/dynamic-form-builder.service";