@sotoa-ui/dynamic-form 0.0.1
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sotoa-ui-dynamic-form.mjs","sources":["../../../../projects/sotoa-ui/dynamic-form/core/services/conditions.service.ts","../../../../projects/sotoa-ui/dynamic-form/core/services/dynamic-form.service.ts","../../../../projects/sotoa-ui/dynamic-form/core/abstract-field/abstract-field.component.ts","../../../../projects/sotoa-ui/dynamic-form/core/abstract-field/abstract-control-field.component.ts","../../../../projects/sotoa-ui/dynamic-form/core/models/autocomplete-attribute.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/div-text/div-text.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/div-text/div-text.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-checkbox/field-checkbox.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-checkbox/field-checkbox.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-input/field-input.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-input/field-input.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/group/group.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/group/group.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/array/array.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/array/array.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/row/row.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/row/row.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-password/password-validators.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-password/field-password.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-password/field-password.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-radio-button/field-radio-button.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-radio-button/field-radio-button.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-select/field-select.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-select/field-select.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-textarea/field-textarea.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-textarea/field-textarea.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-toggle/field-toggle.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-toggle/field-toggle.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/dynamic-field.directive.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form/dynamic-form.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form/dynamic-form.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/div-text/div-text.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/div-text/div-text.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-checkbox/field-checkbox.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-checkbox/field-checkbox.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-input/field-input.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-input/field-input.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/group/group.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/group/group.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/array/array.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/array/array.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/row/row.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/row/row.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-password/password-validators.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-password/field-password.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-password/field-password.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-radio-button/field-radio-button.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-radio-button/field-radio-button.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-select/field-select.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-select/field-select.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-textarea/field-textarea.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-textarea/field-textarea.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-toggle/field-toggle.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/field-toggle/field-toggle.component.html","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/components/dynamic-field.directive.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/dynamic-form/dynamic-form.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-dsfr/dynamic-form/dynamic-form.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/div-text/div-text.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/div-text/div-text.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-checkbox/field-checkbox.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-checkbox/field-checkbox.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-input/field-input.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-input/field-input.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/group/group.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/group/group.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/array/array.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/array/array.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/row/row.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/row/row.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-password/password-validators.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-password/field-password.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-password/field-password.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-radio-button/field-radio-button.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-radio-button/field-radio-button.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-select/field-select.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-select/field-select.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-toggle/field-toggle.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-toggle/field-toggle.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-textarea/field-textarea.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/field-textarea/field-textarea.component.html","../../../../projects/sotoa-ui/dynamic-form/type-classic/components/dynamic-field.directive.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/dynamic-form/dynamic-form.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-classic/dynamic-form/dynamic-form.component.html","../../../../projects/sotoa-ui/dynamic-form/sotoa-ui-dynamic-form.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\nimport {AcValidator} from \"../models/validator\";\r\nimport {DynamicFormData} from \"../models/field-config\";\r\nimport {AcCondition} from \"../models/todo/condition\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConditionsService {\r\n\r\n constructor() {\r\n }\r\n\r\n\r\n checkValidationConditions(\r\n validationConditions: { fieldId: string; validation: AcValidator }[],\r\n dynamicFormDatas: DynamicFormData\r\n ) {\r\n for (const cond of validationConditions) {\r\n const fieldPath = dynamicFormDatas.idPathMap.get(cond.fieldId);\r\n console.log(fieldPath);\r\n if (fieldPath) {\r\n for (let instance of fieldPath) {\r\n const field = dynamicFormDatas.pathFieldConfigMap.get(instance);\r\n console.log(field);\r\n /*\r\n if (field) {\r\n const isConditionOk = this.checkCondition(cond.validation.condition!, pathFieldMap, idPathMap, instance.arrayCode, instance.arrayInstance);\r\n this.setValidation(field, cond.validation, isConditionOk);\r\n }\r\n\r\n */\r\n }\r\n }\r\n /*\r\n else if (fieldPath) {\r\n const field = pathFieldMap.get(fieldPath);\r\n if (field && field.control) {\r\n const isConditionOk = this.checkCondition(cond.validation.condition!, pathFieldMap, idPathMap, null, null);\r\n this.setValidation(field, cond.validation, isConditionOk);\r\n }\r\n }\r\n\r\n */\r\n }\r\n }\r\n\r\n /*\r\n setValidation(field: FormField, validation: AcValidator, isConditionOk: boolean) {\r\n if (isConditionOk) {\r\n field.control!.addValidators(validation.validator!);\r\n } else {\r\n field.control!.removeValidators(validation.validator!);\r\n }\r\n field.control!.updateValueAndValidity({emitEvent: false});\r\n }\r\n */\r\n\r\n checkDisplayConditions(\r\n displayConditions: { fieldId: string; condition: AcCondition }[],\r\n dynamicFormDatas: DynamicFormData\r\n ) {\r\n for (const cond of displayConditions) {\r\n const fieldPath = dynamicFormDatas.idPathMap.get(cond.fieldId);\r\n console.log(fieldPath);\r\n /*\r\n if (isArray(fieldPath)) {\r\n for (let instance of fieldPath) {\r\n const field = pathFieldMap.get(instance.path);\r\n if (field) {\r\n const isConditionKo = !this.checkCondition(cond.condition, pathFieldMap, idPathMap, instance.arrayCode, instance.arrayInstance);\r\n this.setHidden(field, isConditionKo);\r\n }\r\n }\r\n } else if (fieldPath) {\r\n const field = pathFieldMap.get(fieldPath);\r\n if (field) {\r\n const isConditionKo = !this.checkCondition(cond.condition, pathFieldMap, idPathMap, null, null);\r\n this.setHidden(field, isConditionKo);\r\n }\r\n }\r\n\r\n */\r\n }\r\n }\r\n\r\n /*\r\n setHidden(field: FormField, isConditionKo: boolean) {\r\n if (isConditionKo != field.config.hidden) {\r\n field.config.hidden = isConditionKo;\r\n if (isConditionKo) {\r\n field.control?.reset();\r\n }\r\n }\r\n }\r\n\r\n checkCondition(condition: AcCondition,\r\n pathFieldMap: PathFieldMap,\r\n idPathMap: IdPathMap,\r\n arrayCode: string | null,\r\n arrayInstance: number | null): boolean {\r\n let isOk = false;\r\n for (const item of condition.items) { // AcCondition | AcExpression\r\n if (item.type === 'expression') {\r\n isOk = this.checkExpression(item as AcExpression, pathFieldMap, idPathMap, arrayCode, arrayInstance);\r\n } else {\r\n isOk = this.checkCondition(item as AcCondition, pathFieldMap, idPathMap, arrayCode, arrayInstance);\r\n }\r\n if ((condition.logicOperator === AcLogicOperatorEnum.OR && isOk)\r\n || (condition.logicOperator === AcLogicOperatorEnum.AND && !isOk)) {\r\n break;\r\n }\r\n }\r\n return isOk;\r\n }\r\n\r\n checkExpression(item: AcExpression,\r\n pathFieldMap: PathFieldMap,\r\n idPathMap: IdPathMap,\r\n arrayCode: string | null,\r\n arrayInstance: number | null): boolean {\r\n let isOk = false;\r\n const fieldPath = idPathMap.get(item.fieldId);\r\n let path;\r\n if (isArray(fieldPath)) {\r\n const f = fieldPath.filter(x => x.arrayInstance === arrayInstance && x.arrayCode === arrayCode)[0];\r\n path = f.path;\r\n } else {\r\n path = fieldPath;\r\n }\r\n if (path && pathFieldMap.get(path)) {\r\n isOk = this.evalExpression(pathFieldMap.get(path)!, item.operator, item.value);\r\n }\r\n return isOk;\r\n }\r\n\r\n evalExpression(field: FormField, operator: AcExpressionOperatorEnum, refValue: any): boolean {\r\n let isOk = false;\r\n const fieldValue = field.control?.value;\r\n if (operator === AcExpressionOperatorEnum.EQUALS) {\r\n if (refValue === fieldValue) {\r\n isOk = true;\r\n }\r\n }\r\n return isOk;\r\n }\r\n\r\n */\r\n}\r\n","import {DestroyRef, inject, Injectable} from \"@angular/core\";\nimport {AbstractControlOptions, FormArray, FormBuilder, FormControl, FormGroup} from \"@angular/forms\";\n\nimport {AcControlConfig} from \"../models/control-config\";\nimport {AcValidator} from \"../models/validator\";\nimport {AcTextConfig} from \"../models/text-config\";\nimport {AcGroupConfig} from \"../models/group-config\";\nimport {AcFieldConfig, DynamicFormData, UpdateOnType} from \"../models/field-config\";\nimport {AcArrayConfig} from \"../models/array-config\";\nimport {StepConfig} from \"../models/todo/step-config\";\nimport * as _ from \"lodash-es\";\nimport {AcCondition} from \"../models/todo/condition\";\nimport {ConditionsService} from \"./conditions.service\";\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\n@Injectable({\n providedIn: null\n})\nexport class DynamicFormService {\n private readonly fb: FormBuilder = inject(FormBuilder);\n private readonly conditionsService: ConditionsService = inject(ConditionsService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly separator: string = \".\";\n data?: DynamicFormData;\n form?: FormGroup;\n displayConditions: { fieldId: string; condition: AcCondition }[] = [];\n validationConditions: { fieldId: string; validation: AcValidator }[] = [];\n\n createForm(\n fields: (AcFieldConfig | AcTextConfig)[],\n validations: AcValidator[] | undefined,\n updateOn: UpdateOnType,\n initialValues: any\n ): void {\n this.data = {\n fields,\n updateOn,\n idPathMap: new Map(),\n pathFieldConfigMap: new Map(),\n pathControlMap: new Map(),\n };\n this.form = this.createGroup(fields, null, initialValues);\n if (validations) {\n for (const valid of validations) {\n if (valid.validator) {\n this.form.addValidators(valid.validator);\n }\n }\n }\n this.setCondition();\n }\n\n createFormStepper(\n steps: StepConfig[],\n validations: AcValidator[] | undefined,\n updateOn: UpdateOnType,\n initialValues: any\n ): void {\n this.data = {\n fields: steps,\n updateOn,\n idPathMap: new Map(),\n pathFieldConfigMap: new Map(),\n pathControlMap: new Map(),\n };\n const config: AbstractControlOptions = updateOn ? {updateOn} : {updateOn: \"change\"};\n this.form = this.fb.group({}, config);\n steps.forEach((step) => {\n this.form!.addControl(step.name, this.createGroup(step.fields, null, initialValues));\n });\n if (validations) {\n for (const valid of validations) {\n if (valid.validator) {\n this.form.addValidators(valid.validator);\n }\n }\n }\n this.setCondition();\n }\n\n setCondition() {\n if (this.displayConditions.length > 0 || this.validationConditions.length > 0) {\n this.conditionsService.checkDisplayConditions(this.displayConditions, this.data!);\n this.conditionsService.checkValidationConditions(this.validationConditions, this.data!);\n this.form!.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.displayConditions.length > 0) {\n this.conditionsService.checkDisplayConditions(this.displayConditions, this.data!);\n }\n if (this.validationConditions.length > 0) {\n this.conditionsService.checkValidationConditions(this.validationConditions, this.data!);\n }\n });\n }\n }\n\n createGroup(\n fields: (AcFieldConfig | AcTextConfig)[],\n parentPath: string | null,\n initialValues: any\n ) {\n const config: AbstractControlOptions = {updateOn: this.data?.updateOn ?? \"change\"};\n const group = this.fb.group({}, config);\n fields.forEach((config) => {\n this.treatField(config, group, parentPath, initialValues);\n });\n return group;\n }\n\n treatField(\n config: AcFieldConfig | AcTextConfig,\n group: FormGroup,\n parentPath: string | null,\n initialValues: any\n ) {\n const path = (parentPath ? parentPath + this.separator : \"\") + config.name;\n if (!config.id) {\n config.id = config.name;\n }\n if (config.displayCondition) {\n this.displayConditions.push({\n fieldId: config.id,\n condition: config.displayCondition\n });\n }\n if (config.type !== \"text\" && config.type !== \"row\" && config.type !== \"tabs\" && config.validations) {\n config.validations.forEach(val => {\n if (val.condition) {\n this.validationConditions.push({\n fieldId: config.id!,\n validation: val\n });\n }\n })\n }\n if (config.type === \"text\") {\n this.setFormFieldMapItem(path, config, null);\n } else if (config.type === \"group\") {\n group.addControl(config.name, this.createGroupField(config, parentPath, initialValues));\n } else if (config.type === \"array\") {\n group.addControl(config.name, this.createArray(config, parentPath, initialValues));\n } else if (config.type === \"row\") {\n this.setFormFieldMapItem(path, config, null);\n config.fields.forEach((child) => {\n this.treatField(child, group, parentPath, initialValues);\n });\n } else if (config.type === \"tabs\") {\n const control = this.createGroup(\n config.tabs.map((x) => x.field),\n parentPath,\n initialValues ? initialValues[config.name] : null\n );\n group.addControl(config.name, control);\n this.setFormFieldMapItem(path, config, control);\n } else {\n const control = this.createControl(config, initialValues);\n this.setFormFieldMapItem(path, config, control);\n group.addControl(config.name, control);\n }\n }\n\n createGroupField(\n groupConfig: AcGroupConfig,\n parentPath: string | null,\n initialValues: any\n ) {\n const path = (parentPath ? parentPath + this.separator : \"\") + groupConfig.name;\n const g: FormGroup = this.createGroup(groupConfig.fields, path, initialValues ? initialValues[groupConfig.name] : null);\n if (groupConfig.validations) {\n const val = groupConfig.validations.filter((x: AcValidator) => x.validator).map((x: AcValidator) => x.validator);\n if (val) {\n // @ts-ignore\n g.addValidators(val);\n }\n\n const asyncVal = groupConfig.validations.filter((x: AcValidator) => x.asyncValidator).map((x: AcValidator) => x.asyncValidator);\n if (asyncVal) {\n // @ts-ignore\n g.addAsyncValidators(asyncVal);\n }\n }\n this.setFormFieldMapItem(path, groupConfig, g);\n return g;\n }\n\n createArrayInstance(arrayConfig: AcArrayConfig, arrayPath: string, instanceNumber: number, initialValues: any): FormGroup {\n const fields = _.cloneDeep(arrayConfig.field.fields);\n const grp = this.createGroup(fields, `${arrayPath}[${instanceNumber}]`, initialValues);\n if (!arrayConfig.instances) {\n arrayConfig.instances = [];\n }\n arrayConfig.instances.push({\n number: instanceNumber,\n group: grp,\n fields,\n });\n return grp;\n }\n\n createArray(\n arrayConfig: AcArrayConfig,\n parentPath: string | null,\n initialValues: any\n ): FormArray {\n const path = (parentPath ? parentPath + this.separator : \"\") + arrayConfig.name;\n arrayConfig.instances = [];\n const list: FormGroup[] = [];\n let value = arrayConfig.value;\n if (initialValues && Object.keys(initialValues).indexOf(arrayConfig.name) !== -1) {\n value = initialValues[arrayConfig.name];\n }\n let i = 0;\n if (value) {\n for (const item of value) {\n list.push(this.createArrayInstance(arrayConfig, path, i, item));\n i++;\n }\n }\n if (arrayConfig.minNbRow && arrayConfig.minNbRow > list.length) {\n while (arrayConfig.minNbRow > list.length) {\n list.push(this.createArrayInstance(arrayConfig, path, i, null));\n i++;\n }\n }\n\n const formArray: FormArray = this.fb.array(list);\n if (arrayConfig.validations) {\n const val = arrayConfig.validations.filter((x: AcValidator) => x.validator).map((x: AcValidator) => x.validator);\n if (val) {\n // @ts-ignore\n formArray.addValidators(val);\n }\n\n const asyncVal = arrayConfig.validations.filter((x: AcValidator) => x.asyncValidator).map((x: AcValidator) => x.asyncValidator);\n if (asyncVal) {\n // @ts-ignore\n formArray.addAsyncValidators(asyncVal);\n }\n }\n this.setFormFieldMapItem(path, arrayConfig, formArray);\n return formArray;\n }\n\n setFormFieldMapItem(\n path: string,\n config: AcFieldConfig | AcTextConfig | StepConfig,\n control: FormControl | FormGroup | FormArray | null\n ) {\n if (control) {\n this.data!.pathControlMap.set(path, control);\n }\n this.data!.pathFieldConfigMap.set(path, config);\n if (!this.data!.idPathMap.get(config.id!)) {\n this.data!.idPathMap.set(config.id!, []);\n }\n this.data!.idPathMap.get(config.id!)?.push(path);\n }\n\n createControl(config: AcControlConfig, initialValues: any) {\n let {disabled, validations, value} = config;\n if (initialValues && Object.keys(initialValues).indexOf(config.name) !== -1) {\n value = initialValues[config.name];\n }\n if (value === undefined) {\n value = null;\n }\n const control = this.fb.control({disabled, value});\n if (validations) {\n const val = validations.filter((x: AcValidator) => x.validator).map((x: AcValidator) => x.validator);\n if (val) {\n // @ts-ignore\n control.addValidators(val);\n }\n\n const asyncVal = validations.filter((x: AcValidator) => x.asyncValidator).map((x: AcValidator) => x.asyncValidator);\n if (asyncVal) {\n // @ts-ignore\n control.addAsyncValidators(asyncVal);\n }\n }\n return control;\n }\n\n}\n","import {Component, inject} from '@angular/core';\nimport {AbstractControl, FormGroup, Validators} from '@angular/forms';\nimport {AbstractFieldConfig} from '../models/abstract-field-config';\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\n\n@Component({standalone: true, template: ''})\nexport class AbstractFieldComponent<T extends AbstractFieldConfig> {\n path!: string;\n field!: T;\n group!: FormGroup;\n instancePath?: string;\n protected dynamicFormService: DynamicFormService = inject(DynamicFormService);\n\n get control(): AbstractControl<any, any> | null {\n return this.group && this.field && this.field.name ? this.group.get(this.field.name) : null;\n }\n\n get required(): boolean | undefined {\n return this.group.get(this.field.name)?.hasValidator(Validators.required);\n }\n}\n","import {Component, DestroyRef, inject, OnInit} from '@angular/core';\nimport {distinctUntilChanged} from 'rxjs';\nimport {AbstractFieldComponent} from './abstract-field.component';\nimport {AbstractControlConfig} from '../models/abstract-control-config';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\n@Component({standalone: true, template: ''})\nexport class AbstractControlFieldComponent<T extends AbstractControlConfig> extends AbstractFieldComponent<T> implements OnInit {\n protected destroyRef = inject(DestroyRef);\n uuid!: string;\n\n ngOnInit(): void {\n this.uuid = 'sot-field-' + this.field.name + '-' + (Math.random() + 1).toString(36).substring(7);\n if (this.field.onValueChanges) {\n const control = this.group.get(this.field.name);\n if (control) {\n this.field.onValueChanges(control.value, this.dynamicFormService.data!, this.group, this.instancePath);\n control.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n this.field.onValueChanges!(value, this.dynamicFormService.data!, this.group, this.instancePath);\n });\n }\n }\n }\n\n}\n","/**\n * Liste des valeurs possible pour l'attribut autocomplete\n * (https://accessibilite.numerique.gouv.fr/methode/glossaire/#liste-des-valeurs-possibles-pour-l-attribut-autocomplete)\n */\nexport enum AutocompleteAttribute {\n Off = \"off\",\n\n /** Nom complet */\n Name = \"name\",\n\n /** Abréviation, civilité ou titre */\n HonorificPrefix = \"honorific-prefix\",\n\n /** Prénom */\n GivenName = \"given-name\",\n\n /** Prénoms additionnels */\n AdditionalName = \"additional-name\",\n\n /** Nom de famille */\n FamilyName = \"family-name\",\n\n /** Suffixe honorifique */\n HonorificSuffix = \"honorific-suffix\",\n\n /** Surnom, diminutif */\n Nickname = \"nickname\",\n\n /** Fonction, intitulé de poste */\n OrganizationTitle = \"organization-title\",\n\n /** Nom d’utilisateur */\n Username = \"username\",\n\n /**\n * Nouveau mot de passe (par exemple, lors de la création d’un compte\n * ou d’un changement de mot de passe)\n */\n NewPassword = \"new-password\",\n\n /**\n * Mot de passe actuel pour le compte identifié par le champ username\n * (par exemple, lors d’une connexion)\n */\n CurrentPassword = \"current-password\",\n\n /**\n * Nom de l’organisation correspondant à la personne, à l’adresse\n * ou à l’information de contact dans les autres champs associés avec ce champ\n */\n Organization = \"organization\",\n\n /** Adresse postale (multiligne, nouvelles lignes conservées) */\n StreetAddress = \"street-address\",\n\n /** Adresse postale (une ligne par champ, ligne 1) */\n AddressLine1 = \"address-line1\",\n\n /** Adresse postale (une ligne par champ, ligne 2) */\n AddressLine2 = \"address-line2\",\n\n /** Adresse postale (une ligne par champ, ligne 3) */\n AddressLine3 = \"address-line3\",\n\n /** Le niveau administratif le plus détaillé, pour les adresses pourvues de quatre niveaux administratifs */\n AddressLevel4 = \"address-level4\",\n\n /** Le troisième niveau administratif, pour les adresses pourvues d’au moins trois niveaux administratifs */\n AddressLevel3 = \"address-level3\",\n\n /** Le deuxième niveau administratif, pour les adresses pourvues d’au moins deux niveaux administratifs */\n AddressLevel2 = \"address-level2\",\n\n /** Le plus large niveau administratif d’une adresse, c’est-à-dire la province dans laquelle se trouve la localité */\n AddressLevel1 = \"address-level1\",\n\n /** Code pays */\n Country = \"country\",\n\n /** Nom de pays */\n CountryName = \"country-name\",\n\n /**\n * Code postal, code CEDEX (si le CEDEX est présent, ajouter “CEDEX”,\n * et ce qui le suit doit être ajouté dans le champ address-level2)\n */\n PostalCode = \"postal-code\",\n\n /** Nom complet figurant sur le moyen de paiement */\n CcName = \"cc-name\",\n\n /** Prénom figurant sur le moyen de paiement */\n CcGivenName = \"cc-given-name\",\n\n /** Prénoms additionnels figurant sur le moyen de paiement */\n CcAdditionalName = \"cc-additional-name\",\n\n /** Nom de famille figurant sur le moyen de paiement */\n CcFamilyName = \"cc-family-name\",\n\n /** Code identifiant le moyen de paiement (e.g., un numéro de carte bancaire) */\n CcNumber = \"cc-number\",\n\n /** Date d’expiration du moyen de paiement */\n CcExp = \"cc-exp\",\n\n /** Le mois de la date d’expiration du moyen de paiement */\n CcExpMonth = \"cc-exp-month\",\n\n /** L’année de la date d’expiration du moyen de paiement */\n CcExpYear = \"cc-exp-year\",\n\n /**\n * Code de sécurité du moyen de paiement (also known as the card security code (CSC),\n * card validation code (CVC), card verification value (CVV), signature panel code (SPC),\n * credit card ID (CCID), etc.)\n */\n CcCsc = \"cc-csc\",\n\n /** Type de moyen de paiement (e.g. Visa) */\n CcType = \"cc-type\",\n\n /** La devise qui a la préférence de l’utilisateur lors d’une transaction */\n TransactionCurrency = \"transaction-currency\",\n\n /** Le montant qui a la préférence de l’utilisateur lors d’une transaction (e.g., en réponse à une enchère ou à un prix soldé) */\n TransactionAmount = \"transaction-amount\",\n\n /** Langue préférée */\n Language = \"language\",\n\n /** Date d’anniversaire */\n Bday = \"bday\",\n\n /** Le jour de la date d’anniversaire */\n BdayDay = \"bday-day\",\n\n /** Le mois de la date d’anniversaire */\n BdayMonth = \"bday-month\",\n\n /** L’année de la date d’anniversaire */\n BdayYear = \"bday-year\",\n\n /** Identité de genre */\n Sex = \"sex\",\n\n /**\n * Page d’accueil ou une autre page Web correspondant à l’organisation, la personne,\n * l’adresse ou à l’information de contact dans les autres champs associés avec ce champ\n */\n Url = \"url\",\n\n /**\n * Photographie, icône ou une autre image correspondant à l’organisation, la personne,\n * l’adresse ou à l’information de contact dans les autres champs associés avec ce champ\n */\n Photo = \"photo\",\n\n /** Numéro de téléphone complet, y compris le code pays */\n Tel = \"tel\",\n\n /** Code pays du numéro de téléphone */\n TelCountryCode = \"tel-country-code\",\n\n /** Numéro de téléphone sans la partie code pays, avec un préfixe interne au pays, s’il y a lieu */\n TelNational = \"tel-national\",\n\n /** Indicatif régional du numéro de téléphone, avec un préfixe interne au pays, s’il y a lieu */\n TelAreaCode = \"tel-area-code\",\n\n /** Numéro de téléphone sans la partie code pays ni l’indicatif régional */\n TelLocal = \"tel-local\",\n\n /**\n * La première partie du composant du numéro de téléphone qui suit l’indicatif régional,\n * lorsque ce composant est scindé en deux parties\n */\n TelLocalPrefix = \"tel-local-prefix\",\n\n /**\n * La seconde partie du composant du numéro de téléphone qui suit l’indicatif régional,\n * lorsque ce composant est scindé en deux parties\n */\n TelLocalSuffix = \"tel-local-suffix\",\n\n /** Numéro de téléphone d’un poste interne */\n TelExtension = \"tel-extension\",\n\n /** Adresse électronique */\n Email = \"email\",\n\n /**\n * URL correspondant d’un protocole de messagerie instantanée\n * (par exemple, \"aim:goim?screenname=example\" ou \"xmpp:fred@example.net\")\n */\n Impp = \"impp\",\n}\n","import { Component } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {AbstractFieldComponent, AcTextConfig} from '../../../core';\n\n@Component({\n selector: 'sot-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class AcDivTextComponent extends AbstractFieldComponent<AcTextConfig> {}\n","<div class=\"sot-formfield sot-formfield-text\" [ngClass]=\"field.className\">\n <div [innerHTML]=\"field.label\"></div>\n @if(field.description) {\n <p [innerHTML]=\"field.description\"></p>\n }\n</div>\n","import {Component} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatError} from '@angular/material/form-field';\nimport {AbstractControlFieldComponent, AcFieldCheckboxConfig} from '../../../core';\n\n@Component({\n selector: 'sot-field-checkbox',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatError],\n templateUrl: './field-checkbox.component.html',\n styleUrls: ['./field-checkbox.component.scss'],\n})\nexport class AcFieldCheckboxComponent extends AbstractControlFieldComponent<AcFieldCheckboxConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-checkbox\" [ngClass]=\"field.className\">\r\n <div [formGroup]=\"group\">\r\n <mat-checkbox [formControlName]=\"field.name\"\r\n [id]=\"uuid\"\r\n [aria-describedby]=\"'error-' + uuid\"\r\n >\r\n <div [ngClass]=\"field.labelClassName\">\r\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"sot-label-description\">{{ field.description }}</span>\r\n }\r\n </div>\r\n </mat-checkbox>\r\n\r\n <div [attr.id]=\"'error-' + uuid\" class=\"error-wrapper\" matError>\r\n @if (control && !control.untouched && control.invalid) {\r\n @for (validation of field.validations; track validation) {\r\n @if (control.hasError(validation.name)) {\r\n {{ validation.message }}\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component, OnInit} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldInputConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatButtonModule} from '@angular/material/button';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\n@Component({\n selector: 'sot-field-input',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatInputModule, MatButtonModule],\n templateUrl: './field-input.component.html',\n styleUrls: ['./field-input.component.scss'],\n})\nexport class AcFieldInputComponent extends AbstractControlFieldComponent<AcFieldInputConfig> implements OnInit {\n inputType: string = 'text';\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.inputType = this.field.inputType ?? 'text';\n const control = this.group.get(this.field.name);\n if (control) {\n control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (value?.length == 0) {\n control.setValue(null);\n }\n });\n }\n }\n}\n","<div\r\n class=\"sot-formfield sot-formfield-input\"\r\n [ngClass]=\"field.className\"\r\n [formGroup]=\"group\"\r\n>\r\n <mat-form-field>\r\n <mat-label><span [innerHTML]=\"field.label\"></span></mat-label>\r\n <input matInput\r\n [id]=\"uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field.autocomplete ?? 'off'\"\r\n [type]=\"inputType\"\r\n [readonly]=\"field.readonly\"\r\n [maxlength]=\"field.maxlength ?? 100000000\"\r\n >\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{prefix.label}}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-suffix\" matSuffix>\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{suffix.label}}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n\r\n @if (field.description) {\r\n <mat-hint align=\"start\"> {{ field.description }}</mat-hint>\r\n }\r\n\r\n @if (control && !control.untouched && control.invalid) {\r\n <mat-error>\r\n @for (validation of field.validations; track validation) {\r\n @if (control.hasError(validation.name)) {\r\n {{ validation.message }}\r\n }\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n\r\n","import {Component, forwardRef} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {AbstractControlFieldComponent, AcGroupConfig} from '../../../core';\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle\n} from '@angular/material/expansion';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\n\n@Component({\n selector: 'sot-group',\n standalone: true,\n imports: [\n forwardRef(() => AcDynamicFieldDirective),\n NgClass,\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n NgTemplateOutlet\n ],\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n})\nexport class AcGroupComponent extends AbstractControlFieldComponent<AcGroupConfig> {\n get subGroup() {\n return this.group.controls[this.field.name] as FormGroup;\n }\n}\n","<div class=\"sot-formfield sot-formfield-group\" [ngClass]=\"field.className\">\n <fieldset class=\"sot-formfield\">\n @if (field.accordion) {\n <mat-accordion class=\"sot-formfield-array-accordion\" multi>\n <mat-expansion-panel [expanded]=\"field.opened\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <legend class=\"sot-formfield-group-label\">{{ field.label }}</legend>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @if (field.description) {\n <p [innerHTML]=\"field.description\"></p>\n }\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </mat-expansion-panel>\n </mat-accordion>\n\n } @else {\n <legend\n class=\"sot-fieldset-legend\"\n [ngClass]=\"field.labelClassName\">\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n @if (field.description) {\n <span class=\"sot-label-description\">{{ field.description }}</span>\n }\n </legend>\n <div class=\"sot-fieldset-content\">\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n }\n </fieldset>\n</div>\n\n<ng-template #groupFields>\n @for (f of field.fields; track f.type + f.name) {\n <div [hidden]=\"f.hidden\" [ngClass]=\"f.hostClassName\">\n <ng-container sotDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"subGroup\"\n [instancePath]=\"instancePath\"\n ></ng-container>\n </div>\n }\n <div\n class=\"sot-messages-group\"\n [attr.id]=\"'sot-group-' + uuid + '-error'\"\n aria-live=\"assertive\">\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <p class=\"sot-message sot-message--error\">\n {{ validation.message }}\n </p>\n }\n }\n </div>\n</ng-template>\n","import {ChangeDetectorRef, Component, forwardRef, inject} from \"@angular/core\";\nimport {FormArray, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {\n AbstractControlFieldComponent,\n AcArrayConfig,\n AcFieldConfig,\n AcTextConfig,\n DynamicFormService\n} from '../../../core';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {MatExpansionModule} from \"@angular/material/expansion\";\nimport {NgClass, NgTemplateOutlet} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton} from \"@angular/material/button\";\nimport {MatCardModule} from \"@angular/material/card\";\nimport {MatError} from \"@angular/material/form-field\";\nimport * as _ from \"lodash-es\";\n\n@Component({\n selector: \"sot-array\",\n standalone: true,\n imports: [\n forwardRef(() => AcDynamicFieldDirective),\n MatExpansionModule,\n NgClass,\n MatIcon,\n MatButton,\n MatCardModule,\n ReactiveFormsModule,\n MatError,\n NgTemplateOutlet\n ],\n templateUrl: \"./array.component.html\",\n styleUrls: [\"./array.component.scss\"]\n})\nexport class AcArrayComponent extends AbstractControlFieldComponent<AcArrayConfig> {\n private readonly dynamicService: DynamicFormService = inject(DynamicFormService);\n private readonly ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n get array() {\n return this.group.controls[this.field.name] as FormArray;\n }\n\n constructor() {\n super();\n }\n\n addItem() {\n const i = this.field.instances!.length > 0 ? this.field.instances![this.field.instances!.length - 1].number + 1 : 0;\n const fields = _.cloneDeep(this.field.field.fields);\n const grp = this.dynamicService.createGroup(fields, `${this.path}[${i}]`, null);\n this.field.instances!.push({\n number: i,\n group: grp,\n fields\n });\n this.array.push(grp);\n this.ref.detectChanges();\n }\n\n deleteItem(index: number, inst: {\n number: number;\n group: FormGroup,\n fields: (AcFieldConfig | AcTextConfig)[]\n }) {\n /*\n TODO\n this.field.instances!.splice(index, 1);\n for (const key of this.dynamicService.pathFieldMap.keys()) {\n if (key.startsWith(`${this.path}[${inst.number}]`)) {\n this.dynamicFormService.pathFieldMap.delete(key);\n }\n }\n\n */\n this.array.removeAt(index);\n this.ref.detectChanges();\n }\n\n}\n","<div class=\"sot-formfield sot-formfield-array\" [ngClass]=\"field.className\">\n <fieldset class=\"sot-formfield-wrapper sot-fieldset\">\n @if (field.accordion) {\n <mat-accordion class=\"sot-formfield-array-accordion\" multi>\n <mat-expansion-panel [expanded]=\"field.opened\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <legend class=\"sot-formfield-array-label\">{{ field.label }}</legend>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @if (field.description) {\n <p [innerHTML]=\"field.description\"></p>\n }\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </mat-expansion-panel>\n </mat-accordion>\n } @else {\n <legend class=\"sot-formfield-array-label\">{{ field.label }}</legend>\n @if (field.description) {\n <p [innerHTML]=\"field.description\"></p>\n }\n <div class=\"sot-formfield-array-content\">\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n }\n </fieldset>\n</div>\n\n<ng-template #groupFields>\n <div class=\"sot-formfield-array\" [formGroup]=\"group\">\n <div [formArrayName]=\"field.name\">\n @for (inst of field.instances; track inst; let i = $index) {\n <fieldset class=\"sot-formfield-array-element\"\n [ngClass]=\"field.elementClassName\">\n <legend class=\"sot-formfield-array-element-label\">\n {{ field.itemLabel ?? 'Item' }} {{ inst.number + 1 }}\n </legend>\n <div class=\"sot-formfield-array-element-content\"\n [ngClass]=\"field.elementContentClassName\">\n @for (f of inst.fields; track f.name + f.type) {\n <div [hidden]=\"f.hidden\" [ngClass]=\"f.hostClassName\">\n <ng-container sotDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"inst.group\"\n [instancePath]=\"path + '[' + inst.number + ']'\"\n ></ng-container>\n </div>\n }\n </div>\n <div class=\"sot-formfield-array-element-action\">\n @if (!field.disabled && (!field.minNbRow || field.minNbRow < array.controls.length)) {\n <button type=\"button\" mat-raised-button (click)=\"deleteItem(i, inst)\">\n @if (field.deleteButton && field.deleteButton.matIcon) {\n <mat-icon [title]=\"field.deleteButton!.title ? field.deleteButton!.title : ''\">\n {{ field.deleteButton!.matIcon }}\n </mat-icon>\n }\n {{ field.deleteButton ? field.deleteButton.label : 'Supprimer' }}\n </button>\n }\n </div>\n </fieldset>\n }\n @if (!field.disabled && (!field.maxNbRow || field.maxNbRow > array.controls.length)) {\n <div class=\"sot-formfield-array-add-button\">\n <button mat-raised-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addItem()\"\n >\n @if (field.addButton && field.addButton.matIcon) {\n <mat-icon [title]=\"field.addButton!.title ? field.addButton!.title : ''\">\n {{ field.addButton!.matIcon }}\n </mat-icon>\n }\n {{ field.addButton ? field.addButton.label : 'Ajouter' }}\n </button>\n </div>\n }\n <mat-error>\n @for (validation of field.validations; track validation) {\n @if (array && !array.untouched && array.hasError(validation.name)) {\n {{ validation.message }}\n }\n }\n </mat-error>\n </div>\n </div>\n</ng-template>\n","import {Component, forwardRef} from '@angular/core';\nimport {AbstractFieldComponent, AcRowConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\n\n@Component({\n selector: 'sot-row',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass,\n forwardRef(() => AcDynamicFieldDirective),\n AcDynamicFieldDirective\n ],\n templateUrl: './row.component.html',\n styleUrls: ['./row.component.scss'],\n})\nexport class AcRowComponent extends AbstractFieldComponent<AcRowConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-row\" [ngClass]=\"field.className\">\n @for (f of field.fields; track f.type + f.name) {\n <div\n [hidden]=\"f.hidden\"\n [ngClass]=\"f.hostClassName\">\n <ng-container\n sotDynamicField\n [path]=\"path + '.' + f.name\"\n [type]=\"f.type\"\n [field]=\"f\"\n [group]=\"group\"\n [instancePath]=\"instancePath\"\n >\n </ng-container>\n </div>\n }\n</div>\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\r\n\r\nexport class PasswordValidators {\r\n\r\n static patternValidator(regex: RegExp, error: ValidationErrors): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n const valid = regex.test(control.value);\r\n return valid ? null : error;\r\n };\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldPasswordConfig\n} from '../../../core';\nimport {ReactiveFormsModule, Validators} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatButtonModule} from '@angular/material/button';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {PasswordValidators} from \"./password-validators\";\n\n@Component({\n selector: 'sot-field-password',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatInputModule, MatButtonModule],\n templateUrl: './field-password.component.html',\n styleUrls: ['./field-password.component.scss'],\n})\nexport class AcFieldPasswordComponent extends AbstractControlFieldComponent<AcFieldPasswordConfig> implements OnInit {\n inputType: string = 'password';\n showPasswordLabel?: string;\n hidePasswordLabel?: string;\n iconErrorLabel?: string;\n iconSuccessLabel?: string;\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.showPasswordLabel = this.field.labels?.showPassword ?? \"Show password\";\n this.hidePasswordLabel = this.field.labels?.hidePassword ?? \"Hide password\";\n this.iconSuccessLabel = this.field.labels?.iconSuccess ?? \"Success\";\n this.iconErrorLabel = this.field.labels?.iconError ?? \"Error\";\n if (this.control) {\n this.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (value?.length == 0) {\n this.control!.setValue(null);\n }\n });\n this.setPasswordValidators();\n }\n }\n\n tooglePassword() {\n this.inputType = this.inputType === 'password' ? 'text' : 'password';\n }\n\n get minLengthValid() {\n return this.control!.value && !this.control!.hasError(\"minlength\");\n }\n\n get maxLengthValid() {\n return this.control!.value && !this.control!.hasError(\"maxlength\");\n }\n\n get requiresDigitValid() {\n return this.control!.value && !this.control!.hasError(\"requiresDigit\");\n }\n\n get requiresUppercaseValid() {\n return this.control!.value && !this.control!.hasError(\"requiresUppercase\");\n }\n\n get requiresLowercaseValid() {\n return this.control!.value && !this.control!.hasError(\"requiresLowercase\");\n }\n\n get requiresSpecialCharsValid() {\n return this.control!.value && !this.control!.hasError(\"requiresSpecialChars\");\n }\n\n private setPasswordValidators() {\n if (this.field.minlength) {\n this.control?.addValidators(Validators.minLength(this.field.minlength));\n }\n if (this.field.maxlength) {\n this.control?.addValidators(Validators.maxLength(this.field.maxlength));\n }\n if (this.field.requiresDigit) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[0-9])/, {\n requiresDigit: true\n }))\n }\n if (this.field.requiresUppercase) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[A-Z])/, {\n requiresUppercase: true\n }))\n }\n if (this.field.requiresLowercase) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[a-z])/, {\n requiresLowercase: true\n }))\n }\n if (this.field.requiresSpecialChars) {\n const chars = this.field.specialChars?.join(\"\") ?? \"$@^!%*?&\";\n const regex = \"(?=.*[\" + chars + \"])\";\n this.control?.addValidators(PasswordValidators.patternValidator(new RegExp(regex), {\n requiresSpecialChars: true\n }))\n }\n }\n}\n","<div\r\n class=\"sot-formfield sot-formfield-password\"\r\n [ngClass]=\"field.className\"\r\n [formGroup]=\"group\"\r\n>\r\n <mat-form-field>\r\n <mat-label><span [innerHTML]=\"field.label\"></span></mat-label>\r\n <input matInput\r\n [id]=\"uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field.autocomplete ?? 'off'\"\r\n [type]=\"inputType\"\r\n [aria-describedby]=\"uuid + '-description'\"\r\n >\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"tooglePassword()\"\r\n [attr.aria-label]=\"inputType === 'password' ? showPasswordLabel : hidePasswordLabel\"\r\n [attr.aria-pressed]=\"inputType === 'password'\">\r\n <mat-icon>{{ inputType === 'password' ? 'visibility_off' : 'visibility' }}</mat-icon>\r\n </button>\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{prefix.label}}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-suffix\" matSuffix>\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{suffix.label}}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n\r\n @if (field.description) {\r\n <mat-hint align=\"start\"> {{ field.description }}</mat-hint>\r\n }\r\n\r\n @if (control && !control.untouched && control.invalid) {\r\n <mat-error>\r\n @for (validation of field.validations; track validation) {\r\n @if (control.hasError(validation.name)) {\r\n {{ validation.message }}\r\n }\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <ul class=\"password-description\" [id]=\"uuid + '-description'\">\r\n @if (field.minlength) {\r\n <li [ngClass]=\"{ 'text-success': minLengthValid, 'text-error': !minLengthValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"minLengthValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.minlength ?? \"Must be at least 8 characters long\" }}\r\n </li>\r\n }\r\n @if (field.maxlength) {\r\n <li [ngClass]=\"{ 'text-success': maxLengthValid, 'text-error': !maxLengthValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"maxLengthValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.maxlength ?? \"Must be at most 8 characters long\" }}\r\n </li>\r\n }\r\n @if (field.requiresDigit) {\r\n <li [ngClass]=\"{ 'text-success': requiresDigitValid, 'text-error': !requiresDigitValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresDigitValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresDigit ?? \"Must contain at least 1 digit\" }}\r\n </li>\r\n }\r\n @if (field.requiresUppercase) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresUppercaseValid, 'text-error': !requiresUppercaseValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresUppercaseValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresUppercase ?? \"Must contain at least 1 uppercase character\" }}\r\n </li>\r\n }\r\n @if (field.requiresLowercase) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresLowercaseValid, 'text-error': !requiresLowercaseValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresLowercaseValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresLowercase ?? \"Must contain at least 1 lowercase character\" }}\r\n </li>\r\n }\r\n @if (field.requiresSpecialChars) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresSpecialCharsValid, 'text-error': !requiresSpecialCharsValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresSpecialCharsValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresSpecialChars ?? \"Must contain at least 1 special character\" }}\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n\r\n","import {Component} from '@angular/core';\nimport {AbstractControlFieldComponent, AcFieldRadioButtonConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatError} from '@angular/material/form-field';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatIconModule} from '@angular/material/icon';\n\n@Component({\n selector: 'sot-field-radio-button',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatRadioModule, MatError, MatTooltipModule, MatIconModule],\n templateUrl: './field-radio-button.component.html',\n styleUrls: ['./field-radio-button.component.scss'],\n})\nexport class AcFieldRadioButtonComponent extends AbstractControlFieldComponent<AcFieldRadioButtonConfig> {\n}\n","<fieldset\r\n class=\"sot-formfield sot-formfield-radiobutton\"\r\n [ngClass]=\"field.className\"\r\n [formGroup]=\"group\"\r\n>\r\n <legend [attr.id]=\"'radiobutton-'+uuid\" class=\"sot-formfield-radiobutton-label\">\r\n {{ field.label }} {{ !!required ? '*' : '' }}\r\n @if (field.description) {\r\n <span class=\"radiobutton-description\">{{ field.description }}</span>\r\n }\r\n </legend>\r\n <mat-radio-group class=\"sot-formfield-radiobutton-content\"\r\n [id]=\"uuid\"\r\n [attr.aria-labelledby]=\"'radiobutton-'+uuid\"\r\n [formControlName]=\"field.name\"\r\n [ngClass]=\"{'verticalAlign': field.verticalAlign, 'horizontalAlign': !field.verticalAlign}\"\r\n >\r\n @if (field.options) {\r\n @for (item of field.options; track item) {\r\n <mat-radio-button\r\n class=\"sot-formfield-radiobutton-item\"\r\n [ngClass]=\"field.radioButtonClassName\"\r\n [value]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [disabled]=\"field.disabledKey ? item[field.disabledKey] : false\">\r\n <span class=\"item-label\">{{ field.labelKey ? item[field.labelKey!] : item }}</span>\r\n @if (field.descriptionKey) {\r\n <span class=\"item-description\">{{ item[field.descriptionKey] }}</span>\r\n }\r\n </mat-radio-button>\r\n }\r\n }\r\n </mat-radio-group>\r\n <mat-error>\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n {{ validation.message }}\r\n }\r\n }\r\n </mat-error>\r\n</fieldset>\r\n","import {Component} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldSelectConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatSelectModule} from '@angular/material/select';\nimport {isObservable} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'sot-field-select',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatSelectModule],\n templateUrl: './field-select.component.html',\n styleUrls: ['./field-select.component.scss'],\n})\nexport class AcFieldSelectComponent extends AbstractControlFieldComponent<AcFieldSelectConfig> {\n options: any[] = [];\n\n override ngOnInit() {\n super.ngOnInit();\n if (isObservable(this.field.options)) {\n this.field.options.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((options: any[]) => {\n this.options = options;\n });\n } else {\n this.options = this.field.options;\n }\n }\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n}\n","<div class=\"sot-formfield sot-formfield-select\"\r\n [ngClass]=\"field.className\"\r\n [formGroup]=\"group\">\r\n <mat-form-field>\r\n <mat-label><span [innerHTML]=\"field.label\"></span></mat-label>\r\n <mat-select\r\n [id]=\"uuid\"\r\n [formControlName]=\"field.name\"\r\n panelClass=\"sot-formfield-select-panel\">\r\n @if (field.resetOption) {\r\n <mat-option [value]=\"undefined\">\r\n {{ field.resetOptionLabel }}\r\n </mat-option>\r\n }\r\n @if (field.options) {\r\n @if (field.groupLabelKey) {\r\n @for (group of options; track group) {\r\n <mat-optgroup [label]=\"field.groupLabelKey ? group[field.groupLabelKey] : ''\">\r\n @if (field.groupOptionsKey && group[field.groupOptionsKey]) {\r\n @for (item of group[field.groupOptionsKey]; track item) {\r\n <mat-option [value]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [disabled]=\"field.disabledKey ? item[field.disabledKey] : false\">\r\n {{ field.labelKey ? item[field.labelKey!] : item }}\r\n </mat-option>\r\n }\r\n }\r\n </mat-optgroup>\r\n }\r\n } @else {\r\n @for (item of options; track item) {\r\n <mat-option [value]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [disabled]=\"field.disabledKey ? item[field.disabledKey] : false\">\r\n {{ field.labelKey ? item[field.labelKey!] : item }}\r\n </mat-option>\r\n }\r\n }\r\n }\r\n </mat-select>\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{ prefix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-suffix\" matSuffix>\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{ suffix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n @if (field.description) {\r\n <mat-hint align=\"start\"> {{ field.description }}</mat-hint>\r\n }\r\n <mat-error>\r\n @if (control && !control.untouched && control.invalid) {\r\n @for (validation of field.validations; track validation) {\r\n @if (control.hasError(validation.name)) {\r\n {{ validation.message }}\r\n }\r\n }\r\n }\r\n </mat-error>\r\n </mat-form-field>\r\n</div>\r\n","import {Component} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldTextareaConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatButtonModule} from '@angular/material/button';\n\n@Component({\n selector: 'sot-field-textarea',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatInputModule, MatButtonModule],\n templateUrl: './field-textarea.component.html',\n styleUrls: ['./field-textarea.component.scss'],\n})\nexport class AcFieldTextareaComponent extends AbstractControlFieldComponent<AcFieldTextareaConfig> {\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!\n );\n }\n }\n}\n","<div\n class=\"sot-formfield sot-formfield-textarea\"\n [ngClass]=\"field.className\"\n [formGroup]=\"group\"\n>\n <mat-form-field>\n <mat-label><span [innerHTML]=\"field.label\"></span></mat-label>\n <textarea matInput\n [id]=\"uuid\"\n [formControlName]=\"field.name\"\n [readonly]=\"field.readonly\"\n [required]=\"!!required\"\n [rows]=\"field.rows\"\n ></textarea>\n\n @for (b of field.prefixes; track b) {\n <span class=\"sot-formfield-prefix\" matPrefix>\n @if (b.action) {\n <button type=\"button\"\n [attr.aria-label]=\"b.actionAriaLabel\"\n (click)=\"buttonAction(b)\"\n >{{b.label}}</button>\n } @else {\n <span [innerHTML]=\"b.label\"></span>\n }\n </span>\n }\n @for (b of field.suffixes; track b) {\n <span class=\"sot-formfield-suffix\" matSuffix>\n @if (b.action) {\n <button type=\"button\"\n [attr.aria-label]=\"b.actionAriaLabel\"\n (click)=\"buttonAction(b)\"\n >{{b.label}}</button>\n } @else {\n <span [innerHTML]=\"b.label\"></span>\n }\n </span>\n }\n @if (field.description) {\n <mat-hint align=\"start\"> {{ field.description }}</mat-hint>\n }\n\n @if (control && !control.untouched && control.invalid) {\n <mat-error>\n @for (validation of field.validations; track validation) {\n @if (control.hasError(validation.name)) {\n {{ validation.message }}\n }\n }\n </mat-error>\n }\n </mat-form-field>\n</div>\n","import {Component} from '@angular/core';\nimport {AbstractControlFieldComponent, AcFieldToggleConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatError} from '@angular/material/form-field';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'sot-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatError, MatSlideToggleModule],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class AcFieldToggleComponent extends AbstractControlFieldComponent<AcFieldToggleConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-toggle\" [ngClass]=\"field.className\">\r\n <div [formGroup]=\"group\">\r\n <mat-slide-toggle\r\n [formControlName]=\"field.name\"\r\n [attr.id]=\"'toggle-' + field.name\"\r\n [labelPosition]=\"field.labelPosition ?? 'after'\"\r\n >\r\n {{ field.label }}\r\n @if (required) {\r\n <span class=\"red\">*</span>\r\n }\r\n </mat-slide-toggle>\r\n\r\n <div class=\"messages-group\" [attr.id]=\"'toggle-' + field.name + '-error'\" aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p>{{ validation.message }}</p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {\n ComponentRef,\n Directive,\n EnvironmentInjector,\n inject,\n input,\n InputSignal,\n OnChanges,\n SimpleChanges,\n Type,\n ViewContainerRef\n} from \"@angular/core\";\nimport {AcDivTextComponent} from \"./div-text/div-text.component\";\nimport {AcFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig} from '../../core';\nimport {AcFieldInputComponent} from './field-input/field-input.component';\nimport {AcGroupComponent} from './group/group.component';\nimport {AcArrayComponent} from './array/array.component';\nimport {AcRowComponent} from './row/row.component';\nimport {AcFieldPasswordComponent} from './field-password/field-password.component';\nimport {AcFieldRadioButtonComponent} from './field-radio-button/field-radio-button.component';\nimport { AcFieldSelectComponent } from \"./field-select/field-select.component\";\nimport {AcFieldTextareaComponent} from './field-textarea/field-textarea.component';\nimport {AcFieldToggleComponent} from './field-toggle/field-toggle.component';\n\n\nconst components: { [type: string]: Type<AcField> } = {\n text: AcDivTextComponent,\n group: AcGroupComponent,\n array: AcArrayComponent,\n row: AcRowComponent,\n checkbox: AcFieldCheckboxComponent,\n input: AcFieldInputComponent,\n password: AcFieldPasswordComponent,\n radio: AcFieldRadioButtonComponent,\n select: AcFieldSelectComponent,\n textarea: AcFieldTextareaComponent,\n toggle: AcFieldToggleComponent,\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n customField: AcFieldCustomComponent,\n tabs: AcTabsComponent,\n file: AcFieldFileComponent,\n\n */\n};\n\n@Directive({\n selector: \"[sotDynamicField]\",\n standalone: true\n})\nexport class AcDynamicFieldDirective implements OnChanges {\n private container: ViewContainerRef = inject(ViewContainerRef);\n private injector: EnvironmentInjector = inject(EnvironmentInjector);\n type: InputSignal<string> = input.required<string>();\n path: InputSignal<string> = input.required<string>();\n field: InputSignal<AcFieldConfig | AcTextConfig> = input.required<AcFieldConfig | AcTextConfig>();\n group: InputSignal<FormGroup> = input.required<FormGroup>();\n instancePath: InputSignal<string | undefined> = input<string>();\n\n component: ComponentRef<AcField> | undefined;\n\n ngOnChanges(changes: SimpleChanges) {\n if (!components[this.field().type]) {\n const supportedTypes = Object.keys(components).join(\", \");\n throw new Error(\n `Trying to use an unsupported type (${this.field().type}).\n Supported types: ${supportedTypes}`\n );\n } else {\n if (!this.component || changes[\"type\"]) {\n this.container.clear();\n this.component = this.container.createComponent(components[this.field().type], {\n environmentInjector: this.injector\n });\n }\n this.component.instance.field = this.field();\n this.component.instance.group = this.group();\n this.component.instance.instancePath = this.instancePath();\n this.component.instance.path = this.path();\n }\n }\n\n}\n","import {\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n InputSignal,\n output,\n OutputEmitterRef\n} from '@angular/core';\nimport {AbstractControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {AcDynamicForm, DynamicFormService} from '../../core';\nimport {distinctUntilChanged, Observable} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\nimport {AcDynamicFieldDirective} from '../components/dynamic-field.directive';\nimport {NgClass} from '@angular/common';\nimport {MatError} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport * as _ from \"lodash-es\";\n\n@Component({\n exportAs: 'dynamicForm',\n selector: 'sot-material-dynamic-form',\n standalone: true,\n imports: [AcDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError, MatIconModule, MatButtonModule],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class AcMaterialDynamicFormComponent {\n private readonly dynamicFormService: DynamicFormService = inject(DynamicFormService);\n private readonly destroyRef = inject(DestroyRef);\n config: InputSignal<AcDynamicForm | null> = input.required<AcDynamicForm | null>();\n initialValues: InputSignal<any> = input<any>();\n formCancel: OutputEmitterRef<void> = output<void>();\n formSubmit: OutputEmitterRef<FormGroup> = output<FormGroup>();\n formChange: OutputEmitterRef<FormGroup> = output<FormGroup>();\n\n get form(): FormGroup | undefined {\n return this.dynamicFormService.form;\n }\n\n get controls(): { [key: string]: AbstractControl } | null {\n return this.form ? this.form.controls : null;\n }\n\n get changes(): Observable<any> | null {\n return this.form ? this.form.valueChanges : null;\n }\n\n get valid(): boolean | null {\n return this.form ? this.form.valid : null;\n }\n\n get value(): any {\n return this.form ? this.form.value : null;\n }\n\n constructor() {\n effect(() => {\n if (!this.form && this.config() != null) {\n this.createForm();\n }\n if (this.initialValues() && this.form && this.form.pristine) {\n this.setValue(this.initialValues());\n }\n });\n }\n\n createForm() {\n this.dynamicFormService.createForm(this.config()!.fields, this.config()!.validations, this.config()!.updateOn, this.initialValues());\n this.formChange.emit(this.form!);\n this.form!.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(this.config()!.debounceTime ?? 0),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.formChange.emit(this.form!);\n });\n }\n\n setValue(values: { [key: string]: any }) {\n this.form!.setValue(values);\n this.form!.updateValueAndValidity();\n }\n\n onClickButton(button: any) {\n if (button.type === 'reset') {\n this.reset();\n }\n if (button.action) {\n button.action(this.form!);\n }\n }\n\n reset() {\n this.form!.reset();\n this.formCancel.emit();\n }\n\n handleSubmit(event?: Event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (this.form!.valid) {\n this.formSubmit.emit(this.form!);\n } else {\n this.form!.markAllAsTouched();\n _.defer(() => {\n this.focusFirstInvalidControl();\n });\n }\n }\n\n focusFirstInvalidControl() {\n // TODO\n }\n}\n","@if (form && config()) {\r\n <form class=\"dynamic-form\"\r\n [formGroup]=\"form\"\r\n (submit)=\"handleSubmit($event)\"\r\n [ngClass]=\"config()!.className?.form\">\r\n @if (this.config()!.fields) {\r\n <div class=\"dynamic-form-content\"\r\n [ngClass]=\"config()!.className?.formContent\">\r\n @for (field of config()!.fields; track field.type + field.name) {\r\n <div [hidden]=\"!!field.hidden\"\r\n [ngClass]=\"field.hostClassName\">\r\n <ng-container\r\n sotDynamicField\r\n [path]=\"field.name\"\r\n [type]=\"field.type\"\r\n [field]=\"field\"\r\n [group]=\"form\"\r\n >\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- TODO Revoir l'affichage des erreurs -->\r\n @if (config()!.validations && form && !form.untouched && form.invalid) {\r\n <mat-error class=\"dynamic-form-error\">\r\n @for (validation of config()!.validations!; track validation) {\r\n @if (form.hasError(validation.name)) {\r\n {{ validation.message }}\r\n }\r\n }\r\n </mat-error>\r\n }\r\n @if (config()!.buttons) {\r\n <div class=\"dynamic-form-buttons\" [ngClass]=\"config()!.className?.formButtons\">\r\n @for (button of config()!.buttons; track $index) {\r\n <!-- TODO\r\n <sot-button [type]=\"button.type\"\r\n [className]=\"button.className\"\r\n [matType]=\"button.matButtonType ?? 'raised'\"\r\n [disabled]=\"button.disabledIfFormNoValid && form.invalid\"\r\n [matIcon]=\"button.matIcon\"\r\n [label]=\"button.label\"\r\n [title]=\"button.title\"\r\n [ariaLabel]=\"button.ariaLabel\"\r\n (buttonClick)=\"onClickButton(button)\"\r\n ></sot-button>\r\n -->\r\n }\r\n </div>\r\n }\r\n </form>\r\n}\r\n","import { Component } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {AbstractFieldComponent, AcTextConfig} from '../../../core';\n\n@Component({\n selector: 'sot-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class AcDivTextComponent extends AbstractFieldComponent<AcTextConfig> {}\n","<div class=\"sot-formfield sot-formfield-text\" [ngClass]=\"field.className\">\n <div [innerHTML]=\"field.label\"></div>\n @if(field.description) {\n <p [innerHTML]=\"field.description\"></p>\n }\n</div>\n","import {Component} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatError} from '@angular/material/form-field';\nimport {AbstractControlFieldComponent, AcFieldCheckboxConfig} from '../../../core';\n\n@Component({\n selector: 'sot-field-checkbox',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatError],\n templateUrl: './field-checkbox.component.html',\n styleUrls: ['./field-checkbox.component.scss'],\n})\nexport class AcFieldCheckboxComponent extends AbstractControlFieldComponent<AcFieldCheckboxConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-checkbox\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"fr-checkbox-group\"\r\n [ngClass]=\"{\r\n 'fr-checkbox-group--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-checkbox-group--valid': control && !control.untouched && control.valid,\r\n 'fr-checkbox-group--disabled': control && control.disabled,\r\n }\">\r\n <input\r\n type=\"checkbox\"\r\n [formControlName]=\"field.name\"\r\n [attr.id]=\"'sot-checkbox-' + uuid\"\r\n [ngClass]=\"{\r\n 'fr-checkbox--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-checkbox--valid': control && !control.untouched && control.valid,\r\n 'fr-checkbox--disabled': control && control.disabled,\r\n }\" />\r\n <label\r\n class=\"fr-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-checkbox-' + uuid\">\r\n {{ field.label }}\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"fr-hint-text\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div\r\n class=\"fr-messages-group\"\r\n [attr.id]=\"'sot-checkbox-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"fr-message fr-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component, OnInit} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldInputConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatButtonModule} from '@angular/material/button';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\n@Component({\n selector: 'sot-field-input',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatInputModule, MatButtonModule],\n templateUrl: './field-input.component.html',\n styleUrls: ['./field-input.component.scss'],\n})\nexport class AcFieldInputComponent extends AbstractControlFieldComponent<AcFieldInputConfig> implements OnInit {\n inputType: string = 'text';\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.inputType = this.field.inputType ?? 'text';\n const control = this.group.get(this.field.name);\n if (control) {\n control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (value?.length == 0) {\n control.setValue(null);\n }\n });\n }\n }\n}\n","<div class=\"form-field-input\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"fr-input-group\"\r\n [ngClass]=\"{\r\n 'fr-input-group--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-input-group--valid': control && !control.untouched && control.valid,\r\n 'fr-input-group--disabled': control && control.disabled,\r\n }\">\r\n <label\r\n class=\"fr-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-input-' + uuid\">\r\n {{ field.label }}\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"fr-hint-text\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div class=\"fr-input-wrap fr-input-wrap--addon\">\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n class=\"fr-button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{ prefix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n\r\n <input\r\n class=\"fr-input\"\r\n [ngClass]=\"{\r\n 'fr-input--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-input--valid': control && !control.untouched && control.valid,\r\n 'fr-input--disabled': (control && control.disabled) || field.readonly,\r\n }\"\r\n [type]=\"field.inputType\"\r\n [attr.id]=\"'sot-input-' + uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field.autocomplete ?? 'off'\"\r\n [readonly]=\"field.readonly\"\r\n [maxlength]=\"field.maxlength ?? 10000000\"/>\r\n\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n class=\"fr-button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{ suffix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n <div\r\n class=\"fr-messages-group\"\r\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"fr-message fr-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component, forwardRef} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {AbstractControlFieldComponent, AcGroupConfig} from '../../../core';\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle\n} from '@angular/material/expansion';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\n\n@Component({\n selector: 'sot-group',\n standalone: true,\n imports: [\n forwardRef(() => AcDynamicFieldDirective),\n NgClass,\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n NgTemplateOutlet\n ],\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n})\nexport class AcGroupComponent extends AbstractControlFieldComponent<AcGroupConfig> {\n get subGroup() {\n return this.group.controls[this.field.name] as FormGroup;\n }\n}\n","<div class=\"sot-formfield sot-formfield-group\" [ngClass]=\"field.className\">\n <fieldset\n class=\"sot-formfield\"\n [ngClass]=\"{\n 'fr-accordion': field.accordion,\n }\"\n >\n @if (field.accordion) {\n <legend\n class=\"fr-accordion__title\"\n [ngClass]=\"field.labelClassName\">\n <button\n type=\"button\"\n class=\"fr-accordion__btn\"\n [attr.aria-expanded]=\"!!field.opened\"\n [attr.aria-controls]=\"'group-content-' + field.name\">\n {{ field.label }}\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n </button>\n </legend>\n <div\n class=\"fr-collapse\"\n [ngClass]=\"{ 'fr-collapse--expanded': !!field.opened }\"\n [attr.id]=\"'group-content-' + field.name\">\n @if (field.description) {\n <p class=\"fr-hint-text\">{{ field.description }}</p>\n }\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n\n } @else {\n <legend [ngClass]=\"field.labelClassName\">\n {{ field.label }}\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n @if (field.description) {\n <span class=\"fr-hint-text\">{{ field.description }}</span>\n }\n </legend>\n <div *ngTemplateOutlet=\"groupFields\"></div>\n }\n </fieldset>\n</div>\n\n<ng-template #groupFields>\n <div class=\"\">\n @for (f of field.fields; track f.type + f.name) {\n <div [hidden]=\"f.hidden\" [ngClass]=\"f.hostClassName\">\n <ng-container sotDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"subGroup\"\n [instancePath]=\"instancePath\"\n ></ng-container>\n </div>\n }\n </div>\n <div\n class=\"sot-messages-group\"\n [attr.id]=\"'sot-group-' + uuid + '-error'\"\n aria-live=\"assertive\">\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <p class=\"sot-message sot-message--error\">\n {{ validation.message }}\n </p>\n }\n }\n </div>\n</ng-template>\n","import {ChangeDetectorRef, Component, forwardRef, inject} from \"@angular/core\";\nimport {FormArray, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {\n AbstractControlFieldComponent,\n AcArrayConfig,\n AcFieldConfig,\n AcTextConfig,\n DynamicFormService\n} from '../../../core';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {MatExpansionModule} from \"@angular/material/expansion\";\nimport {NgClass, NgTemplateOutlet} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton} from \"@angular/material/button\";\nimport {MatCardModule} from \"@angular/material/card\";\nimport {MatError} from \"@angular/material/form-field\";\nimport * as _ from \"lodash-es\";\n\n@Component({\n selector: \"sot-array\",\n standalone: true,\n imports: [\n forwardRef(() => AcDynamicFieldDirective),\n MatExpansionModule,\n NgClass,\n MatIcon,\n MatButton,\n MatCardModule,\n ReactiveFormsModule,\n MatError,\n NgTemplateOutlet\n ],\n templateUrl: \"./array.component.html\",\n styleUrls: [\"./array.component.scss\"]\n})\nexport class AcArrayComponent extends AbstractControlFieldComponent<AcArrayConfig> {\n private readonly dynamicService: DynamicFormService = inject(DynamicFormService);\n private readonly ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n get array() {\n return this.group.controls[this.field.name] as FormArray;\n }\n\n constructor() {\n super();\n }\n\n addItem() {\n const i = this.field.instances!.length > 0 ? this.field.instances![this.field.instances!.length - 1].number + 1 : 0;\n const fields = _.cloneDeep(this.field.field.fields);\n const grp = this.dynamicService.createGroup(fields, `${this.path}[${i}]`, null);\n this.field.instances!.push({\n number: i,\n group: grp,\n fields\n });\n this.array.push(grp);\n this.ref.detectChanges();\n }\n\n deleteItem(index: number, inst: {\n number: number;\n group: FormGroup,\n fields: (AcFieldConfig | AcTextConfig)[]\n }) {\n /*\n TODO\n this.field.instances!.splice(index, 1);\n for (const key of this.dynamicService.pathFieldMap.keys()) {\n if (key.startsWith(`${this.path}[${inst.number}]`)) {\n this.dynamicFormService.pathFieldMap.delete(key);\n }\n }\n\n */\n this.array.removeAt(index);\n this.ref.detectChanges();\n }\n\n}\n","<div class=\"sot-formfield sot-formfield-array\" [ngClass]=\"field.className\">\n <fieldset\n class=\"sot-formfield-wrapper sot-fieldset\"\n [ngClass]=\"{'fr-accordion': field.accordion}\"\n >\n @if (field.accordion) {\n <legend\n class=\"fr-accordion__title\"\n [ngClass]=\"field.labelClassName\">\n <button\n type=\"button\"\n class=\"fr-accordion__btn\"\n [attr.aria-expanded]=\"!!field.opened\"\n [attr.aria-controls]=\"'array-content-' + uuid\">\n {{ field.label }}\n </button>\n </legend>\n <div\n class=\"fr-collapse\"\n [ngClass]=\"{ 'fr-collapse--expanded': !!field.opened }\"\n [attr.id]=\"'array-content-' + uuid\">\n @if (field.description) {\n <span class=\"fr-hint-text\">{{ field.description }}</span>\n }\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n } @else {\n <legend [ngClass]=\"field.labelClassName\">\n {{ field.label }}\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n @if (field.description) {\n <span class=\"fr-hint-text\">{{ field.description }}</span>\n }\n </legend>\n <div [attr.id]=\"'array-content-' + uuid\">\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n }\n </fieldset>\n</div>\n\n<ng-template #groupFields>\n <div class=\"sot-formfield-array\" [formGroup]=\"group\">\n <div [formArrayName]=\"field.name\">\n @for (inst of field.instances; track inst; let i = $index) {\n <fieldset class=\"sot-formfield-array-element\"\n [ngClass]=\"field.elementClassName\">\n <legend class=\"sot-formfield-array-element-label\">\n {{ field.itemLabel ?? 'Item' }} {{ inst.number + 1 }}\n </legend>\n <div class=\"sot-formfield-array-element-content\"\n [ngClass]=\"field.elementContentClassName\">\n @for (f of inst.fields; track f.name + f.type) {\n <div [hidden]=\"f.hidden\" [ngClass]=\"f.hostClassName\">\n <ng-container sotDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"inst.group\"\n [instancePath]=\"path + '[' + inst.number + ']'\"\n ></ng-container>\n </div>\n }\n </div>\n <div class=\"sot-formfield-array-element-action\">\n @if (!field.disabled && (!field.minNbRow || field.minNbRow < array.controls.length)) {\n <button type=\"button\"\n class=\"fr-btn\"\n (click)=\"deleteItem(i, inst)\"\n >\n {{ field.deleteButton?.label ?? 'Delete' }}\n </button>\n }\n </div>\n </fieldset>\n }\n @if (!field.disabled && (!field.maxNbRow || field.maxNbRow > array.controls.length)) {\n <div class=\"sot-formfield-array-add-button\">\n <button type=\"button\"\n class=\"fr-btn\"\n (click)=\"addItem()\"\n >\n {{ field.addButton?.label ?? 'Add' }}\n </button>\n </div>\n }\n <div\n class=\"fr-messages-group\"\n [attr.id]=\"'fr-array-' + uuid + '-error'\"\n aria-live=\"assertive\">\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <p class=\"fr-message fr-message--error\">\n {{ validation.message }}\n </p>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n","import {Component, forwardRef} from '@angular/core';\nimport {AbstractFieldComponent, AcRowConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\n\n@Component({\n selector: 'sot-row',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass,\n forwardRef(() => AcDynamicFieldDirective),\n AcDynamicFieldDirective\n ],\n templateUrl: './row.component.html',\n styleUrls: ['./row.component.scss'],\n})\nexport class AcRowComponent extends AbstractFieldComponent<AcRowConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-row\" [ngClass]=\"field.className\">\n @for (f of field.fields; track f.type + f.name) {\n <div\n [hidden]=\"f.hidden\"\n [ngClass]=\"f.hostClassName\">\n <ng-container\n sotDynamicField\n [path]=\"path + '.' + f.name\"\n [type]=\"f.type\"\n [field]=\"f\"\n [group]=\"group\"\n [instancePath]=\"instancePath\"\n >\n </ng-container>\n </div>\n }\n</div>\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\r\n\r\nexport class PasswordValidators {\r\n\r\n static patternValidator(regex: RegExp, error: ValidationErrors): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n const valid = regex.test(control.value);\r\n return valid ? null : error;\r\n };\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldPasswordConfig\n} from '../../../core';\nimport {ReactiveFormsModule, Validators} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatButtonModule} from '@angular/material/button';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {PasswordValidators} from \"./password-validators\";\n\n@Component({\n selector: 'sot-field-password',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatInputModule, MatButtonModule],\n templateUrl: './field-password.component.html',\n styleUrls: ['./field-password.component.scss'],\n})\nexport class AcFieldPasswordComponent extends AbstractControlFieldComponent<AcFieldPasswordConfig> implements OnInit {\n inputType: string = 'password';\n showPasswordLabel?: string;\n hidePasswordLabel?: string;\n iconErrorLabel?: string;\n iconSuccessLabel?: string;\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.showPasswordLabel = this.field.labels?.showPassword ?? \"Show password\";\n this.hidePasswordLabel = this.field.labels?.hidePassword ?? \"Hide password\";\n this.iconSuccessLabel = this.field.labels?.iconSuccess ?? \"Success\";\n this.iconErrorLabel = this.field.labels?.iconError ?? \"Error\";\n if (this.control) {\n this.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (value?.length == 0) {\n this.control!.setValue(null);\n }\n });\n this.setPasswordValidators();\n }\n }\n\n tooglePassword() {\n this.inputType = this.inputType === 'password' ? 'text' : 'password';\n }\n\n get minLengthValid() {\n return this.control!.value && !this.control!.hasError(\"minlength\");\n }\n\n get maxLengthValid() {\n return this.control!.value && !this.control!.hasError(\"maxlength\");\n }\n\n get requiresDigitValid() {\n return this.control!.value && !this.control!.hasError(\"requiresDigit\");\n }\n\n get requiresUppercaseValid() {\n return this.control!.value && !this.control!.hasError(\"requiresUppercase\");\n }\n\n get requiresLowercaseValid() {\n return this.control!.value && !this.control!.hasError(\"requiresLowercase\");\n }\n\n get requiresSpecialCharsValid() {\n return this.control!.value && !this.control!.hasError(\"requiresSpecialChars\");\n }\n\n private setPasswordValidators() {\n if (this.field.minlength) {\n this.control?.addValidators(Validators.minLength(this.field.minlength));\n }\n if (this.field.maxlength) {\n this.control?.addValidators(Validators.maxLength(this.field.maxlength));\n }\n if (this.field.requiresDigit) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[0-9])/, {\n requiresDigit: true\n }))\n }\n if (this.field.requiresUppercase) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[A-Z])/, {\n requiresUppercase: true\n }))\n }\n if (this.field.requiresLowercase) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[a-z])/, {\n requiresLowercase: true\n }))\n }\n if (this.field.requiresSpecialChars) {\n const chars = this.field.specialChars?.join(\"\") ?? \"$@^!%*?&\";\n const regex = \"(?=.*[\" + chars + \"])\";\n this.control?.addValidators(PasswordValidators.patternValidator(new RegExp(regex), {\n requiresSpecialChars: true\n }))\n }\n }\n}\n","<div class=\"sot-formfield sot-formfield-password\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"fr-input-group\"\r\n [ngClass]=\"{\r\n 'fr-input-group--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-input-group--valid': control && !control.untouched && control.valid,\r\n 'fr-input-group--disabled': (control && control.disabled),\r\n }\">\r\n <label\r\n class=\"fr-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-input-' + uuid\">\r\n {{ field.label }}\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"fr-hint-text\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div class=\"fr-input-wrap fr-input-wrap--addon\">\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n class=\"fr-button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{ prefix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n\r\n <input\r\n class=\"fr-input\"\r\n [ngClass]=\"{\r\n 'fr-input--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-input--valid': control && !control.untouched && control.valid,\r\n 'fr-input--disabled': (control && control.disabled),\r\n }\"\r\n [type]=\"inputType\"\r\n [attr.id]=\"'sot-input-' + uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field.autocomplete ?? 'off'\"\r\n [maxlength]=\"field.maxlength ?? 10000000\"/>\r\n\r\n <button type=\"button\" class=\"fr-button\"\r\n (click)=\"tooglePassword()\"\r\n [attr.aria-label]=\"inputType === 'password' ? showPasswordLabel : hidePasswordLabel\"\r\n [attr.aria-pressed]=\"inputType === 'password'\">\r\n @if(inputType === 'password') {\r\n <span aria-hidden=\"true\" class=\"fr-icon-eye-off-fill\"></span>\r\n } @else {\r\n <span aria-hidden=\"true\" class=\"fr-icon-eye-fill\"></span>\r\n }\r\n </button>\r\n\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n class=\"fr-button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{ suffix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n <div\r\n class=\"fr-messages-group\"\r\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"fr-message fr-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n <ul class=\"password-description\" [id]=\"uuid + '-description'\">\r\n @if (field.minlength) {\r\n <li [ngClass]=\"{ 'text-success': minLengthValid, 'text-error': !minLengthValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"minLengthValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.minlength ?? \"Must be at least 8 characters long\" }}\r\n </li>\r\n }\r\n @if (field.maxlength) {\r\n <li [ngClass]=\"{ 'text-success': maxLengthValid, 'text-error': !maxLengthValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"maxLengthValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.maxlength ?? \"Must be at most 8 characters long\" }}\r\n </li>\r\n }\r\n @if (field.requiresDigit) {\r\n <li [ngClass]=\"{ 'text-success': requiresDigitValid, 'text-error': !requiresDigitValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresDigitValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresDigit ?? \"Must contain at least 1 digit\" }}\r\n </li>\r\n }\r\n @if (field.requiresUppercase) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresUppercaseValid, 'text-error': !requiresUppercaseValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresUppercaseValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresUppercase ?? \"Must contain at least 1 uppercase character\" }}\r\n </li>\r\n }\r\n @if (field.requiresLowercase) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresLowercaseValid, 'text-error': !requiresLowercaseValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresLowercaseValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresLowercase ?? \"Must contain at least 1 lowercase character\" }}\r\n </li>\r\n }\r\n @if (field.requiresSpecialChars) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresSpecialCharsValid, 'text-error': !requiresSpecialCharsValid }\">\r\n <mat-icon [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"\r\n [fontIcon]=\"requiresSpecialCharsValid ? 'check' : 'error'\"></mat-icon>\r\n {{ field.labels?.requiresSpecialChars ?? \"Must contain at least 1 special character\" }}\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n\r\n","import {Component} from '@angular/core';\nimport {AbstractControlFieldComponent, AcFieldRadioButtonConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatError} from '@angular/material/form-field';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatIconModule} from '@angular/material/icon';\n\n@Component({\n selector: 'sot-field-radio-button',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatRadioModule, MatError, MatTooltipModule, MatIconModule],\n templateUrl: './field-radio-button.component.html',\n styleUrls: ['./field-radio-button.component.scss'],\n})\nexport class AcFieldRadioButtonComponent extends AbstractControlFieldComponent<AcFieldRadioButtonConfig> {\n}\n","<div\r\n class=\"form-field-radio\"\r\n [hidden]=\"field.hidden\"\r\n [ngClass]=\"field.className\">\r\n <fieldset\r\n class=\"fr-fieldset\"\r\n [ngClass]=\"{\r\n 'fr-fieldset--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-fieldset--valid': control && !control.untouched && control.valid,\r\n 'fr-fieldset--disabled': control && control.disabled,\r\n }\"\r\n [id]=\"'radio-' + uuid\"\r\n [attr.aria-labelledby]=\"'radio-legend-' + uuid\"\r\n [formGroup]=\"group\">\r\n <legend\r\n class=\"fr-fieldset__legend--regular fr-fieldset__legend\"\r\n [ngClass]=\"field.labelClassName\"\r\n [id]=\"'radio-legend-' + uuid\">\r\n {{ field.label }}\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"fr-hint-text\">{{ field.description }}</span>\r\n }\r\n </legend>\r\n @if(field.options) {\r\n @for (item of field.options; track item; let i = $index) {\r\n <div\r\n class=\"fr-fieldset__element\"\r\n [ngClass]=\"{ 'fr-fieldset__element--inline': !field.verticalAlign }\">\r\n <div class=\"fr-radio-group\">\r\n <input\r\n type=\"radio\"\r\n [id]=\"'radio-' + uuid + '-' + i\"\r\n [value]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [attr.name]=\"uuid\"\r\n [formControlName]=\"field.name\"\r\n [attr.disabled]=\"field.disabledKey && !!item[field.disabledKey] ? true : undefined\"/>\r\n <label\r\n class=\"fr-label\"\r\n [for]=\"'radio-' + uuid + '-' + i\">\r\n {{ field.labelKey ? item[field.labelKey!] : item }}\r\n @if (field.descriptionKey) {\r\n <span class=\"fr-hint-text\">{{ item[field.descriptionKey] }}</span>\r\n }\r\n </label>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (control && !control.untouched && control.invalid) {\r\n <div\r\n class=\"fr-messages-group\"\r\n [attr.id]=\"'text-radio-' + uuid + '-error'\"\r\n aria-live=\"polite\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control.hasError(validation.name)) {\r\n <p class=\"fr-error-text\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n }\r\n </fieldset>\r\n</div>\r\n","import {Component} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldSelectConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatSelectModule} from '@angular/material/select';\nimport {isObservable} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'sot-field-select',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatSelectModule],\n templateUrl: './field-select.component.html',\n styleUrls: ['./field-select.component.scss'],\n})\nexport class AcFieldSelectComponent extends AbstractControlFieldComponent<AcFieldSelectConfig> {\n options: any[] = [];\n\n override ngOnInit() {\n super.ngOnInit();\n if (isObservable(this.field.options)) {\n this.field.options.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((options: any[]) => {\n this.options = options;\n });\n } else {\n this.options = this.field.options;\n }\n }\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n}\n","<div class=\"sot-formfield sot-formfield-select\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"fr-select-group\"\r\n [ngClass]=\"{\r\n 'fr-select-group--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-select-group--valid': control && !control.untouched && control.valid,\r\n 'fr-select-group--disabled': control && control.disabled,\r\n }\">\r\n <label\r\n class=\"fr-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-select-' + uuid\">\r\n {{ field.label }}\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"fr-hint-text\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div class=\"fr-input-wrap fr-input-wrap--addon\">\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n class=\"fr-button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{ prefix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n <select\r\n class=\"fr-select\"\r\n [ngClass]=\"{\r\n 'fr-select--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-select--valid': control && !control.untouched && control.valid,\r\n 'fr-select--disabled': control && control.disabled,\r\n }\"\r\n [attr.id]=\"'sot-select-' + uuid\"\r\n [formControlName]=\"field.name\">\r\n @if (field.resetOption) {\r\n <option [ngValue]=\"undefined\">\r\n {{ field.resetOptionLabel }}\r\n </option>\r\n }\r\n\r\n @if (field.options) {\r\n @if (field.groupLabelKey) {\r\n @for (group of options; track group) {\r\n <optgroup [label]=\"field.groupLabelKey ? group[field.groupLabelKey] : ''\">\r\n @if (field.groupOptionsKey && group[field.groupOptionsKey]) {\r\n @for (item of group[field.groupOptionsKey]; track item) {\r\n <option\r\n [ngValue]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [disabled]=\"field.disabledKey ? item[field.disabledKey] : false\">\r\n {{ field.labelKey ? item[field.labelKey!] : item }}\r\n </option>\r\n }\r\n }\r\n </optgroup>\r\n }\r\n } @else {\r\n @for (item of options; track item) {\r\n <option\r\n [ngValue]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [disabled]=\"field.disabledKey ? item[field.disabledKey] : false\">\r\n {{ field.labelKey ? item[field.labelKey!] : item }}\r\n </option>\r\n }\r\n }\r\n\r\n }\r\n </select>\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-prefix\" matPrefix>\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n class=\"fr-button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{ suffix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n <div\r\n class=\"fr-messages-group\"\r\n [attr.id]=\"'sot-select-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"fr-message fr-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldTextareaConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatButtonModule} from '@angular/material/button';\n\n@Component({\n selector: 'sot-field-textarea',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatInputModule, MatButtonModule],\n templateUrl: './field-textarea.component.html',\n styleUrls: ['./field-textarea.component.scss'],\n})\nexport class AcFieldTextareaComponent extends AbstractControlFieldComponent<AcFieldTextareaConfig> {\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!\n );\n }\n }\n}\n","<div class=\"sot-formfield sot-formfield-textarea\" [ngClass]=\" field.className\">\n <div\n [formGroup]=\"group\"\n class=\"fr-input-group\"\n [ngClass]=\"{\n 'fr-input-group--error': control && !control.untouched && !control.valid && !control.disabled,\n 'fr-input-group--valid': control && !control.untouched && control.valid ,\n 'fr-input-group--disabled': control && control.disabled,\n }\">\n <label\n class=\"fr-label\"\n [ngClass]=\"field.labelClassName\"\n [attr.for]=\"'sot-textarea-' + uuid\">\n {{ field.label }}\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n @if (field.description) {\n <span class=\"fr-hint-text\">{{ field.description }}</span>\n }\n </label>\n <div class=\"fr-input-wrap fr-input-wrap--addon\">\n @for (prefix of field.prefixes; track prefix) {\n <span class=\"sot-formfield-prefix\" matPrefix>\n @if (prefix.action) {\n <button type=\"button\"\n class=\"fr-button\"\n [attr.aria-label]=\"prefix.actionAriaLabel\"\n (click)=\"buttonAction(prefix)\"\n >{{ prefix.label }}</button>\n } @else {\n <span [innerHTML]=\"prefix.label\"></span>\n }\n </span>\n }\n\n <textarea\n class=\"fr-input\"\n [ngClass]=\"{\n 'fr-input--error': control && !control.untouched && !control.valid && !control.disabled,\n 'fr-input--valid': control && !control.untouched && control.valid ,\n 'fr-input--disabled': control && control.disabled,\n }\"\n [attr.id]=\"'sot-textarea-' + uuid\"\n [formControlName]=\"field.name\"\n [required]=\"!!required\"\n [readonly]=\"field.readonly\"\n [rows]=\"field.rows\"\n [maxlength]=\"field.maxlength ?? 10000000\">\n </textarea>\n\n @for (suffix of field.suffixes; track suffix) {\n <span class=\"sot-formfield-suffix\">\n @if (suffix.action) {\n <button type=\"button\"\n class=\"fr-button\"\n [attr.aria-label]=\"suffix.actionAriaLabel\"\n (click)=\"buttonAction(suffix)\"\n >{{ suffix.label }}</button>\n } @else {\n <span [innerHTML]=\"suffix.label\"></span>\n }\n </span>\n }\n </div>\n <div\n class=\"fr-messages-group\"\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\n aria-live=\"assertive\">\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <p class=\"fr-error-text\">\n {{ validation.message }}\n </p>\n }\n }\n </div>\n </div>\n</div>\n","import {Component} from '@angular/core';\nimport {AbstractControlFieldComponent, AcFieldToggleConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatError} from '@angular/material/form-field';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'sot-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatError, MatSlideToggleModule],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class AcFieldToggleComponent extends AbstractControlFieldComponent<AcFieldToggleConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-toogle\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"fr-input-group\"\r\n [ngClass]=\"{\r\n 'fr-input-group--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'fr-input-group--valid': control && !control.untouched && control.valid ,\r\n 'fr-input-group--disabled': control && control.disabled,\r\n }\">\r\n <div class=\"fr-toggle\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"fr-toggle__input\"\r\n [attr.id]=\"'toggle-' + uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [attr.disabled]=\"field.disabled\"/>\r\n <label\r\n class=\"fr-toggle__label\"\r\n [attr.for]=\"'toggle-' + uuid\"\r\n [attr.data-fr-checked-label]=\"field.checkedLabel\"\r\n [attr.data-fr-unchecked-label]=\"field.uncheckedLabel\"\r\n >{{ field.label }}\r\n @if (required) {\r\n <span class=\"red\">*</span>\r\n }\r\n </label>\r\n <p\r\n class=\"fr-hint-text\">\r\n {{ field.description }}\r\n </p>\r\n </div>\r\n\r\n <div\r\n class=\"fr-messages-group\"\r\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"fr-message fr-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {\n ComponentRef,\n Directive,\n EnvironmentInjector, inject,\n input,\n InputSignal,\n OnChanges,\n SimpleChanges,\n Type,\n ViewContainerRef\n} from \"@angular/core\";\nimport {AcDivTextComponent} from \"./div-text/div-text.component\";\nimport {AcFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig} from '../../core';\nimport {AcFieldInputComponent} from './field-input/field-input.component';\nimport { AcGroupComponent } from \"./group/group.component\";\nimport {AcArrayComponent} from \"./array/array.component\";\nimport {AcRowComponent} from \"./row/row.component\";\nimport {AcFieldPasswordComponent} from './field-password/field-password.component';\nimport { AcFieldRadioButtonComponent } from \"./field-radio-button/field-radio-button.component\";\nimport {AcFieldSelectComponent} from './field-select/field-select.component';\nimport { AcFieldTextareaComponent } from \"./field-textarea/field-textarea.component\";\nimport {AcFieldToggleComponent} from './field-toggle/field-toggle.component';\n\n\nconst components: { [type: string]: Type<AcField> } = {\n group: AcGroupComponent,\n array: AcArrayComponent,\n row: AcRowComponent,\n text: AcDivTextComponent,\n checkbox: AcFieldCheckboxComponent,\n input: AcFieldInputComponent,\n password: AcFieldPasswordComponent,\n radio: AcFieldRadioButtonComponent,\n select: AcFieldSelectComponent,\n textarea: AcFieldTextareaComponent,\n toggle: AcFieldToggleComponent,\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n customField: AcFieldCustomComponent,\n tabs: AcTabsComponent,\n file: AcFieldFileComponent,\n */\n};\n\n@Directive({\n selector: \"[sotDynamicField]\",\n standalone: true\n})\nexport class AcDynamicFieldDirective implements OnChanges {\n private readonly container: ViewContainerRef = inject(ViewContainerRef);\n private readonly injector: EnvironmentInjector = inject(EnvironmentInjector);\n type: InputSignal<string> = input.required<string>();\n path: InputSignal<string> = input.required<string>();\n field: InputSignal<AcFieldConfig | AcTextConfig> = input.required<AcFieldConfig | AcTextConfig>();\n group: InputSignal<FormGroup> = input.required<FormGroup>();\n instancePath: InputSignal<string | undefined> = input<string>();\n\n component: ComponentRef<AcField> | undefined;\n\n ngOnChanges(changes: SimpleChanges) {\n if (!components[this.field().type]) {\n const supportedTypes = Object.keys(components).join(\", \");\n throw new Error(\n `Trying to use an unsupported type (${this.field().type}).\n Supported types: ${supportedTypes}`\n );\n } else {\n if (!this.component || changes[\"type\"]) {\n this.container.clear();\n this.component = this.container.createComponent(components[this.field().type], {\n environmentInjector: this.injector\n });\n }\n this.component.instance.field = this.field();\n this.component.instance.group = this.group();\n this.component.instance.instancePath = this.instancePath();\n this.component.instance.path = this.path();\n }\n }\n\n}\n","import {\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n InputSignal,\n output,\n OutputEmitterRef\n} from '@angular/core';\nimport {AbstractControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {AcDynamicForm, DynamicFormService} from '../../core';\nimport {distinctUntilChanged, Observable} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\nimport {AcDynamicFieldDirective} from '../components/dynamic-field.directive';\nimport {NgClass} from '@angular/common';\nimport {MatError} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport * as _ from \"lodash-es\";\n\n@Component({\n exportAs: 'dynamicForm',\n selector: 'sot-dsfr-dynamic-form',\n standalone: true,\n imports: [AcDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError, MatIconModule, MatButtonModule],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class AcDsfrDynamicFormComponent {\n private readonly dynamicFormService: DynamicFormService = inject(DynamicFormService);\n private readonly destroyRef = inject(DestroyRef);\n config: InputSignal<AcDynamicForm | null> = input.required<AcDynamicForm | null>();\n initialValues: InputSignal<any> = input<any>();\n formCancel: OutputEmitterRef<void> = output<void>();\n formSubmit: OutputEmitterRef<FormGroup> = output<FormGroup>();\n formChange: OutputEmitterRef<FormGroup> = output<FormGroup>();\n\n get form(): FormGroup | undefined {\n return this.dynamicFormService.form;\n }\n\n get controls(): { [key: string]: AbstractControl } | null {\n return this.form ? this.form.controls : null;\n }\n\n get changes(): Observable<any> | null {\n return this.form ? this.form.valueChanges : null;\n }\n\n get valid(): boolean | null {\n return this.form ? this.form.valid : null;\n }\n\n get value(): any {\n return this.form ? this.form.value : null;\n }\n\n constructor() {\n effect(() => {\n if (!this.form && this.config() != null) {\n this.createForm();\n }\n if (this.initialValues() && this.form && this.form.pristine) {\n this.setValue(this.initialValues());\n }\n });\n }\n\n createForm() {\n this.dynamicFormService.createForm(this.config()!.fields, this.config()!.validations, this.config()!.updateOn, this.initialValues());\n this.formChange.emit(this.form!);\n this.form!.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(this.config()!.debounceTime ?? 0),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.formChange.emit(this.form!);\n });\n }\n\n setValue(values: { [key: string]: any }) {\n this.form!.setValue(values);\n this.form!.updateValueAndValidity();\n }\n\n onClickButton(button: any) {\n if (button.type === 'reset') {\n this.reset();\n }\n if (button.action) {\n button.action(this.form!);\n }\n }\n\n reset() {\n this.form!.reset();\n this.formCancel.emit();\n }\n\n handleSubmit(event?: Event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (this.form!.valid) {\n this.formSubmit.emit(this.form!);\n } else {\n this.form!.markAllAsTouched();\n _.defer(() => {\n this.focusFirstInvalidControl();\n });\n }\n }\n\n focusFirstInvalidControl() {\n // TODO\n }\n}\n","@if (form && config()) {\r\n <form class=\"dynamic-form\"\r\n [formGroup]=\"form\"\r\n (submit)=\"handleSubmit($event)\"\r\n [ngClass]=\"config()!.className?.form\">\r\n @if (this.config()!.fields) {\r\n <div class=\"dynamic-form-content\"\r\n [ngClass]=\"config()!.className?.formContent\">\r\n @for (field of config()!.fields; track field.type + field.name) {\r\n <div [hidden]=\"!!field.hidden\"\r\n [ngClass]=\"field.hostClassName\">\r\n <ng-container\r\n sotDynamicField\r\n [path]=\"field.name\"\r\n [type]=\"field.type\"\r\n [field]=\"field\"\r\n [group]=\"form\"\r\n >\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- TODO Revoir l'affichage des erreurs -->\r\n @if (config()!.validations && form && !form.untouched && form.invalid) {\r\n <mat-error class=\"dynamic-form-error\">\r\n @for (validation of config()!.validations!; track validation) {\r\n @if (form.hasError(validation.name)) {\r\n {{ validation.message }}\r\n }\r\n }\r\n </mat-error>\r\n }\r\n @if (config()!.buttons) {\r\n <div class=\"dynamic-form-buttons\" [ngClass]=\"config()!.className?.formButtons\">\r\n @for (button of config()!.buttons; track $index) {\r\n <!-- TODO\r\n <sot-button [type]=\"button.type\"\r\n [className]=\"button.className\"\r\n [matType]=\"button.matButtonType ?? 'raised'\"\r\n [disabled]=\"button.disabledIfFormNoValid && form.invalid\"\r\n [matIcon]=\"button.matIcon\"\r\n [label]=\"button.label\"\r\n [title]=\"button.title\"\r\n [ariaLabel]=\"button.ariaLabel\"\r\n (buttonClick)=\"onClickButton(button)\"\r\n ></sot-button>\r\n -->\r\n }\r\n </div>\r\n }\r\n </form>\r\n}\r\n","import { Component } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {AbstractFieldComponent, AcTextConfig} from '../../../core';\n\n@Component({\n selector: 'sot-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class AcDivTextComponent extends AbstractFieldComponent<AcTextConfig> {}\n","<div class=\"sot-formfield sot-formfield-text\" [ngClass]=\"field.className\">\n <div [innerHTML]=\"field.label\"></div>\n @if(field.description) {\n <p [innerHTML]=\"field.description\"></p>\n }\n</div>\n","import {Component} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {AbstractControlFieldComponent, AcFieldCheckboxConfig} from '../../../core';\n\n@Component({\n selector: 'sot-field-checkbox',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-checkbox.component.html',\n styleUrls: ['./field-checkbox.component.scss'],\n})\nexport class AcFieldCheckboxComponent extends AbstractControlFieldComponent<AcFieldCheckboxConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-checkbox\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"sot-formfield-wrapper\"\r\n [ngClass]=\"{\r\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-formfield--valid': control && !control.untouched && control.valid,\r\n 'sot-formfield--disabled': control && control.disabled,\r\n }\">\r\n <input\r\n type=\"checkbox\"\r\n [formControlName]=\"field.name\"\r\n [attr.id]=\"'sot-checkbox-' + uuid\"\r\n [ngClass]=\"{\r\n 'sot-checkbox--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-checkbox--valid': control && !control.untouched && control.valid,\r\n 'sot-checkbox--disabled': control && control.disabled,\r\n }\" />\r\n <label\r\n class=\"sot-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-checkbox-' + uuid\">\r\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"sot-label-description\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div\r\n class=\"sot-messages-group\"\r\n [attr.id]=\"'sot-checkbox-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"sot-message sot-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component, OnInit} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldInputConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\n@Component({\n selector: 'sot-field-input',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-input.component.html',\n styleUrls: ['./field-input.component.scss'],\n})\nexport class AcFieldInputComponent extends AbstractControlFieldComponent<AcFieldInputConfig> implements OnInit {\n inputType: string = 'text';\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.inputType = this.field.inputType ?? 'text';\n const control = this.group.get(this.field.name);\n if (control) {\n control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (value?.length == 0) {\n control.setValue(null);\n }\n });\n }\n }\n}\n","<div class=\"sot-formfield sot-formfield-input\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"sot-formfield-wrapper\"\r\n [ngClass]=\"{\r\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-formfield--valid': control && !control.untouched && control.valid,\r\n 'sot-formfield--disabled': (control && control.disabled),\r\n }\">\r\n <label\r\n class=\"sot-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-input-' + uuid\">\r\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"sot-label-description\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div class=\"sot-input-wrapper\">\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\">\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n class=\"sot-button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{ prefix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n\r\n <input\r\n class=\"sot-input\"\r\n [ngClass]=\"{\r\n 'sot-input--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-input--valid': control && !control.untouched && control.valid,\r\n 'sot-input--disabled': (control && control.disabled),\r\n }\"\r\n [type]=\"field.inputType\"\r\n [attr.id]=\"'sot-input-' + uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field.autocomplete ?? 'off'\"\r\n [readonly]=\"field.readonly\"\r\n [maxlength]=\"field.maxlength ?? 10000000\"/>\r\n\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-suffix\">\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n class=\"sot-button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{ suffix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n <div\r\n class=\"sot-messages-group\"\r\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"sot-message sot-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component, forwardRef} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {AbstractControlFieldComponent, AcGroupConfig} from '../../../core';\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\n\n@Component({\n selector: 'sot-group',\n standalone: true,\n imports: [\n forwardRef(() => AcDynamicFieldDirective),\n NgClass,\n NgTemplateOutlet\n ],\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n})\nexport class AcGroupComponent extends AbstractControlFieldComponent<AcGroupConfig> {\n get subGroup() {\n return this.group.controls[this.field.name] as FormGroup;\n }\n}\n","<div class=\"sot-formfield sot-formfield-group\" [ngClass]=\"field.className\">\n <fieldset\n class=\"sot-formfield\"\n [ngClass]=\"{\n 'sot-accordion': field.accordion,\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\n 'sot-formfield--valid': control && !control.untouched && control.valid,\n 'sot-formfield--disabled': (control && control.disabled),\n }\"\n >\n @if (field.accordion) {\n <legend\n class=\"sot-accordion-title\"\n [ngClass]=\"field.labelClassName\">\n <button\n type=\"button\"\n class=\"sot-accordion-button\"\n [attr.aria-expanded]=\"!!field.opened\"\n [attr.aria-controls]=\"'group-content-' + uuid\">\n {{ field.label }}\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n </button>\n </legend>\n\n <div\n class=\"sot-collapse sot-accordion-content sot-fieldset-content\"\n [ngClass]=\"{ 'sot-collapse--expanded': !!field.opened }\"\n [attr.id]=\"'group-content-' + uuid\">\n @if (field.description) {\n <p class=\"sot-label-description\">{{ field.description }}</p>\n }\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n\n\n } @else {\n <legend\n class=\"sot-fieldset-legend\"\n [ngClass]=\"field.labelClassName\">\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n @if (field.description) {\n <span class=\"sot-label-description\">{{ field.description }}</span>\n }\n </legend>\n <div class=\"sot-fieldset-content\">\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n }\n </fieldset>\n</div>\n\n<ng-template #groupFields>\n @for (f of field.fields; track f.type + f.name) {\n <div [hidden]=\"f.hidden\" [ngClass]=\"f.hostClassName\">\n <ng-container sotDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"subGroup\"\n [instancePath]=\"instancePath\"\n ></ng-container>\n </div>\n }\n <div\n class=\"sot-messages-group\"\n [attr.id]=\"'sot-group-' + uuid + '-error'\"\n aria-live=\"assertive\">\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <p class=\"sot-message sot-message--error\">\n {{ validation.message }}\n </p>\n }\n }\n </div>\n</ng-template>\n","import {ChangeDetectorRef, Component, forwardRef, inject} from \"@angular/core\";\nimport {FormArray, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {\n AbstractControlFieldComponent,\n AcArrayConfig,\n AcFieldConfig,\n AcTextConfig,\n DynamicFormService\n} from '../../../core';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {NgClass, NgTemplateOutlet} from \"@angular/common\";\nimport * as _ from \"lodash-es\";\n\n@Component({\n selector: \"sot-array\",\n standalone: true,\n imports: [\n forwardRef(() => AcDynamicFieldDirective),\n NgClass,\n ReactiveFormsModule,\n NgTemplateOutlet\n ],\n templateUrl: \"./array.component.html\",\n styleUrls: [\"./array.component.scss\"]\n})\nexport class AcArrayComponent extends AbstractControlFieldComponent<AcArrayConfig> {\n private readonly dynamicService: DynamicFormService = inject(DynamicFormService);\n private readonly ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n get array() {\n return this.group.controls[this.field.name] as FormArray;\n }\n\n constructor() {\n super();\n }\n\n addItem() {\n const i = this.field.instances!.length > 0 ? this.field.instances![this.field.instances!.length - 1].number + 1 : 0;\n const fields = _.cloneDeep(this.field.field.fields);\n const grp = this.dynamicService.createGroup(fields, `${this.path}[${i}]`, null);\n this.field.instances!.push({\n number: i,\n group: grp,\n fields\n });\n this.array.push(grp);\n this.ref.detectChanges();\n }\n\n deleteItem(index: number, inst: {\n number: number;\n group: FormGroup,\n fields: (AcFieldConfig | AcTextConfig)[]\n }) {\n /*\n TODO\n this.field.instances!.splice(index, 1);\n for (const key of this.dynamicService.pathFieldMap.keys()) {\n if (key.startsWith(`${this.path}[${inst.number}]`)) {\n this.dynamicFormService.pathFieldMap.delete(key);\n }\n }\n\n */\n this.array.removeAt(index);\n this.ref.detectChanges();\n }\n\n}\n","<div class=\"sot-formfield sot-formfield-array\" [ngClass]=\"field.className\">\n <fieldset\n class=\"sot-formfield-wrapper sot-fieldset\"\n [ngClass]=\"{\n 'sot-accordion': field.accordion,\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\n 'sot-formfield--valid': control && !control.untouched && control.valid,\n 'sot-formfield--disabled': (control && control.disabled),\n }\"\n >\n @if (field.accordion) {\n <legend\n class=\"sot-accordion-title\"\n [ngClass]=\"field.labelClassName\">\n <button\n type=\"button\"\n class=\"sot-accordion-button\"\n [attr.aria-expanded]=\"!!field.opened\"\n [attr.aria-controls]=\"'array-content-' + uuid\">\n {{ field.label }}\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n </button>\n </legend>\n <div\n class=\"sot-collapse sot-accordion-content sot-fieldset-content\"\n [ngClass]=\"{ 'sot-collapse--expanded': !!field.opened }\"\n [attr.id]=\"'array-content-' + uuid\">\n @if (field.description) {\n <p class=\"sot-label-description\">{{ field.description }}</p>\n }\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n } @else {\n <legend\n class=\"sot-fieldset-legend\"\n [ngClass]=\"field.labelClassName\">\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n @if (field.description) {\n <span class=\"sot-label-description\">{{ field.description }}</span>\n }\n </legend>\n <div class=\"sot-fieldset-content\"\n [attr.id]=\"'array-content-' + uuid\">\n <div *ngTemplateOutlet=\"groupFields\"></div>\n </div>\n }\n </fieldset>\n</div>\n\n<ng-template #groupFields>\n <div class=\"sot-formfield-array\" [formGroup]=\"group\">\n <div [formArrayName]=\"field.name\">\n @for (inst of field.instances; track inst; let i = $index) {\n <fieldset class=\"sot-formfield-array-element\"\n [ngClass]=\"field.elementClassName\">\n <legend class=\"sot-formfield-array-element-label\">\n {{ field.itemLabel ?? 'Item' }} {{ inst.number + 1 }}\n </legend>\n <div class=\"sot-formfield-array-element-content\"\n [ngClass]=\"field.elementContentClassName\">\n @for (f of inst.fields; track f.name + f.type) {\n <div [hidden]=\"f.hidden\" [ngClass]=\"f.hostClassName\">\n <ng-container sotDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"inst.group\"\n [instancePath]=\"path + '[' + inst.number + ']'\"\n ></ng-container>\n </div>\n }\n </div>\n <div class=\"sot-formfield-array-element-action\">\n @if (!field.disabled && (!field.minNbRow || field.minNbRow < array.controls.length)) {\n <button type=\"button\"\n class=\"sot-button\"\n (click)=\"deleteItem(i, inst)\"\n >\n {{ field.deleteButton?.label ?? 'Delete' }}\n </button>\n }\n </div>\n </fieldset>\n }\n @if (!field.disabled && (!field.maxNbRow || field.maxNbRow > array.controls.length)) {\n <div class=\"sot-formfield-array-add-button\">\n <button type=\"button\"\n class=\"sot-button\"\n (click)=\"addItem()\"\n >\n {{ field.addButton?.label ?? 'Add' }}\n </button>\n </div>\n }\n <div\n class=\"sot-messages-group\"\n [attr.id]=\"'sot-array-' + uuid + '-error'\"\n aria-live=\"assertive\">\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <p class=\"sot-message sot-message--error\">\n {{ validation.message }}\n </p>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n","import {Component, forwardRef} from '@angular/core';\nimport {AbstractFieldComponent, AcRowConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {AcDynamicFieldDirective} from \"../dynamic-field.directive\";\n\n@Component({\n selector: 'sot-row',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass,\n forwardRef(() => AcDynamicFieldDirective)\n ],\n templateUrl: './row.component.html',\n styleUrls: ['./row.component.scss'],\n})\nexport class AcRowComponent extends AbstractFieldComponent<AcRowConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-row\" [ngClass]=\"field.className\">\n @for (f of field.fields; track f.type + f.name) {\n <div\n [hidden]=\"f.hidden\"\n [ngClass]=\"f.hostClassName\">\n <ng-container\n sotDynamicField\n [path]=\"path + '.' + f.name\"\n [type]=\"f.type\"\n [field]=\"f\"\n [group]=\"group\"\n [instancePath]=\"instancePath\"\n >\n </ng-container>\n </div>\n }\n</div>\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\r\n\r\nexport class PasswordValidators {\r\n\r\n static patternValidator(regex: RegExp, error: ValidationErrors): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n const valid = regex.test(control.value);\r\n return valid ? null : error;\r\n };\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldPasswordConfig\n} from '../../../core';\nimport {ReactiveFormsModule, Validators} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {PasswordValidators} from \"./password-validators\";\n\n@Component({\n selector: 'sot-field-password',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-password.component.html',\n styleUrls: ['./field-password.component.scss'],\n})\nexport class AcFieldPasswordComponent extends AbstractControlFieldComponent<AcFieldPasswordConfig> implements OnInit {\n inputType: string = 'password';\n showPasswordLabel?: string;\n hidePasswordLabel?: string;\n iconErrorLabel?: string;\n iconSuccessLabel?: string;\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.showPasswordLabel = this.field.labels?.showPassword ?? \"Show password\";\n this.hidePasswordLabel = this.field.labels?.hidePassword ?? \"Hide password\";\n this.iconSuccessLabel = this.field.labels?.iconSuccess ?? \"Success\";\n this.iconErrorLabel = this.field.labels?.iconError ?? \"Error\";\n if (this.control) {\n this.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (value?.length == 0) {\n this.control!.setValue(null);\n }\n });\n this.setPasswordValidators();\n }\n }\n\n tooglePassword() {\n this.inputType = this.inputType === 'password' ? 'text' : 'password';\n }\n\n get minLengthValid() {\n return this.control!.value && !this.control!.hasError(\"minlength\");\n }\n\n get maxLengthValid() {\n return this.control!.value && !this.control!.hasError(\"maxlength\");\n }\n\n get requiresDigitValid() {\n return this.control!.value && !this.control!.hasError(\"requiresDigit\");\n }\n\n get requiresUppercaseValid() {\n return this.control!.value && !this.control!.hasError(\"requiresUppercase\");\n }\n\n get requiresLowercaseValid() {\n return this.control!.value && !this.control!.hasError(\"requiresLowercase\");\n }\n\n get requiresSpecialCharsValid() {\n return this.control!.value && !this.control!.hasError(\"requiresSpecialChars\");\n }\n\n private setPasswordValidators() {\n if (this.field.minlength) {\n this.control?.addValidators(Validators.minLength(this.field.minlength));\n }\n if (this.field.maxlength) {\n this.control?.addValidators(Validators.maxLength(this.field.maxlength));\n }\n if (this.field.requiresDigit) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[0-9])/, {\n requiresDigit: true\n }))\n }\n if (this.field.requiresUppercase) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[A-Z])/, {\n requiresUppercase: true\n }))\n }\n if (this.field.requiresLowercase) {\n this.control?.addValidators(PasswordValidators.patternValidator(/(?=.*[a-z])/, {\n requiresLowercase: true\n }))\n }\n if (this.field.requiresSpecialChars) {\n const chars = this.field.specialChars?.join(\"\") ?? \"$@^!%*?&\";\n const regex = \"(?=.*[\" + chars + \"])\";\n this.control?.addValidators(PasswordValidators.patternValidator(new RegExp(regex), {\n requiresSpecialChars: true\n }))\n }\n }\n}\n","<div class=\"sot-formfield sot-formfield-password\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"sot-formfield-wrapper\"\r\n [ngClass]=\"{\r\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-formfield--valid': control && !control.untouched && control.valid,\r\n 'sot-formfield--disabled': (control && control.disabled),\r\n }\">\r\n <label\r\n class=\"sot-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-input-' + uuid\">\r\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"sot-label-description\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div class=\"sot-input-wrapper\">\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\">\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n class=\"sot-button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{ prefix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n\r\n <input\r\n class=\"sot-input\"\r\n [ngClass]=\"{\r\n 'sot-input--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-input--valid': control && !control.untouched && control.valid,\r\n 'sot-input--disabled': (control && control.disabled),\r\n }\"\r\n [type]=\"inputType\"\r\n [attr.id]=\"'sot-input-' + uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field.autocomplete ?? 'off'\"\r\n [maxlength]=\"field.maxlength ?? 10000000\"/>\r\n\r\n <button type=\"button\" class=\"sot-button\"\r\n (click)=\"tooglePassword()\"\r\n [attr.aria-label]=\"inputType === 'password' ? showPasswordLabel : hidePasswordLabel\"\r\n [attr.aria-pressed]=\"inputType === 'password'\">\r\n @if(inputType === 'password') {\r\n <span aria-hidden=\"true\" class=\"sot-icon-eye-off-fill\"></span>\r\n } @else {\r\n <span aria-hidden=\"true\" class=\"sot-icon-eye-fill\"></span>\r\n }\r\n </button>\r\n\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-suffix\">\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n class=\"sot-button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{ suffix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n <div\r\n class=\"sot-messages-group\"\r\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"sot-message sot-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n <ul class=\"password-description\" [id]=\"uuid + '-description'\">\r\n @if (field.minlength) {\r\n <li [ngClass]=\"{ 'text-success': minLengthValid, 'text-error': !minLengthValid }\">\r\n <span [ngClass]=\"minLengthValid ? 'check' : 'error'\"\r\n [attr.aria-label]=\"minLengthValid ? iconSuccessLabel : iconErrorLabel\"></span>\r\n {{ field.labels?.minlength ?? \"Must be at least 8 characters long\" }}\r\n </li>\r\n }\r\n @if (field.maxlength) {\r\n <li [ngClass]=\"{ 'text-success': maxLengthValid, 'text-error': !maxLengthValid }\">\r\n <span [ngClass]=\"maxLengthValid ? 'check' : 'error'\"\r\n [attr.aria-label]=\"maxLengthValid ? iconSuccessLabel : iconErrorLabel\"></span>\r\n {{ field.labels?.maxlength ?? \"Must be at most 8 characters long\" }}\r\n </li>\r\n }\r\n @if (field.requiresDigit) {\r\n <li [ngClass]=\"{ 'text-success': requiresDigitValid, 'text-error': !requiresDigitValid }\">\r\n <span [ngClass]=\"requiresDigitValid ? 'check' : 'error'\"\r\n [attr.aria-label]=\"requiresDigitValid ? iconSuccessLabel : iconErrorLabel\"></span>\r\n {{ field.labels?.requiresDigit ?? \"Must contain at least 1 digit\" }}\r\n </li>\r\n }\r\n @if (field.requiresUppercase) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresUppercaseValid, 'text-error': !requiresUppercaseValid }\">\r\n <span [ngClass]=\"requiresUppercaseValid ? 'check' : 'error'\"\r\n [attr.aria-label]=\"requiresUppercaseValid ? iconSuccessLabel : iconErrorLabel\"></span>\r\n {{ field.labels?.requiresUppercase ?? \"Must contain at least 1 uppercase character\" }}\r\n </li>\r\n }\r\n @if (field.requiresLowercase) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresLowercaseValid, 'text-error': !requiresLowercaseValid }\">\r\n <span [ngClass]=\"requiresLowercaseValid ? 'check' : 'error'\"\r\n [attr.aria-label]=\"requiresLowercaseValid ? iconSuccessLabel : iconErrorLabel\"></span>\r\n {{ field.labels?.requiresLowercase ?? \"Must contain at least 1 lowercase character\" }}\r\n </li>\r\n }\r\n @if (field.requiresSpecialChars) {\r\n <li\r\n [ngClass]=\"{ 'text-success': requiresSpecialCharsValid, 'text-error': !requiresSpecialCharsValid }\">\r\n <span [ngClass]=\"requiresSpecialCharsValid ? 'check' : 'error'\"\r\n [attr.aria-label]=\"requiresSpecialCharsValid ? iconSuccessLabel : iconErrorLabel\"></span>\r\n {{ field.labels?.requiresSpecialChars ?? \"Must contain at least 1 special character\" }}\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n\r\n","import {Component} from '@angular/core';\nimport {AbstractControlFieldComponent, AcFieldRadioButtonConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'sot-field-radio-button',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-radio-button.component.html',\n styleUrls: ['./field-radio-button.component.scss'],\n})\nexport class AcFieldRadioButtonComponent extends AbstractControlFieldComponent<AcFieldRadioButtonConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-radio\" [ngClass]=\"field.className\">\r\n <fieldset\r\n class=\"sot-formfield-wrapper sot-fieldset\"\r\n [ngClass]=\"{\r\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-formfield--valid': control && !control.untouched && control.valid,\r\n 'sot-formfield--disabled': control && control.disabled,\r\n }\"\r\n [id]=\"'radio-' + uuid\"\r\n [attr.aria-labelledby]=\"'radio-legend-' + uuid\"\r\n [formGroup]=\"group\">\r\n <legend\r\n class=\"sot-fieldset-legend\"\r\n [ngClass]=\"field.labelClassName\"\r\n [id]=\"'radio-legend-' + uuid\">\r\n <span class=\"sot-legend-text\" [innerHTML]=\"field.label\"></span>\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"sot-label-description\">{{ field.description }}</span>\r\n }\r\n </legend>\r\n @if (field.options) {\r\n @for (item of field.options; track item; let i = $index) {\r\n <div\r\n class=\"sot-fieldset-element\"\r\n [ngClass]=\"{ 'sot-fieldset--inline': !field.verticalAlign }\">\r\n <div class=\"sot-radio-group\">\r\n <input\r\n type=\"radio\"\r\n [id]=\"'radio-' + uuid + '-' + i\"\r\n [value]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [attr.name]=\"uuid\"\r\n [formControlName]=\"field.name\"\r\n [attr.disabled]=\"field.disabledKey && !!item[field.disabledKey] ? true : undefined\"\r\n [ngClass]=\"{\r\n 'sot-radio--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-radio--valid': control && !control.untouched && control.valid,\r\n 'sot-radio--disabled': control && control.disabled,\r\n }\"/>\r\n <label\r\n class=\"sot-label\"\r\n [for]=\"'radio-' + uuid + '-' + i\">\r\n <span class=\"sot-label-text\"\r\n [innerHTML]=\"field.labelKey ? item[field.labelKey!] : item\"></span>\r\n @if (field.descriptionKey) {\r\n <span class=\"sot-label-description\">{{ item[field.descriptionKey] }}</span>\r\n }\r\n </label>\r\n </div>\r\n </div>\r\n }\r\n }\r\n <div\r\n class=\"sot-messages-group\"\r\n [attr.id]=\"'sot-radio-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"sot-message sot-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </fieldset>\r\n</div>\r\n","import {Component} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldSelectConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {isObservable} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'sot-field-select',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-select.component.html',\n styleUrls: ['./field-select.component.scss'],\n})\nexport class AcFieldSelectComponent extends AbstractControlFieldComponent<AcFieldSelectConfig> {\n options: any[] = [];\n\n override ngOnInit() {\n super.ngOnInit();\n if (isObservable(this.field.options)) {\n this.field.options.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((options: any[]) => {\n this.options = options;\n });\n } else {\n this.options = this.field.options;\n }\n }\n\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!);\n }\n }\n\n}\n","<div class=\"sot-formfield sot-formfield-select\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"sot-formfield-wrapper\"\r\n [ngClass]=\"{\r\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-formfield--valid': control && !control.untouched && control.valid,\r\n 'sot-formfield--disabled': control && control.disabled,\r\n }\">\r\n <label\r\n class=\"sot-label\"\r\n [ngClass]=\"field.labelClassName\"\r\n [attr.for]=\"'sot-select-' + uuid\">\r\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"sot-label-description\">{{ field.description }}</span>\r\n }\r\n </label>\r\n <div class=\"sot-input-wrapper\">\r\n @for (prefix of field.prefixes; track prefix) {\r\n <span class=\"sot-formfield-prefix\">\r\n @if (prefix.action) {\r\n <button type=\"button\"\r\n class=\"sot-button\"\r\n [attr.aria-label]=\"prefix.actionAriaLabel\"\r\n (click)=\"buttonAction(prefix)\"\r\n >{{ prefix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"prefix.label\"></span>\r\n }\r\n </span>\r\n }\r\n <select\r\n class=\"sot-select\"\r\n [ngClass]=\"{\r\n 'sot-select--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-select--valid': control && !control.untouched && control.valid,\r\n 'sot-select--disabled': control && control.disabled,\r\n }\"\r\n [attr.id]=\"'sot-select-' + uuid\"\r\n [formControlName]=\"field.name\">\r\n @if (field.resetOption) {\r\n <option [ngValue]=\"undefined\">\r\n {{ field.resetOptionLabel }}\r\n </option>\r\n }\r\n\r\n @if (field.options) {\r\n @if (field.groupLabelKey) {\r\n @for (group of options; track group) {\r\n <optgroup [label]=\"field.groupLabelKey ? group[field.groupLabelKey] : ''\">\r\n @if (field.groupOptionsKey && group[field.groupOptionsKey]) {\r\n @for (item of group[field.groupOptionsKey]; track item) {\r\n <option\r\n [ngValue]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [disabled]=\"field.disabledKey ? item[field.disabledKey] : false\">\r\n {{ field.labelKey ? item[field.labelKey!] : item }}\r\n </option>\r\n }\r\n }\r\n </optgroup>\r\n }\r\n } @else {\r\n @for (item of options; track item) {\r\n <option\r\n [ngValue]=\"field.valueKey ? item[field.valueKey] : item\"\r\n [disabled]=\"field.disabledKey ? item[field.disabledKey] : false\">\r\n {{ field.labelKey ? item[field.labelKey!] : item }}\r\n </option>\r\n }\r\n }\r\n\r\n }\r\n </select>\r\n @for (suffix of field.suffixes; track suffix) {\r\n <span class=\"sot-formfield-suffix\">\r\n @if (suffix.action) {\r\n <button type=\"button\"\r\n class=\"sot-button\"\r\n [attr.aria-label]=\"suffix.actionAriaLabel\"\r\n (click)=\"buttonAction(suffix)\"\r\n >{{ suffix.label }}</button>\r\n } @else {\r\n <span [innerHTML]=\"suffix.label\"></span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n <div\r\n class=\"sot-messages-group\"\r\n [attr.id]=\"'sot-select-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"sot-message sot-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component} from '@angular/core';\nimport {AbstractControlFieldComponent, AcFieldToggleConfig} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'sot-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class AcFieldToggleComponent extends AbstractControlFieldComponent<AcFieldToggleConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-toogle\" [ngClass]=\"field.className\">\r\n <div\r\n [formGroup]=\"group\"\r\n class=\"sot-formfield-wrapper\"\r\n [ngClass]=\"{\r\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-formfield--valid': control && !control.untouched && control.valid ,\r\n 'sot-formfield--disabled': control && control.disabled,\r\n }\">\r\n <div class=\"sot-toggle\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"sot-toggle-input\"\r\n [attr.id]=\"'sot-toggle-' + uuid\"\r\n [formControlName]=\"field.name\"\r\n [required]=\"!!required\"\r\n [attr.disabled]=\"field.disabled\"\r\n [ngClass]=\"{\r\n 'sot-toggle--error': control && !control.untouched && !control.valid && !control.disabled,\r\n 'sot-toggle--valid': control && !control.untouched && control.valid,\r\n 'sot-toggle--disabled': control && control.disabled,\r\n }\"/>\r\n <label\r\n class=\"sot-toggle-label\"\r\n [attr.for]=\"'sot-toggle-' + uuid\"\r\n [attr.data-sot-checked-label]=\"field.checkedLabel\"\r\n [attr.data-sot-unchecked-label]=\"field.uncheckedLabel\"\r\n >\r\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\r\n @if (required) {\r\n <span class=\"sot-label-required\">*</span>\r\n }\r\n @if (field.description) {\r\n <span class=\"sot-label-description\">{{ field.description }}</span>\r\n }\r\n </label>\r\n </div>\r\n <div\r\n class=\"sot-messages-group\"\r\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of field.validations; track validation) {\r\n @if (control && !control.untouched && control.hasError(validation.name)) {\r\n <p class=\"sot-message sot-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {Component} from '@angular/core';\nimport {\n AbstractControlFieldComponent,\n AcAffix,\n AcFieldTextareaConfig\n} from '../../../core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'sot-field-textarea',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-textarea.component.html',\n styleUrls: ['./field-textarea.component.scss'],\n})\nexport class AcFieldTextareaComponent extends AbstractControlFieldComponent<AcFieldTextareaConfig> {\n buttonAction(b: AcAffix) {\n if (b.action && this.field && this.group) {\n b.action(this.field, this.group, this.dynamicFormService.data!\n );\n }\n }\n}\n","<div class=\"sot-formfield sot-formfield-textarea\" [ngClass]=\" field.className\">\n <div\n [formGroup]=\"group\"\n class=\"sot-formfield-wrapper\"\n [ngClass]=\"{\n 'sot-formfield--error': control && !control.untouched && !control.valid && !control.disabled,\n 'sot-formfield--valid': control && !control.untouched && control.valid ,\n 'sot-formfield--disabled': control && control.disabled,\n }\">\n <label\n class=\"sot-label\"\n [ngClass]=\"field.labelClassName\"\n [attr.for]=\"'sot-textarea-' + uuid\">\n <span class=\"sot-label-text\" [innerHTML]=\"field.label\"></span>\n @if (required) {\n <span class=\"sot-label-required\">*</span>\n }\n @if (field.description) {\n <span class=\"sot-label-description\">{{ field.description }}</span>\n }\n </label>\n <div class=\"sot-input-wrapper\">\n @for (prefix of field.prefixes; track prefix) {\n <span class=\"sot-formfield-prefix\">\n @if (prefix.action) {\n <button type=\"button\"\n class=\"sot-button\"\n [attr.aria-label]=\"prefix.actionAriaLabel\"\n (click)=\"buttonAction(prefix)\"\n >{{ prefix.label }}</button>\n } @else {\n <span [innerHTML]=\"prefix.label\"></span>\n }\n </span>\n }\n\n <textarea\n class=\"sot-textarea\"\n [ngClass]=\"{\n 'sot-input--error': control && !control.untouched && !control.valid && !control.disabled,\n 'sot-input--valid': control && !control.untouched && control.valid ,\n 'sot-input--disabled': control && control.disabled,\n }\"\n [attr.id]=\"'sot-textarea-' + uuid\"\n [formControlName]=\"field.name\"\n [required]=\"!!required\"\n [readonly]=\"field.readonly\"\n [rows]=\"field.rows\"\n [maxlength]=\"field.maxlength ?? 10000000\">\n </textarea>\n\n @for (suffix of field.suffixes; track suffix) {\n <span class=\"sot-formfield-suffix\">\n @if (suffix.action) {\n <button type=\"button\"\n class=\"sot-button\"\n [attr.aria-label]=\"suffix.actionAriaLabel\"\n (click)=\"buttonAction(suffix)\"\n >{{ suffix.label }}</button>\n } @else {\n <span [innerHTML]=\"suffix.label\"></span>\n }\n </span>\n }\n </div>\n <div\n class=\"sot-messages-group\"\n [attr.id]=\"'sot-input-' + uuid + '-error'\"\n aria-live=\"assertive\">\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <p class=\"sot-message sot-message--error\">\n {{ validation.message }}\n </p>\n }\n }\n </div>\n </div>\n</div>\n","import {\n ComponentRef,\n Directive,\n EnvironmentInjector,\n inject,\n input,\n InputSignal,\n OnChanges,\n SimpleChanges,\n Type,\n ViewContainerRef\n} from \"@angular/core\";\nimport {AcDivTextComponent} from \"./div-text/div-text.component\";\nimport {AcFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig} from '../../core';\nimport {AcFieldInputComponent} from './field-input/field-input.component';\nimport {AcGroupComponent} from \"./group/group.component\";\nimport {AcArrayComponent} from \"./array/array.component\";\nimport {AcRowComponent} from \"./row/row.component\";\nimport {AcFieldPasswordComponent} from \"./field-password/field-password.component\";\nimport {AcFieldRadioButtonComponent} from \"./field-radio-button/field-radio-button.component\";\nimport {AcFieldSelectComponent} from \"./field-select/field-select.component\";\nimport {AcFieldToggleComponent} from \"./field-toggle/field-toggle.component\";\nimport {AcFieldTextareaComponent} from \"./field-textarea/field-textarea.component\";\n\n\nconst components: { [type: string]: Type<AcField> } = {\n group: AcGroupComponent,\n array: AcArrayComponent,\n row: AcRowComponent,\n text: AcDivTextComponent,\n checkbox: AcFieldCheckboxComponent,\n input: AcFieldInputComponent,\n password: AcFieldPasswordComponent,\n radio: AcFieldRadioButtonComponent,\n select: AcFieldSelectComponent,\n textarea: AcFieldTextareaComponent,\n toggle: AcFieldToggleComponent,\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n customField: AcFieldCustomComponent,\n tabs: AcTabsComponent,\n file: AcFieldFileComponent,\n\n */\n};\n\n@Directive({\n selector: \"[sotDynamicField]\",\n standalone: true\n})\nexport class AcDynamicFieldDirective implements OnChanges {\n private container: ViewContainerRef = inject(ViewContainerRef);\n private injector: EnvironmentInjector = inject(EnvironmentInjector);\n type: InputSignal<string> = input.required<string>();\n path: InputSignal<string> = input.required<string>();\n field: InputSignal<AcFieldConfig | AcTextConfig> = input.required<AcFieldConfig | AcTextConfig>();\n group: InputSignal<FormGroup> = input.required<FormGroup>();\n instancePath: InputSignal<string | undefined> = input<string>();\n\n component: ComponentRef<AcField> | undefined;\n\n ngOnChanges(changes: SimpleChanges) {\n if (!components[this.field().type]) {\n const supportedTypes = Object.keys(components).join(\", \");\n throw new Error(\n `Trying to use an unsupported type (${this.field().type}).\n Supported types: ${supportedTypes}`\n );\n } else {\n if (!this.component || changes[\"type\"]) {\n this.container.clear();\n this.component = this.container.createComponent(components[this.field().type], {\n environmentInjector: this.injector\n });\n }\n this.component.instance.field = this.field();\n this.component.instance.group = this.group();\n this.component.instance.instancePath = this.instancePath();\n this.component.instance.path = this.path();\n }\n }\n\n}\n","import {\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n InputSignal,\n output,\n OutputEmitterRef\n} from '@angular/core';\nimport {AbstractControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {AcDynamicForm, DynamicFormService} from '../../core';\nimport {distinctUntilChanged, Observable} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\nimport {AcDynamicFieldDirective} from '../components/dynamic-field.directive';\nimport {NgClass} from '@angular/common';\nimport {MatError} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport * as _ from \"lodash-es\";\n\n@Component({\n exportAs: 'dynamicForm',\n selector: 'sot-classic-dynamic-form',\n standalone: true,\n imports: [AcDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError, MatIconModule, MatButtonModule],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class AcClassicDynamicFormComponent {\n private readonly dynamicFormService: DynamicFormService = inject(DynamicFormService);\n private readonly destroyRef = inject(DestroyRef);\n config: InputSignal<AcDynamicForm | null> = input.required<AcDynamicForm | null>();\n initialValues: InputSignal<any> = input<any>();\n formCancel: OutputEmitterRef<void> = output<void>();\n formSubmit: OutputEmitterRef<FormGroup> = output<FormGroup>();\n formChange: OutputEmitterRef<FormGroup> = output<FormGroup>();\n\n get form(): FormGroup | undefined {\n return this.dynamicFormService.form;\n }\n\n get controls(): { [key: string]: AbstractControl } | null {\n return this.form ? this.form.controls : null;\n }\n\n get changes(): Observable<any> | null {\n return this.form ? this.form.valueChanges : null;\n }\n\n get valid(): boolean | null {\n return this.form ? this.form.valid : null;\n }\n\n get value(): any {\n return this.form ? this.form.value : null;\n }\n\n constructor() {\n effect(() => {\n if (!this.form && this.config() != null) {\n this.createForm();\n }\n if (this.initialValues() && this.form && this.form.pristine) {\n this.setValue(this.initialValues());\n }\n });\n }\n\n createForm() {\n this.dynamicFormService.createForm(this.config()!.fields, this.config()!.validations, this.config()!.updateOn, this.initialValues());\n this.formChange.emit(this.form!);\n this.form!.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(this.config()!.debounceTime ?? 0),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.formChange.emit(this.form!);\n });\n }\n\n setValue(values: { [key: string]: any }) {\n this.form!.setValue(values);\n this.form!.updateValueAndValidity();\n }\n\n onClickButton(button: any) {\n if (button.type === 'reset') {\n this.reset();\n }\n if (button.action) {\n button.action(this.form!);\n }\n }\n\n reset() {\n this.form!.reset();\n this.formCancel.emit();\n }\n\n handleSubmit(event?: Event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (this.form!.valid) {\n this.formSubmit.emit(this.form!);\n } else {\n this.form!.markAllAsTouched();\n _.defer(() => {\n this.focusFirstInvalidControl();\n });\n }\n }\n\n focusFirstInvalidControl() {\n // TODO\n }\n}\n","@if (form && config()) {\r\n <form class=\"dynamic-form\"\r\n [formGroup]=\"form\"\r\n (submit)=\"handleSubmit($event)\"\r\n [ngClass]=\"config()!.className?.form\">\r\n @if (this.config()!.fields) {\r\n <div class=\"dynamic-form-content\"\r\n [ngClass]=\"config()!.className?.formContent\">\r\n @for (field of config()!.fields; track field.type + field.name) {\r\n <div [hidden]=\"!!field.hidden\"\r\n [ngClass]=\"field.hostClassName\">\r\n <ng-container\r\n sotDynamicField\r\n [path]=\"field.name\"\r\n [type]=\"field.type\"\r\n [field]=\"field\"\r\n [group]=\"form\"\r\n >\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"sot-messages-group\"\r\n [attr.id]=\"'sot-form-error'\"\r\n aria-live=\"assertive\">\r\n @for (validation of config()!.validations; track validation) {\r\n @if (form && !form.untouched && form.hasError(validation.name)) {\r\n <p class=\"sot-message sot-message--error\">\r\n {{ validation.message }}\r\n </p>\r\n }\r\n }\r\n </div>\r\n @if (config()!.buttons) {\r\n <div class=\"dynamic-form-buttons\" [ngClass]=\"config()!.className?.formButtons\">\r\n @for (button of config()!.buttons; track $index) {\r\n <!-- TODO\r\n <sot-button [type]=\"button.type\"\r\n [className]=\"button.className\"\r\n [matType]=\"button.matButtonType ?? 'raised'\"\r\n [disabled]=\"button.disabledIfFormNoValid && form.invalid\"\r\n [matIcon]=\"button.matIcon\"\r\n [label]=\"button.label\"\r\n [title]=\"button.title\"\r\n [ariaLabel]=\"button.ariaLabel\"\r\n (buttonClick)=\"onClickButton(button)\"\r\n ></sot-button>\r\n -->\r\n }\r\n </div>\r\n }\r\n </form>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["AcDivTextComponent","AcFieldCheckboxComponent","i2","AcFieldInputComponent","AcDynamicFieldDirective","AcGroupComponent","AcArrayComponent","AcRowComponent","PasswordValidators","i3","AcFieldPasswordComponent","AcFieldRadioButtonComponent","AcFieldSelectComponent","AcFieldTextareaComponent","AcFieldToggleComponent","components"],"mappings":"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"}
|