@sotoa-ui/dynamic-form 0.0.13 → 0.0.14
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sotoa-ui-dynamic-form.mjs","sources":["../../../../projects/sotoa-ui/dynamic-form/core/models/condition.ts","../../../../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/abstract-field/custom-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/field-custom/field-custom.directive.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-custom/field-custom.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-custom/field-custom.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/confirm-dialog/confirm-dialog.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/confirm-dialog/confirm-dialog.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/button/button.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/button/button.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/input-file/input-file.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/input-file/input-file.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-file/field-file.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-file/field-file.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-chips/field-chips.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-chips/field-chips.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-date/field-date.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-date/field-date.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-material/dynamic-form-modal/dynamic-form-modal.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form-modal/dynamic-form-modal.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form-stepper/dynamic-form-stepper.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form-stepper/dynamic-form-stepper.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":["export interface AcCondition {\r\n type: 'condition';\r\n logicOperator?: AcLogicOperatorEnum;\r\n items: (AcCondition | AcExpression)[];\r\n}\r\n\r\nexport interface AcExpression {\r\n type: 'expression';\r\n fieldId: string;\r\n operator: AcExpressionOperatorEnum;\r\n value: any;\r\n}\r\n\r\nexport enum AcLogicOperatorEnum {\r\n OR = \"OR\",\r\n AND = \"AND\"\r\n}\r\n\r\nexport enum AcExpressionOperatorEnum {\r\n EQUALS = \"EQUALS\",\r\n NOT_EQUALS = \"NOT_EQUALS\",\r\n CHECKED = \"CHECKED\",\r\n NOT_CHECKED = \"NOT_CHECKED\",\r\n NOT_EMPTY = \"NOT_EMPTY\",\r\n EMPTY = \"EMPTY\",\r\n CONTAINS = \"CONTAINS\",\r\n START_WITH = \"START_WITH\",\r\n NOT_START_WITH = \"NOT_START_WITH\",\r\n NOT_CONTAINS = \"NOT_CONTAINS\",\r\n GREATER_THAN = \"GREATER_THAN\",\r\n GREATER_EQUAL_THAN = \"GREATER_EQUAL_THAN\",\r\n LESS_THAN = \"LESS_THAN\",\r\n LESS_EQUAL_THAN = \"LESS_EQUAL_THAN\",\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {AcValidator} from \"../models/validator\";\r\nimport {DynamicFormData, FormField} from \"../models/field-config\";\r\nimport {\r\n AcCondition,\r\n AcExpression,\r\n AcExpressionOperatorEnum,\r\n AcLogicOperatorEnum\r\n} from \"../models/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 fieldPaths = dynamicFormDatas.idPathMap.get(cond.fieldId);\r\n if (fieldPaths) {\r\n for (let path of fieldPaths) {\r\n const formField = dynamicFormDatas.pathFieldMap.get(path.path);\r\n if (formField) {\r\n const isConditionKo = !this.checkCondition(cond.validation.condition!, dynamicFormDatas, path.instance);\r\n this.setValidation(formField, cond.validation, isConditionKo);\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 checkDisplayConditions(\r\n displayConditions: { fieldId: string; condition: AcCondition | AcExpression }[],\r\n dynamicFormDatas: DynamicFormData\r\n ) {\r\n for (const cond of displayConditions) {\r\n const fieldPaths = dynamicFormDatas.idPathMap.get(cond.fieldId);\r\n if (fieldPaths) {\r\n for (let path of fieldPaths) {\r\n const formField = dynamicFormDatas.pathFieldMap.get(path.path);\r\n if (formField) {\r\n const isConditionKo = !this.checkCondition(cond.condition, dynamicFormDatas, path.instance);\r\n this.setHidden(formField, isConditionKo);\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(item: AcCondition | AcExpression,\r\n dynamicFormDatas: DynamicFormData,\r\n instance: string | null): boolean {\r\n let isOk = false;\r\n if (item.type === 'expression') {\r\n isOk = this.checkExpression(item as AcExpression, dynamicFormDatas, instance);\r\n } else {\r\n for (const i of item.items) {\r\n isOk = this.checkCondition(i as AcCondition, dynamicFormDatas, instance);\r\n if ((item.logicOperator === AcLogicOperatorEnum.OR && isOk)\r\n || (item.logicOperator === AcLogicOperatorEnum.AND && !isOk)) {\r\n break;\r\n }\r\n }\r\n }\r\n return isOk;\r\n }\r\n\r\n checkExpression(item: AcExpression,\r\n dynamicFormDatas: DynamicFormData,\r\n instance: string | null): boolean {\r\n let isOk = false;\r\n const fieldPath = dynamicFormDatas.idPathMap.get(item.fieldId)?.filter(x => x.instance === instance)[0];\r\n if (fieldPath) {\r\n isOk = this.evalExpression(dynamicFormDatas.pathFieldMap.get(fieldPath.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 switch (operator) {\r\n case AcExpressionOperatorEnum.EQUALS:\r\n isOk = refValue === fieldValue;\r\n break;\r\n case AcExpressionOperatorEnum.NOT_EQUALS:\r\n isOk = refValue !== fieldValue;\r\n break;\r\n case AcExpressionOperatorEnum.CHECKED:\r\n isOk = fieldValue === true;\r\n break;\r\n case AcExpressionOperatorEnum.NOT_CHECKED:\r\n isOk = fieldValue !== true;\r\n break;\r\n case AcExpressionOperatorEnum.NOT_EMPTY:\r\n isOk = fieldValue?.length > 0;\r\n break;\r\n case AcExpressionOperatorEnum.EMPTY:\r\n isOk = !fieldValue || fieldValue.length == 0;\r\n break;\r\n case AcExpressionOperatorEnum.START_WITH:\r\n isOk = !!fieldValue && !!refValue && !fieldValue.startsWith(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.NOT_START_WITH:\r\n isOk = !!fieldValue && !!refValue && !fieldValue.startsWith(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.CONTAINS:\r\n isOk = !!fieldValue && !!refValue && fieldValue.includes(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.NOT_CONTAINS:\r\n isOk = !!fieldValue && !!refValue && !fieldValue.includes(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.GREATER_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) > Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue > refValue;\r\n }\r\n break;\r\n case AcExpressionOperatorEnum.GREATER_EQUAL_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) >= Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue >= refValue;\r\n }\r\n break;\r\n case AcExpressionOperatorEnum.LESS_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) < Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue < refValue;\r\n }\r\n break;\r\n case AcExpressionOperatorEnum.LESS_EQUAL_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) <= Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue <= refValue;\r\n }\r\n break;\r\n }\r\n return isOk;\r\n }\r\n\r\n}\r\n\r\n","import {DestroyRef, inject, Injectable} from \"@angular/core\";\nimport {\n AbstractControlOptions,\n FormArray,\n FormBuilder,\n FormControl,\n FormGroup\n} 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/step-config\";\nimport * as _ from \"lodash-es\";\nimport {AcCondition, AcExpression} from \"../models/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 | AcExpression }[] = [];\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 pathFieldMap: new Map(),\n };\n this.form = this.createGroup(fields, null, 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 pathFieldMap: 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, 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 instance: 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, instance, initialValues);\n });\n return group;\n }\n\n treatField(\n config: AcFieldConfig | AcTextConfig,\n group: FormGroup,\n parentPath: string | null,\n instance: 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.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(instance, path, config, null);\n } else if (config.type === \"group\") {\n group.addControl(config.name, this.createGroupField(config, parentPath, instance, initialValues));\n } else if (config.type === \"array\") {\n group.addControl(config.name, this.createArray(config, parentPath, instance, initialValues));\n } else if (config.type === \"row\") {\n this.setFormFieldMapItem(instance, path, config, null);\n config.fields.forEach((child) => {\n this.treatField(child, group, parentPath, instance, initialValues);\n });\n } else {\n const control = this.createControl(config, initialValues);\n this.setFormFieldMapItem(instance, path, config, control);\n group.addControl(config.name, control);\n }\n }\n\n createGroupField(\n groupConfig: AcGroupConfig,\n parentPath: string | null,\n instance: string | null,\n initialValues: any\n ) {\n const path = (parentPath ? parentPath + this.separator : \"\") + groupConfig.name;\n const g: FormGroup = this.createGroup(groupConfig.fields, path, instance, 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(instance, 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}]`, `${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 instance: 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(instance, path, arrayConfig, formArray);\n return formArray;\n }\n\n setFormFieldMapItem(\n instance: string | null,\n path: string,\n config: AcFieldConfig | AcTextConfig | StepConfig,\n control: FormControl | FormGroup | FormArray | null\n ) {\n if (!this.data!.idPathMap.get(config.id!)) {\n this.data!.idPathMap.set(config.id!, []);\n }\n this.data!.idPathMap.get(config.id!)?.push({instance, path});\n this.data!.pathFieldMap.set(path, {config, control});\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","import {ControlValueAccessor, FormGroup} from \"@angular/forms\";\r\nimport {AcFieldCustomConfig} from '../models/field-custom-config';\r\n\r\nexport class AcCustomComponentField implements ControlValueAccessor {\r\n field!: AcFieldCustomConfig<any>;\r\n group!: FormGroup;\r\n\r\n registerOnChange(fn: any): void {\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n }\r\n\r\n writeValue(obj: any): void {\r\n }\r\n\r\n}\r\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';\nimport {MatArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-mat-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class MatDivTextComponent 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';\nimport {MatArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-mat-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 {AbstractControlFieldComponent, AcAffix} 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\";\nimport {MatFieldInputConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-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 MatFieldInputComponent extends AbstractControlFieldComponent<MatFieldInputConfig> 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 [appearance]=\"field.appearance ?? 'fill'\">\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\" matButton\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\" matButton\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-mat-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 MatGroupComponent 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 matDynamicField\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-mat-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 MatArrayComponent 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 if(!this.field.instances) {\n this.field.instances = [];\n }\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, 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 this.field.instances!.splice(index, 1);\n for (const key of this.dynamicService.data!.pathFieldMap.keys()) {\n if (key.startsWith(`${this.path}[${inst.number}]`)) {\n this.dynamicFormService.data!.pathFieldMap.delete(key);\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 matDynamicField\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 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-mat-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 MatRowComponent 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 matDynamicField\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 {AbstractControlFieldComponent, AcAffix} 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, MatIconButton} from '@angular/material/button';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {PasswordValidators} from \"./password-validators\";\nimport {MatFieldPasswordConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-field-password',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatInputModule, MatButtonModule, MatIconButton],\n templateUrl: './field-password.component.html',\n styleUrls: ['./field-password.component.scss'],\n})\nexport class MatFieldPasswordComponent extends AbstractControlFieldComponent<MatFieldPasswordConfig> 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 [appearance]=\"field.appearance ?? 'fill'\">\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\" matIconButton 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\" matButton\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\" matButton\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-mat-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 MatFieldRadioButtonComponent 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 {AbstractControlFieldComponent, AcAffix} 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';\nimport {MatFieldSelectConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-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 MatFieldSelectComponent extends AbstractControlFieldComponent<MatFieldSelectConfig> {\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 [appearance]=\"field.appearance ?? 'fill'\">\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 [multiple]=\"field.multiple\"\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\" matButton\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\" matButton\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 {AbstractControlFieldComponent, AcAffix} 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';\nimport {MatFieldTextareaConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-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 MatFieldTextareaComponent extends AbstractControlFieldComponent<MatFieldTextareaConfig> {\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 [appearance]=\"field.appearance ?? 'fill'\">\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\" matButton\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\" matButton\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 {MatSlideToggleModule} from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'sot-mat-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatSlideToggleModule],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class MatFieldToggleComponent 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 EventEmitter,\n Host,\n inject,\n input,\n InputSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SkipSelf,\n ViewContainerRef,\n} from '@angular/core';\nimport {AsyncValidatorFn, ControlContainer, FormControl, FormGroup, NgControl, ValidatorFn} from '@angular/forms';\nimport {AcFieldCustomConfig} from '../../../core/models/field-custom-config';\nimport {AcCustomComponentField} from '../../../core/abstract-field/custom-component';\n\n@Directive({\n selector: '[fieldCustom]',\n standalone: true,\n})\nexport class AcFieldCustomDirective extends NgControl implements OnChanges, OnInit, OnDestroy {\n private container: ViewContainerRef = inject(ViewContainerRef);\n private injector: EnvironmentInjector = inject(EnvironmentInjector);\n field: InputSignal<AcFieldCustomConfig<any>> = input.required<AcFieldCustomConfig<any>>();\n group: InputSignal<FormGroup> = input.required<FormGroup>();\n\n component: ComponentRef<AcCustomComponentField> | undefined;\n\n // tslint:disable-next-line:no-output-rename\n @Output('ngModelChange') update = new EventEmitter();\n\n pcontrol!: FormControl;\n\n constructor(\n @Optional() @Host() @SkipSelf() private parent: ControlContainer,\n ) {\n super();\n }\n\n ngOnChanges() {\n if (this.component) {\n this.component.instance.field = this.field();\n this.component.instance.group = this.group();\n }\n }\n\n ngOnInit() {\n if (!this.field().component) {\n throw new Error(`Trying to use an empty component`);\n }\n this.name = this.field().name;\n this.container.clear();\n this.component = this.container.createComponent(this.field().component, {\n environmentInjector: this.injector\n });\n this.valueAccessor = this.component.instance;\n this.component.instance.field = this.field();\n this.component.instance.group = this.group();\n if (this.formDirective) {\n this.pcontrol = this.formDirective.addControl(this);\n }\n }\n\n override get path(): string[] {\n // @ts-ignore\n return [...this.parent.path, this.name];\n }\n\n get formDirective(): any {\n return this.parent ? this.parent.formDirective : null;\n }\n\n\n get control(): FormControl {\n return this.pcontrol;\n }\n\n\n override get validator(): ValidatorFn | null {\n return null;\n }\n\n override get asyncValidator(): AsyncValidatorFn | null {\n return null;\n }\n\n viewToModelUpdate(newValue: any): void {\n this.update.emit(newValue);\n }\n\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n if (this.component) {\n this.component.destroy();\n }\n }\n}\n","import {Component} from \"@angular/core\";\nimport {AcFieldCustomDirective} from \"./field-custom.directive\";\nimport {ReactiveFormsModule} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\nimport {AbstractControlFieldComponent} from '../../../core';\nimport {AcFieldCustomConfig} from '../../../core/models/field-custom-config';\nimport {MatArrayComponent} from '../array/array.component';\n\n@Component({\n selector: \"ac-mat-field-custom\",\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, AcFieldCustomDirective],\n templateUrl: \"./field-custom.component.html\",\n styleUrls: [\"./field-custom.component.scss\"]\n})\nexport class MatFieldCustomComponent extends AbstractControlFieldComponent<AcFieldCustomConfig<any>> {\n}\n","<div class=\"ac-form-field ac-form-field-custom\"\n [ngClass]=\"field.className\"\n [formGroup]=\"group\" >\n <ng-container fieldCustom [field]=\"field\" [group]=\"group\" > </ng-container>\n</div>\n","import { Component, inject, OnInit } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogModule } from \"@angular/material/dialog\";\nimport { ConfirmDialogData } from \"../../../core/models/confirm-dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatButton } from \"@angular/material/button\";\n\n@Component({\n selector: \"sot-confirm-dialog\",\n imports: [MatIcon, MatButton, MatDialogModule, MatButton],\n templateUrl: \"./confirm-dialog.component.html\",\n styleUrls: [\"./confirm-dialog.component.scss\"]\n})\nexport class ConfirmDialogComponent implements OnInit {\n data: ConfirmDialogData = inject(MAT_DIALOG_DATA);\n title?: string;\n message?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n\n constructor() {\n }\n\n ngOnInit(): void {\n this.title = this.data.title ? this.data.title : \"Confirmation\";\n this.message = this.data.message ? this.data.message : \"Do you confirm this action ?\";\n this.confirmLabel = this.data.confirmLabel ? this.data.confirmLabel : \"Yes\";\n this.cancelLabel = this.data.cancelLabel ? this.data.cancelLabel : \"No\";\n }\n}\n","<div class=\"modal-close-button\">\n <button matButton=\"outlined\" mat-dialog-close>\n <mat-icon title=\"Fermer\">close</mat-icon>\n Fermer\n </button>\n</div>\n\n<h2 class=\"modal-title\" matDialogTitle>{{ title }}</h2>\n\n<div matDialogContent>\n <div [innerHtml]=\"message\"></div>\n</div>\n\n<div matDialogActions>\n <div class=\"modal-action-buttons\">\n <button matButton=\"outlined\" mat-dialog-close>\n {{ cancelLabel }}\n </button>\n <button matButton=\"filled\" [mat-dialog-close]=\"true\">\n {{ confirmLabel }}\n </button>\n </div>\n</div>\n","import {\r\n Component,\r\n computed,\r\n input,\r\n InputSignal,\r\n output,\r\n OutputEmitterRef,\r\n Signal\r\n} from '@angular/core';\r\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\r\nimport {MatBadge} from '@angular/material/badge';\r\nimport {MatButton, MatFabButton, MatIconButton, MatMiniFabButton} from '@angular/material/button';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {AcBadgeOptions, AcButtonType, AcMaterialButtonType} from '../../../core';\r\n\r\n@Component({\r\n selector: 'sot-mat-button',\r\n imports: [\r\n NgClass,\r\n MatBadge,\r\n MatButton,\r\n MatIconButton,\r\n MatFabButton,\r\n MatMiniFabButton,\r\n MatMenuModule,\r\n MatIcon,\r\n NgTemplateOutlet\r\n ],\r\n templateUrl: './button.html',\r\n styleUrl: './button.css',\r\n})\r\nexport class MaterialButton {\r\n\r\n type: InputSignal<AcButtonType> = input<AcButtonType>('button');\r\n matType: InputSignal<AcMaterialButtonType | undefined> = input<AcMaterialButtonType>();\r\n disabled: InputSignal<boolean | undefined> = input<boolean>();\r\n disableRipple: InputSignal<boolean | undefined> = input<boolean>();\r\n label: InputSignal<string | undefined> = input<string>();\r\n className: InputSignal<string | undefined> = input<string>();\r\n title: InputSignal<string | undefined> = input<string>();\r\n matIcon: InputSignal<string | undefined> = input<string>();\r\n badge: InputSignal<string | undefined> = input<string>();\r\n badgeOptions: InputSignal<AcBadgeOptions | undefined> = input<AcBadgeOptions>();\r\n ariaLabel: InputSignal<string | undefined> = input<string>();\r\n buttonMatType: Signal<string> = computed(() => (this.type() === 'link' ? 'link-' : 'button-') + (this.matType() ?? 'basic'));\r\n\r\n buttonClick: OutputEmitterRef<void> = output<void>();\r\n\r\n clickButton(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.buttonClick.emit();\r\n }\r\n}\r\n","@switch (buttonMatType()) {\r\n @case ('button-basic') {\r\n <button matButton\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-basic') {\r\n <a type=\"link\" matButton\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-outlined') {\r\n <button matButton=\"outlined\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-outlined') {\r\n <a type=\"link\" matButton=\"outlined\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-elevated') {\r\n <button matButton=\"elevated\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-elevated') {\r\n <a type=\"link\" matButton=\"elevated\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-filled') {\r\n <button matButton=\"filled\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-filled') {\r\n <a type=\"link\" matButton=\"filled\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-tonal') {\r\n <button matButton=\"tonal\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-tonal') {\r\n <a type=\"link\" matButton=\"tonal\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-icon') {\r\n <button matIconButton\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-icon') {\r\n <a type=\"link\" matIconButton\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-fab') {\r\n <button matFab\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-fab') {\r\n <a type=\"link\" matFab\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-mini-fab') {\r\n <button matMiniFab\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-mini-fab') {\r\n <a type=\"link\" matMiniFab\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-menu') {\r\n <button mat-menu-item\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-menu') {\r\n <a type=\"link\" mat-menu-item\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n\r\n}\r\n\r\n<ng-template #buttonContent>\r\n @if (matIcon()) {\r\n <mat-icon\r\n aria-hidden=\"true\"\r\n [fontIcon]=\"matIcon()!\"\r\n ></mat-icon>\r\n }\r\n <span [innerHTML]=\"label()\"></span>\r\n</ng-template>\r\n\r\n","import {\n Component,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n InputSignal,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule\n} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {AcFieldFileConfig} from '../../../core/models/field-file-config';\nimport {isArray} from 'lodash-es';\nimport {NgClass} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ConfirmDialogComponent} from '../confirm-dialog/confirm-dialog.component';\nimport {ConfirmDialogData} from '../../../core';\nimport {MaterialButton} from '../button/button';\n\n\ninterface FileWrapper {\n file: File;\n srcUrl: string | null;\n}\n\n@Component({\n selector: 'sot-mat-input-file',\n standalone: true,\n imports: [ReactiveFormsModule, MatButtonModule, MatIconModule, NgClass, MaterialButton],\n templateUrl: './input-file.component.html',\n styleUrls: ['./input-file.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => MatInputFileComponent),\n },\n ],\n})\nexport class MatInputFileComponent implements OnInit, ControlValueAccessor {\n private readonly dialog: MatDialog = inject(MatDialog);\n field: InputSignal<AcFieldFileConfig> = input.required<AcFieldFileConfig>();\n group: InputSignal<FormGroup> = input.required<FormGroup>();\n @ViewChild('fileInput')\n fileInput?: ElementRef;\n fileList: FileWrapper[] = [];\n fichier?: FileWrapper | null = null;\n public disabled: boolean = false;\n public value: any[] | null = null;\n\n onChange = (value: any[] | null) => {\n };\n onTouched = () => {\n };\n\n constructor() {\n }\n\n ngOnInit(): void {\n const value = this.group().get(this.field().name)?.value;\n if (value) {\n if (!this.field().multiple) {\n this.fichier = {file: value, srcUrl: null};\n this.readFile(this.fichier, value);\n } else {\n if (isArray(value)) {\n this.fileList = value.map((f: any) => {\n const item: FileWrapper = {\n file: f,\n srcUrl: null\n }\n this.readFile(item, f);\n return item;\n });\n }\n }\n }\n }\n\n writeValue(value: any): void {\n this.value = value && (!this.field().multiple || value.length > 0) ? value : null;\n this.onChange(this.value);\n }\n\n registerOnChange(fn: (value: any[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onSelectFile(event: any) {\n if (event && event.target && event.target.files && event.target.files.length > 0) {\n for(let i = 0; i < event.target.files.length; i++) {\n const fichier = {file: event.target.files[i], srcUrl: null};\n this.readFile(fichier, fichier.file);\n if (!this.field().multiple) {\n this.addSimpleFile(fichier);\n } else {\n this.addMultipleFile(fichier);\n }\n }\n }\n }\n\n\n addSimpleFile(file: FileWrapper) {\n this.fichier = file;\n this.writeValue(this.fichier?.file);\n if (this.field().onAddFile) {\n this.field().onAddFile!(this.fichier?.file ?? null);\n }\n }\n\n addMultipleFile(file: FileWrapper) {\n if (file) {\n if (!this.fileList) {\n this.fileList = [];\n }\n this.fileList.push(file);\n\n if (this.field().onAddFile) {\n this.field().onAddFile!(file.file);\n }\n }\n this.writeValue(this.fileList.map((f: FileWrapper) => f.file));\n }\n\n confirmDeleteFile(file: FileWrapper) {\n if(this.field().confirmDelete) {\n const data: ConfirmDialogData = {\n title: this.field().confirmDeleteData?.title ?? \"Deletion\",\n message: this.field().confirmDeleteData?.message ?? \"Do you confirm this deletion ?\",\n confirmLabel: this.field().confirmDeleteData?.confirmLabel ?? \"Confirm\",\n cancelLabel: this.field().confirmDeleteData?.cancelLabel ?? \"Cancel\",\n closeLabel: this.field().confirmDeleteData?.closeLabel ?? \"Close\",\n };\n const dialogRef = this.dialog.open(ConfirmDialogComponent, { data, width: \"70%\" });\n dialogRef.afterClosed().subscribe((resp) => {\n if (resp) {\n this.deleteFile(file);\n }\n });\n } else {\n this.deleteFile(file);\n }\n }\n\n deleteFile(file: FileWrapper) {\n if (!this.field().multiple) {\n this.fichier = null;\n this.writeValue(null);\n } else {\n this.fileList.splice(this.fileList.indexOf(file), 1);\n this.writeValue(this.fileList.map((f: FileWrapper) => f.file));\n }\n if (this.field().onDeleteFile) {\n this.field().onDeleteFile!(file.file);\n }\n }\n\n readFile(item: FileWrapper, f: any) {\n if (f instanceof File && f.type.match('image.*')) {\n const reader = new FileReader();\n reader.onload = () => {\n item.srcUrl = reader.result as string;\n };\n reader.readAsDataURL(f);\n }\n }\n}\n","<div class=\"sot-file-wrapper\">\n <label [ngClass]=\"field()?.labelClassName\"\n [for]=\"'file-upload-' + field().id\">{{ field().label }}</label>\n <div class=\"sot-file-list\">\n @if (field().multiple) {\n <ul>\n @for (item of fileList; track item) {\n <li class=\"file-list-item\">\n <div>\n <div>\n @if (item.srcUrl) {\n <img [src]=\"item.srcUrl\" [alt]=\"item!.file.name\"/>\n } @else {\n {{ item.file.name }}\n }\n </div>\n </div>\n <div>\n @if (!field().disabled) {\n <button matIconButton\n type=\"button\"\n (click)=\"deleteFile(item)\"\n title=\"Supprimer\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n </li>\n }\n </ul>\n } @else {\n @if (fichier) {\n <div class=\"file-list-item\">\n <div>\n @if (fichier.srcUrl) {\n <img [src]=\"fichier.srcUrl\" [alt]=\"fichier.file.name\"/>\n } @else {\n {{ fichier.file.name }}\n }\n </div>\n @if (!field().disabled) {\n <sot-mat-button\n type=\"button\"\n [className]=\"field().deleteButton?.className\"\n [matType]=\"field().deleteButton?.matButtonType\"\n [matIcon]=\"field().deleteButton?.matIcon\"\n [label]=\"field().deleteButton?.label ?? 'Delete'\"\n [title]=\"field().deleteButton?.title\"\n [ariaLabel]=\"field().deleteButton?.ariaLabel\"\n (buttonClick)=\"confirmDeleteFile(fichier!)\"\n ></sot-mat-button>\n }\n </div>\n }\n }\n </div>\n <div class=\"sot-file-button\">\n <sot-mat-button\n type=\"button\"\n [className]=\"field().addButton?.className\"\n [matType]=\"field().addButton?.matButtonType\"\n [matIcon]=\"field().addButton?.matIcon\"\n [label]=\"field().addButton?.label ?? 'Select a file'\"\n [title]=\"field().addButton?.title\"\n [ariaLabel]=\"field().addButton?.ariaLabel\"\n [disabled]=\"field().disabled\"\n (buttonClick)=\"fileInput.click()\"\n ></sot-mat-button>\n <input\n #fileInput\n hidden\n type=\"file\"\n [attr.id]=\"'file-upload-' + field().id\"\n name=\"file-upload\"\n (change)=\"onSelectFile($event)\"\n [accept]=\"field().accept ? field().accept : '*/*'\"\n [multiple]=\"field().multiple\"\n />\n </div>\n</div>\n","import {Component} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatError} from '@angular/material/form-field';\nimport {AbstractControlFieldComponent} from '../../../core';\nimport {AcFieldFileConfig} from '../../../core/models/field-file-config';\nimport {MatInputFileComponent} from '../input-file/input-file.component';\n\n@Component({\n selector: 'sot-mat-field-file',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatError, MatInputFileComponent],\n templateUrl: './field-file.component.html',\n styleUrls: ['./field-file.component.scss'],\n})\nexport class MatFieldFileComponent extends AbstractControlFieldComponent<AcFieldFileConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-file\" [ngClass]=\"field.className\" [formGroup]=\"group\">\n <sot-mat-input-file [formControlName]=\"field.name\" [field]=\"field\"\n [group]=\"group\"></sot-mat-input-file>\n @for (validation of field.validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <mat-error>{{ validation.message }}</mat-error>\n }\n }\n</div>\n","import {Component, computed, effect, inject, model, OnInit, signal} from '@angular/core';\nimport {AbstractControlFieldComponent, AcAffix} from '../../../core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} 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 {MatChipInputEvent, MatChipsModule} from '@angular/material/chips';\nimport {MatAutocompleteModule, MatAutocompleteSelectedEvent} from '@angular/material/autocomplete';\nimport {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {COMMA, ENTER} from \"@angular/cdk/keycodes\";\nimport {MatFieldChipsConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-field-chips',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatButtonModule, MatChipsModule, MatAutocompleteModule, FormsModule],\n templateUrl: './field-chips.component.html',\n styleUrls: ['./field-chips.component.scss'],\n})\nexport class MatFieldChipsComponent extends AbstractControlFieldComponent<MatFieldChipsConfig> implements OnInit {\n inputType: string = 'chips';\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n readonly announcer = inject(LiveAnnouncer);\n options: string[] = [];\n readonly currentOption = model('');\n readonly values = signal<string[]>([]);\n readonly filteredOptions = computed(() => {\n const list = this.options.filter(item => !this.values().includes(item));\n const currentOption = this.currentOption().toLowerCase();\n return currentOption\n ? list.filter(option => option.toLowerCase().includes(currentOption))\n : list.slice();\n });\n\n constructor() {\n super();\n effect(() => {\n this.group.get(this.field.name)?.setValue(this.values());\n })\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 override ngOnInit() {\n super.ngOnInit();\n if (this.field.options) {\n this.options = this.field.options;\n }\n if (this.field.value) {\n this.values.set(this.field.value);\n }\n const control = this.group.get(this.field.name);\n if (control) {\n control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (JSON.stringify(value) !== JSON.stringify(this.values())) {\n //this.values.set(value);\n console.log(true);\n }\n console.log(value, this.values());\n });\n }\n }\n\n add(event: MatChipInputEvent): void {\n console.log(event);\n const value = (event.value || '').trim();\n\n // Add our option\n if (value) {\n this.values.update(values => [...values, value]);\n }\n\n // Clear the input value\n this.currentOption.set('');\n }\n\n remove(option: string): void {\n this.values.update(values => {\n const index = values.indexOf(option);\n if (index < 0) {\n return values;\n }\n\n values.splice(index, 1);\n this.announcer.announce(`Removed ${option}`);\n return [...values];\n });\n }\n\n selected(event: MatAutocompleteSelectedEvent): void {\n this.values.update(values => [...values, event.option.viewValue]);\n this.currentOption.set('');\n event.option.deselect();\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 [appearance]=\"field.appearance ?? 'fill'\">\r\n <mat-label><span [innerHTML]=\"field.label\"></span></mat-label>\r\n\r\n <mat-chip-grid #chipGrid aria-label=\"option selection\">\r\n @for (option of values(); track $index) {\r\n <mat-chip-row (removed)=\"remove(option)\">\r\n {{ option }}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + option\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n\r\n <input\r\n #chipsInput\r\n [id]=\"uuid\"\r\n name=\"option\"\r\n [(ngModel)]=\"currentOption\"\r\n [ngModelOptions]=\"{standalone: true}\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field.autocomplete ?? 'off'\"\r\n [type]=\"inputType\"\r\n [readonly]=\"field.readonly\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputSeparatorKeyCodes]=\"field.separatorKeysCodes ?? separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"add($event); chipsInput.value = ''\"\r\n >\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event); chipsInput.value = ''\">\r\n @for (option of filteredOptions(); track option) {\r\n <mat-option [value]=\"option\">{{ option }}</mat-option>\r\n }\r\n </mat-autocomplete>\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\" matButton\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\" matButton\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, inject} from '@angular/core';\nimport {MatDatepickerIntl, MatDatepickerModule} from '@angular/material/datepicker';\nimport {DateAdapter} from '@angular/material/core';\nimport {provideLuxonDateAdapter} from '@angular/material-luxon-adapter';\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';\nimport {AbstractControlFieldComponent, AcAffix} from '../../../core';\nimport {MatFieldDateConfig} from '../../models/material-field-config';\n\n\n@Component({\n selector: 'sot-field-date',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatDatepickerModule, MatInputModule, MatButtonModule],\n providers: [\n provideLuxonDateAdapter(),\n ],\n templateUrl: './field-date.component.html',\n styleUrls: ['./field-date.component.scss'],\n})\nexport class MatFieldDateComponent extends AbstractControlFieldComponent<MatFieldDateConfig> {\n private readonly _adapter = inject<DateAdapter<unknown, unknown>>(DateAdapter);\n private readonly _intl = inject(MatDatepickerIntl);\n dateFormatString!: string;\n locale!: string;\n\n override ngOnInit() {\n super.ngOnInit();\n this.locale = this.field.locale ?? 'en';\n this._adapter.setLocale(this.locale);\n this.dateFormatString = this.field.format ?? 'YYYY/MM/DD';\n this.updateCloseButtonLabel();\n\n const control = this.group.get(this.field.name);\n if (control) {\n if (typeof control.value === 'string') {\n //TODO control.setValue(moment(control.value, this.field.format));\n }\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 filterDate = (d: Date | null): boolean => {\n return this.field.filter ? this.field.filter!(d, this.field, this.group) : true;\n };\n\n updateCloseButtonLabel() {\n if (this.field.closeCalendarLabel) {\n this._intl.closeCalendarLabel = this.field.closeCalendarLabel;\n }\n this._intl.changes.next();\n }\n}\n","<div\n class=\"ac-form-field ac-form-field-date\"\n [ngClass]=\"field.className\"\n [formGroup]=\"group\"\n>\n <mat-form-field [appearance]=\"field.appearance ?? 'fill'\">\n <mat-label>\n {{ field.label }}\n </mat-label>\n <input matInput\n type=\"text\"\n [id]=\"uuid\"\n [matDatepicker]=\"picker\"\n [formControlName]=\"field.name\"\n [required]=\"!!required\"\n [readonly]=\"field.readonly\"\n [min]=\"field.minDate ? field.minDate : null\"\n [max]=\"field.maxDate ? field.maxDate : null\"\n [matDatepickerFilter]=\"filterDate\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker [touchUi]=\"!!field.touchUi\"></mat-datepicker>\n\n @for (prefix of field.prefixes; track prefix) {\n <span class=\"sot-formfield-prefix\" matPrefix>\n @if (prefix.action) {\n <button type=\"button\" matButton\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 @for (suffix of field.suffixes; track suffix) {\n <span class=\"sot-formfield-suffix\" matSuffix>\n @if (suffix.action) {\n <button type=\"button\" matButton\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\n @if (field.description) {\n <mat-hint align=\"start\"> {{ field.description }}</mat-hint>\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 {\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 {MatDivTextComponent} 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 {MatFieldInputComponent} from './field-input/field-input.component';\nimport {MatGroupComponent} from './group/group.component';\nimport {MatArrayComponent} from './array/array.component';\nimport {MatRowComponent} from './row/row.component';\nimport {MatFieldPasswordComponent} from './field-password/field-password.component';\nimport {MatFieldRadioButtonComponent} from './field-radio-button/field-radio-button.component';\nimport { MatFieldSelectComponent } from \"./field-select/field-select.component\";\nimport {MatFieldTextareaComponent} from './field-textarea/field-textarea.component';\nimport {MatFieldToggleComponent} from './field-toggle/field-toggle.component';\nimport {MatFieldCustomComponent} from './field-custom/field-custom.component';\nimport { MatFieldFileComponent } from \"./field-file/field-file.component\";\nimport {MatFieldChipsComponent} from './field-chips/field-chips.component';\nimport {MatFieldDateComponent} from './field-date/field-date.component';\n\n\nconst components: { [type: string]: Type<AcField> } = {\n text: MatDivTextComponent,\n group: MatGroupComponent,\n array: MatArrayComponent,\n row: MatRowComponent,\n checkbox: AcFieldCheckboxComponent,\n input: MatFieldInputComponent,\n password: MatFieldPasswordComponent,\n radio: MatFieldRadioButtonComponent,\n select: MatFieldSelectComponent,\n textarea: MatFieldTextareaComponent,\n toggle: MatFieldToggleComponent,\n customField: MatFieldCustomComponent,\n file: MatFieldFileComponent,\n chips: MatFieldChipsComponent,\n date: MatFieldDateComponent\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n tabs: AcTabsComponent,\n */\n};\n\n@Directive({\n selector: \"[matDynamicField]\",\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\";\nimport {MaterialButton} from '../components/button/button';\nimport {MaterialDynamicForm} from '../models/material-field-config';\n\n@Component({\n exportAs: 'dynamicForm',\n selector: 'sot-material-dynamic-form',\n standalone: true,\n imports: [AcDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError, MatIconModule, MatButtonModule, MaterialButton],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class MaterialDynamicFormComponent {\n private readonly dynamicFormService: DynamicFormService = inject(DynamicFormService);\n private readonly destroyRef = inject(DestroyRef);\n config: InputSignal<MaterialDynamicForm | null> = input.required<MaterialDynamicForm | 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 formInit: 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.formInit.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 matDynamicField\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 <sot-mat-button\r\n [type]=\"button.type\"\r\n [className]=\"button.className\"\r\n [matType]=\"button.matButtonType\"\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-mat-button>\r\n }\r\n </div>\r\n }\r\n </form>\r\n}\r\n","import {Component, inject, OnInit} from \"@angular/core\";\nimport {AcModalFormButton, AcModalFormResponse, DynamicFormService} from '../../core';\nimport {FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from \"@angular/material/dialog\";\nimport {NgClass} from \"@angular/common\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {take} from 'rxjs';\nimport {AcDynamicFieldDirective} from '../components/dynamic-field.directive';\nimport {MaterialButton} from '../components/button/button';\nimport {MaterialDynamicFormModal} from '../models/material-field-config';\n\n@Component({\n selector: \"ac-dynamic-form-modal\",\n standalone: true,\n imports: [NgClass, ReactiveFormsModule, MatIconModule, MatButtonModule, MatDialogModule, AcDynamicFieldDirective, MaterialButton],\n templateUrl: \"./dynamic-form-modal.component.html\",\n styleUrls: [],\n providers: [DynamicFormService],\n})\nexport class MaterialDynamicFormModalComponent implements OnInit {\n private dialogRef = inject(MatDialogRef<MaterialDynamicFormModalComponent>);\n private dynamicFormService: DynamicFormService = inject(DynamicFormService);\n data: MaterialDynamicFormModal = inject(MAT_DIALOG_DATA);\n status?: 'OK' | 'ERROR';\n message?: string;\n\n get form(): FormGroup | undefined {\n return this.dynamicFormService.form;\n }\n\n constructor() {\n this.dynamicFormService.createForm(\n this.data.fields,\n this.data.validations,\n this.data.updateOn ?? \"change\",\n this.data.initialObject\n );\n }\n\n ngOnInit() {\n }\n\n onClickButton(button: AcModalFormButton) {\n if (button.type === 'reset') {\n this.dialogRef.close();\n }\n if (button.action) {\n button.action(this.form!, this.data.initialObject).pipe(take(1)).subscribe((resp: boolean | AcModalFormResponse) => {\n if (resp === true) {\n this.dialogRef.close();\n } else if (resp) {\n this.message = (resp as AcModalFormResponse).message;\n this.status = (resp as AcModalFormResponse).status;\n }\n });\n }\n }\n}\n","<h2 class=\"modal-title\" matDialogTitle> {{ data.title }}</h2>\r\n\r\n<div matDialogContent>\r\n @if (data.description) {\r\n <p [innerHTML]=\"data.description\"></p>\r\n }\r\n @if (form) {\r\n <form class=\"dynamic-form\"\r\n [formGroup]=\"form\"\r\n [ngClass]=\"data.className?.form\">\r\n <div class=\"dynamic-form-content\"\r\n [ngClass]=\"data.className?.formContent\">\r\n @for (field of data.fields; track field) {\r\n <div\r\n [hidden]=\"!!field.hidden\"\r\n [ngClass]=\"field.hostClassName\">\r\n <ng-container\r\n matDynamicField\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 </form>\r\n }\r\n @if (message) {\r\n <div [innerHTML]=\"message\"\r\n [ngClass]=\"{'message-success': status === 'OK', 'message-error': status === 'ERROR'}\"\r\n ></div>\r\n }\r\n</div>\r\n\r\n<div matDialogActions>\r\n <div class=\"modal-action-buttons\" [ngClass]=\"data.className?.formButtons\">\r\n @for (button of data.buttons; track $index) {\r\n <sot-mat-button\r\n [className]=\"button.className\"\r\n [matType]=\"button.matButtonType\"\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-mat-button>\r\n }\r\n </div>\r\n</div>\r\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n input,\n InputSignal,\n OnChanges,\n OnInit,\n output,\n OutputEmitterRef,\n SimpleChanges, ViewChild\n} from \"@angular/core\";\nimport {AbstractControl, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {BehaviorSubject, distinctUntilChanged, map, Observable} from \"rxjs\";\nimport {debounceTime} from \"rxjs/operators\";\nimport {AsyncPipe, NgClass} from \"@angular/common\";\nimport {MatError} from \"@angular/material/form-field\";\nimport {MatIcon, MatIconModule} from \"@angular/material/icon\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatSidenavModule} from \"@angular/material/sidenav\";\nimport {MatListModule} from \"@angular/material/list\";\nimport {MatTab, MatTabLabel} from \"@angular/material/tabs\";\nimport {\n MatStepper,\n MatStepperModule,\n MatStepperNext,\n MatStepperPrevious,\n StepperOrientation\n} from \"@angular/material/stepper\";\nimport {STEPPER_GLOBAL_OPTIONS} from \"@angular/cdk/stepper\";\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {BreakpointObserver} from \"@angular/cdk/layout\";\nimport {AcDynamicFormStepper, AcStepperFormButton, DynamicFormService} from \"../../core\";\nimport {AcDynamicFieldDirective} from \"../components/dynamic-field.directive\";\nimport {MaterialDynamicFormStepper} from '../models/material-field-config';\n\n@Component({\n exportAs: \"dynamicFormStepper\",\n selector: \"sot-material-dynamic-form-stepper\",\n standalone: true,\n imports: [AcDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError,\n MatIconModule, MatButtonModule, MatSidenavModule, MatListModule, MatTab, MatTabLabel,\n MatStepperModule, AsyncPipe, MatStepperPrevious, MatStepperNext, MatIcon],\n templateUrl: \"./dynamic-form-stepper.component.html\",\n styleUrls: [\"./dynamic-form-stepper.component.scss\"],\n providers: [\n DynamicFormService, {\n provide: STEPPER_GLOBAL_OPTIONS,\n useValue: {showError: true, displayDefaultIndicatorType: false},\n }]\n})\nexport class AcDynamicFormStepperComponent implements OnInit, OnChanges {\n private dynamicFormService: DynamicFormService = inject(DynamicFormService);\n private destroyRef: DestroyRef = inject(DestroyRef);\n private cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n private breakpointObserver: BreakpointObserver = inject(BreakpointObserver);\n @ViewChild('stepper') stepper!: MatStepper;\n\n config: InputSignal<MaterialDynamicFormStepper> = input.required<MaterialDynamicFormStepper>();\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 stepperOrientation: BehaviorSubject<StepperOrientation> = new BehaviorSubject<StepperOrientation>('horizontal');\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 ngOnInit() {\n this.dynamicFormService.createFormStepper(this.config().steps, this.config().validations, this.config().updateOn, this.initialValues);\n this.onValueChanges();\n this.form!.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(this.config().debounceTime ?? 0),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.onValueChanges();\n });\n\n if (this.config().orientation === 'responsive') {\n const breakpoint = this.config().responsiveBreakpoint ?? '800px'\n this.breakpointObserver\n .observe('(min-width: ' + breakpoint + ')')\n .pipe(map(({matches}) => (matches ? 'horizontal' : 'vertical')))\n .subscribe(this.stepperOrientation);\n } else if (this.config().orientation) {\n this.stepperOrientation.next(this.config().orientation as StepperOrientation);\n }\n }\n\n getSubGroup(stepName: string) {\n return this.form!.controls[stepName] as FormGroup;\n }\n\n onValueChanges() {\n this.formChange.emit(this.form!);\n if (this.config().onValueChanges) {\n this.config().onValueChanges!(this.form!, this.config().steps);\n this.cdr.detectChanges();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes[\"initialValues\"] && this.form) {\n this.setValue(this.initialValues);\n }\n }\n\n setValue(values: { [key: string]: any }) {\n this.form!.setValue(values);\n this.form!.updateValueAndValidity();\n }\n\n onClickButton(button: AcStepperFormButton) {\n if (button.type === 'reset') {\n this.reset();\n } else if (button.type === 'submit') {\n this.formSubmit.emit(this.form!);\n }\n if (button.action) {\n button.action(this.form!);\n }\n }\n\n reset() {\n this.form!.reset();\n this.stepper.reset();\n this.formCancel.emit();\n }\n\n}\n","@if (form) {\r\n <form [formGroup]=\"form\"\r\n class=\"dynamic-form-stepper\"\r\n [ngClass]=\"config().className\"\r\n >\r\n <mat-stepper #stepper\r\n [linear]=\"config().linear\"\r\n [orientation]=\"(stepperOrientation | async)!\">\r\n @for (step of config().steps; track step.name; let stepFirst = $first; let stepLast = $last) {\r\n <mat-step [stepControl]=\"form.controls[step.name]\"\r\n [formGroup]=\"getSubGroup(step.name)\"\r\n [errorMessage]=\"step.errorMessage ?? ''\">\r\n <ng-template matStepLabel>{{ step.label }}</ng-template>\r\n <ng-template matStepContent>\r\n <div class=\"dynamic-form-stepper-content\"\r\n [ngClass]=\"config().className?.formContent\">\r\n @for (field of step.fields; track field.name) {\r\n <div [hidden]=\"!!field.hidden\" [ngClass]=\"field.hostClassName\">\r\n <ng-container\r\n matDynamicField\r\n [path]=\"field.name\"\r\n [type]=\"field.type\"\r\n [field]=\"field\"\r\n [group]=\"getSubGroup(step.name)\"\r\n >\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n @if (config()!.buttons) {\r\n <div class=\"dynamic-form-stepper-buttons\" [ngClass]=\"config().className?.formButtons\">\r\n @for (button of config().buttons; track $index) {\r\n\r\n @if (button.type === 'previous' && !stepFirst) {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n matStepperPrevious\r\n type=\"button\"\r\n [ngClass]=\"button.className\"\r\n [disabled]=\"button.disabledIfFormNoValid && getSubGroup(step.name).invalid\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else if (button.type === 'next' && !stepLast) {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n matStepperNext\r\n type=\"button\"\r\n [ngClass]=\"button.className\"\r\n [disabled]=\"button.disabledIfFormNoValid && getSubGroup(step.name).invalid\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n [attr.aria-label]=\"button.ariaLabel\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else if ((button.type === 'submit' || button.type === 'reset') && stepLast) {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n [type]=\"button.type\"\r\n [ngClass]=\"button.className\"\r\n [disabled]=\"button.disabledIfFormNoValid && getSubGroup(step.name).invalid\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n [attr.aria-label]=\"button.ariaLabel\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else if (button.type === 'button') {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n [type]=\"button.type\"\r\n [ngClass]=\"button.className\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n [attr.aria-label]=\"button.ariaLabel\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </mat-step>\r\n }\r\n </mat-stepper>\r\n </form>\r\n}\r\n","import { Component } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {AbstractFieldComponent, AcTextConfig} from '../../../core';\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class DsfrDivTextComponent 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 {AbstractControlFieldComponent, AcFieldCheckboxConfig} from '../../../core';\n\n@Component({\n selector: 'sot-dsfr-field-checkbox',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule],\n templateUrl: './field-checkbox.component.html',\n styleUrls: ['./field-checkbox.component.scss'],\n})\nexport class DsfrFieldCheckboxComponent 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\";\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 DsfrFieldInputComponent 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 {DsfrDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-group',\n standalone: true,\n imports: [\n forwardRef(() => DsfrDynamicFieldDirective),\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 DsfrGroupComponent 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 dsfrDynamicField\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 {DsfrDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {MatExpansionModule} from \"@angular/material/expansion\";\nimport {NgClass, NgTemplateOutlet} from \"@angular/common\";\nimport {MatCardModule} from \"@angular/material/card\";\nimport * as _ from \"lodash-es\";\n\n@Component({\n selector: \"sot-dsfr-array\",\n standalone: true,\n imports: [\n forwardRef(() => DsfrDynamicFieldDirective),\n MatExpansionModule,\n NgClass,\n MatCardModule,\n ReactiveFormsModule,\n NgTemplateOutlet\n ],\n templateUrl: \"./array.component.html\",\n styleUrls: [\"./array.component.scss\"]\n})\nexport class DsfrArrayComponent 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,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 dsfrDynamicField\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 {DsfrDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-row',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass,\n forwardRef(() => DsfrDynamicFieldDirective),\n DsfrDynamicFieldDirective\n ],\n templateUrl: './row.component.html',\n styleUrls: ['./row.component.scss'],\n})\nexport class DsfrRowComponent 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 dsfrDynamicField\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\";\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 DsfrFieldPasswordComponent 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 {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatIconModule} from '@angular/material/icon';\n\n@Component({\n selector: 'sot-dsfr-field-radio-button',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatRadioModule, MatTooltipModule, MatIconModule],\n templateUrl: './field-radio-button.component.html',\n styleUrls: ['./field-radio-button.component.scss'],\n})\nexport class DsfrFieldRadioButtonComponent 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';\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 [multiple]=\"field.multiple\"\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';\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 DsfrFieldTextareaComponent 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 {MatSlideToggleModule} from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'sot-dsfr-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatSlideToggleModule],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class DsfrFieldToggleComponent 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 {DsfrDivTextComponent} from \"./div-text/div-text.component\";\nimport {DsfrFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig} from '../../core';\nimport {DsfrFieldInputComponent} from './field-input/field-input.component';\nimport { DsfrGroupComponent } from \"./group/group.component\";\nimport {DsfrArrayComponent} from \"./array/array.component\";\nimport {DsfrRowComponent} from \"./row/row.component\";\nimport {DsfrFieldPasswordComponent} from './field-password/field-password.component';\nimport { DsfrFieldRadioButtonComponent } from \"./field-radio-button/field-radio-button.component\";\nimport {AcFieldSelectComponent} from './field-select/field-select.component';\nimport { DsfrFieldTextareaComponent } from \"./field-textarea/field-textarea.component\";\nimport {DsfrFieldToggleComponent} from './field-toggle/field-toggle.component';\n\n\nconst components: { [type: string]: Type<AcField> } = {\n group: DsfrGroupComponent,\n array: DsfrArrayComponent,\n row: DsfrRowComponent,\n text: DsfrDivTextComponent,\n checkbox: DsfrFieldCheckboxComponent,\n input: DsfrFieldInputComponent,\n password: DsfrFieldPasswordComponent,\n radio: DsfrFieldRadioButtonComponent,\n select: AcFieldSelectComponent,\n textarea: DsfrFieldTextareaComponent,\n toggle: DsfrFieldToggleComponent,\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n customField: AcFieldCustomComponent,\n tabs: AcTabsComponent,\n file: AcFieldFileComponent,\n */\n};\n\n@Directive({\n selector: \"[dsfrDynamicField]\",\n standalone: true\n})\nexport class DsfrDynamicFieldDirective 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 {DsfrDynamicFieldDirective} 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: [DsfrDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError, MatIconModule, MatButtonModule],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class DsfrDynamicFormComponent {\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 dsfrDynamicField\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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class ClassicDivTextComponent 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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-checkbox',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-checkbox.component.html',\n styleUrls: ['./field-checkbox.component.scss'],\n})\nexport class ClassicFieldCheckboxComponent 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\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-input',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-input.component.html',\n styleUrls: ['./field-input.component.scss'],\n})\nexport class ClassicFieldInputComponent 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 {ClassiDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-group',\n standalone: true,\n imports: [\n forwardRef(() => ClassiDynamicFieldDirective),\n NgClass,\n NgTemplateOutlet\n ],\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n})\nexport class ClassicGroupComponent 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 classicDynamicField\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 {ClassiDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {NgClass, NgTemplateOutlet} from \"@angular/common\";\nimport * as _ from \"lodash-es\";\n\n@Component({\n selector: \"sot-classic-array\",\n standalone: true,\n imports: [\n forwardRef(() => ClassiDynamicFieldDirective),\n NgClass,\n ReactiveFormsModule,\n NgTemplateOutlet\n ],\n templateUrl: \"./array.component.html\",\n styleUrls: [\"./array.component.scss\"]\n})\nexport class ClassicArrayComponent 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,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 classicDynamicField\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 {ClassiDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-row',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass,\n forwardRef(() => ClassiDynamicFieldDirective)\n ],\n templateUrl: './row.component.html',\n styleUrls: ['./row.component.scss'],\n})\nexport class ClassicRowComponent 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 classicDynamicField\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\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-password',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-password.component.html',\n styleUrls: ['./field-password.component.scss'],\n})\nexport class ClassicFieldPasswordComponent 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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-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 ClassicFieldRadioButtonComponent 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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-select',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-select.component.html',\n styleUrls: ['./field-select.component.scss'],\n})\nexport class ClassicFieldSelectComponent 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 [multiple]=\"field.multiple\"\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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class ClassicFieldToggleComponent 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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-textarea',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-textarea.component.html',\n styleUrls: ['./field-textarea.component.scss'],\n})\nexport class ClassicFieldTextareaComponent 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 {ClassicDivTextComponent} from \"./div-text/div-text.component\";\nimport {ClassicFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig} from '../../core';\nimport {ClassicFieldInputComponent} from './field-input/field-input.component';\nimport {ClassicGroupComponent} from \"./group/group.component\";\nimport {ClassicArrayComponent} from \"./array/array.component\";\nimport {ClassicRowComponent} from \"./row/row.component\";\nimport {ClassicFieldPasswordComponent} from \"./field-password/field-password.component\";\nimport {ClassicFieldRadioButtonComponent} from \"./field-radio-button/field-radio-button.component\";\nimport {ClassicFieldSelectComponent} from \"./field-select/field-select.component\";\nimport {ClassicFieldToggleComponent} from \"./field-toggle/field-toggle.component\";\nimport {ClassicFieldTextareaComponent} from \"./field-textarea/field-textarea.component\";\n\n\nconst components: { [type: string]: Type<AcField> } = {\n group: ClassicGroupComponent,\n array: ClassicArrayComponent,\n row: ClassicRowComponent,\n text: ClassicDivTextComponent,\n checkbox: ClassicFieldCheckboxComponent,\n input: ClassicFieldInputComponent,\n password: ClassicFieldPasswordComponent,\n radio: ClassicFieldRadioButtonComponent,\n select: ClassicFieldSelectComponent,\n textarea: ClassicFieldTextareaComponent,\n toggle: ClassicFieldToggleComponent,\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n customField: AcFieldCustomComponent,\n tabs: AcTabsComponent,\n file: AcFieldFileComponent,\n\n */\n};\n\n@Directive({\n selector: \"[classicDynamicField]\",\n standalone: true\n})\nexport class ClassiDynamicFieldDirective 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 {ClassiDynamicFieldDirective} from '../components/dynamic-field.directive';\nimport {NgClass} from '@angular/common';\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: [ClassiDynamicFieldDirective, NgClass, ReactiveFormsModule, MatIconModule, MatButtonModule],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class ClassicDynamicFormComponent {\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 classicDynamicField\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":["i2","PasswordValidators","i3","i5","i1","i4","components"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sotoa-ui-dynamic-form.mjs","sources":["../../../../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/abstract-field/custom-component.ts","../../../../projects/sotoa-ui/dynamic-form/core/models/autocomplete-attribute.ts","../../../../projects/sotoa-ui/dynamic-form/core/models/condition.ts","../../../../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/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/field-custom/field-custom.directive.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-custom/field-custom.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-custom/field-custom.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/confirm-dialog/confirm-dialog.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/confirm-dialog/confirm-dialog.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/button/button.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/button/button.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/input-file/input-file.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/input-file/input-file.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-file/field-file.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-file/field-file.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-chips/field-chips.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-chips/field-chips.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-date/field-date.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/components/field-date/field-date.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-material/dynamic-form-modal/dynamic-form-modal.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form-modal/dynamic-form-modal.component.html","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form-stepper/dynamic-form-stepper.component.ts","../../../../projects/sotoa-ui/dynamic-form/type-material/dynamic-form-stepper/dynamic-form-stepper.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 {Component, inject, input, InputSignal} from '@angular/core';\nimport {AbstractControl, FormGroup, Validators} from '@angular/forms';\nimport {AbstractFieldConfig} from '../models/abstract-field-config';\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\nimport {AcField} from '../models/field';\nimport {AcFieldConfig, DynamicFormData} from '../models/field-config';\nimport {AcTextConfig} from '../models/text-config';\n\n@Component({standalone: true, template: ''})\nexport class AbstractFieldComponent<T extends AbstractFieldConfig> implements AcField{\n field!: InputSignal<T>;\n group!: InputSignal<FormGroup>;\n path!: string;\n instancePath?: string;\n data?: DynamicFormData;\n\n get control(): AbstractControl<any, any> | null {\n return this.group() && 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.group(), this.data, this.instancePath);\n control.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n this.field().onValueChanges!(value, this.group(), this.data, this.instancePath);\n });\n }\n }\n }\n\n}\n","import {ControlValueAccessor, FormGroup} from \"@angular/forms\";\r\nimport {AcFieldCustomConfig} from '../models/field-custom-config';\r\n\r\nexport class AcCustomComponentField implements ControlValueAccessor {\r\n field!: AcFieldCustomConfig<any>;\r\n group!: FormGroup;\r\n\r\n registerOnChange(fn: any): void {\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n }\r\n\r\n writeValue(obj: any): void {\r\n }\r\n\r\n}\r\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","export interface AcCondition {\r\n type: 'condition';\r\n logicOperator?: AcLogicOperatorEnum;\r\n items: (AcCondition | AcExpression)[];\r\n}\r\n\r\nexport interface AcExpression {\r\n type: 'expression';\r\n fieldId: string;\r\n operator: AcExpressionOperatorEnum;\r\n value: any;\r\n}\r\n\r\nexport enum AcLogicOperatorEnum {\r\n OR = \"OR\",\r\n AND = \"AND\"\r\n}\r\n\r\nexport enum AcExpressionOperatorEnum {\r\n EQUALS = \"EQUALS\",\r\n NOT_EQUALS = \"NOT_EQUALS\",\r\n CHECKED = \"CHECKED\",\r\n NOT_CHECKED = \"NOT_CHECKED\",\r\n NOT_EMPTY = \"NOT_EMPTY\",\r\n EMPTY = \"EMPTY\",\r\n CONTAINS = \"CONTAINS\",\r\n START_WITH = \"START_WITH\",\r\n NOT_START_WITH = \"NOT_START_WITH\",\r\n NOT_CONTAINS = \"NOT_CONTAINS\",\r\n GREATER_THAN = \"GREATER_THAN\",\r\n GREATER_EQUAL_THAN = \"GREATER_EQUAL_THAN\",\r\n LESS_THAN = \"LESS_THAN\",\r\n LESS_EQUAL_THAN = \"LESS_EQUAL_THAN\",\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {AcValidator} from \"../models/validator\";\r\nimport {DynamicFormData, FormField} from \"../models/field-config\";\r\nimport {\r\n AcCondition,\r\n AcExpression,\r\n AcExpressionOperatorEnum,\r\n AcLogicOperatorEnum\r\n} from \"../models/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 fieldPaths = dynamicFormDatas.idPathMap.get(cond.fieldId);\r\n if (fieldPaths) {\r\n for (let path of fieldPaths) {\r\n const formField = dynamicFormDatas.pathFieldMap.get(path.path);\r\n if (formField) {\r\n const isConditionKo = !this.checkCondition(cond.validation.condition!, dynamicFormDatas, path.instance);\r\n this.setValidation(formField, cond.validation, isConditionKo);\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 checkDisplayConditions(\r\n displayConditions: { fieldId: string; condition: AcCondition | AcExpression }[],\r\n dynamicFormDatas: DynamicFormData\r\n ) {\r\n for (const cond of displayConditions) {\r\n const fieldPaths = dynamicFormDatas.idPathMap.get(cond.fieldId);\r\n if (fieldPaths) {\r\n for (let path of fieldPaths) {\r\n const formField = dynamicFormDatas.pathFieldMap.get(path.path);\r\n if (formField) {\r\n const isConditionKo = !this.checkCondition(cond.condition, dynamicFormDatas, path.instance);\r\n this.setHidden(formField, isConditionKo);\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(item: AcCondition | AcExpression,\r\n dynamicFormDatas: DynamicFormData,\r\n instance: string | null): boolean {\r\n let isOk = false;\r\n if (item.type === 'expression') {\r\n isOk = this.checkExpression(item, dynamicFormDatas, instance);\r\n } else {\r\n for (const i of item.items) {\r\n isOk = this.checkCondition(i as AcCondition, dynamicFormDatas, instance);\r\n if ((item.logicOperator === AcLogicOperatorEnum.OR && isOk)\r\n || (item.logicOperator === AcLogicOperatorEnum.AND && !isOk)) {\r\n break;\r\n }\r\n }\r\n }\r\n return isOk;\r\n }\r\n\r\n checkExpression(item: AcExpression,\r\n dynamicFormDatas: DynamicFormData,\r\n instance: string | null): boolean {\r\n let isOk = false;\r\n const fieldPath = dynamicFormDatas.idPathMap.get(item.fieldId)?.filter(x => x.instance === instance)[0];\r\n if (fieldPath) {\r\n isOk = this.evalExpression(dynamicFormDatas.pathFieldMap.get(fieldPath.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 switch (operator) {\r\n case AcExpressionOperatorEnum.EQUALS:\r\n isOk = refValue === fieldValue;\r\n break;\r\n case AcExpressionOperatorEnum.NOT_EQUALS:\r\n isOk = refValue !== fieldValue;\r\n break;\r\n case AcExpressionOperatorEnum.CHECKED:\r\n isOk = fieldValue === true;\r\n break;\r\n case AcExpressionOperatorEnum.NOT_CHECKED:\r\n isOk = fieldValue !== true;\r\n break;\r\n case AcExpressionOperatorEnum.NOT_EMPTY:\r\n isOk = fieldValue?.length > 0;\r\n break;\r\n case AcExpressionOperatorEnum.EMPTY:\r\n isOk = !fieldValue || fieldValue.length == 0;\r\n break;\r\n case AcExpressionOperatorEnum.START_WITH:\r\n isOk = !!fieldValue && !!refValue && !fieldValue.startsWith(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.NOT_START_WITH:\r\n isOk = !!fieldValue && !!refValue && !fieldValue.startsWith(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.CONTAINS:\r\n isOk = !!fieldValue && !!refValue && fieldValue.includes(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.NOT_CONTAINS:\r\n isOk = !!fieldValue && !!refValue && !fieldValue.includes(refValue);\r\n break;\r\n case AcExpressionOperatorEnum.GREATER_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) > Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue > refValue;\r\n }\r\n break;\r\n case AcExpressionOperatorEnum.GREATER_EQUAL_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) >= Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue >= refValue;\r\n }\r\n break;\r\n case AcExpressionOperatorEnum.LESS_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) < Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue < refValue;\r\n }\r\n break;\r\n case AcExpressionOperatorEnum.LESS_EQUAL_THAN:\r\n if (field.config.type === 'input' && field.config.inputType === 'number') {\r\n isOk = !!fieldValue && !!refValue && Number(fieldValue) <= Number(refValue);\r\n } else {\r\n isOk = !!fieldValue && !!refValue && fieldValue <= refValue;\r\n }\r\n break;\r\n }\r\n return isOk;\r\n }\r\n\r\n}\r\n\r\n","import {DestroyRef, inject, Injectable} from \"@angular/core\";\nimport {\n AbstractControlOptions,\n FormArray,\n FormBuilder,\n FormControl,\n FormGroup\n} 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/step-config\";\nimport {AcCondition, AcExpression} from \"../models/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 | AcExpression }[] = [];\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 pathFieldMap: new Map(),\n };\n this.form = this.createGroup(fields, null, 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 pathFieldMap: 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, 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 instance: 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, instance, initialValues);\n });\n return group;\n }\n\n treatField(\n config: AcFieldConfig | AcTextConfig,\n group: FormGroup,\n parentPath: string | null,\n instance: 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.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(instance, path, config, null);\n } else if (config.type === \"group\") {\n group.addControl(config.name, this.createGroupField(config, parentPath, instance, initialValues));\n } else if (config.type === \"array\") {\n group.addControl(config.name, this.createArray(config, parentPath, instance, initialValues));\n } else if (config.type === \"row\") {\n this.setFormFieldMapItem(instance, path, config, null);\n config.fields.forEach((child) => {\n this.treatField(child, group, parentPath, instance, initialValues);\n });\n } else {\n const control = this.createControl(config, initialValues);\n this.setFormFieldMapItem(instance, path, config, control);\n group.addControl(config.name, control);\n }\n }\n\n createGroupField(\n groupConfig: AcGroupConfig,\n parentPath: string | null,\n instance: string | null,\n initialValues: any\n ) {\n const path = (parentPath ? parentPath + this.separator : \"\") + groupConfig.name;\n const g: FormGroup = this.createGroup(groupConfig.fields, path, instance, 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(instance, path, groupConfig, g);\n return g;\n }\n\n createArrayInstance(arrayConfig: AcArrayConfig, arrayPath: string, instanceNumber: number, initialValues: any): FormGroup {\n const fields = structuredClone(arrayConfig.field.fields);\n const grp = this.createGroup(fields, `${arrayPath}[${instanceNumber}]`, `${arrayPath}[${instanceNumber}]`, initialValues);\n arrayConfig.instances ??= [];\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 instance: 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).includes(arrayConfig.name)) {\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(instance, path, arrayConfig, formArray);\n return formArray;\n }\n\n setFormFieldMapItem(\n instance: string | null,\n path: string,\n config: AcFieldConfig | AcTextConfig | StepConfig,\n control: FormControl | FormGroup | FormArray | null\n ) {\n if (!this.data!.idPathMap.get(config.id!)) {\n this.data!.idPathMap.set(config.id!, []);\n }\n this.data!.idPathMap.get(config.id!)?.push({instance, path});\n this.data!.pathFieldMap.set(path, {config, control});\n }\n\n createControl(config: AcControlConfig, initialValues: any) {\n let {disabled, validations, value} = config;\n if (initialValues && Object.keys(initialValues).includes(config.name)) {\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 } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {AbstractFieldComponent, AcTextConfig} from '../../../core';\nimport {MatArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-mat-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class MatDivTextComponent 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';\nimport {MatArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-mat-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, input, InputSignal, OnInit} from '@angular/core';\nimport {AbstractControlFieldComponent, AcAffix} from '../../../core';\nimport {FormGroup, 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\";\nimport {MatFieldInputConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-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 MatFieldInputComponent extends AbstractControlFieldComponent<MatFieldInputConfig> implements OnInit {\n override field: InputSignal<MatFieldInputConfig> = input.required();\n override group: InputSignal<FormGroup> = input.required();\n inputType: string = 'text';\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 [appearance]=\"field().appearance ?? 'fill'\">\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\" matButton\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\" matButton\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-mat-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 MatGroupComponent 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 matDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"subGroup\"\n [instancePath]=\"instancePath\"\n [data]=\"data\"\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\";\n\n@Component({\n selector: \"sot-mat-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 MatArrayComponent 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 if (!this.field().instances) {\n this.field().instances = [];\n }\n const i = this.field().instances!.length > 0 ? this.field().instances![this.field().instances!.length - 1].number + 1 : 0;\n const fields = structuredClone(this.field().field.fields);\n const grp = this.dynamicService.createGroup(fields, `${this.path}[${i}]`, null, 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 this.field().instances!.splice(index, 1);\n for (const key of this.dynamicService.data!.pathFieldMap.keys()) {\n if (key.startsWith(`${this.path}[${inst.number}]`)) {\n this.data?.pathFieldMap.delete(key);\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 matDynamicField\n [type]=\"f.type\"\n [path]=\"path + '.' + f.name\"\n [field]=\"f\"\n [group]=\"inst.group\"\n [instancePath]=\"path + '[' + inst.number + ']'\"\n [data]=\"data\"\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 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-mat-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 MatRowComponent 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 matDynamicField\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 {AbstractControlFieldComponent, AcAffix} 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, MatIconButton} from '@angular/material/button';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {PasswordValidators} from \"./password-validators\";\nimport {MatFieldPasswordConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-field-password',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatInputModule, MatButtonModule, MatIconButton],\n templateUrl: './field-password.component.html',\n styleUrls: ['./field-password.component.scss'],\n})\nexport class MatFieldPasswordComponent extends AbstractControlFieldComponent<MatFieldPasswordConfig> 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) {\n b.action(this.field(), this.group(), this.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 [appearance]=\"field().appearance ?? 'fill'\">\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\" matIconButton 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\" matButton\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\" matButton\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-mat-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 MatFieldRadioButtonComponent 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 {AbstractControlFieldComponent, AcAffix} 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';\nimport {MatFieldSelectConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-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 MatFieldSelectComponent extends AbstractControlFieldComponent<MatFieldSelectConfig> {\n options: any[] = [];\n\n override ngOnInit() {\n super.ngOnInit();\n const options = this.field().options;\n if (isObservable(options)) {\n options.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((options: any[]) => {\n this.options = options;\n });\n } else {\n this.options = options;\n }\n }\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 [appearance]=\"field().appearance ?? 'fill'\">\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 [multiple]=\"field().multiple\"\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\" matButton\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\" matButton\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 {AbstractControlFieldComponent, AcAffix} 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';\nimport {MatFieldTextareaConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-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 MatFieldTextareaComponent extends AbstractControlFieldComponent<MatFieldTextareaConfig> {\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 [appearance]=\"field().appearance ?? 'fill'\">\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\" matButton\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\" matButton\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 {MatSlideToggleModule} from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'sot-mat-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatSlideToggleModule],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class MatFieldToggleComponent 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 EventEmitter,\n Host,\n inject,\n input,\n InputSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SkipSelf,\n ViewContainerRef,\n} from '@angular/core';\nimport {AsyncValidatorFn, ControlContainer, FormControl, FormGroup, NgControl, ValidatorFn} from '@angular/forms';\nimport {AcFieldCustomConfig} from '../../../core/models/field-custom-config';\nimport {AcCustomComponentField} from '../../../core/abstract-field/custom-component';\n\n@Directive({\n selector: '[fieldCustom]',\n standalone: true,\n})\nexport class AcFieldCustomDirective extends NgControl implements OnChanges, OnInit, OnDestroy {\n private container: ViewContainerRef = inject(ViewContainerRef);\n private injector: EnvironmentInjector = inject(EnvironmentInjector);\n field: InputSignal<AcFieldCustomConfig<any>> = input.required<AcFieldCustomConfig<any>>();\n group: InputSignal<FormGroup> = input.required<FormGroup>();\n\n component: ComponentRef<AcCustomComponentField> | undefined;\n\n // tslint:disable-next-line:no-output-rename\n @Output('ngModelChange') update = new EventEmitter();\n\n pcontrol!: FormControl;\n\n constructor(\n @Optional() @Host() @SkipSelf() private parent: ControlContainer,\n ) {\n super();\n }\n\n ngOnChanges() {\n if (this.component) {\n this.component.instance.field = this.field();\n this.component.instance.group = this.group();\n }\n }\n\n ngOnInit() {\n if (!this.field().component) {\n throw new Error(`Trying to use an empty component`);\n }\n this.name = this.field().name;\n this.container.clear();\n this.component = this.container.createComponent(this.field().component, {\n environmentInjector: this.injector\n });\n this.valueAccessor = this.component.instance;\n this.component.instance.field = this.field();\n this.component.instance.group = this.group();\n if (this.formDirective) {\n this.pcontrol = this.formDirective.addControl(this);\n }\n }\n\n override get path(): string[] {\n // @ts-ignore\n return [...this.parent.path, this.name];\n }\n\n get formDirective(): any {\n return this.parent ? this.parent.formDirective : null;\n }\n\n\n get control(): FormControl {\n return this.pcontrol;\n }\n\n\n override get validator(): ValidatorFn | null {\n return null;\n }\n\n override get asyncValidator(): AsyncValidatorFn | null {\n return null;\n }\n\n viewToModelUpdate(newValue: any): void {\n this.update.emit(newValue);\n }\n\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n if (this.component) {\n this.component.destroy();\n }\n }\n}\n","import {Component} from \"@angular/core\";\nimport {AcFieldCustomDirective} from \"./field-custom.directive\";\nimport {ReactiveFormsModule} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\nimport {AbstractControlFieldComponent} from '../../../core';\nimport {AcFieldCustomConfig} from '../../../core/models/field-custom-config';\nimport {MatArrayComponent} from '../array/array.component';\n\n@Component({\n selector: \"ac-mat-field-custom\",\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, AcFieldCustomDirective],\n templateUrl: \"./field-custom.component.html\",\n styleUrls: [\"./field-custom.component.scss\"]\n})\nexport class MatFieldCustomComponent extends AbstractControlFieldComponent<AcFieldCustomConfig<any>> {\n}\n","<div class=\"ac-form-field ac-form-field-custom\"\n [ngClass]=\"field().className\"\n [formGroup]=\"group()\" >\n <ng-container fieldCustom [field]=\"field()\" [group]=\"group()\" > </ng-container>\n</div>\n","import { Component, inject, OnInit } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogModule } from \"@angular/material/dialog\";\nimport { ConfirmDialogData } from \"../../../core/models/confirm-dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatButton } from \"@angular/material/button\";\n\n@Component({\n selector: \"sot-confirm-dialog\",\n imports: [MatIcon, MatButton, MatDialogModule, MatButton],\n templateUrl: \"./confirm-dialog.component.html\",\n styleUrls: [\"./confirm-dialog.component.scss\"]\n})\nexport class ConfirmDialogComponent implements OnInit {\n data: ConfirmDialogData = inject(MAT_DIALOG_DATA);\n title?: string;\n message?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n\n constructor() {\n }\n\n ngOnInit(): void {\n this.title = this.data.title ? this.data.title : \"Confirmation\";\n this.message = this.data.message ? this.data.message : \"Do you confirm this action ?\";\n this.confirmLabel = this.data.confirmLabel ? this.data.confirmLabel : \"Yes\";\n this.cancelLabel = this.data.cancelLabel ? this.data.cancelLabel : \"No\";\n }\n}\n","<div class=\"modal-close-button\">\n <button matButton=\"outlined\" mat-dialog-close>\n <mat-icon title=\"Fermer\">close</mat-icon>\n Fermer\n </button>\n</div>\n\n<h2 class=\"modal-title\" matDialogTitle>{{ title }}</h2>\n\n<div matDialogContent>\n <div [innerHtml]=\"message\"></div>\n</div>\n\n<div matDialogActions>\n <div class=\"modal-action-buttons\">\n <button matButton=\"outlined\" mat-dialog-close>\n {{ cancelLabel }}\n </button>\n <button matButton=\"filled\" [mat-dialog-close]=\"true\">\n {{ confirmLabel }}\n </button>\n </div>\n</div>\n","import {\r\n Component,\r\n computed,\r\n input,\r\n InputSignal,\r\n output,\r\n OutputEmitterRef,\r\n Signal\r\n} from '@angular/core';\r\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\r\nimport {MatBadge} from '@angular/material/badge';\r\nimport {MatButton, MatFabButton, MatIconButton, MatMiniFabButton} from '@angular/material/button';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {AcBadgeOptions, AcButtonType, AcMaterialButtonType} from '../../../core';\r\n\r\n@Component({\r\n selector: 'sot-mat-button',\r\n imports: [\r\n NgClass,\r\n MatBadge,\r\n MatButton,\r\n MatIconButton,\r\n MatFabButton,\r\n MatMiniFabButton,\r\n MatMenuModule,\r\n MatIcon,\r\n NgTemplateOutlet\r\n ],\r\n templateUrl: './button.html',\r\n styleUrl: './button.css',\r\n})\r\nexport class MaterialButton {\r\n\r\n type: InputSignal<AcButtonType> = input<AcButtonType>('button');\r\n matType: InputSignal<AcMaterialButtonType | undefined> = input<AcMaterialButtonType>();\r\n disabled: InputSignal<boolean | undefined> = input<boolean>();\r\n disableRipple: InputSignal<boolean | undefined> = input<boolean>();\r\n label: InputSignal<string | undefined> = input<string>();\r\n className: InputSignal<string | undefined> = input<string>();\r\n title: InputSignal<string | undefined> = input<string>();\r\n matIcon: InputSignal<string | undefined> = input<string>();\r\n badge: InputSignal<string | undefined> = input<string>();\r\n badgeOptions: InputSignal<AcBadgeOptions | undefined> = input<AcBadgeOptions>();\r\n ariaLabel: InputSignal<string | undefined> = input<string>();\r\n buttonMatType: Signal<string> = computed(() => (this.type() === 'link' ? 'link-' : 'button-') + (this.matType() ?? 'basic'));\r\n\r\n buttonClick: OutputEmitterRef<void> = output<void>();\r\n\r\n clickButton(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.buttonClick.emit();\r\n }\r\n}\r\n","@switch (buttonMatType()) {\r\n @case ('button-basic') {\r\n <button matButton\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-basic') {\r\n <a type=\"link\" matButton\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-outlined') {\r\n <button matButton=\"outlined\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-outlined') {\r\n <a type=\"link\" matButton=\"outlined\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-elevated') {\r\n <button matButton=\"elevated\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-elevated') {\r\n <a type=\"link\" matButton=\"elevated\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-filled') {\r\n <button matButton=\"filled\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-filled') {\r\n <a type=\"link\" matButton=\"filled\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-tonal') {\r\n <button matButton=\"tonal\"\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-tonal') {\r\n <a type=\"link\" matButton=\"tonal\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-icon') {\r\n <button matIconButton\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-icon') {\r\n <a type=\"link\" matIconButton\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-fab') {\r\n <button matFab\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-fab') {\r\n <a type=\"link\" matFab\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-mini-fab') {\r\n <button matMiniFab\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-mini-fab') {\r\n <a type=\"link\" matMiniFab\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n @case ('button-menu') {\r\n <button mat-menu-item\r\n [type]=\"type()\"\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </button>\r\n }\r\n @case ('link-menu') {\r\n <a type=\"link\" mat-menu-item\r\n [ngClass]=\"className()\"\r\n [title]=\"title() ?? ''\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n [disableRipple]=\"disableRipple()\"\r\n [matBadge]=\"badge()\"\r\n [matBadgePosition]=\"badgeOptions()?.position || 'after'\"\r\n [matBadgeDescription]=\"badgeOptions()?.description ?? ''\"\r\n [matBadgeDisabled]=\"badgeOptions()?.disabled\"\r\n [matBadgeHidden]=\"badgeOptions()?.hidden\"\r\n [matBadgeOverlap]=\"!(badgeOptions()?.noOverlap)\"\r\n [matBadgeSize]=\"badgeOptions()?.size ?? 'medium'\"\r\n (click)=\"clickButton($event)\">\r\n <span *ngTemplateOutlet=\"buttonContent\"></span>\r\n </a>\r\n }\r\n\r\n}\r\n\r\n<ng-template #buttonContent>\r\n @if (matIcon()) {\r\n <mat-icon\r\n aria-hidden=\"true\"\r\n [fontIcon]=\"matIcon()!\"\r\n ></mat-icon>\r\n }\r\n <span [innerHTML]=\"label()\"></span>\r\n</ng-template>\r\n\r\n","import {\n Component,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n InputSignal,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule\n} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {AcFieldFileConfig} from '../../../core/models/field-file-config';\nimport {isArray} from 'lodash-es';\nimport {NgClass} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ConfirmDialogComponent} from '../confirm-dialog/confirm-dialog.component';\nimport {ConfirmDialogData} from '../../../core';\nimport {MaterialButton} from '../button/button';\n\n\ninterface FileWrapper {\n file: File;\n srcUrl: string | null;\n}\n\n@Component({\n selector: 'sot-mat-input-file',\n standalone: true,\n imports: [ReactiveFormsModule, MatButtonModule, MatIconModule, NgClass, MaterialButton],\n templateUrl: './input-file.component.html',\n styleUrls: ['./input-file.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => MatInputFileComponent),\n },\n ],\n})\nexport class MatInputFileComponent implements OnInit, ControlValueAccessor {\n private readonly dialog: MatDialog = inject(MatDialog);\n field: InputSignal<AcFieldFileConfig> = input.required<AcFieldFileConfig>();\n group: InputSignal<FormGroup> = input.required<FormGroup>();\n @ViewChild('fileInput')\n fileInput?: ElementRef;\n fileList: FileWrapper[] = [];\n fichier?: FileWrapper | null = null;\n public disabled: boolean = false;\n public value: any[] | null = null;\n\n onChange = (value: any[] | null) => {\n };\n onTouched = () => {\n };\n\n constructor() {\n }\n\n ngOnInit(): void {\n const value = this.group().get(this.field().name)?.value;\n if (value) {\n if (!this.field().multiple) {\n this.fichier = {file: value, srcUrl: null};\n this.readFile(this.fichier, value);\n } else {\n if (isArray(value)) {\n this.fileList = value.map((f: any) => {\n const item: FileWrapper = {\n file: f,\n srcUrl: null\n }\n this.readFile(item, f);\n return item;\n });\n }\n }\n }\n }\n\n writeValue(value: any): void {\n this.value = value && (!this.field().multiple || value.length > 0) ? value : null;\n this.onChange(this.value);\n }\n\n registerOnChange(fn: (value: any[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onSelectFile(event: any) {\n if (event && event.target && event.target.files && event.target.files.length > 0) {\n for(let i = 0; i < event.target.files.length; i++) {\n const fichier = {file: event.target.files[i], srcUrl: null};\n this.readFile(fichier, fichier.file);\n if (!this.field().multiple) {\n this.addSimpleFile(fichier);\n } else {\n this.addMultipleFile(fichier);\n }\n }\n }\n }\n\n\n addSimpleFile(file: FileWrapper) {\n this.fichier = file;\n this.writeValue(this.fichier?.file);\n if (this.field().onAddFile) {\n this.field().onAddFile!(this.fichier?.file ?? null);\n }\n }\n\n addMultipleFile(file: FileWrapper) {\n if (file) {\n if (!this.fileList) {\n this.fileList = [];\n }\n this.fileList.push(file);\n\n if (this.field().onAddFile) {\n this.field().onAddFile!(file.file);\n }\n }\n this.writeValue(this.fileList.map((f: FileWrapper) => f.file));\n }\n\n confirmDeleteFile(file: FileWrapper) {\n if(this.field().confirmDelete) {\n const data: ConfirmDialogData = {\n title: this.field().confirmDeleteData?.title ?? \"Deletion\",\n message: this.field().confirmDeleteData?.message ?? \"Do you confirm this deletion ?\",\n confirmLabel: this.field().confirmDeleteData?.confirmLabel ?? \"Confirm\",\n cancelLabel: this.field().confirmDeleteData?.cancelLabel ?? \"Cancel\",\n closeLabel: this.field().confirmDeleteData?.closeLabel ?? \"Close\",\n };\n const dialogRef = this.dialog.open(ConfirmDialogComponent, { data, width: \"70%\" });\n dialogRef.afterClosed().subscribe((resp) => {\n if (resp) {\n this.deleteFile(file);\n }\n });\n } else {\n this.deleteFile(file);\n }\n }\n\n deleteFile(file: FileWrapper) {\n if (!this.field().multiple) {\n this.fichier = null;\n this.writeValue(null);\n } else {\n this.fileList.splice(this.fileList.indexOf(file), 1);\n this.writeValue(this.fileList.map((f: FileWrapper) => f.file));\n }\n if (this.field().onDeleteFile) {\n this.field().onDeleteFile!(file.file);\n }\n }\n\n readFile(item: FileWrapper, f: any) {\n if (f instanceof File && f.type.match('image.*')) {\n const reader = new FileReader();\n reader.onload = () => {\n item.srcUrl = reader.result as string;\n };\n reader.readAsDataURL(f);\n }\n }\n}\n","<div class=\"sot-file-wrapper\">\n <label [ngClass]=\"field().labelClassName\"\n [for]=\"'file-upload-' + field().id\">{{ field().label }}</label>\n <div class=\"sot-file-list\">\n @if (field().multiple) {\n <ul>\n @for (item of fileList; track item) {\n <li class=\"file-list-item\">\n <div>\n <div>\n @if (item.srcUrl) {\n <img [src]=\"item.srcUrl\" [alt]=\"item!.file.name\"/>\n } @else {\n {{ item.file.name }}\n }\n </div>\n </div>\n <div>\n @if (!field().disabled) {\n <button matIconButton\n type=\"button\"\n (click)=\"deleteFile(item)\"\n title=\"Supprimer\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n </li>\n }\n </ul>\n } @else {\n @if (fichier) {\n <div class=\"file-list-item\">\n <div>\n @if (fichier.srcUrl) {\n <img [src]=\"fichier.srcUrl\" [alt]=\"fichier.file.name\"/>\n } @else {\n {{ fichier.file.name }}\n }\n </div>\n @if (!field().disabled) {\n <sot-mat-button\n type=\"button\"\n [className]=\"field().deleteButton?.className\"\n [matType]=\"field().deleteButton?.matButtonType\"\n [matIcon]=\"field().deleteButton?.matIcon\"\n [label]=\"field().deleteButton?.label ?? 'Delete'\"\n [title]=\"field().deleteButton?.title\"\n [ariaLabel]=\"field().deleteButton?.ariaLabel\"\n (buttonClick)=\"confirmDeleteFile(fichier!)\"\n ></sot-mat-button>\n }\n </div>\n }\n }\n </div>\n <div class=\"sot-file-button\">\n <sot-mat-button\n type=\"button\"\n [className]=\"field().addButton?.className\"\n [matType]=\"field().addButton?.matButtonType\"\n [matIcon]=\"field().addButton?.matIcon\"\n [label]=\"field().addButton?.label ?? 'Select a file'\"\n [title]=\"field().addButton?.title\"\n [ariaLabel]=\"field().addButton?.ariaLabel\"\n [disabled]=\"field().disabled\"\n (buttonClick)=\"fileInput.click()\"\n ></sot-mat-button>\n <input\n #fileInput\n hidden\n type=\"file\"\n [attr.id]=\"'file-upload-' + field().id\"\n name=\"file-upload\"\n (change)=\"onSelectFile($event)\"\n [accept]=\"field().accept ? field().accept : '*/*'\"\n [multiple]=\"field().multiple\"\n />\n </div>\n</div>\n","import {Component} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatError} from '@angular/material/form-field';\nimport {AbstractControlFieldComponent} from '../../../core';\nimport {AcFieldFileConfig} from '../../../core/models/field-file-config';\nimport {MatInputFileComponent} from '../input-file/input-file.component';\n\n@Component({\n selector: 'sot-mat-field-file',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatError, MatInputFileComponent],\n templateUrl: './field-file.component.html',\n styleUrls: ['./field-file.component.scss'],\n})\nexport class MatFieldFileComponent extends AbstractControlFieldComponent<AcFieldFileConfig> {\n}\n","<div class=\"sot-formfield sot-formfield-file\" [ngClass]=\"field().className\" [formGroup]=\"group()\">\n <sot-mat-input-file [formControlName]=\"field().name\" [field]=\"field()\"\n [group]=\"group()\"></sot-mat-input-file>\n @for (validation of field().validations; track validation) {\n @if (control && !control.untouched && control.hasError(validation.name)) {\n <mat-error>{{ validation.message }}</mat-error>\n }\n }\n</div>\n","import {Component, computed, effect, inject, model, OnInit, signal} from '@angular/core';\nimport {AbstractControlFieldComponent, AcAffix} from '../../../core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {MatFormFieldModule} 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 {MatChipInputEvent, MatChipsModule} from '@angular/material/chips';\nimport {MatAutocompleteModule, MatAutocompleteSelectedEvent} from '@angular/material/autocomplete';\nimport {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {COMMA, ENTER} from \"@angular/cdk/keycodes\";\nimport {MatFieldChipsConfig} from '../../models/material-field-config';\n\n@Component({\n selector: 'sot-mat-field-chips',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatIconModule, MatButtonModule, MatChipsModule, MatAutocompleteModule, FormsModule],\n templateUrl: './field-chips.component.html',\n styleUrls: ['./field-chips.component.scss'],\n})\nexport class MatFieldChipsComponent extends AbstractControlFieldComponent<MatFieldChipsConfig> implements OnInit {\n inputType: string = 'chips';\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n readonly announcer = inject(LiveAnnouncer);\n options: string[] = [];\n readonly currentOption = model('');\n readonly values = signal<string[]>([]);\n readonly filteredOptions = computed(() => {\n const list = this.options.filter(item => !this.values().includes(item));\n const currentOption = this.currentOption().toLowerCase();\n return currentOption\n ? list.filter(option => option.toLowerCase().includes(currentOption))\n : list.slice();\n });\n\n constructor() {\n super();\n effect(() => {\n this.group().get(this.field().name)?.setValue(this.values());\n })\n }\n\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.data);\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n if (this.field().options) {\n this.options = this.field().options!;\n }\n if (this.field().value) {\n this.values.set(this.field().value);\n }\n const control = this.group().get(this.field().name);\n if (control) {\n control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (JSON.stringify(value) !== JSON.stringify(this.values())) {\n //this.values.set(value);\n console.log(true);\n }\n console.log(value, this.values());\n });\n }\n }\n\n add(event: MatChipInputEvent): void {\n console.log(event);\n const value = (event.value || '').trim();\n\n // Add our option\n if (value) {\n this.values.update(values => [...values, value]);\n }\n\n // Clear the input value\n this.currentOption.set('');\n }\n\n remove(option: string): void {\n this.values.update(values => {\n const index = values.indexOf(option);\n if (index < 0) {\n return values;\n }\n\n values.splice(index, 1);\n this.announcer.announce(`Removed ${option}`);\n return [...values];\n });\n }\n\n selected(event: MatAutocompleteSelectedEvent): void {\n this.values.update(values => [...values, event.option.viewValue]);\n this.currentOption.set('');\n event.option.deselect();\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 [appearance]=\"field().appearance ?? 'fill'\">\r\n <mat-label><span [innerHTML]=\"field().label\"></span></mat-label>\r\n\r\n <mat-chip-grid #chipGrid aria-label=\"option selection\">\r\n @for (option of values(); track $index) {\r\n <mat-chip-row (removed)=\"remove(option)\">\r\n {{ option }}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + option\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n\r\n <input\r\n #chipsInput\r\n [id]=\"uuid\"\r\n name=\"option\"\r\n [(ngModel)]=\"currentOption\"\r\n [ngModelOptions]=\"{standalone: true}\"\r\n [required]=\"!!required\"\r\n [autocomplete]=\"field().autocomplete ?? 'off'\"\r\n [type]=\"inputType\"\r\n [readonly]=\"field().readonly\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputSeparatorKeyCodes]=\"field().separatorKeysCodes ?? separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"add($event); chipsInput.value = ''\"\r\n >\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event); chipsInput.value = ''\">\r\n @for (option of filteredOptions(); track option) {\r\n <mat-option [value]=\"option\">{{ option }}</mat-option>\r\n }\r\n </mat-autocomplete>\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\" matButton\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\" matButton\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, inject} from '@angular/core';\nimport {MatDatepickerIntl, MatDatepickerModule} from '@angular/material/datepicker';\nimport {DateAdapter} from '@angular/material/core';\nimport {provideLuxonDateAdapter} from '@angular/material-luxon-adapter';\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';\nimport {AbstractControlFieldComponent, AcAffix} from '../../../core';\nimport {MatFieldDateConfig} from '../../models/material-field-config';\n\n\n@Component({\n selector: 'sot-field-date',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatFormFieldModule, MatDatepickerModule, MatInputModule, MatButtonModule],\n providers: [\n provideLuxonDateAdapter(),\n ],\n templateUrl: './field-date.component.html',\n styleUrls: ['./field-date.component.scss'],\n})\nexport class MatFieldDateComponent extends AbstractControlFieldComponent<MatFieldDateConfig> {\n private readonly _adapter = inject<DateAdapter<unknown, unknown>>(DateAdapter);\n private readonly _intl = inject(MatDatepickerIntl);\n dateFormatString!: string;\n locale!: string;\n\n override ngOnInit() {\n super.ngOnInit();\n this.locale = this.field().locale ?? 'en';\n this._adapter.setLocale(this.locale);\n this.dateFormatString = this.field().format ?? 'YYYY/MM/DD';\n this.updateCloseButtonLabel();\n\n const control = this.group().get(this.field().name);\n if (control) {\n if (typeof control.value === 'string') {\n //TODO control.setValue(moment(control.value, this.field().format));\n }\n }\n }\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.data);\n }\n }\n\n filterDate = (d: Date | null): boolean => {\n return this.field().filter ? this.field().filter!(d, this.field(), this.group()) : true;\n };\n\n updateCloseButtonLabel() {\n if (this.field().closeCalendarLabel) {\n this._intl.closeCalendarLabel = this.field().closeCalendarLabel!;\n }\n this._intl.changes.next();\n }\n}\n","<div\n class=\"ac-form-field ac-form-field-date\"\n [ngClass]=\"field().className\"\n [formGroup]=\"group()\"\n>\n <mat-form-field [appearance]=\"field().appearance ?? 'fill'\">\n <mat-label>\n {{ field().label }}\n </mat-label>\n <input matInput\n type=\"text\"\n [id]=\"uuid\"\n [matDatepicker]=\"picker\"\n [formControlName]=\"field().name\"\n [required]=\"!!required\"\n [readonly]=\"field().readonly\"\n [min]=\"field().minDate ? field().minDate : null\"\n [max]=\"field().maxDate ? field().maxDate : null\"\n [matDatepickerFilter]=\"filterDate\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker [touchUi]=\"!!field().touchUi\"></mat-datepicker>\n\n @for (prefix of field().prefixes; track prefix) {\n <span class=\"sot-formfield-prefix\" matPrefix>\n @if (prefix.action) {\n <button type=\"button\" matButton\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 @for (suffix of field().suffixes; track suffix) {\n <span class=\"sot-formfield-suffix\" matSuffix>\n @if (suffix.action) {\n <button type=\"button\" matButton\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\n @if (field().description) {\n <mat-hint align=\"start\"> {{ field().description }}</mat-hint>\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 {\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 {MatDivTextComponent} from \"./div-text/div-text.component\";\nimport {AcFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig, DynamicFormData} from '../../core';\nimport {MatFieldInputComponent} from './field-input/field-input.component';\nimport {MatGroupComponent} from './group/group.component';\nimport {MatArrayComponent} from './array/array.component';\nimport {MatRowComponent} from './row/row.component';\nimport {MatFieldPasswordComponent} from './field-password/field-password.component';\nimport {MatFieldRadioButtonComponent} from './field-radio-button/field-radio-button.component';\nimport { MatFieldSelectComponent } from \"./field-select/field-select.component\";\nimport {MatFieldTextareaComponent} from './field-textarea/field-textarea.component';\nimport {MatFieldToggleComponent} from './field-toggle/field-toggle.component';\nimport {MatFieldCustomComponent} from './field-custom/field-custom.component';\nimport { MatFieldFileComponent } from \"./field-file/field-file.component\";\nimport {MatFieldChipsComponent} from './field-chips/field-chips.component';\nimport {MatFieldDateComponent} from './field-date/field-date.component';\n\n\nconst components: { [type: string]: Type<AcField> } = {\n text: MatDivTextComponent,\n group: MatGroupComponent,\n array: MatArrayComponent,\n row: MatRowComponent,\n checkbox: AcFieldCheckboxComponent,\n input: MatFieldInputComponent,\n password: MatFieldPasswordComponent,\n radio: MatFieldRadioButtonComponent,\n select: MatFieldSelectComponent,\n textarea: MatFieldTextareaComponent,\n toggle: MatFieldToggleComponent,\n customField: MatFieldCustomComponent,\n file: MatFieldFileComponent,\n chips: MatFieldChipsComponent,\n date: MatFieldDateComponent\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n tabs: AcTabsComponent,\n */\n};\n\n@Directive({\n selector: \"[matDynamicField]\",\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 data: InputSignal<DynamicFormData | undefined> = input<DynamicFormData>();\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 this.component.instance.data = this.data();\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 {DynamicFormData, 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\";\nimport {MaterialButton} from '../components/button/button';\nimport {MaterialDynamicForm} from '../models/material-field-config';\n\n@Component({\n exportAs: 'dynamicForm',\n selector: 'sot-material-dynamic-form',\n standalone: true,\n imports: [AcDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError, MatIconModule, MatButtonModule, MaterialButton],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class MaterialDynamicFormComponent {\n private readonly dynamicFormService: DynamicFormService = inject(DynamicFormService);\n private readonly destroyRef = inject(DestroyRef);\n config: InputSignal<MaterialDynamicForm | null> = input.required<MaterialDynamicForm | 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 formInit: OutputEmitterRef<FormGroup> = output<FormGroup>();\n\n get form(): FormGroup | undefined {\n return this.dynamicFormService.form;\n }\n\n get data(): DynamicFormData | undefined {\n return this.dynamicFormService.data;\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.formInit.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 matDynamicField\r\n [path]=\"field.name\"\r\n [type]=\"field.type\"\r\n [field]=\"field\"\r\n [group]=\"form\"\r\n [data]=\"data\"\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 <sot-mat-button\r\n [type]=\"button.type\"\r\n [className]=\"button.className\"\r\n [matType]=\"button.matButtonType\"\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-mat-button>\r\n }\r\n </div>\r\n }\r\n </form>\r\n}\r\n","import {Component, inject, OnInit} from \"@angular/core\";\nimport {\n AcModalFormButton,\n AcModalFormResponse,\n DynamicFormData,\n DynamicFormService\n} from '../../core';\nimport {FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from \"@angular/material/dialog\";\nimport {NgClass} from \"@angular/common\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {take} from 'rxjs';\nimport {AcDynamicFieldDirective} from '../components/dynamic-field.directive';\nimport {MaterialButton} from '../components/button/button';\nimport {MaterialDynamicFormModal} from '../models/material-field-config';\n\n@Component({\n selector: \"ac-dynamic-form-modal\",\n standalone: true,\n imports: [NgClass, ReactiveFormsModule, MatIconModule, MatButtonModule, MatDialogModule, AcDynamicFieldDirective, MaterialButton],\n templateUrl: \"./dynamic-form-modal.component.html\",\n styleUrls: [],\n providers: [DynamicFormService],\n})\nexport class MaterialDynamicFormModalComponent implements OnInit {\n private readonly dialogRef = inject(MatDialogRef<MaterialDynamicFormModalComponent>);\n private readonly dynamicFormService: DynamicFormService = inject(DynamicFormService);\n data: MaterialDynamicFormModal = inject(MAT_DIALOG_DATA);\n status?: 'OK' | 'ERROR';\n message?: string;\n\n get form(): FormGroup | undefined {\n return this.dynamicFormService.form;\n }\n\n get formData(): DynamicFormData | undefined {\n return this.dynamicFormService.data;\n }\n\n constructor() {\n this.dynamicFormService.createForm(\n this.data.fields,\n this.data.validations,\n this.data.updateOn ?? \"change\",\n this.data.initialObject\n );\n }\n\n ngOnInit() {\n }\n\n onClickButton(button: AcModalFormButton) {\n if (button.type === 'reset') {\n this.dialogRef.close();\n }\n if (button.action) {\n button.action(this.form!, this.data.initialObject).pipe(take(1)).subscribe((resp: boolean | AcModalFormResponse) => {\n if (resp === true) {\n this.dialogRef.close();\n } else if (resp) {\n this.message = (resp as AcModalFormResponse).message;\n this.status = (resp as AcModalFormResponse).status;\n }\n });\n }\n }\n}\n","<h2 class=\"modal-title\" matDialogTitle> {{ data.title }}</h2>\r\n\r\n<div matDialogContent>\r\n @if (data.description) {\r\n <p [innerHTML]=\"data.description\"></p>\r\n }\r\n @if (form) {\r\n <form class=\"dynamic-form\"\r\n [formGroup]=\"form\"\r\n [ngClass]=\"data.className?.form\">\r\n <div class=\"dynamic-form-content\"\r\n [ngClass]=\"data.className?.formContent\">\r\n @for (field of data.fields; track field) {\r\n <div\r\n [hidden]=\"!!field.hidden\"\r\n [ngClass]=\"field.hostClassName\">\r\n <ng-container\r\n matDynamicField\r\n [path]=\"field.name\"\r\n [type]=\"field.type\"\r\n [field]=\"field\"\r\n [group]=\"form\"\r\n [data]=\"formData\"\r\n >\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n }\r\n @if (message) {\r\n <div [innerHTML]=\"message\"\r\n [ngClass]=\"{'message-success': status === 'OK', 'message-error': status === 'ERROR'}\"\r\n ></div>\r\n }\r\n</div>\r\n\r\n<div matDialogActions>\r\n <div class=\"modal-action-buttons\" [ngClass]=\"data.className?.formButtons\">\r\n @for (button of data.buttons; track $index) {\r\n <sot-mat-button\r\n [className]=\"button.className\"\r\n [matType]=\"button.matButtonType\"\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-mat-button>\r\n }\r\n </div>\r\n</div>\r\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n input,\n InputSignal,\n OnChanges,\n OnInit,\n output,\n OutputEmitterRef,\n SimpleChanges,\n ViewChild\n} from \"@angular/core\";\nimport {AbstractControl, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {BehaviorSubject, distinctUntilChanged, map, Observable} from \"rxjs\";\nimport {debounceTime} from \"rxjs/operators\";\nimport {AsyncPipe, NgClass} from \"@angular/common\";\nimport {MatIcon, MatIconModule} from \"@angular/material/icon\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatSidenavModule} from \"@angular/material/sidenav\";\nimport {MatListModule} from \"@angular/material/list\";\nimport {\n MatStepper,\n MatStepperModule,\n MatStepperNext,\n MatStepperPrevious,\n StepperOrientation\n} from \"@angular/material/stepper\";\nimport {STEPPER_GLOBAL_OPTIONS} from \"@angular/cdk/stepper\";\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {BreakpointObserver} from \"@angular/cdk/layout\";\nimport {AcStepperFormButton, DynamicFormData, DynamicFormService} from \"../../core\";\nimport {AcDynamicFieldDirective} from \"../components/dynamic-field.directive\";\nimport {MaterialDynamicFormStepper} from '../models/material-field-config';\n\n@Component({\n exportAs: \"dynamicFormStepper\",\n selector: \"sot-material-dynamic-form-stepper\",\n standalone: true,\n imports: [AcDynamicFieldDirective, NgClass, ReactiveFormsModule,\n MatIconModule, MatButtonModule, MatSidenavModule, MatListModule,\n MatStepperModule, AsyncPipe, MatStepperPrevious, MatStepperNext, MatIcon],\n templateUrl: \"./dynamic-form-stepper.component.html\",\n styleUrls: [\"./dynamic-form-stepper.component.scss\"],\n providers: [\n DynamicFormService, {\n provide: STEPPER_GLOBAL_OPTIONS,\n useValue: {showError: true, displayDefaultIndicatorType: false},\n }]\n})\nexport class MaterialDynamicFormStepperComponent implements OnInit, OnChanges {\n private readonly dynamicFormService: DynamicFormService = inject(DynamicFormService);\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly breakpointObserver: BreakpointObserver = inject(BreakpointObserver);\n @ViewChild('stepper') stepper!: MatStepper;\n\n config: InputSignal<MaterialDynamicFormStepper> = input.required<MaterialDynamicFormStepper>();\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 stepperOrientation: BehaviorSubject<StepperOrientation> = new BehaviorSubject<StepperOrientation>('horizontal');\n\n get form(): FormGroup | undefined {\n return this.dynamicFormService.form;\n }\n\n get data(): DynamicFormData | undefined {\n return this.dynamicFormService.data;\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 ngOnInit() {\n this.dynamicFormService.createFormStepper(this.config().steps, this.config().validations, this.config().updateOn, this.initialValues);\n this.onValueChanges();\n this.form!.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(this.config().debounceTime ?? 0),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.onValueChanges();\n });\n\n if (this.config().orientation === 'responsive') {\n const breakpoint = this.config().responsiveBreakpoint ?? '800px'\n this.breakpointObserver\n .observe('(min-width: ' + breakpoint + ')')\n .pipe(map(({matches}) => (matches ? 'horizontal' : 'vertical')))\n .subscribe(this.stepperOrientation);\n } else if (this.config().orientation) {\n this.stepperOrientation.next(this.config().orientation as StepperOrientation);\n }\n }\n\n getSubGroup(stepName: string) {\n return this.form!.controls[stepName] as FormGroup;\n }\n\n onValueChanges() {\n this.formChange.emit(this.form!);\n if (this.config().onValueChanges) {\n this.config().onValueChanges!(this.form!, this.config().steps);\n this.cdr.detectChanges();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes[\"initialValues\"] && this.form) {\n this.setValue(this.initialValues);\n }\n }\n\n setValue(values: { [key: string]: any }) {\n this.form!.setValue(values);\n this.form!.updateValueAndValidity();\n }\n\n onClickButton(button: AcStepperFormButton) {\n if (button.type === 'reset') {\n this.reset();\n } else if (button.type === 'submit') {\n this.formSubmit.emit(this.form!);\n }\n if (button.action) {\n button.action(this.form!);\n }\n }\n\n reset() {\n this.form!.reset();\n this.stepper.reset();\n this.formCancel.emit();\n }\n\n}\n","@if (form) {\r\n <form [formGroup]=\"form\"\r\n class=\"dynamic-form-stepper\"\r\n [ngClass]=\"config().className\"\r\n >\r\n <mat-stepper #stepper\r\n [linear]=\"config().linear\"\r\n [orientation]=\"(stepperOrientation | async)!\">\r\n @for (step of config().steps; track step.name; let stepFirst = $first; let stepLast = $last) {\r\n <mat-step [stepControl]=\"form.controls[step.name]\"\r\n [formGroup]=\"getSubGroup(step.name)\"\r\n [errorMessage]=\"step.errorMessage ?? ''\">\r\n <ng-template matStepLabel>{{ step.label }}</ng-template>\r\n <ng-template matStepContent>\r\n <div class=\"dynamic-form-stepper-content\"\r\n [ngClass]=\"config().className?.formContent\">\r\n @for (field of step.fields; track field.name) {\r\n <div [hidden]=\"!!field.hidden\" [ngClass]=\"field.hostClassName\">\r\n <ng-container\r\n matDynamicField\r\n [path]=\"field.name\"\r\n [type]=\"field.type\"\r\n [field]=\"field\"\r\n [group]=\"getSubGroup(step.name)\"\r\n [data]=\"data\"\r\n >\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n @if (config()!.buttons) {\r\n <div class=\"dynamic-form-stepper-buttons\" [ngClass]=\"config().className?.formButtons\">\r\n @for (button of config().buttons; track $index) {\r\n\r\n @if (button.type === 'previous' && !stepFirst) {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n matStepperPrevious\r\n type=\"button\"\r\n [ngClass]=\"button.className\"\r\n [disabled]=\"button.disabledIfFormNoValid && getSubGroup(step.name).invalid\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else if (button.type === 'next' && !stepLast) {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n matStepperNext\r\n type=\"button\"\r\n [ngClass]=\"button.className\"\r\n [disabled]=\"button.disabledIfFormNoValid && getSubGroup(step.name).invalid\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n [attr.aria-label]=\"button.ariaLabel\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else if ((button.type === 'submit' || button.type === 'reset') && stepLast) {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n [type]=\"button.type\"\r\n [ngClass]=\"button.className\"\r\n [disabled]=\"button.disabledIfFormNoValid && getSubGroup(step.name).invalid\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n [attr.aria-label]=\"button.ariaLabel\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else if (button.type === 'button') {\r\n <button [matButton]=\"button.matButtonAppearance ?? 'text'\"\r\n [type]=\"button.type\"\r\n [ngClass]=\"button.className\"\r\n (click)=\"onClickButton(button)\"\r\n [title]=\"button.title ? button.title : ''\"\r\n [attr.aria-label]=\"button.ariaLabel\"\r\n >\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </mat-step>\r\n }\r\n </mat-stepper>\r\n </form>\r\n}\r\n","import { Component } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {AbstractFieldComponent, AcTextConfig} from '../../../core';\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class DsfrDivTextComponent 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 {AbstractControlFieldComponent, AcFieldCheckboxConfig} from '../../../core';\n\n@Component({\n selector: 'sot-dsfr-field-checkbox',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule],\n templateUrl: './field-checkbox.component.html',\n styleUrls: ['./field-checkbox.component.scss'],\n})\nexport class DsfrFieldCheckboxComponent 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\";\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 DsfrFieldInputComponent extends AbstractControlFieldComponent<AcFieldInputConfig> implements OnInit {\n inputType: string = 'text';\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 {DsfrDynamicFieldDirective} from \"../dynamic-field.directive\";\n\n@Component({\n selector: 'sot-dsfr-group',\n standalone: true,\n imports: [\n forwardRef(() => DsfrDynamicFieldDirective),\n NgClass,\n NgTemplateOutlet\n ],\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n})\nexport class DsfrGroupComponent 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 dsfrDynamicField\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 {DsfrDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {MatExpansionModule} from \"@angular/material/expansion\";\nimport {NgClass, NgTemplateOutlet} from \"@angular/common\";\nimport {MatCardModule} from \"@angular/material/card\";\nimport * as _ from \"lodash-es\";\n\n@Component({\n selector: \"sot-dsfr-array\",\n standalone: true,\n imports: [\n forwardRef(() => DsfrDynamicFieldDirective),\n MatExpansionModule,\n NgClass,\n MatCardModule,\n ReactiveFormsModule,\n NgTemplateOutlet\n ],\n templateUrl: \"./array.component.html\",\n styleUrls: [\"./array.component.scss\"]\n})\nexport class DsfrArrayComponent 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 = structuredClone(this.field().field.fields);\n const grp = this.dynamicService.createGroup(fields, `${this.path}[${i}]`, null,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 dsfrDynamicField\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 {DsfrDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-row',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass,\n forwardRef(() => DsfrDynamicFieldDirective),\n DsfrDynamicFieldDirective\n ],\n templateUrl: './row.component.html',\n styleUrls: ['./row.component.scss'],\n})\nexport class DsfrRowComponent 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 dsfrDynamicField\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\";\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 DsfrFieldPasswordComponent 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) {\n b.action(this.field(), this.group(), this.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 {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatIconModule} from '@angular/material/icon';\n\n@Component({\n selector: 'sot-dsfr-field-radio-button',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatRadioModule, MatTooltipModule, MatIconModule],\n templateUrl: './field-radio-button.component.html',\n styleUrls: ['./field-radio-button.component.scss'],\n})\nexport class DsfrFieldRadioButtonComponent 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';\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 const options = this.field().options;\n if (isObservable(options)) {\n options.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((options: any[]) => {\n this.options = options;\n });\n } else {\n this.options = options;\n }\n }\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 [multiple]=\"field().multiple\"\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';\nimport {DsfrArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-dsfr-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 DsfrFieldTextareaComponent extends AbstractControlFieldComponent<AcFieldTextareaConfig> {\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 {MatSlideToggleModule} from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'sot-dsfr-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, MatCheckboxModule, MatSlideToggleModule],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class DsfrFieldToggleComponent 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 {DsfrDivTextComponent} from \"./div-text/div-text.component\";\nimport {DsfrFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig} from '../../core';\nimport {DsfrFieldInputComponent} from './field-input/field-input.component';\nimport { DsfrGroupComponent } from \"./group/group.component\";\nimport {DsfrArrayComponent} from \"./array/array.component\";\nimport {DsfrRowComponent} from \"./row/row.component\";\nimport {DsfrFieldPasswordComponent} from './field-password/field-password.component';\nimport { DsfrFieldRadioButtonComponent } from \"./field-radio-button/field-radio-button.component\";\nimport {AcFieldSelectComponent} from './field-select/field-select.component';\nimport { DsfrFieldTextareaComponent } from \"./field-textarea/field-textarea.component\";\nimport {DsfrFieldToggleComponent} from './field-toggle/field-toggle.component';\n\n\nconst components: { [type: string]: Type<AcField> } = {\n group: DsfrGroupComponent,\n array: DsfrArrayComponent,\n row: DsfrRowComponent,\n text: DsfrDivTextComponent,\n checkbox: DsfrFieldCheckboxComponent,\n input: DsfrFieldInputComponent,\n password: DsfrFieldPasswordComponent,\n radio: DsfrFieldRadioButtonComponent,\n select: AcFieldSelectComponent,\n textarea: DsfrFieldTextareaComponent,\n toggle: DsfrFieldToggleComponent,\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n customField: AcFieldCustomComponent,\n tabs: AcTabsComponent,\n file: AcFieldFileComponent,\n */\n};\n\n@Directive({\n selector: \"[dsfrDynamicField]\",\n standalone: true\n})\nexport class DsfrDynamicFieldDirective 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 {DsfrDynamicFieldDirective} 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: [DsfrDynamicFieldDirective, NgClass, ReactiveFormsModule, MatError, MatIconModule, MatButtonModule],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class DsfrDynamicFormComponent {\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?.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 dsfrDynamicField\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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-div-text',\n standalone: true,\n imports: [NgClass],\n templateUrl: './div-text.component.html',\n styleUrls: ['./div-text.component.scss'],\n})\nexport class ClassicDivTextComponent 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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-checkbox',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-checkbox.component.html',\n styleUrls: ['./field-checkbox.component.scss'],\n})\nexport class ClassicFieldCheckboxComponent 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\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-input',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-input.component.html',\n styleUrls: ['./field-input.component.scss'],\n})\nexport class ClassicFieldInputComponent extends AbstractControlFieldComponent<AcFieldInputConfig> implements OnInit {\n inputType: string = 'text';\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 {ClassiDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-group',\n standalone: true,\n imports: [\n forwardRef(() => ClassiDynamicFieldDirective),\n NgClass,\n NgTemplateOutlet\n ],\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n})\nexport class ClassicGroupComponent 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 classicDynamicField\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 {ClassiDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {NgClass, NgTemplateOutlet} from \"@angular/common\";\n\n@Component({\n selector: \"sot-classic-array\",\n standalone: true,\n imports: [\n forwardRef(() => ClassiDynamicFieldDirective),\n NgClass,\n ReactiveFormsModule,\n NgTemplateOutlet\n ],\n templateUrl: \"./array.component.html\",\n styleUrls: [\"./array.component.scss\"]\n})\nexport class ClassicArrayComponent 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 = structuredClone(this.field().field.fields);\n const grp = this.dynamicService.createGroup(fields, `${this.path}[${i}]`, null,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 classicDynamicField\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 {ClassiDynamicFieldDirective} from \"../dynamic-field.directive\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-row',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass,\n forwardRef(() => ClassiDynamicFieldDirective)\n ],\n templateUrl: './row.component.html',\n styleUrls: ['./row.component.scss'],\n})\nexport class ClassicRowComponent 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 classicDynamicField\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\";\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-password',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-password.component.html',\n styleUrls: ['./field-password.component.scss'],\n})\nexport class ClassicFieldPasswordComponent 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) {\n b.action(this.field(), this.group(), this.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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-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 ClassicFieldRadioButtonComponent 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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-select',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-select.component.html',\n styleUrls: ['./field-select.component.scss'],\n})\nexport class ClassicFieldSelectComponent extends AbstractControlFieldComponent<AcFieldSelectConfig> {\n options: any[] = [];\n\n override ngOnInit() {\n super.ngOnInit();\n const options = this.field().options;\n if (isObservable(options)) {\n options.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((options: any[]) => {\n this.options = options;\n });\n } else {\n this.options = options;\n }\n }\n\n buttonAction(b: AcAffix) {\n if (b.action) {\n b.action(this.field(), this.group(), this.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 [multiple]=\"field().multiple\"\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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-toggle',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-toggle.component.html',\n styleUrls: ['./field-toggle.component.scss'],\n})\nexport class ClassicFieldToggleComponent 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';\nimport {ClassicArrayComponent} from '../array/array.component';\n\n@Component({\n selector: 'sot-classic-field-textarea',\n standalone: true,\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './field-textarea.component.html',\n styleUrls: ['./field-textarea.component.scss'],\n})\nexport class ClassicFieldTextareaComponent extends AbstractControlFieldComponent<AcFieldTextareaConfig> {\n buttonAction(b: AcAffix) {\n if (b.action && this.field() && this.group()) {\n b.action(this.field(), this.group(), this.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 {ClassicDivTextComponent} from \"./div-text/div-text.component\";\nimport {ClassicFieldCheckboxComponent} from \"./field-checkbox/field-checkbox.component\";\nimport {FormGroup} from \"@angular/forms\";\nimport {AcField, AcFieldConfig, AcTextConfig} from '../../core';\nimport {ClassicFieldInputComponent} from './field-input/field-input.component';\nimport {ClassicGroupComponent} from \"./group/group.component\";\nimport {ClassicArrayComponent} from \"./array/array.component\";\nimport {ClassicRowComponent} from \"./row/row.component\";\nimport {ClassicFieldPasswordComponent} from \"./field-password/field-password.component\";\nimport {ClassicFieldRadioButtonComponent} from \"./field-radio-button/field-radio-button.component\";\nimport {ClassicFieldSelectComponent} from \"./field-select/field-select.component\";\nimport {ClassicFieldToggleComponent} from \"./field-toggle/field-toggle.component\";\nimport {ClassicFieldTextareaComponent} from \"./field-textarea/field-textarea.component\";\n\n\nconst components: { [type: string]: Type<AcField> } = {\n group: ClassicGroupComponent,\n array: ClassicArrayComponent,\n row: ClassicRowComponent,\n text: ClassicDivTextComponent,\n checkbox: ClassicFieldCheckboxComponent,\n input: ClassicFieldInputComponent,\n password: ClassicFieldPasswordComponent,\n radio: ClassicFieldRadioButtonComponent,\n select: ClassicFieldSelectComponent,\n textarea: ClassicFieldTextareaComponent,\n toggle: ClassicFieldToggleComponent,\n /*\n date: AcFieldDateComponent,\n autocomplete: AcFieldAutocompleteComponent,\n customField: AcFieldCustomComponent,\n tabs: AcTabsComponent,\n file: AcFieldFileComponent,\n\n */\n};\n\n@Directive({\n selector: \"[classicDynamicField]\",\n standalone: true\n})\nexport class ClassiDynamicFieldDirective 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 {ClassiDynamicFieldDirective} from '../components/dynamic-field.directive';\nimport {NgClass} from '@angular/common';\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: [ClassiDynamicFieldDirective, NgClass, ReactiveFormsModule, MatIconModule, MatButtonModule],\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss'],\n providers: [DynamicFormService],\n})\nexport class ClassicDynamicFormComponent {\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 classicDynamicField\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":["i2","PasswordValidators","i3","i5","i1","i4","components"],"mappings":"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"}
|