{"version":3,"file":"ngx-dnd-form-builder.mjs","sources":["../../src/ngx-dnd-form-builder/assets/i18n/en.ts","../../src/ngx-dnd-form-builder/assets/i18n/es.ts","../../src/ngx-dnd-form-builder/utils.ts","../../src/ngx-dnd-form-builder/validators/keys.validator.ts","../../src/ngx-dnd-form-builder/services/translation.service.ts","../../src/ngx-dnd-form-builder/services/form-builder-config.service.ts","../../src/ngx-dnd-form-builder/services/form-builder.service.ts","../../src/ngx-dnd-form-builder/components/property/property.component.ts","../../src/ngx-dnd-form-builder/components/enriched-text/enriched-text.component.ts","../../src/ngx-dnd-form-builder/components/enriched-text/enriched-text.component.html","../../src/ngx-dnd-form-builder/validators/normalized-chars.validator.ts","../../src/ngx-dnd-form-builder/validators/with-points.validator.ts","../../src/ngx-dnd-form-builder/pipes/ucfirst.pipe.ts","../../src/ngx-dnd-form-builder/components/triggers/triggers.component.ts","../../src/ngx-dnd-form-builder/components/triggers/triggers.component.html","../../src/ngx-dnd-form-builder/components/config-per-role/config-per-role.component.ts","../../src/ngx-dnd-form-builder/components/config-per-role/config-per-role.component.html","../../src/ngx-dnd-form-builder/components/fieldset/fieldset.component.ts","../../src/ngx-dnd-form-builder/components/fieldset/fieldset.component.html","../../src/ngx-dnd-form-builder/components/file/file.component.ts","../../src/ngx-dnd-form-builder/components/file/file.component.html","../../src/ngx-dnd-form-builder/components/input/input.component.ts","../../src/ngx-dnd-form-builder/components/input/input.component.html","../../src/ngx-dnd-form-builder/components/select/select.component.ts","../../src/ngx-dnd-form-builder/components/select/select.component.html","../../src/ngx-dnd-form-builder/components/structural-table/structural-table.component.ts","../../src/ngx-dnd-form-builder/components/structural-table/structural-table.component.html","../../src/ngx-dnd-form-builder/components/table/table.component.ts","../../src/ngx-dnd-form-builder/components/table/table.component.html","../../src/ngx-dnd-form-builder/components/tabs/tabs.component.ts","../../src/ngx-dnd-form-builder/components/tabs/tabs.component.html","../../src/ngx-dnd-form-builder/components/text-area/text-area.component.ts","../../src/ngx-dnd-form-builder/components/text-area/text-area.component.html","../../src/ngx-dnd-form-builder/components/form-builder/form-builder.component.ts","../../src/ngx-dnd-form-builder/components/form-builder/form-builder.component.html","../../src/ngx-dnd-form-builder/components/display-settings/display-settings.component.ts","../../src/ngx-dnd-form-builder/components/display-settings/display-settings.component.html","../../src/ngx-dnd-form-builder/form-builder.module.ts","../../src/ngx-dnd-form-builder/index.ts","../../src/ngx-dnd-form-builder/ngx-dnd-form-builder.ts"],"sourcesContent":["export const locale = {\n\tlang: 'en',\n\tdata: {\n\t\tADD: 'Add',\n\t\tCANCEL: 'Cancel',\n\t\tACCEPT: 'Accept',\n\t\tTRIGGERS: 'Triggers',\n\t\tTRIGGER: 'Trigger',\n\t\tREMOVE: 'Remove',\n\t\tTAB: 'Tab',\n\t\tPROPERTIES: 'Properties',\n\t\tTABS_EDITION: 'Tabs edition',\n\t\tTABLE_EDITION: 'Table edition',\n\t\tSTRUCTURAL_TABLE_EDITION: 'Structural table edition',\n\t\tREMOVE_ROW: 'Remove row',\n\t\tADD_ROW_ABOVE: 'Add row above',\n\t\tADD_ROW_BELOW: 'Add row below',\n\t\tTEXTAREA_EDITION: 'Textarea edition',\n\t\tKEY: 'key',\n\t\tLEGEND: 'Legend',\n\t\tNAME: 'name',\n\t\tICON: 'icon',\n\t\tSCREEN_SIZE: 'Screen size',\n\t\tCOLS: 'Cols',\n\t\tOFFSET: 'Offset',\n\t\tXS: 'XS',\n\t\tSM: 'SM',\n\t\tMD: 'MD',\n\t\tLG: 'LG',\n\t\tXL: 'XL',\n\t\tAUTO: 'Auto',\n\t\tEQUAL: 'Equal',\n\t\tENRICHED_TEXT: 'Enriched text',\n\t\tINFO: 'Info',\n\t\tCONTENT: 'Content',\n\t\tCLASS_LIST: 'Class list',\n\t\tFIELDSET: 'Fieldset',\n\t\tMINIMUN: 'Minimun',\n\t\tMAXIMUN: 'Maximun',\n\t\tMULTIPLE: 'Multiple',\n\t\tDEFAULT_VALUE: 'Default value',\n\t\tNAMING_PATTERN: 'Naming pattern',\n\t\tEXTENSIONS_ACCEPTED: 'Extensions accepted',\n\t\tREQUIRED: 'Required',\n\t\tDUPLICATED_KEY: 'There is already a control with this key',\n\t\tLABEL: 'Label',\n\t\tSTEP: 'Step',\n\t\tPLACEHOLDER: 'Placeholder',\n\t\tTYPE: 'Type',\n\t\tTEXT_PROPERTY: 'Text property',\n\t\tVALUE_PORPERTY: 'Value property',\n\t\tENDPOINT: 'Endpoint',\n\t\tFEEDING_CONFIG: 'Feeding config',\n\t\tCLICK_BUTTON_ADD_TABS: 'Click the button to add new tabs',\n\t\tCLICK_BUTTON_ADD_OPTIONS: 'Click the button to add new options',\n\t\tCLICK_BUTTON_ADD_COLUMNS: 'Click the button to add new columns',\n\t\tOPTIONS: 'Options',\n\t\tEXTERNAL: 'External',\n\t\tSTATIC: 'Static',\n\t\tFEEDING_TYPE: 'Fedding type',\n\t\tCOLUMNS: 'Columns',\n\t\tCAPTION: 'Caption',\n\t\tROWS: 'Rows',\n\t\tNO_TRIGGERS: 'The building element hasn\\'t triggers. To add one, click on the button below.',\n\t\tCONTROL: 'Control',\n\t\tVALUE: 'Value',\n\t\tAND: 'And',\n\t\tOR: 'Or',\n\t\tADD_ANTECEDENT: 'Add antecedent',\n\t\tIF: 'Si',\n\t\tTHEN: 'Then',\n\t\tADD_CONSEQUENCE: 'Add Consequence',\n\t\tIS: 'Is',\n\t\tELSE: 'Else',\n\t\tADD_TRIGGER: 'Add trigger',\n\t\tFORM_BUILDER: 'Form Builder',\n\t\tREACTIVE_FORM: 'Reactive form',\n\t\tENABLE_DISABLED: 'Enable/Disable',\n\t\tTOUCHED: 'Touched',\n\t\tDIRTY: 'Dirty',\n\t\tFIELD: 'Field',\n\t\tCONTROL_PATH: 'Control path',\n\t\tCURRENT_DATE: 'Current date',\n\t\tCURRENT_TIME: 'Current time',\n\t\tCURRENT_DATETIME: 'Current date and time',\n\t\tMESSAGES: {\n\t\t\tDELETE_ITEM: 'Are you sure you want to delete this item?',\n\t\t\tEXIT_WITHOUT_SAVE: 'Are you sure you want to leave without saving the changes?'\n\t\t},\n\t\tPERMISSIONS_PER_ROLE: {\n\t\t\tTITLE: 'permissions',\n\t\t\tROLE: 'role',\n\t\t\tCAN_VIEW: 'can view',\n\t\t\tCAN_EDIT: 'can edit',\n\t\t}\n\t}\n};\n","export const locale = {\n\tlang: 'es',\n\tdata: {\n\t\tADD: 'Añadir',\n\t\tCANCEL: 'Cancelar',\n\t\tACCEPT: 'Aceptar',\n\t\tTRIGGER: 'Disparador',\n\t\tREMOVE: 'Borrar',\n\t\tTAB: 'Pestaña',\n\t\tPROPERTIES: 'Propiedades',\n\t\tTABS_EDITION: 'Edición de pestañas',\n\t\tSELECT_EDITION: 'Edición de select',\n\t\tTABLE_EDITION: 'Edición de tabla',\n\t\tSTRUCTURAL_TABLE_EDITION: 'Edición de tabla estructural',\n\t\tREMOVE_ROW: 'Eliminar fila',\n\t\tADD_ROW_ABOVE: 'Añadir fila arriba',\n\t\tADD_ROW_BELOW: 'Añadir fila abajo',\n\t\tFIELDSET_EDITION: 'Edición de fieldset',\n\t\tTEXTAREA_EDITION: 'Edición area de texto',\n\t\tENRICHED_TEXT_EDITION: 'Edición de texto enriquecido',\n\t\tINPUT_EDITION: 'Edición de input',\n\t\tFILE_EDITION: 'Edición de archivo',\n\t\tKEY: 'Clave',\n\t\tLEGEND: 'Leyenda',\n\t\tNAME: 'Nombre',\n\t\tICON: 'Icono',\n\t\tSCREEN_SIZE: 'Tamaño pantalla',\n\t\tCOLS: 'Cols',\n\t\tOFFSET: 'Offset',\n\t\tXS: 'XS',\n\t\tSM: 'SM',\n\t\tMD: 'MD',\n\t\tLG: 'LG',\n\t\tXL: 'XL',\n\t\tAUTO: 'Auto',\n\t\tEQUAL: 'Igual',\n\t\tENRICHED_TEXT: 'Texto enriquecido',\n\t\tINFO: 'Info',\n\t\tCONTENT: 'Contenido',\n\t\tCLASS_LIST: 'Lista de clases',\n\t\tFIELDSET: 'Campo',\n\t\tMINIMUN: 'Minimo',\n\t\tMAXIMUN: 'Maximo',\n\t\tMULTIPLE: 'Multiple',\n\t\tDEFAULT_VALUE: 'Valor por defecto',\n\t\tNAMING_PATTERN: 'Nombre del patrón',\n\t\tEXTENSIONS_ACCEPTED: 'Extensiones aceptadas',\n\t\tREQUIRED: 'Requerido',\n\t\tDUPLICATED_KEY: 'Ya existe un control con esta clave',\n\t\tSPECIAL_CHARS_ERROR: 'No se permiten caracteres especiales como puntos o espacios',\n\t\tINVALID_FIELD: 'Campo inválido',\n\t\tLABEL: 'Etiqueta',\n\t\tSTEP: 'Paso',\n\t\tPLACEHOLDER: 'Placeholder',\n\t\tTYPE: 'Tipo',\n\t\tTEXT_PROPERTY: 'Propiedad del texto',\n\t\tVALUE_PORPERTY: 'Propiedad del valor',\n\t\tENDPOINT: 'Endpoint',\n\t\tFEEDING_CONFIG: 'Configuración de alimentación',\n\t\tCLICK_BUTTON_ADD_TABS: 'Clic al boton para añadir nuevas pestañas',\n\t\tCLICK_BUTTON_ADD_OPTIONS: 'Clic al boton para añadir unas opciones',\n\t\tCLICK_BUTTON_ADD_COLUMNS: 'Clic al boton para añadir unas columnas',\n\t\tOPTIONS: 'Opciones',\n\t\tEXTERNAL: 'Externo',\n\t\tSTATIC: 'Estatico',\n\t\tFEEDING_TYPE: 'Tipo de alimentación',\n\t\tCOLUMNS: 'Columnas',\n\t\tCAPTION: 'Subtítulo',\n\t\tROWS: 'Filas',\n\t\tNO_TRIGGERS: 'El elemento de construcción no tiene disparadores. Para agregar uno, haga clic en el botón de abajo.',\n\t\tCONTROL: 'Control',\n\t\tVALUE: 'Valor',\n\t\tAND: 'Y',\n\t\tOR: 'O',\n\t\tADD_ANTECEDENT: 'Añadir antecedente',\n\t\tIF: 'Si',\n\t\tTHEN: 'Entonces',\n\t\tADD_CONSEQUENCE: 'Añadir consecuencia',\n\t\tIS: 'Es',\n\t\tELSE: 'Sino',\n\t\tADD_TRIGGER: 'Añadir disparador',\n\t\tFORM_BUILDER: 'Constructor de formularios',\n\t\tREACTIVE_FORM: 'Formulario reactivo',\n\t\tENABLE_DISABLED: 'Habilitado/Deshabilitado',\n\t\tTOUCHED: 'Tocado',\n\t\tDIRTY: 'Modificado',\n\t\tFIELD: 'Campo',\n\t\tCONTROL_PATH: 'Ruta del campo',\n\t\tCURRENT_DATE: 'Fecha actual',\n\t\tCURRENT_TIME: 'Hora actual',\n\t\tCURRENT_DATETIME: 'Fecha y hora actual',\n\t\tROW_NUMBER: 'Número de filas',\n\t\tMESSAGES: {\n\t\t\tDELETE_ITEM: '¿Está seguro que quiere eliminar este item?',\n\t\t\tEXIT_WITHOUT_SAVE: '¿Está seguro que desea salir sin guardar los cambios?'\n\t\t},\n\t\tPERMISSIONS_PER_ROLE: {\n\t\t\tTITLE: 'Permisos',\n\t\t\tROLE: 'rol',\n\t\t\tCAN_VIEW: 'puede ver',\n\t\t\tCAN_EDIT: 'puede editar',\n\t\t},\n\t\tTRIGGERS: {\n\t\t\tSELF: 'Disparadores',\n\t\t\tVAR_TYPES: {\n\t\t\t\tNUMBER: 'número',\n\t\t\t\tSTRING: 'texto',\n\t\t\t\tBOOLEAN: 'verdadero/falso',\n\t\t\t\tFIELD: 'campo',\n\t\t\t},\n\t\t\tOPERATORS: {\n\t\t\t\tEQUAL: 'es igual',\n\t\t\t\tDISTINCT: 'es diferente',\n\t\t\t\tLIKE: 'contiene',\n\t\t\t\tGREATER: 'es mayor',\n\t\t\t\tLESS: 'es menor'\n\t\t\t},\n\t\t\tACTIONS: {\n\t\t\t\tVISIBLE: 'visible',\n\t\t\t\tHIDDEN: 'oculto',\n\t\t\t\tENABLED: 'habilitado',\n\t\t\t\tDISABLED: 'deshabilitado',\n\t\t\t}\n\t\t},\n\t\tGENERIC: {\n\t\t\tLABELS: {\n\t\t\t\tSELECT_AN_OPTION: 'Selecciona una opción',\n\t\t\t\tTRUE: 'verdadero',\n\t\t\t\tFALSE: 'falso'\n\t\t\t}\n\t\t}\n\t}\n};\n","import { isObject } from 'lodash';\nimport { Cell, Fieldset, Property, PropertyInput, Schema, StructuralProperty, StructuralTable, Table } from './interfaces/property';\nimport { Tabs } from './interfaces/tabs';\n\n/**\n * Aplana un árbol clave/valor devolviendo un objeto ruta/valor\n *\n * @export\n * @param {*} tree\n * @param {string} [path='']\n * @return {*}  {{ [key: string]: string }}\n */\nexport function flatKeyValueTree(tree: any, path: string = ''): { [key: string]: string } {\n\tlet result = {};\n\tfor (const key in tree) {\n\t\tif (Object.prototype.hasOwnProperty.call(tree, key)) {\n\t\t\tconst value = tree[key];\n\t\t\tconst fullpath = [path, key].filter(o => o).join('.');\n\t\t\tif (isObject(value)) {\n\t\t\t\tresult = { ...result, ...flatKeyValueTree(value, [path, key].filter(o => o).join('.')) }\n\t\t\t} else {\n\t\t\t\tresult[fullpath] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function findTableColumn(tableProperty: Table, needle: StructuralProperty | PropertyInput): any {\n\treturn tableProperty.properties.find(c => c.properties.indexOf(needle) > -1);\n}\n\nexport function findStructuralTableCell(tableProperty: StructuralTable, needle: StructuralProperty | PropertyInput): Cell {\n\tfor (const column of tableProperty.properties) {\n\t\tfor (const cell of column.properties) {\n\t\t\tif (cell) {\n\t\t\t\tconst index = cell.properties.findIndex(p => p === needle);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\treturn cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Aplana un árbol clave/valor devolviendo un objeto ruta/valor\n *\n * @export\n * @param {*} tree\n * @param {string} [path='']\n * @return {*}  {{ [key: string]: string }}\n */\nexport function extractFieldPaths(property: StructuralProperty | Schema, path: string = '', withStructuralProperties: boolean = false) {\n\tconst paths = [];\n\n\t// Si la opción es verdadera añadimos también el path de los contenedores\n\t// if (withStructuralProperties && ['structural-table', 'table', 'table'].indexOf(property.type) > -1) {\n\t// \tpaths.push([path].filter(o => o).join('.'));\n\t// }\n\n\tfor (const subproperty of property.properties) {\n\t\tswitch (subproperty['type']) {\n\t\t\tcase 'structural-table':\n\t\t\t\tconst structuralTableProperty = subproperty as StructuralTable;\n\n\t\t\t\twithStructuralProperties && paths.push([path, subproperty.key].filter(o => o).join('.'));\n\n\t\t\t\tconst properties = extractPropertiesFromStructuralTable(structuralTableProperty);\n\t\t\t\tpaths.push(...extractFieldPaths({ ...structuralTableProperty, properties }, [path, structuralTableProperty.key].filter(o => o).join('.'), withStructuralProperties));\n\t\t\t\tbreak;\n\t\t\tcase 'table':\n\t\t\t\tconst tableProperty = subproperty as Table;\n\n\t\t\t\twithStructuralProperties && paths.push([path, subproperty.key].filter(o => o).join('.'));\n\n\t\t\t\tfor (const index in tableProperty.properties) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(tableProperty.properties, index)) {\n\t\t\t\t\t\tconst column = tableProperty.properties[index];\n\t\t\t\t\t\tpaths.push(...extractFieldPaths({ properties: column.properties, key: index ?? null }, [path, tableProperty.key].filter(o => o).join('.'), withStructuralProperties));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'tabs':\n\t\t\t\tconst tabsProperty: Tabs = subproperty as Tabs;\n\t\t\t\tfor (const tab of tabsProperty.properties) {\n\t\t\t\t\twithStructuralProperties && paths.push([path, tabsProperty.key, tab.key].filter(o => o).join('.'));\n\n\t\t\t\t\tpaths.push(...extractFieldPaths({ properties: tab.properties, key: tab.key }, [path, tabsProperty.key, tab.key].filter(o => o).join('.'), withStructuralProperties));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'fieldset':\n\t\t\t\tconst fieldsetProperty = subproperty as Fieldset;\n\n\t\t\t\twithStructuralProperties && paths.push([path, fieldsetProperty.key].filter(o => o).join('.'));\n\n\t\t\t\tpaths.push(...extractFieldPaths({ properties: fieldsetProperty.properties, key: fieldsetProperty.key }, [path, fieldsetProperty.key].filter(o => o).join('.'), withStructuralProperties));\n\t\t\t\tbreak;\n\t\t\tcase 'input':\n\t\t\tcase 'select':\n\t\t\tcase 'textarea':\n\t\t\t\tpaths.push([path, subproperty['key']].filter(o => o).join('.'));\n\t\t\t\tbreak;\n\t\t\tcase 'enriched-text':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn('Undefined property type:', subproperty);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn paths;\n}\n\n/**\n * Extrae las propiedades de una tabla estructural\n *\n * @export\n * @param {StructuralTable} tableProperty\n * @return {*}  \n */\nexport function extractPropertiesFromStructuralTable(tableProperty: StructuralTable) {\n\tconst properties = [];\n\tfor (const column of tableProperty.properties) {\n\t\tfor (const cell of column.properties) {\n\t\t\tcell && properties.push(...cell.properties);\n\t\t}\n\t}\n\treturn properties;\n}\n\n/**\n * Obtiene el padre directo de la propiedad pasada por parámetro\n *\n * @export\n * @param {*} property\n * @param {(StructuralProperty | PropertyInput)} needle\n * @return {*}  \n */\nexport function findContainer(property: any, needle: StructuralProperty | PropertyInput) {\n\tfor (const subproperty of property.properties) {\n\t\tif (subproperty === needle) {\n\t\t\treturn property\n\t\t}\n\t\tif (subproperty?.properties?.length) {\n\t\t\tconst parent = findContainer(subproperty, needle);\n\t\t\tif (parent) {\n\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function findParentStructuralProperty(property: any, needle: StructuralProperty | PropertyInput): StructuralProperty {\n\tconst parent = findContainer(property, needle);\n\tif (parent) {\n\t\tswitch (parent.type) {\n\t\t\tcase 'cell':\n\t\t\t\treturn findContainer(property, findContainer(property, parent));\n\t\t\tcase 'column':\n\t\t\t\treturn findContainer(property, parent);\n\t\t}\n\t}\n\treturn parent;\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function KeysValidator(keys: string[]): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n        const value: string = control.value;\n\n        if (!keys || !keys.length) {\n            return null;\n        }\n\n        keys = keys.map(k => k ? k.toLowerCase() : '');\n\n        return keys?.length && value && keys.includes(value.toLowerCase()) ? { keys: true } : null;\n    };\n}\n","// Angular\nimport { Injectable } from '@angular/core';\n// Tranlsation\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface Locale {\n\tlang: string;\n\t// tslint:disable-next-line:ban-types\n\tdata: Object;\n}\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class TranslationService {\n\n\t// Private properties\n\tprivate langIds: any = [];\n\n\t/**\n\t * Service Constructor\n\t *\n\t * @param translate: TranslateService\n\t */\n\tconstructor(\n\t\tprivate translate: TranslateService\n\t) {\n\t\t// add new langIds to the list\n\t\tthis.translate.addLangs(['en']);\n\t}\n\n\t/**\n\t * Load Translation\n\t *\n\t * @param args: Locale[]\n\t */\n\tloadTranslations(...args: Locale[]): void {\n\t\tconst locales = [...args];\n\n\t\tlocales.forEach(locale => {\n\t\t\t// use setTranslation() with the third argument set to true\n\t\t\t// to append translations instead of replacing them\n\t\t\tthis.translate.setTranslation(locale.lang, locale.data, true);\n\n\t\t\tthis.langIds.push(locale.lang);\n\t\t});\n\n\t\t// add new languages to the list\n\t\tthis.translate.addLangs(this.langIds);\n\t}\n\n\t/**\n\t * Setup language\n\t *\n\t * @param lang: any\n\t */\n\tsetLanguage(lang: string) {\n\t\tif (lang) {\n\t\t\tlang = lang.trim().toLowerCase();\n\t\t\tthis.translate.use(this.translate.getDefaultLang());\n\t\t\tthis.translate.use(lang);\n\t\t\tlocalStorage.setItem('language', lang);\n\t\t}\n\t}\n\n\t/**\n\t * Returns selected language\n\t */\n\tgetSelectedLanguage(): any {\n\t\treturn localStorage.getItem('language') || this.translate.getDefaultLang();\n\t}\n\n\t/**\n\t * Returns selected language\n\t */\n\tinstant(key: string): string {\n\t\treturn this.translate.instant(key);\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { FormBuilderConfig } from '../interfaces/FormBuilderConfig';\n\n/**\n * This is not a real service, but it looks like it from the outside.\n * It's just an InjectionTToken used to import the config object, provided from the outside\n */\n// tslint:disable-next-line: variable-name\nexport const FormBuilderConfigService = new InjectionToken<FormBuilderConfig>('FormBuilderConfig');\n","import { Inject, Injectable } from '@angular/core';\nimport { FormBuilderConfig } from '../interfaces/FormBuilderConfig';\nimport { Schema, StructuralProperty, StructuralTable, Table } from '../interfaces/property';\nimport { FormBuilderConfigService } from './form-builder-config.service';\n\n@Injectable()\nexport class FormBuilderService {\n\n\tconfig: FormBuilderConfig = {};\n\tdefault: FormBuilderConfig = {\n\t\tcomponents: ['tabs', 'fieldset', 'string', 'select', 'textarea', 'table', 'file', 'enriched-text', 'structural-table']\n\t};\n\n\n\tprivate _schema: Schema;\n\tget schema(): Schema {\n\t\treturn this._schema;\n\t}\n\tset schema(v: Schema) {\n\t\tthis._schema = v;\n\t}\n\n\tconstructor(@Inject(FormBuilderConfigService) private _config) {\n\t\tthis.initialize();\n\t}\n\n\tinitialize(): void {\n\t\tthis.config = { ...this.default, ...this._config };\n\t}\n\n\t/**\n\t * Obtiene todas las claves de las subpropiedades de la propiedad pasada por parámetro\n\t *\n\t * @param {StructuralProperty} property\n\t * @return {*}  {string[]}\n\t */\n\tgetKeysOf(property: StructuralProperty): string[] {\n\t\tconst keys = [];\n\t\tswitch (property.type) {\n\t\t\tcase 'structural-table':\n\t\t\t\tfor (const column of (property as StructuralTable).properties) {\n\t\t\t\t\tfor (const cell of column.properties) {\n\t\t\t\t\t\tcell && keys.push(...cell.properties.map(o => o.key));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'table':\n\t\t\t\tfor (const column of (property as Table).properties) {\n\t\t\t\t\tkeys.push(...column.properties.map(o => o.key));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tkeys.push(...property.properties.map(p => p.key));\n\t\t\t\tbreak;\n\t\t}\n\t\treturn keys;\n\t}\n\n\t/**\n\t * Obtiene las claves hermanas de la pasada por parámetro\n\t *\n\t * @param {StructuralProperty} property\n\t * @param {string} [needle=null]\n\t * @return {*}  \n\t */\n\tgetSiblingKeys(property: StructuralProperty, needle: string = null) {\n\t\tconst keys = this.getKeysOf(property);\n\t\tif (needle) {\n\t\t\tconst index = keys.indexOf(needle);\n\t\t\tif (index > -1) {\n\t\t\t\tkeys.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn keys;\n\t}\n}","import { Directive, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { PropertyInput, StructuralProperty } from '../../interfaces/property';\nimport { FormBuilderService } from '../../services/form-builder.service';\nimport { TranslationService } from '../../services/translation.service';\nimport { KeysValidator } from '../../validators/keys.validator';\n\n@Directive({})\nexport abstract class PropertyComponent implements OnInit {\n\n\t@Input() value: StructuralProperty | PropertyInput;\n\t@Input() parent: StructuralProperty;\n\t@Input() roles: Array<{ id: number, name: string; }>;\n\n\tabstract form: FormGroup;\n\n\tactiveNavId = 1;\n\n\tconstructor(\n\t\tprotected _activeModal: NgbActiveModal,\n\t\tprotected _fb: FormBuilder,\n\t\tprotected _translationSvc: TranslationService,\n\t\tprotected _formBuilderSvc: FormBuilderService\n\t) { }\n\n\tngOnInit() {\n\t\tif (this.value) {\n\t\t\tthis.form.patchValue(this.value);\n\t\t}\n\t\tconst keys = this._formBuilderSvc.getSiblingKeys(this.parent, this.value?.key);\n\t\tthis.form.get('key').addValidators(KeysValidator(keys));\n\t}\n\n\tdismiss(): void {\n\t\tif (this.form.dirty) {\n\t\t\tif (confirm(this._translationSvc.instant('MESSAGES.EXIT_WITHOUT_SAVE'))) {\n\t\t\t\tthis._activeModal.close();\n\t\t\t}\n\t\t} else {\n\t\t\tthis._activeModal.close();\n\t\t}\n\t}\n\n\tsaveAndClose() {\n\t\tthis._activeModal.close(this.form.value);\n\t}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { TranslationService } from '../../services/translation.service';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'ngx-enriched-text',\n\ttemplateUrl: './enriched-text.component.html',\n\tstyleUrls: ['./enriched-text.component.scss']\n})\nexport class EnrichedTextComponent extends PropertyComponent {\n\n\t@Input() value: any;\n\n\tEditor = ClassicEditor;\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['enriched-text'],\n\t\tvalue: [null, Validators.required],\n\t\tclassList: [null]\n\t});\n\n\tngOnInit(): void {\n\t\tif (this.value) {\n\t\t\tthis.form.patchValue(this.value);\n\t\t}\n\t}\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\">{{ 'ENRICHED_TEXT_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'INFO' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t<label>{{ 'CONTENT' | translate }}</label>\n\t\t\t\t\t\t<ckeditor [editor]=\"Editor\" formControlName=\"value\" [config]=\"{width: 512}\"></ckeditor>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'CLASS_LIST' | translate }}</label>\n\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"classList\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<!-- <li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>Display settings</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-display-settings formControlName=\"display-settings\"></ngx-form-builder-display-settings>\n\t\t\t\t</ng-template>\n\t\t\t</li> -->\n\t\t</ul>\n\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { FormControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const NormalizedCharsValidator: ValidatorFn = (control: FormControl): ValidationErrors | null => {\n    const regex = new RegExp(/^[A-Za-z0-9_]+$/g);\n\n    return regex.test(control.value) ? null : { normalizedChars: true };\n};\n","import { FormControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const WithPointsValidator: ValidatorFn = (control: FormControl): ValidationErrors | null => {\n\tconst regex = new RegExp(/^[A-Za-z0-9_.]+$/g);\n\n\treturn regex.test(control.value) ? null : { withPoints: true };\n};\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'ucfirst'\n})\nexport class UcfirstPipe implements PipeTransform {\n\n\ttransform(value: string, forceRestLowercase: boolean = false): string {\n\t\tif (!value) {\n\t\t\treturn value;\n\t\t}\n\t\treturn value[0].toUpperCase() + (forceRestLowercase ? value.substring(1).toLowerCase() : value.substring(1));\n\t}\n\n}\n","import { Component, forwardRef, OnInit } from '@angular/core';\nimport { FormArray, FormBuilder, NG_VALUE_ACCESSOR, ControlValueAccessor, AbstractControl, FormGroup, Validators } from '@angular/forms';\nimport { Trigger } from '../../interfaces/trigger';\nimport { Antecedent } from '../../interfaces/antecedent';\nimport { Consequence } from '../../interfaces/consequence';\nimport { WithPointsValidator } from '../../validators/with-points.validator';\nimport { FormBuilderService } from '../../services/form-builder.service';\nimport { extractFieldPaths } from '../../utils';\n\n@Component({\n\tselector: 'ngx-form-builder-triggers',\n\ttemplateUrl: './triggers.component.html',\n\tstyleUrls: ['./triggers.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => TriggersComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class TriggersComponent implements OnInit, ControlValueAccessor {\n\n\n\tform = this._fb.group({\n\t\titems: this._fb.array([])\n\t});\n\n\tisDisabled: boolean = false;\n\n\tvarTypes: string[] = ['string', 'number', 'boolean', 'field'];\n\toperators = ['equal', 'distinct', 'like', 'greater', 'less'];\n\tactions = ['visible', 'hidden', 'enabled', 'disabled'];\n\n\tfieldPaths: string[] = [];\n\tpropertyPaths: string[] = [];\n\n\tget items(): FormArray {\n\t\treturn this.form.get('items') as FormArray;\n\t}\n\n\tonChange = (_: any) => { };\n\n\tonTouch = () => { };\n\n\tconstructor(\n\t\tprivate _fb: FormBuilder,\n\t\tprivate _formBuilderSvc: FormBuilderService\n\t) { }\n\n\tngOnInit(): void {\n\t\tthis.form.valueChanges.subscribe((changes) => {\n\t\t\tthis.onChange(this.items.value);\n\t\t});\n\n\t\tthis.fieldPaths = extractFieldPaths(this._formBuilderSvc.schema);\n\t\tthis.propertyPaths = extractFieldPaths(this._formBuilderSvc.schema, '', true);\n\t}\n\n\twriteValue(value: Trigger[]): void {\n\t\tif (value?.length) {\n\t\t\tvalue.forEach(v => this.addTrigger(v));\n\t\t} else {\n\t\t\tvalue = [];\n\t\t}\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.isDisabled = isDisabled;\n\t\tthis.isDisabled ? this.form.disable() : this.form.enable();\n\t}\n\n\taddTrigger(value?: Trigger) {\n\t\tconst group = this._fb.group({\n\t\t\tif: this._fb.array([]),\n\t\t\tthen: this._fb.array([]),\n\t\t\telse: this._fb.array([])\n\t\t});\n\n\t\tif (value) {\n\t\t\tgroup.patchValue(value);\n\n\t\t\tif (value.if?.length) {\n\t\t\t\tvalue.if.forEach(v => this.addAntecedent(group.get('if') as FormArray, v));\n\t\t\t}\n\n\t\t\tif (value.then?.length) {\n\t\t\t\tvalue.then.forEach(v => this.addConsequence(group.get('then') as FormArray, v));\n\t\t\t}\n\n\t\t\tif (value.else?.length) {\n\t\t\t\tvalue.else.forEach(v => this.addConsequence(group.get('else') as FormArray, v));\n\t\t\t}\n\t\t}\n\n\t\tthis.items.push(group);\n\t}\n\n\tremoveTrigger(formGroup: AbstractControl, index: number) {\n\t\t(formGroup as FormArray).removeAt(index);\n\t\tformGroup.markAsDirty();\n\t}\n\n\t/**\n\t * Añade un antecedente\n\t *\n\t * @param {AbstractControl} antecedentsFA\n\t * @param {Antecedent} [value]\n\t */\n\taddAntecedent(antecedentsFA: AbstractControl, value?: Antecedent) {\n\t\tconst group = this._fb.group({\n\t\t\ttype: this._fb.control(null, Validators.required),\n\t\t\tvalue: this._fb.control(null, [Validators.required, WithPointsValidator]),\n\t\t\toperator: this._fb.control('equal', Validators.required),\n\t\t\tboolean: this._fb.control('and', Validators.required),\n\t\t\ttype2: this._fb.control(null, Validators.required),\n\t\t\tvalue2: this._fb.control(null, [Validators.required, WithPointsValidator]),\n\t\t});\n\n\t\tif (value) {\n\t\t\tgroup.patchValue(value);\n\t\t}\n\n\t\t(antecedentsFA as FormArray).push(group);\n\t}\n\n\n\t/**\n\t * Elimina un antecedente de un disparador\n\t *\n\t * @param {number} itemIndex\n\t * @param {number} antecedetIndex\n\t */\n\tremoveAntecedent(itemIndex: number, antecedetIndex: number) {\n\t\tconst antecedentsFA: FormArray = this.form.get('items.' + itemIndex + '.if') as FormArray;\n\t\tantecedentsFA.removeAt(antecedetIndex);\n\t}\n\n\t/**\n\t * Añade una consecuencia\n\t *\n\t * @param {AbstractControl} arrayForm\n\t * @param {Consequence} [value]\n\t */\n\taddConsequence(arrayForm: AbstractControl, value?: Consequence) {\n\t\tconst group = this._fb.group({\n\t\t\tcontrol: this._fb.control(null),\n\t\t\taction: this._fb.control(null)\n\t\t});\n\t\tif (value) {\n\t\t\tgroup.patchValue(value);\n\t\t}\n\t\t(arrayForm as FormArray).push(group);\n\t}\n\n\tresetSourceType(antecedentFG: FormGroup) {\n\t\tantecedentFG.get('value').reset(null, { emitEvent: false });\n\t}\n\n\tresetTargetType(antecedentFG: FormGroup) {\n\t\tantecedentFG.get('value2').reset(null, { emitEvent: false });\n\t}\n}\n","<form [formGroup]=\"form\">\n\t<ng-container *ngIf=\"items.controls.length; then withTriggersTpt; else withoutTriggersTpt\"></ng-container>\n\t<ng-template #withoutTriggersTpt>\n\t\t<div class=\"alert alert-info mt-3 mb-4\" role=\"alert\">\n\t\t\t<div class=\"d-flex align-items-center\">\n\t\t\t\t<i class=\"fas fa-info mr-4 me-4 fa-2x\"></i>\n\t\t\t\t<p class=\"mb-0\">{{ 'NO_TRIGGERS' | translate }}</p>\n\t\t\t</div>\n\t\t</div>\n\t</ng-template>\n\t<ng-template #withTriggersTpt>\n\t\t<ng-container formArrayName=\"items\">\n\t\t\t<div class=\"card mb-4\" *ngFor=\"let trigger of items.controls; let i=index\" [formGroupName]=\"i\">\n\t\t\t\t<div class=\"card-body\">\n\t\t\t\t\t<div class=\"row align-items-center mb-4\">\n\t\t\t\t\t\t<h4 class=\"col card-title\">{{ 'TRIGGER' | translate }} #{{ i + 1 }}</h4>\n\t\t\t\t\t\t<div class=\"col d-flex\">\n\t\t\t\t\t\t\t<button class=\"btn btn-danger ml-auto ms-auto\" (click)=\"removeTrigger(items, i)\">\n\t\t\t\t\t\t\t\t<i class=\"fas fa-trash-alt mr-2 me-2\"></i>{{ 'REMOVE' | translate }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<fieldset formArrayName=\"if\">\n\t\t\t\t\t\t<legend>{{ 'IF' | translate }}</legend>\n\t\t\t\t\t\t<ng-container *ngIf=\"trigger.get('if')['controls']?.length; then ifTpt; else placeholderTpt\">\n\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t<ng-template #ifTpt>\n\t\t\t\t\t\t\t<table class=\"table mb-3\">\n\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t<tr *ngFor=\"let antecedent of trigger.get('if')['controls']; let j=index; let first = first;\"\n\t\t\t\t\t\t\t\t\t\t[formGroupName]=\"j\">\n\t\t\t\t\t\t\t\t\t\t<td style=\"vertical-align: middle;\">\n\t\t\t\t\t\t\t\t\t\t\t<select *ngIf=\"!first\" class=\"form-select\" formControlName=\"boolean\">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"and\">{{ 'AND' | translate }}</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"or\">{{ 'OR' | translate }}</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t\t<select class=\"form-select mb-2\" formControlName=\"type\"\n\t\t\t\t\t\t\t\t\t\t\t\t(change)=\"resetSourceType(antecedent)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'GENERIC.LABELS.SELECT_AN_OPTION' | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let type of varTypes\" [value]=\"type\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'TRIGGERS.VAR_TYPES.' +  (type | uppercase) | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"typeInputTpt; context:{type: trigger.get('if.' + j + '.type').value, control: trigger.get('if.' + j + '.value')}\">\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td style=\"vertical-align: middle;\">\n\t\t\t\t\t\t\t\t\t\t\t<select class=\"form-select\" formControlName=\"operator\">\n\t\t\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let operator of operators\" [value]=\"operator\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'TRIGGERS.OPERATORS.' +  (operator | uppercase) | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t\t<select class=\"form-select mb-2\" formControlName=\"type2\"\n\t\t\t\t\t\t\t\t\t\t\t\t(change)=\"resetTargetType(antecedent)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'GENERIC.LABELS.SELECT_AN_OPTION' | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let type of varTypes\" [value]=\"type\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'TRIGGERS.VAR_TYPES.' +  (type | uppercase) | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"typeInputTpt; context:{type: trigger.get('if.' + j + '.type2').value, control: trigger.get('if.' + j + '.value2')}\">\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td style=\"vertical-align: middle;\">\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link text-danger\" (click)=\"removeAntecedent(i, j)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fas fa-trash-alt\"></i>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</fieldset>\n\t\t\t\t\t<div class=\"text-right text-end\">\n\t\t\t\t\t\t<button class=\"btn btn-link\" (click)=\"addAntecedent(trigger.get('if'))\">\n\t\t\t\t\t\t\t<i class=\"fas fa-plus mr-2 me-2\"></i>{{ 'ADD_ANTECEDENT' | translate }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<legend>{{ 'THEN' | translate }}</legend>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t*ngIf=\"trigger.get('then')['controls']?.length; then ifThenTpt; else placeholderTpt\">\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t<ng-template #ifThenTpt>\n\t\t\t\t\t\t\t<ul class=\"list-group list-group-flush mb-4\" formArrayName=\"then\">\n\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let consequence of trigger.get('then')['controls']; let k=index\">\n\t\t\t\t\t\t\t\t\t<li class=\"list-group-item\" [formGroupName]=\"k\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<select formControlName=\"control\" class=\"form-select\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'GENERIC.LABELS.SELECT_AN_OPTION' | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let field of propertyPaths\" [value]=\"field\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ field }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"col-form-label\">{{ 'IS' | translate }} </label>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<select class=\"form-select\" formControlName=\"action\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let action of actions\" [value]=\"action\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'TRIGGERS.ACTIONS.' +  (action | uppercase) | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-auto\">\n\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link text-danger\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"removeTrigger(trigger.get('then'), k)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fas fa-trash-alt\"></i>\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</fieldset>\n\t\t\t\t\t<div class=\"text-right text-end\">\n\t\t\t\t\t\t<button class=\"btn btn-link\" (click)=\"addConsequence(trigger.get('then'))\">\n\t\t\t\t\t\t\t<i class=\"fas fa-plus mr-2 me-2\"></i>{{ 'ADD_CONSEQUENCE' | translate }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<legend>{{ 'ELSE' | translate }}</legend>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t*ngIf=\"trigger.get('else')['controls']?.length; then ifElseTpt; else placeholderTpt\">\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t<ng-template #ifElseTpt>\n\t\t\t\t\t\t\t<ul class=\"list-group list-group-flush mb-4\" formArrayName=\"else\">\n\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let consequence of trigger.get('else')['controls']; let l=index\">\n\t\t\t\t\t\t\t\t\t<li class=\"list-group-item\" [formGroupName]=\"l\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<select formControlName=\"control\" class=\"form-select\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'GENERIC.LABELS.SELECT_AN_OPTION' | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let field of propertyPaths\" [value]=\"field\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ field }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"col-form-label\">{{ 'IS' | translate }} </label>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<select class=\"form-select\" formControlName=\"action\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let action of actions\" [value]=\"action\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ 'TRIGGERS.ACTIONS.' +  (action | uppercase) | translate | ucfirst }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-auto\">\n\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link text-danger\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"removeTrigger(trigger.get('else'), l)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fas fa-trash-alt\"></i>\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</fieldset>\n\t\t\t\t\t<div class=\"text-right text-end\">\n\t\t\t\t\t\t<button class=\"btn btn-link\" (click)=\"addConsequence(trigger.get('else'))\">\n\t\t\t\t\t\t\t<i class=\"fas fa-plus mr-2 me-2\"></i>{{ 'ADD_CONSEQUENCE' | translate }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ng-container>\n\t</ng-template>\n\t<div class=\"d-flex\">\n\t\t<button class=\"btn ml-auto ms-auto\" (click)=\"addTrigger()\">\n\t\t\t<i class=\"fas fa-plus mr-2 me-2\"></i>{{ 'ADD_TRIGGER' | translate }}\n\t\t</button>\n\t</div>\n</form>\n\n\n<ng-template #placeholderTpt>\n\t<div class=\"trigger-placeholder\"></div>\n</ng-template>\n\n\n<ng-template #typeInputTpt let-type=\"type\" let-control=\"control\">\n\t<ng-container [ngSwitch]=\"type\">\n\n\t\t<select *ngSwitchCase=\"'field'\" [formControl]=\"control\" class=\"form-select\">\n\t\t\t<option [ngValue]=\"null\">{{ 'GENERIC.LABELS.SELECT_AN_OPTION' | translate | ucfirst }}</option>\n\t\t\t<option *ngFor=\"let field of fieldPaths\" [value]=\"field\">\n\t\t\t\t{{ field }}\n\t\t\t</option>\n\t\t</select>\n\n\t\t<input *ngSwitchCase=\"'number'\" type=\"number\" [formControl]=\"control\" class=\"form-control\">\n\n\t\t<select *ngSwitchCase=\"'boolean'\" [formControl]=\"control\" class=\"form-select\">\n\t\t\t<option [ngValue]=\"null\">{{ 'GENERIC.LABELS.SELECT_AN_OPTION' | translate | ucfirst }}</option>\n\t\t\t<option [ngValue]=\"true\">{{ 'GENERIC.LABELS.TRUE' | translate | ucfirst }}</option>\n\t\t\t<option [ngValue]=\"false\">{{ 'GENERIC.LABELS.FALSE' | translate | ucfirst }}</option>\n\t\t</select>\n\n\t\t<input *ngSwitchDefault type=\"text\" [formControl]=\"control\" class=\"form-control\" [readonly]=\"!type\">\n\n\t</ng-container>\n</ng-template>\n","import { Component, forwardRef, Input, OnInit } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormArray, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\n\n@Component({\n    selector: 'ngx-config-per-role',\n    templateUrl: './config-per-role.component.html',\n    styleUrls: ['./config-per-role.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => ConfigPerRoleComponent),\n            multi: true\n        }\n    ]\n})\nexport class ConfigPerRoleComponent implements OnInit, ControlValueAccessor {\n\n    @Input()\n    set roles(value: Array<{ id: number, name: string; }>) {\n        this.form = this._fb.array(value.map(o => {\n            return this._fb.group({\n                id: [o.id, Validators.required],\n                name: [o.name, Validators.required],\n                canView: [true],\n                canEdit: [true],\n            });\n        }));\n    }\n\n    form: FormArray = this._fb.array([]);\n\n    get controls(): FormGroup[] {\n        return this.form.controls as FormGroup[];\n    }\n\n    isDisabled: boolean = false;\n\n    constructor(\n        private _fb: FormBuilder\n    ) { }\n\n    onChange = (_: any) => { };\n\n    onTouch = () => { };\n\n    writeValue(value: Array<{ id: number, name: string, canView: boolean, canEdit: boolean; }>): void {\n        if (value) {\n            this.form.patchValue(value);\n        }\n    }\n\n    registerOnChange(fn: any): void {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n        this.onTouch = fn;\n    }\n\n    setDisabledState?(isDisabled: boolean): void {\n        this.isDisabled = isDisabled;\n    }\n\n    ngOnInit(): void {\n        this.form.valueChanges.subscribe((changes) => {\n            this.onChange(this.form.value);\n        });\n    }\n\n    uncheckCanEditControl(group: AbstractControl) {\n        if (!group.get('canView').value) {\n            group.get('canEdit').patchValue(false);\n        }\n    }\n\n    checkCanViewControl(group: AbstractControl) {\n        if (group.get('canEdit').value) {\n            group.get('canView').patchValue(true);\n        }\n    }\n}\n","<table class=\"table\">\n\t<thead>\n\t\t<tr class=\"text-center\">\n\t\t\t<td class=\"text-start\">{{ 'PERMISSIONS_PER_ROLE.ROLE' | translate | titlecase }}</td>\n\t\t\t<td>{{ 'PERMISSIONS_PER_ROLE.CAN_VIEW' | translate | titlecase }}</td>\n\t\t\t<td>{{ 'PERMISSIONS_PER_ROLE.CAN_EDIT' | translate | titlecase }}</td>\n\t\t</tr>\n\t</thead>\n\t<tbody>\n\t\t<tr *ngFor=\"let config of controls; index as i\">\n\t\t\t<ng-container [formGroup]=\"config\">\n\t\t\t\t<td>{{ config.get('name').value }}</td>\n\t\t\t\t<td class=\"text-center\">\n\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"canView\" (change)=\"uncheckCanEditControl(config)\">\n\t\t\t\t</td>\n\t\t\t\t<td class=\"text-center\">\n\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"canEdit\" (change)=\"checkCanViewControl(config)\">\n\t\t\t\t</td>\n\t\t\t</ng-container>\n\t\t</tr>\n\t</tbody>\n</table>\n","import { Component, Input } from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { Fieldset } from '../../interfaces/property';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'ngx-fieldset',\n\ttemplateUrl: './fieldset.component.html',\n\tstyleUrls: ['./fieldset.component.scss']\n})\nexport class FieldsetComponent extends PropertyComponent {\n\n\t@Input() value: Fieldset;\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['fieldset'],\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\tdescription: [null],\n\t\tproperties: [[]],\n\t\ttriggers: [null],\n\t\tpermissions: [null]\n\t});\n}\n","<div class=\"modal-header\">\n\t<h4 class=\"modal-title\" id=\"modal-title\">{{ 'FIELDSET_EDITION' | translate }}</h4>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\" style=\"max-height: 72vh; overflow-y: auto;\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t<label>{{ 'KEY' | translate }} <sup class=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t<input type=\"text\" formControlName=\"key\" class=\"form-control\"\n\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\" class=\"invalid-feedback\">\n\t\t\t\t\t\t\t{{ 'REQUIRED' | translate }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\" class=\"invalid-feedback\">\n\t\t\t\t\t\t\t{{ 'DUPLICATED_KEY' | translate }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t<label>{{ 'LEGEND' | translate }}</label>\n\t\t\t\t\t\t<input type=\"text\" formControlName=\"description\" class=\"form-control\"\n\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('description').dirty && form.get('description').invalid}\">\n\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.required\"\n\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t</ul>\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn btn-default\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" (click)=\"saveAndClose()\"\n\t\t[disabled]=\"form.invalid\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { Input as InputProperty } from '../../interfaces/property';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'app-file',\n\ttemplateUrl: './file.component.html',\n\tstyleUrls: ['./file.component.scss']\n})\nexport class FileComponent extends PropertyComponent {\n\n\t@Input() value: InputProperty;\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['file'],\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\tdescription: [null],\n\t\trequired: [false],\n\t\taccepts: [],\n\t\tnamingPattern: [null],\n\t\tdefault: [null],\n\t\tmultiple: [false],\n\t\tmaximun: [20],\n\t\tminimun: [0],\n\t\ttriggers: [null],\n\t\tpermissions: [null]\n\t});\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\">{{ 'INPUT_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'KEY' | translate }} <sup\n\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"key\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'DUPLICATED_KEY' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'LABEL' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('description').dirty && form.get('description').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"required\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t{{ 'REQUIRED' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t\t<label>{{ 'EXTENSIONS_ACCEPTED' | translate }}</label>\n\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"accepts\">\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t\t<label>{{ 'NAMING_PATTERN' | translate }}</label>\n\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"namingPattern\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'DEFAULT_VALUE' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"default\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"multiple\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t{{ 'MULTIPLE' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ng-container *ngIf=\"form.get('multiple').value === true\">\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'MINIMUN' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"minimun\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'MAXIMUN' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"maximun\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { Input as InputProperty } from '../../interfaces/property';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'app-input',\n\ttemplateUrl: './input.component.html',\n\tstyleUrls: ['./input.component.scss']\n})\nexport class InputComponent extends PropertyComponent {\n\n\t@Input() value: InputProperty;\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['input'],\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\tdescription: [null],\n\t\trequired: [false],\n\t\tformat: ['text'],\n\t\tplaceholder: [null],\n\t\tmaximun: [20],\n\t\tminimun: [0],\n\t\tdefault: [null],\n\t\tstep: [1],\n\t\ttriggers: [null],\n\t\tpermissions: [null]\n\t});\n\n\tformats: string[] = [\n\t\t'checkbox',\n\t\t'color',\n\t\t'datetime-local',\n\t\t'date',\n\t\t'time',\n\t\t'file',\n\t\t'number',\n\t\t'range',\n\t\t'text',\n\t\t'email'\n\t];\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\">{{ 'INPUT_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'KEY' | translate }} <sup\n\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"key\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'DUPLICATED_KEY' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'LABEL' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('description').dirty && form.get('description').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 form-check\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"required\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">{{ 'REQUIRED' | translate }}</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'TYPE' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<select class=\"form-select\" formControlName=\"format\"\n\t\t\t\t\t\t\t\t\t(click)=\"form.get('default').patchValue(null)\">\n\t\t\t\t\t\t\t\t\t<option *ngFor=\"let format of formats\" [value]=\"format\">{{ format }}</option>\n\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'PLACEHOLDER' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"placeholder\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'DEFAULT_VALUE' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"default\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<ng-container [ngSwitch]=\"form.get('format').value\">\n\t\t\t\t\t\t\t\t<div class=\"col-auto\" *ngSwitchCase=\"'date'\">\n\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"form.get('default').patchValue('CURRENT_DATE')\">{{ 'CURRENT_DATE' | translate }}</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"col-auto\" *ngSwitchCase=\"'time'\">\n\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"form.get('default').patchValue('CURRENT_TIME')\">{{ 'CURRENT_TIME' | translate }}</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"col-auto\" *ngSwitchCase=\"'datetime'\">\n\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"form.get('default').patchValue('CURRENT_DATETIME')\">{{ 'CURRENT_DATETIME' | translate }}</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ng-container *ngIf=\"form.get('format').value === 'number'\">\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'MINIMUN' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"minimun\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'MAXIMUN' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"maximun\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'STEP' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"step\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t</ul>\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, ValidationErrors, Validators } from '@angular/forms';\nimport { DndDropEvent } from 'ngx-drag-drop';\nimport { Select } from '../../interfaces/property';\nimport { KeysValidator } from '../../validators/keys.validator';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'app-select',\n\ttemplateUrl: './select.component.html',\n\tstyleUrls: ['./select.component.scss']\n})\nexport class SelectComponent extends PropertyComponent {\n\n\t@Input() value: Select;\n\n\turlRegEx = '(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?';\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['select'],\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\tdescription: [null],\n\t\trequired: [false],\n\t\tplaceholder: [null],\n\t\tmultiple: [false],\n\t\tformat: ['dropdown'],\n\t\tfeeding_type: ['static', Validators.required],\n\t\tproperties: this._fb.array([]),\n\t\texternal_feeding_config: this._fb.group({\n\t\t\tendpoint: [null, [Validators.required, Validators.pattern(this.urlRegEx)]],\n\t\t\tvalue_property: [null, Validators.required],\n\t\t\ttext_property: [null, Validators.required]\n\t\t}),\n\t\tdefault: [],\n\t\ttriggers: [null],\n\t\tpermissions: [null]\n\t});\n\n\tget externalFeedingConfig(): FormGroup {\n\t\treturn this.form.get('external_feeding_config') as FormGroup;\n\t}\n\n\tformats: string[] = [\n\t\t'dropdown',\n\t\t'radio'\n\t];\n\n\tget properties(): FormArray {\n\t\treturn this.form.get('properties') as FormArray;\n\t}\n\n\tngOnInit() {\n\t\tif (this.value) {\n\t\t\tthis.form.patchValue(this.value);\n\n\t\t\tif (this.value.properties) {\n\t\t\t\tthis.value.properties.forEach(o => this.addOption(o));\n\t\t\t}\n\t\t} else {\n\t\t\tthis.addOption();\n\t\t}\n\t\tconst keys = this._formBuilderSvc.getSiblingKeys(this.parent, this.value?.key);\n\t\tthis.form.get('key').addValidators(KeysValidator(keys));\n\n\t\tthis.toggleFeedingTypeForms();\n\t}\n\n\taddOption(value?: any, index?: number): void {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\t\tconst formGroup = this._fb.group({\n\t\t\ttype: ['option'],\n\t\t\tvalue: [null, Validators.required],\n\t\t\tdescription: [null, Validators.required]\n\t\t});\n\t\tif (value) {\n\t\t\tformGroup.patchValue(value);\n\t\t}\n\t\tindex !== undefined ? properties.insert(index, formGroup) : properties.push(formGroup);\n\t}\n\n\tremoveByIndex(index: number) {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\t\tproperties.removeAt(index);\n\t}\n\n\tgetFormValidationErrors() {\n\t\tObject.keys(this.form.controls).forEach(key => {\n\n\t\t\tif (this.form.get(key).constructor === FormControl) {\n\t\t\t\tconst controlErrors: ValidationErrors = this.form.get(key).errors;\n\n\t\t\t\tif (controlErrors != null) {\n\t\t\t\t\tObject.keys(controlErrors).forEach(keyError => {\n\t\t\t\t\t\tconsole.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (this.form.get(key).constructor === FormControl) {\n\t\t\t\tObject.keys(this.form.get(key)['controls']).forEach(key => {\n\t\t\t\t\tthis.getFormValidationErrors;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\ttoggleFeedingTypeForms() {\n\t\tconst propertiesFA = this.form.get('properties') as FormArray;\n\t\tconst externalFeedingConfigFG = this.form.get('external_feeding_config') as FormGroup;\n\n\t\tswitch (this.form.get('feeding_type').value) {\n\t\t\tcase 'external':\n\t\t\t\tpropertiesFA.disable();\n\t\t\t\texternalFeedingConfigFG.enable();\n\t\t\t\tbreak;\n\t\t\tcase 'static':\n\t\t\t\tpropertiesFA.enable();\n\t\t\t\texternalFeedingConfigFG.disable();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tonMoved(item: any) {\n\t\tconst index = this.properties.controls.indexOf(item);\n\t\tthis.properties.removeAt(index);\n\t}\n\n\tonDrop(event: DndDropEvent) {\n\t\tif (event.dropEffect === 'move') {\n\t\t\tthis.addOption(event.data, event.index);\n\t\t}\n\t}\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\">{{ 'SELECT_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'KEY' | translate }} <sup\n\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"key\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'DUPLICATED_KEY' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'LABEL' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('description').dirty && form.get('description').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check mb-3\" *ngIf=\"form.get('format').value === 'dropdown'\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"multiple\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t{{ 'MULTIPLE' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check mb-3\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"required\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t{{ 'REQUIRED' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'TYPE' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<select class=\"form-select\" formControlName=\"format\">\n\t\t\t\t\t\t\t\t\t<option *ngFor=\"let format of formats\" [value]=\"format\">{{ format }}</option>\n\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'PLACEHOLDER' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"placeholder\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</fieldset>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<legend>{{ 'FEEDING_TYPE' | translate }}</legend>\n\t\t\t\t\t\t<div class=\"form-check form-check-inline mb-3\">\n\t\t\t\t\t\t\t<label class=\"form-check-label mr-4 me-5\">\n\t\t\t\t\t\t\t\t<input class=\"form-check-input\" formControlName=\"feeding_type\" type=\"radio\"\n\t\t\t\t\t\t\t\t\tvalue=\"static\" (change)=\"toggleFeedingTypeForms()\">\n\t\t\t\t\t\t\t\t{{ 'STATIC' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t<input class=\"form-check-input\" formControlName=\"feeding_type\" type=\"radio\"\n\t\t\t\t\t\t\t\t\tvalue=\"external\" (change)=\"toggleFeedingTypeForms()\">\n\t\t\t\t\t\t\t\t{{ 'EXTERNAL' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"form.get('feeding_type').value === 'static'; then staticOptionsTpt; else externalOptionsTpt\">\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t<ng-template #staticOptionsTpt>\n\t\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t\t<legend>{{ 'OPTIONS' | translate }}</legend>\n\t\t\t\t\t\t\t<div dndDropzone (dndDrop)=\"onDrop($event)\">\n\t\t\t\t\t\t\t\t<div class=\"dndPlaceholder\" dndPlaceholderRef></div>\n\t\t\t\t\t\t\t\t<div formArrayName=\"properties\" *ngFor=\"let item of properties.controls; index as i;\"\n\t\t\t\t\t\t\t\t\tclass=\"mb-3 row align-items-center\" [dndDraggable]=\"item.value\"\n\t\t\t\t\t\t\t\t\tdndEffectAllowed=\"move\" (dndMoved)=\"onMoved(item)\">\n\t\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"i\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-auto p-0\" dndHandle>\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link-dark\">&#9776;</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-auto\" style=\"line-height: 32px;\"><strong>{{ i + 1 }}</strong>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"col px-1\">\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"value\">\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"col px-1\">\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\">\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-auto\">\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link text-danger mx-0\" (click)=\"removeByIndex(i)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<svg style=\"height: 1rem;\" aria-hidden=\"true\" focusable=\"false\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-prefix=\"far\" data-icon=\"trash-alt\" role=\"img\"\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"svg-inline--fa fa-trash-alt fa-w-14\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"\"></path>\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div *ngIf=\"!properties.controls.length\" class=\"alert alert-warning\" role=\"alert\">\n\t\t\t\t\t\t\t\t{{ 'CLICK_BUTTON_ADD_OPTIONS' | translate }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"d-flex justify-content-end mb-4\">\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn\" (click)=\"addOption()\"\n\t\t\t\t\t\t\t\t\t[disabled]=\"properties.controls[properties.controls.length - 1]?.invalid\">\n\t\t\t\t\t\t\t\t\t<i class=\"fas fa-plus mr-2 me-2\"></i>{{ 'ADD' | translate }}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t</ng-template>\n\n\t\t\t\t\t<ng-template #externalOptionsTpt>\n\t\t\t\t\t\t<fieldset [formGroup]=\"externalFeedingConfig\">\n\t\t\t\t\t\t\t<legend>{{ 'FEEDING_CONFIG' | translate }}</legend>\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'ENDPOINT' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"endpoint\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('external_feeding_config.endpoint').dirty && form.get('external_feeding_config.endpoint').invalid}\">\n\t\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('external_feeding_config.endpoint').dirty && form.get('external_feeding_config.endpoint').errors?.pattern\"\n\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'INVALID_FIELD' | translate }}</div>\n\t\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('external_feeding_config.endpoint').dirty && form.get('external_feeding_config.endpoint').errors?.required\"\n\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'VALUE_PORPERTY' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"value_property\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('external_feeding_config.value_property').dirty && form.get('external_feeding_config.value_property').invalid}\">\n\t\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('external_feeding_config.value_property').dirty && form.get('external_feeding_config.value_property').errors?.required\"\n\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'TEXT_PROPERTY' | translate }}</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"text_property\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('external_feeding_config.text_property').dirty && form.get('external_feeding_config.text_property').invalid}\">\n\t\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('external_feeding_config.text_property').dirty && form.get('external_feeding_config.text_property').errors?.required\"\n\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'DEFAULT_VALUE' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t*ngIf=\"form.get('feeding_type').value === 'static'; else externalFeedingTypeDefaultValueTpt\">\n\t\t\t\t\t\t\t\t\t<select class=\"form-select\" formControlName=\"default\">\n\t\t\t\t\t\t\t\t\t\t<option *ngFor=\"let item of properties.controls; index as i\"\n\t\t\t\t\t\t\t\t\t\t\t[value]=\"item.value.value\">\n\t\t\t\t\t\t\t\t\t\t\t{{ item.value.description }}\n\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t<ng-template #externalFeedingTypeDefaultValueTpt>\n\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"default\">\n\t\t\t\t\t\t\t\t</ng-template>\n\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t</ul>\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormArray, FormGroup, Validators } from '@angular/forms';\nimport { DndDropEvent } from 'ngx-drag-drop';\nimport { Column, StructuralTable } from '../../interfaces/property';\nimport { KeysValidator } from '../../validators/keys.validator';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'app-structural-table',\n\ttemplateUrl: './structural-table.component.html',\n\tstyleUrls: ['./structural-table.component.scss']\n})\nexport class StructuralTableComponent extends PropertyComponent {\n\n\t@Input() value: StructuralTable;\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['structural-table'],\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\tdescription: [null],\n\t\tcaption: [null],\n\t\trequired: [false],\n\t\tproperties: this._fb.array([]),\n\t\ttriggers: [null],\n\t\tpermissions: [null],\n\t\tlength: [1, Validators.required]\n\t});\n\n\tget properties(): FormArray {\n\t\treturn this.form.get('properties') as FormArray;\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.value) {\n\t\t\tthis.form.patchValue(this.value);\n\t\t\tthis.value.properties.forEach(o => this.addColumn(o));\n\t\t} else {\n\t\t\tthis.addColumn();\n\t\t}\n\n\t\tconst keys = this._formBuilderSvc.getSiblingKeys(this.parent, this.value?.key);\n\t\tthis.form.get('key').addValidators(KeysValidator(keys));\n\t}\n\n\t/**\n\t * Añade una nueva columna a la tabla\n\t *\n\t * @param {*} [value]\n\t * @param {number} [index]\n\t */\n\taddColumn(value?: Column, index?: number): void {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\t\tconst formGroup = this._fb.group({\n\t\t\ttype: 'column',\n\t\t\tdescription: [null, Validators.required],\n\t\t\tproperties: [[]]\n\t\t});\n\n\t\tif (value) {\n\t\t\tformGroup.patchValue(value);\n\t\t}\n\n\t\tindex !== undefined ? properties.insert(index, formGroup) : properties.push(formGroup);\n\t}\n\n\t/**\n\t * Elimina la columna de la tabla que esté en el índice pasado por parámetro\n\t *\n\t * @param {number} index\n\t */\n\tremoveByIndex(index: number): void {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\t\tproperties.removeAt(index);\n\t}\n\n\tsaveAndClose(): void {\n\t\tconst value: StructuralTable = this.form.value;\n\n\t\t// Ajustamos el número de huecos por columna\n\t\tvalue.properties.forEach(p => p.properties.length = value.length);\n\t\tthis._activeModal.close(value);\n\t}\n\n\tonMoved(item: any): void {\n\t\tconst index = this.properties.controls.indexOf(item);\n\t\tthis.properties.removeAt(index);\n\t}\n\n\tonDrop(event: DndDropEvent): void {\n\t\tif (event.dropEffect === 'move') {\n\t\t\tthis.addColumn(event.data, event.index);\n\t\t}\n\t}\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\">{{ 'STRUCTURAL_TABLE_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<fieldset class=\"mb-3\">\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'KEY' | translate }} <sup\n\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"key\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'DUPLICATED_KEY' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'LABEL' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('description').dirty && form.get('description').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'CAPTION' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"caption\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'ROW_NUMBER' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"number\" class=\"form-control\" formControlName=\"length\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"required\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t{{ 'REQUIRED' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<legend>{{ 'COLUMNS' | translate }}</legend>\n\t\t\t\t\t\t<div dndDropzone (dndDrop)=\"onDrop($event)\">\n\t\t\t\t\t\t\t<div class=\"dndPlaceholder\" dndPlaceholderRef></div>\n\t\t\t\t\t\t\t<div formArrayName=\"properties\" *ngFor=\"let item of properties.controls; index as i;\"\n\t\t\t\t\t\t\t\tclass=\"mb-3 row align-items-center\" [dndDraggable]=\"item.value\" dndEffectAllowed=\"move\"\n\t\t\t\t\t\t\t\t(dndMoved)=\"onMoved(item)\">\n\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"i\">\n\t\t\t\t\t\t\t\t\t<div class=\"col-auto p-0\" dndHandle>\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link-dark\">&#9776;</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"col-auto\" style=\"line-height: 32px;\"><strong>{{ i + 1 }}</strong></div>\n\t\t\t\t\t\t\t\t\t<div class=\"col px-1\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"col-auto\">\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link text-danger mx-0\" (click)=\"removeByIndex(i)\">\n\t\t\t\t\t\t\t\t\t\t\t<svg style=\"height: 1rem;\" aria-hidden=\"true\" focusable=\"false\"\n\t\t\t\t\t\t\t\t\t\t\t\tdata-prefix=\"far\" data-icon=\"trash-alt\" role=\"img\"\n\t\t\t\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"svg-inline--fa fa-trash-alt fa-w-14\">\n\t\t\t\t\t\t\t\t\t\t\t\t<path fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"\"></path>\n\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div *ngIf=\"!properties.controls.length\" class=\"alert alert-warning\" role=\"alert\">\n\t\t\t\t\t\t\t{{ 'CLICK_BUTTON_ADD_COLUMNS' | translate }}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"text-right text-end\">\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn\" data-dismiss=\"modal\" (click)=\"addColumn()\"\n\t\t\t\t\t\t\t\t[disabled]=\"properties.controls[properties.controls.length - 1].invalid\">\n\t\t\t\t\t\t\t\t<i class=\"fas fa-plus mr-2 me-2\"></i>\n\t\t\t\t\t\t\t\t{{ 'ADD' | translate }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormArray, FormGroup, Validators } from '@angular/forms';\nimport { DndDropEvent } from 'ngx-drag-drop';\nimport { Table } from '../../interfaces/property';\nimport { KeysValidator } from '../../validators/keys.validator';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'app-table',\n\ttemplateUrl: './table.component.html',\n\tstyleUrls: ['./table.component.scss']\n})\nexport class TableComponent extends PropertyComponent {\n\n\t@Input() value: Table;\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['table'],\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\tdescription: [null],\n\t\tcaption: [null],\n\t\trequired: [false],\n\t\tproperties: this._fb.array([]),\n\t\ttriggers: [null],\n\t\tpermissions: [null],\n\t});\n\n\tget properties(): FormArray {\n\t\treturn this.form.get('properties') as FormArray;\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.value) {\n\t\t\tthis.form.patchValue(this.value);\n\t\t\tthis.value.properties.forEach(o => this.addOption(o));\n\t\t} else {\n\t\t\tthis.addOption();\n\t\t}\n\n\t\tconst keys = this._formBuilderSvc.getSiblingKeys(this.parent, this.value?.key);\n\t\tthis.form.get('key').addValidators(KeysValidator(keys));\n\t}\n\n\taddOption(value?: any, index?: number): void {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\t\tconst formGroup = this._fb.group({\n\t\t\ttype: ['column'],\n\t\t\tdescription: [null, Validators.required],\n\t\t\tproperties: [[]]\n\t\t});\n\n\t\tif (value) {\n\t\t\tformGroup.patchValue(value);\n\t\t}\n\n\t\tindex !== undefined ? properties.insert(index, formGroup) : properties.push(formGroup);\n\t}\n\n\tremoveByIndex(index: number): void {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\n\t\tproperties.removeAt(index);\n\t}\n\n\n\tonMoved(item: any): void {\n\t\tconst index = this.properties.controls.indexOf(item);\n\n\t\tthis.properties.removeAt(index);\n\t}\n\n\tonDrop(event: DndDropEvent): void {\n\t\tif (event.dropEffect === 'move') {\n\t\t\tthis.addOption(event.data, event.index);\n\t\t}\n\t}\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\">{{ 'TABLE_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<fieldset class=\"mb-3\">\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'KEY' | translate }} <sup\n\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"key\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'DUPLICATED_KEY' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'LABEL' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('description').dirty && form.get('description').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'CAPTION' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"caption\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"required\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">{{ 'REQUIRED' | translate }}</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<legend>{{ 'COLUMNS' | translate }}</legend>\n\t\t\t\t\t\t<div dndDropzone (dndDrop)=\"onDrop($event)\">\n\t\t\t\t\t\t\t<div class=\"dndPlaceholder\" dndPlaceholderRef></div>\n\t\t\t\t\t\t\t<div formArrayName=\"properties\" *ngFor=\"let item of properties.controls; index as i;\"\n\t\t\t\t\t\t\t\tclass=\"mb-3 row align-items-center\" [dndDraggable]=\"item.value\" dndEffectAllowed=\"move\"\n\t\t\t\t\t\t\t\t(dndMoved)=\"onMoved(item)\">\n\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"i\">\n\t\t\t\t\t\t\t\t\t<div class=\"col-auto p-0\" dndHandle>\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link-dark\">&#9776;</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"col-auto\" style=\"line-height: 32px;\"><strong>{{ i + 1 }}</strong></div>\n\t\t\t\t\t\t\t\t\t<div class=\"col px-1\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"col-auto\">\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-link text-danger mx-0\" (click)=\"removeByIndex(i)\">\n\t\t\t\t\t\t\t\t\t\t\t<svg style=\"height: 1rem;\" aria-hidden=\"true\" focusable=\"false\"\n\t\t\t\t\t\t\t\t\t\t\t\tdata-prefix=\"far\" data-icon=\"trash-alt\" role=\"img\"\n\t\t\t\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"svg-inline--fa fa-trash-alt fa-w-14\">\n\t\t\t\t\t\t\t\t\t\t\t\t<path fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"\"></path>\n\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div *ngIf=\"!properties.controls.length\" class=\"alert alert-warning\" role=\"alert\">\n\t\t\t\t\t\t\t{{ 'CLICK_BUTTON_ADD_COLUMNS' | translate }}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"text-right text-end\">\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn\" data-dismiss=\"modal\" (click)=\"addOption()\"\n\t\t\t\t\t\t\t\t[disabled]=\"properties.controls[properties.controls.length - 1].invalid\">\n\t\t\t\t\t\t\t\t<i class=\"fas fa-plus mr-2 me-2\"></i>\n\t\t\t\t\t\t\t\t{{ 'ADD' | translate }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormArray, Validators } from '@angular/forms';\nimport { Tabs } from '../../interfaces/tabs';\nimport { KeysValidator } from '../../validators/keys.validator';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'app-tabs',\n\ttemplateUrl: './tabs.component.html',\n\tstyleUrls: ['./tabs.component.scss']\n})\nexport class TabsComponent extends PropertyComponent {\n\n\t@Input() value: Tabs;\n\n\tform = this._fb.group({\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\ttype: ['tabs'],\n\t\tproperties: this._fb.array([]),\n\t\ttriggers: [null],\n\t\tpermissions: [null]\n\t});\n\n\tget properties(): FormArray {\n\t\treturn this.form.get('properties') as FormArray;\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.value) {\n\t\t\tthis.value.properties.forEach(o => this.add(o));\n\t\t\tthis.form.patchValue(this.value);\n\t\t} else {\n\t\t\tthis.add();\n\t\t}\n\n\t\tconst keys = this._formBuilderSvc.getSiblingKeys(this.parent, this.value?.key);\n\t\tthis.form.get('key').addValidators(KeysValidator(keys));\n\t}\n\n\tadd(value: any = {}): void {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\t\tproperties.push(\n\t\t\tthis._fb.group({\n\t\t\t\ttype: ['tab'],\n\t\t\t\tdescription: [value.description, Validators.required],\n\t\t\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\t\t\ticonClass: [value.iconClass],\n\t\t\t\tproperties: [value.properties || []]\n\t\t\t})\n\t\t);\n\t}\n\n\tremoveByIndex(index: number) {\n\t\tconst properties = this.form.get('properties') as FormArray;\n\t\tconst property = properties.at(index);\n\t\tif (property.get('properties').value.length && !confirm('La pestaña tiene propiedades. ¿Desea continuar?')) {\n\t\t\treturn;\n\t\t}\n\t\tproperties.removeAt(index);\n\t}\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\"> {{ 'TABS_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink> {{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ul class=\"list-group list-group-flush\">\n\t\t\t\t\t\t<li class=\"list-group-item mb-3\">\n\t\t\t\t\t\t\t<label>{{ 'KEY' | translate }} <sup class=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<input type=\"text\" formControlName=\"key\" class=\"form-control\"\n\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\"\n\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\" class=\"invalid-feedback\">\n\t\t\t\t\t\t\t\t{{ 'DUPLICATED_KEY' | translate }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</li>\n\n\t\t\t\t\t\t<li class=\"list-group-item\" formArrayName=\"properties\"\n\t\t\t\t\t\t\t*ngFor=\"let item of properties.controls; index as i;\">\n\t\t\t\t\t\t\t<fieldset [formGroupName]=\"i\">\n\t\t\t\t\t\t\t\t<legend> {{ 'TAB' | translate }} #{{ i + 1 }}</legend>\n\t\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'KEY' | translate }} <sup\n\t\t\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"key\"\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': item.get('key').dirty && item.get('key').invalid}\">\n\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"item.get('key').dirty && item.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"item.get('key').dirty && item.get('key').errors?.required\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'NAME' | translate }} <sup\n\t\t\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\"\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': item.get('description').dirty && item.get('description').invalid}\">\n\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"item.get('description').dirty && item.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"item.get('description').dirty && item.get('description').errors?.required\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'ICON' | translate }}</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"iconClass\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-danger ml-auto ms-auto\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"removeByIndex(i)\">\n\t\t\t\t\t\t\t\t\t\t<i class=\"far fa-trash-alt mr-2 me-2\"></i>{{ 'REMOVE' | translate }}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</fieldset>\n\n\t\t\t\t\t\t\t<div *ngIf=\"!properties.controls.length\" class=\"alert alert-warning\" role=\"alert\">\n\t\t\t\t\t\t\t\t{{ 'CLICK_BUTTON_ADD_TABS' | translate }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t\t<!-- <li [ngbNavItem]=\"3\">\n\t\t\t\t<a ngbNavLink>Display settings</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-display-settings formControlName=\"display-settings\"></ngx-form-builder-display-settings>\n\t\t\t\t</ng-template>\n\t\t\t</li> -->\n\t\t</ul>\n\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" data-dismiss=\"modal\" (click)=\"add()\">\n\t\t<i class=\"fas fa-plus mr-2 me-2\" aria-hidden=\"true\"></i>\n\t\t{{ 'ADD' | translate }}\n\t</button>\n\t<button type=\"button\" class=\"btn ml-auto ms-auto\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { Textarea } from '../../interfaces/property';\nimport { NormalizedCharsValidator } from '../../validators/normalized-chars.validator';\nimport { PropertyComponent } from '../property/property.component';\n\n@Component({\n\tselector: 'app-text-area',\n\ttemplateUrl: './text-area.component.html',\n\tstyleUrls: ['./text-area.component.scss']\n})\nexport class TextAreaComponent extends PropertyComponent {\n\n\t@Input() value: Textarea;\n\n\tform: FormGroup = this._fb.group({\n\t\ttype: ['textarea'],\n\t\tkey: [null, [Validators.required, NormalizedCharsValidator]],\n\t\tdescription: [null],\n\t\trequired: [false],\n\t\tdefault: [null],\n\t\tplaceholder: [''],\n\t\tcols: [20],\n\t\trows: [5],\n\t\ttriggers: [null],\n\t\tpermissions: [null]\n\t});\n}\n","<div class=\"modal-header\">\n\t<h5 class=\"modal-title\">{{ 'TEXTAREA_EDITION' | translate }}</h5>\n\t<button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"dismiss()\"></button>\n</div>\n\n<div class=\"modal-body\">\n\t<form [formGroup]=\"form\">\n\t\t<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeNavId\" class=\"nav-tabs\">\n\t\t\t<li [ngbNavItem]=\"1\">\n\t\t\t\t<a ngbNavLink>{{ 'PROPERTIES' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'KEY' | translate }} <sup\n\t\t\t\t\t\t\t\t\tclass=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"key\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('key').dirty && form.get('key').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('key').dirty && form.get('key').errors?.keys\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'DUPLICATED_KEY' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'LABEL' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"description\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{'is-invalid': form.get('description').dirty && form.get('description').invalid}\">\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.normalizedChars\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'SPECIAL_CHARS_ERROR' | translate }}</div>\n\t\t\t\t\t\t\t\t<div *ngIf=\"form.get('description').dirty && form.get('description').errors?.required\"\n\t\t\t\t\t\t\t\t\tclass=\"invalid-feedback\">{{ 'REQUIRED' | translate }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" formControlName=\"required\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t{{ 'REQUIRED' | translate }}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'PLACEHOLDER' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"string\" class=\"form-control\" formControlName=\"placeholder\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'COLUMNS' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"number\" class=\"form-control\" formControlName=\"cols\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t\t\t\t<label class=\"col-sm-3 col-form-label\">{{ 'ROWS' | translate }}</label>\n\t\t\t\t\t\t\t<div class=\"col-sm-9\">\n\t\t\t\t\t\t\t\t<input type=\"number\" class=\"form-control\" formControlName=\"rows\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<label>{{ 'DEFAULT_VALUE' | translate }}</label>\n\t\t\t\t\t\t\t<textarea class=\"form-control\" formControlName=\"default\" rows=\"4\"></textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"2\">\n\t\t\t\t<a ngbNavLink>{{ 'TRIGGERS.SELF' | translate }}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-form-builder-triggers formControlName=\"triggers\"></ngx-form-builder-triggers>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\n\t\t\t<li [ngbNavItem]=\"3\" *ngIf=\"roles?.length\">\n\t\t\t\t<a ngbNavLink>{{ 'PERMISSIONS_PER_ROLE.TITLE' | translate | titlecase}}</a>\n\t\t\t\t<ng-template ngbNavContent>\n\t\t\t\t\t<ngx-config-per-role formControlName=\"permissions\" [roles]=\"roles\"></ngx-config-per-role>\n\t\t\t\t</ng-template>\n\t\t\t</li>\n\t\t</ul>\n\t\t<div [ngbNavOutlet]=\"nav\"></div>\n\t</form>\n</div>\n\n<div class=\"modal-footer\">\n\t<button type=\"button\" class=\"btn\" (click)=\"dismiss()\">{{ 'CANCEL' | translate }}</button>\n\t<button type=\"button\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"\n\t\t(click)=\"saveAndClose()\">{{ 'ACCEPT' | translate }}</button>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, HostListener, Input, OnInit, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from '@angular/forms';\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\nimport { cloneDeep } from 'lodash';\nimport { DndDropEvent, DropEffect } from 'ngx-drag-drop';\nimport { locale as enLang } from '../../assets/i18n/en';\nimport { locale as esLang } from '../../assets/i18n/es';\nimport { BuildingItem } from '../../interfaces/building-item';\nimport { PropertyInput, Schema, StructuralProperty, StructuralTable } from '../../interfaces/property';\nimport { Tab } from '../../interfaces/tab';\nimport { Tabs } from '../../interfaces/tabs';\nimport { FormBuilderService } from '../../services/form-builder.service';\nimport { TranslationService } from '../../services/translation.service';\nimport { findContainer, findParentStructuralProperty } from '../../utils';\nimport { EnrichedTextComponent } from '../enriched-text/enriched-text.component';\nimport { FieldsetComponent } from '../fieldset/fieldset.component';\nimport { FileComponent } from '../file/file.component';\nimport { InputComponent } from '../input/input.component';\nimport { SelectComponent } from '../select/select.component';\nimport { StructuralTableComponent } from '../structural-table/structural-table.component';\nimport { TableComponent } from '../table/table.component';\nimport { TabsComponent } from '../tabs/tabs.component';\nimport { TextAreaComponent } from '../text-area/text-area.component';\n\n@Component({\n\tselector: 'ngx-form-builder',\n\ttemplateUrl: './form-builder.component.html',\n\tstyleUrls: ['./form-builder.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => FormBuilderComponent),\n\t\t\tmulti: true\n\t\t}, {\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => FormBuilderComponent),\n\t\t\tmulti: true\n\t\t}\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormBuilderComponent implements ControlValueAccessor, Validator, OnInit {\n\n\t@Input() roles: Array<{ id: number, name: string; }>;\n\t@ViewChild('buildingToolbar') toolbarElement: ElementRef;\n\n\tbuildingItems: BuildingItem[] = [\n\t\t{ name: 'Tabs', children: [] as any[], type: 'tabs', icon: 'fa-window-maximize' },\n\t\t{ name: 'Fieldset', children: [] as any[], type: 'fieldset', icon: 'fa-square' },\n\t\t{ name: 'Input', type: 'string', icon: 'fa-keyboard' },\n\t\t{ name: 'Select', type: 'select', icon: 'fa-list' },\n\t\t{ name: 'Textarea', type: 'textarea', icon: 'fa-font' },\n\t\t{ name: 'Table', type: 'table', icon: 'fa-table' },\n\t\t{ name: 'File', type: 'file', icon: 'fa-file' },\n\t\t{ name: 'Enriched Text', type: 'enriched-text', icon: 'fa-code' },\n\t\t{ name: 'Structural table', type: 'structural-table', icon: 'fa-th-list' }\n\t];\n\n\tbuildingItemsToShow: BuildingItem[];\n\n\tsticky = false;\n\telementPosition: any;\n\n\ttabIndex = 0;\n\n\tdefaultSchema: Schema = {\n\t\t$id: null,\n\t\t$schema: 'http://json-schema.org/draft-07/schema#',\n\t\ttitle: null,\n\t\ttype: 'object',\n\t\tproperties: []\n\t};\n\n\tget schema(): Schema {\n\t\treturn this._formBuilderSvc.schema;\n\t}\n\tset schema(v: Schema) {\n\t\tthis._formBuilderSvc.schema = v;\n\t}\n\n\tdisabled = false;\n\n\tconstructor(\n\t\tprivate _elementRef: ElementRef,\n\t\tprivate _cdr: ChangeDetectorRef,\n\t\tprivate _translationSvc: TranslationService,\n\t\tprivate _modalSvc: NgbModal,\n\t\tprivate _formBuilderSvc: FormBuilderService\n\t) {\n\t\tthis.buildingItemsToShow = this.buildingItems.filter(o => this._formBuilderSvc.config.components.findIndex(p => o.type === p) > -1);\n\t}\n\n\trange = Array;\n\n\tngOnInit(): void {\n\t\tthis._translationSvc.loadTranslations(esLang, enLang);\n\t\tthis._translationSvc.setLanguage('es');\n\t}\n\n\tonTouch = () => { };\n\n\tonChange(event): void {\n\t\tthis.propagateChange(event);\n\t}\n\n\t/**\n\t * The method set in registerOnChange, it is just a placeholder for a method that takes one parameter,\n\t * we use it to emit changes back to the form\n\t * @private\n\t * @memberof FormBuilderComponent\n\t */\n\tprivate propagateChange = (_: any) => { };\n\n\t/**\n\t * initial value set to the component\n\t *\n\t * @param {*} obj\n\t */\n\twriteValue(obj: any): void {\n\t\tif (obj) {\n\t\t\tthis.schema = obj;\n\t\t}\n\t\tthis._cdr.markForCheck();\n\t}\n\n\t/**\n\t * Registers a callback function that is called when the control's value changes in the UI.\n\t *\n\t * @param {*} fn The callback function to register\n\t */\n\tregisterOnChange(fn: any): void {\n\t\tthis.propagateChange = fn;\n\t}\n\n\t/**\n\t * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n\t *\n\t * @param {*} fn The callback function to register\n\t */\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\t/**\n\t * This function is called when the control status changes to or from \"DISABLED\".\n\t * Depending on the value, it will enable or disable the appropriate DOM element.\n\t * @param isDisabled\n\t */\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t@HostListener('window:scroll', [])\n\thandleScroll(): void {\n\t\tconst windowScroll = window.pageYOffset;\n\t\tconst componentTop = this._elementRef.nativeElement.offsetTop;\n\t\tconst componentBottom = componentTop + this._elementRef.nativeElement.scrollHeight;\n\t\tthis.sticky = windowScroll >= componentTop && windowScroll <= componentBottom;\n\t}\n\n\t/**\n\t * returns null when valid else the validation object in this case we're checking if the json parsing has\n\t * passed or failed from the onChange method\n\t * @param c\n\t */\n\tvalidate(c: FormControl): any {\n\t\treturn null;\n\t}\n\n\tasync save(): Promise<void> {\n\t\ttry {\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\t}\n\n\t/**\n\t * Evento lanzado cuando se deja el item en su lugar. Si es un movimiento, elimina el elemento de la posición inicial\n\t *\n\t * @param {*} item\n\t * @param {any[]} list\n\t * @param {DropEffect} effect\n\t */\n\tonDragged(item: any, list: any[], effect: DropEffect): void {\n\t\tif (effect === 'move') {\n\t\t\tconst index = list.indexOf(item);\n\n\t\t\tlist.splice(index, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Evento lanzado finalmente que añade el elemento en la posición indicada\n\t *\n\t * @param {DndDropEvent} event\n\t * @param {any[]} [list]\n\t */\n\tasync onDrop(event: DndDropEvent, property?: StructuralProperty | Schema): Promise<any> {\n\t\t// TODO: Al mover, comprobar keys y advertir o mostrar el modal con el error\n\t\tif (property && (event.dropEffect === 'copy' || event.dropEffect === 'move')) {\n\t\t\tlet index = event.index;\n\n\t\t\tif (typeof index === 'undefined') {\n\t\t\t\tindex = property.properties.length;\n\t\t\t}\n\n\t\t\tif (event.dropEffect === 'copy') {\n\t\t\t\tevent.data = await this.add(event.data.type, property);\n\n\t\t\t\tif (!event.data) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tproperty.properties.splice(index, 0, event.data);\n\n\t\t\t// updating the form\n\t\t\tthis.onChange(this.schema);\n\t\t}\n\n\t\tthis.onTouch();\n\t\tthis._cdr.markForCheck();\n\t}\n\n\t/**\n\t * Procedimiento utilizado cuando se suelta un elemento de construcción en una tabla estructural\n\t *\n\t * @param {DndDropEvent} event\n\t * @param {StructuralProperty[]} properties\n\t * @param {number} columnIndex\n\t * @param {number} rowIndex\n\t * @return {*}  \n\t */\n\tasync onStructuralTableDrop(event: DndDropEvent, tableProperty: StructuralTable, columnIndex: number, rowIndex: number) {\n\t\tif (!event.data) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (tableProperty && (event.dropEffect === 'copy' || event.dropEffect === 'move')) {\n\t\t\tlet index = event.index;\n\t\t\tif (!tableProperty.properties[columnIndex].properties[rowIndex]) {\n\t\t\t\ttableProperty.properties[columnIndex].properties[rowIndex] = {\n\t\t\t\t\ttype: 'cell',\n\t\t\t\t\tproperties: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst cell = tableProperty.properties[columnIndex].properties[rowIndex];\n\n\n\t\t\tif (typeof index === 'undefined') {\n\t\t\t\tindex = cell.properties.length;\n\t\t\t}\n\n\t\t\tif (event.dropEffect === 'copy') {\n\t\t\t\tevent.data = await this.add(event.data.type, tableProperty);\n\t\t\t}\n\t\t\tcell.properties.splice(index, 0, event.data);\n\t\t\tthis.onChange(this.schema);\n\t\t}\n\n\t\tthis.onTouch();\n\t\tthis._cdr.markForCheck();\n\t}\n\n\t/**\n\t * Añade un nuevo elemento de construcción de un tipo a las propiedades de la propiedad pasada por parámetro\n\t * \n\t *\n\t * @param {string} type\n\t * @param {(StructuralProperty | Schema)} parent\n\t * @return {*}  {Promise<any>}\n\t */\n\tasync add(type: string, parent: StructuralProperty | Schema): Promise<any> {\n\t\tconst modalRef = this.getModalRefByKey(type);\n\t\tmodalRef.componentInstance.roles = this.roles;\n\t\tmodalRef.componentInstance.parent = parent;\n\t\ttry {\n\t\t\tthis.onTouch();\n\t\t\treturn await modalRef.result;\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\t}\n\n\t/**\n\t * Edita un elemento de construcción\n\t *\n\t * @param {StructuralProperty} parent\n\t * @param {*} item\n\t * @return {*}  {Promise<void>}\n\t */\n\tasync edit(item: StructuralProperty | PropertyInput): Promise<void> {\n\n\t\tconst modalRef = this.getModalRefByKey(item.type);\n\t\tconst container = findContainer(this.schema, item);\n\t\tconst parent = findParentStructuralProperty(this.schema, item);\n\t\tconst index = container.properties.indexOf(item);\n\n\t\t// Si el index no se ha encontrado lanzamos un error\n\t\tif (index == -1) {\n\t\t\tconsole.error('edit -1');\n\t\t\treturn;\n\t\t}\n\n\t\tmodalRef.componentInstance.value = item;\n\t\tmodalRef.componentInstance.parent = parent;\n\t\tmodalRef.componentInstance.roles = this.roles;\n\n\t\ttry {\n\t\t\tconst result = await modalRef.result;\n\t\t\tif (result) {\n\t\t\t\tcontainer.properties[index] = result;\n\t\t\t\tthis.onChange(this.schema);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\n\t\tthis.onTouch();\n\t\tthis._cdr.markForCheck();\n\t}\n\n\t/**\n\t * Elimina la propiedad del listado de propiedades pasadas por parámetro\n\t *\n\t * @param {StructuralProperty} parent\n\t * @param {(StructuralProperty | PropertyInput)} item\n\t */\n\tdelete(item: StructuralProperty | PropertyInput): void {\n\t\tconst container = findContainer(this.schema, item);\n\t\tconst index = container.properties.indexOf(item);\n\t\tif (confirm(this._translationSvc.instant('MESSAGES.DELETE_ITEM')) && index > -1) {\n\t\t\tcontainer.properties.splice(index, 1);\n\t\t\tthis.onChange(this.schema);\n\t\t\tthis.onTouch();\n\t\t}\n\t}\n\n\t/**\n\t * Clona una propiedad en el listado pasado por parámetro\n\t *\n\t * @param {StructuralProperty} parent\n\t * @param {(StructuralProperty | PropertyInput)} item\n\t */\n\tclone(item: StructuralProperty | PropertyInput): void {\n\t\tconst container = findContainer(this.schema, item);\n\t\tconst index = container.properties.indexOf(item);\n\t\tif (index === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst append = (new Date()).getTime();\n\t\tconst cloned = { ...cloneDeep(item), key: item['key'] + append };\n\t\tcontainer.properties.splice(index + 1, 0, cloned);\n\t\tthis.onChange(this.schema);\n\t\tthis.onTouch();\n\t}\n\n\t/**\n\t * Obtiene la referencia al modal del componente específico del tipo pasado por parámetro\n\t *\n\t * @param {string} type\n\t * @return {*}  {NgbModalRef}\n\t */\n\tgetModalRefByKey(type: string): NgbModalRef {\n\t\tlet modalRef: NgbModalRef;\n\n\t\tswitch (type) {\n\t\t\tcase 'string':\n\t\t\t\tmodalRef = this._modalSvc.open(InputComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'file':\n\t\t\t\tmodalRef = this._modalSvc.open(FileComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'tabs':\n\t\t\t\tmodalRef = this._modalSvc.open(TabsComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'fieldset':\n\t\t\t\tmodalRef = this._modalSvc.open(FieldsetComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'textarea':\n\t\t\t\tmodalRef = this._modalSvc.open(TextAreaComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'select':\n\t\t\t\tmodalRef = this._modalSvc.open(SelectComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'table':\n\t\t\t\tmodalRef = this._modalSvc.open(TableComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'enriched-text':\n\t\t\t\tmodalRef = this._modalSvc.open(EnrichedTextComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tcase 'structural-table':\n\t\t\t\tmodalRef = this._modalSvc.open(StructuralTableComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmodalRef = this._modalSvc.open(InputComponent, { size: 'lg', backdrop: 'static' });\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn modalRef;\n\t}\n\n\t/**\n\t * Elimina la fila de la tabla estructural pasada por parámetro\n\t *\n\t * @param {any[]} columns\n\t * @param {number} rowIndex\n\t */\n\tremoveRow(item: StructuralTable, rowIndex: number): void {\n\t\tif (confirm(this._translationSvc.instant('MESSAGES.DELETE_ITEM')) && rowIndex > -1) {\n\t\t\tfor (const column of item.properties) {\n\t\t\t\tcolumn.properties.splice(rowIndex, 1);\n\t\t\t}\n\t\t\titem.length--;\n\t\t}\n\t}\n\n\t/**\n\t * Añade una fila arriba o abajo\n\t *\n\t * @param {StructuralTable} item\n\t * @param {number} index\n\t */\n\taddRow(item: StructuralTable, index: number) {\n\t\tfor (const column of item.properties) {\n\t\t\tcolumn.properties.splice(index, 0, null);\n\t\t}\n\t\titem.length++;\n\t}\n\n\t/**\n\t * Cambio de pestaña en clic\n\t *\n\t * @param {(Tabs & { index: number })} tabs\n\t * @param {Tab} tab\n\t */\n\ttabClick(tabs: Tabs & { index: number }, tab: Tab): void {\n\t\tconst index = tabs.properties.indexOf(tab);\n\t\ttabs.index = index;\n\t}\n}\n","<div #buildingToolbar *ngIf=\"!disabled\" class=\"d-flex justify-content-center flex-wrap gap-1 building-toolbar mb-3\"\n\t[class.sticky]=\"sticky\">\n\t<button class=\"btn btn-light m-1\" *ngFor=\"let item of buildingItemsToShow\" [dndDisableIf]=\"disabled\"\n\t\t[dndDraggable]=\"item\" dndEffectAllowed=\"copy\">\n\t\t<i *ngIf=\"item.icon\" [ngClass]=\"item.icon\" class=\"me-2 fas\"></i>\n\t\t{{ item.name | titlecase }}\n\t</button>\n</div>\n\n<ng-template #recursiveList let-property=\"property\">\n\t<div dndPlaceholderRef class=\"dndPlaceholder\"></div>\n\t<div class=\"building-item\" *ngFor=\"let item of property?.properties\" [dndDisableIf]=\"disabled\" [dndDraggable]=\"item\"\n\t\tdndEffectAllowed=\"move\" [dndDisableIf]=\"item.disable\" (dndMoved)=\"onDragged(item, property.properties, 'move')\">\n\n\t\t<ng-container [ngSwitch]=\"item.type\">\n\n\t\t\t<div *ngSwitchCase=\"'table'\" class=\"table\">\n\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t<div class=\"col-auto ml-auto ms-auto\">\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<table class=\"table table-bordered table-striped table-responsive-sm\">\n\t\t\t\t\t<caption *ngIf=\"item.caption\">{{ item.caption }}</caption>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th *ngFor=\"let header of item.properties\">{{ header.description }}</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td *ngFor=\"let header of item.properties\" dndDropzone (dndDrop)=\"onDrop($event, header)\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveList\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{property: header}\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\n\t\t\t<div *ngSwitchCase=\"'structural-table'\" class=\"building-structure\">\n\t\t\t\t<div class=\"d-flex justify-content-end\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\n\t\t\t\t<table class=\"table table-bordered table-striped table-responsive-sm structural-table\">\n\t\t\t\t\t<caption *ngIf=\"item.caption\">{{ item.caption }}</caption>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th *ngFor=\"let header of item.properties\">{{ header.description }}</th>\n\t\t\t\t\t\t\t<th style=\"width: 1%;\"></th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr *ngFor=\"let row of range(item.length); index as rowIndex\">\n\t\t\t\t\t\t\t<td *ngFor=\"let column of item.properties; index as columnIndex; last as isLast\" dndDropzone\n\t\t\t\t\t\t\t\t(dndDrop)=\" onStructuralTableDrop($event, item, columnIndex, rowIndex)\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveList\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{property: column.properties[rowIndex]}\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"align-middle\">\n\t\t\t\t\t\t\t\t<div class=\"d-flex flex-nowrap\">\n\t\t\t\t\t\t\t\t\t<button (click)=\"removeRow(item, rowIndex)\" class=\"btn px-1 text-danger\"\n\t\t\t\t\t\t\t\t\t\t[title]=\"'REMOVE_ROW' | translate\">\n\t\t\t\t\t\t\t\t\t\t<i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t<button (click)=\"addRow(item, rowIndex)\" class=\"btn px-1\"\n\t\t\t\t\t\t\t\t\t\t[title]=\"'ADD_ROW_ABOVE' | translate\">\n\t\t\t\t\t\t\t\t\t\t<i class=\"fas fa-arrow-up text-muted\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t<button (click)=\"addRow(item, rowIndex + 1)\" class=\"btn px-1\"\n\t\t\t\t\t\t\t\t\t\t[title]=\"'ADD_ROW_BELOW' | translate\">\n\t\t\t\t\t\t\t\t\t\t<i class=\"fas fa-arrow-down text-muted\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\n\t\t\t\t<div class=\"d-flex flex-row-reverse\" style=\"border: none;\">\n\t\t\t\t\t<button type=\"button\" (click)=\"addRow(item, item.length)\" class=\"btn btn-sm\">\n\t\t\t\t\t\t<i class=\"fas fa-plus mr-2 me-2\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t{{ 'ADD' | translate }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div *ngSwitchCase=\"'tabs'\" class=\"tabs\">\n\t\t\t\t<ul class=\"nav nav-tabs mb-0\">\n\t\t\t\t\t<li *ngFor=\"let tab of item.properties; index as i\" class=\"nav-item\">\n\t\t\t\t\t\t<a class=\"nav-link\" href=\"javascript:{}\"\n\t\t\t\t\t\t\t[ngClass]=\"{'active': (!item.index && i ===  0) || item.index === i}\"\n\t\t\t\t\t\t\t(click)=\"tabClick(item, tab)\">\n\t\t\t\t\t\t\t<i *ngIf=\"tab.iconClass\" [ngClass]=\"tab.iconClass\" class=\"mr-2 me-2\"></i>\n\t\t\t\t\t\t\t{{ tab.description }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"nav-item ml-auto ms-auto\">\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t\t<div class=\"tab-content border border-top-0 p-4 mb-4\">\n\t\t\t\t\t<div dndDropzone (dndDrop)=\"onDrop($event, item.properties[item.index || 0])\">\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveList\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{property: item.properties[item.index || 0] || [] }\">\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<fieldset *ngSwitchCase=\"'fieldset'\" class=\"building-structure\">\n\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t<legend *ngIf=\"item.description\">{{ item.description }}</legend>\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t\t<div dndDropzone (dndDrop)=\"onDrop($event, item)\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveList\" [ngTemplateOutletContext]=\"{property: item }\">\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t</fieldset>\n\n\t\t\t<ng-container *ngSwitchCase=\"'input'\">\n\t\t\t\t<ng-container [ngSwitch]=\"item.format\">\n\t\t\t\t\t<div *ngSwitchCase=\"'checkbox'\" class=\"form-check input\">\n\t\t\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<input type=\"checkbox\" class=\"form-check-input\" [checked]=\"!!item.default\">\n\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t{{ item.description }}\n\t\t\t\t\t\t\t\t\t<sup *ngIf=\"item.required\" class=\"text-danger\">*</sup>\n\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"col-auto ml-auto ms-auto\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div *ngSwitchDefault class=\"mb-3 input\" [dndDisableIf]=\"disabled\" [dndDraggable]=\"item\"\n\t\t\t\t\t\tdndEffectAllowed=\"move\" (dndCopied)=\"onDragged(item, property.properties, 'copy')\"\n\t\t\t\t\t\t(dndMoved)=\"onDragged(item, property.properties, 'move')\">\n\t\t\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t\t\t<label *ngIf=\"item.description\" class=\"col\">{{ item.description }} <sup\n\t\t\t\t\t\t\t\t\t*ngIf=\"item.required\" class=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-auto ml-auto ms-auto\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input class=\"form-control\" [type]=\"item.format || 'string'\" [name]=\"item.key\"\n\t\t\t\t\t\t\t[placeholder]=\"item.placeholder || ''\" [required]=\"item.required\" [min]=\"item.minimun\"\n\t\t\t\t\t\t\t[max]=\"item.maximun\" [step]=\"item.step\" [value]=\"item.default || ''\" />\n\t\t\t\t\t</div>\n\t\t\t\t</ng-container>\n\t\t\t</ng-container>\n\n\t\t\t<ng-container *ngSwitchCase=\"'select'\">\n\t\t\t\t<ng-container [ngSwitch]=\"item.format\">\n\t\t\t\t\t<div *ngSwitchCase=\"'dropdown'\" class=\"mb-3\">\n\t\t\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t\t\t<label *ngIf=\"item.description\" class=\"col\">{{ item.description }}\n\t\t\t\t\t\t\t\t<sup *ngIf=\"item.required\" class=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-auto ml-auto ms-auto\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<select class=\"form-select\" [value]=\"item.default\" [required]=\"item.required\" [name]=\"item.key\"\n\t\t\t\t\t\t\t[multiple]=\"item.multiple || false\">\n\t\t\t\t\t\t\t<option *ngIf=\"item.placeholder\" [ngValue]=\"null\">{{ item.placeholder }}</option>\n\t\t\t\t\t\t\t<option *ngFor=\"let option of item.properties\" [value]=\"option.value\"\n\t\t\t\t\t\t\t\t[selected]=\"item.default == option.value\">{{ option.description }}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div *ngSwitchCase=\"'radio'\" class=\"mb-3\">\n\t\t\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t\t\t<label *ngIf=\"item.description\" class=\"col\">{{ item.description }}\n\t\t\t\t\t\t\t\t<sup *ngIf=\"item.required\" class=\"text-danger\">*</sup></label>\n\t\t\t\t\t\t\t<div class=\"col-auto ml-auto ms-auto\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"form-check\" *ngFor=\"let option of item.properties\">\n\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"radio\" [value]=\"option.value\" [name]=\"item.key\">\n\t\t\t\t\t\t\t<label class=\"form-check-label\">{{ option.description }}</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-container>\n\t\t\t</ng-container>\n\n\t\t\t<ng-container *ngSwitchCase=\"'textarea'\">\n\t\t\t\t<div class=\"d-flex mb-3\">\n\t\t\t\t\t<label *ngIf=\"item.description\" class=\"col\">{{ item.description }}\n\t\t\t\t\t\t<sup *ngIf=\"item.required\" class=\"text-danger\">*</sup></label>\n\t\t\t\t\t<div class=\"col-auto ml-auto ms-auto\">\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<textarea class=\"form-control\" [id]=\"item.key\" [rows]=\"item.rows || 4\" [cols]=\"item.cols || 0\"\n\t\t\t\t\t[value]=\"item.default || ''\" [placeholder]=\"item.placeholder\"\n\t\t\t\t\t[required]=\"item.required || false\"></textarea>\n\t\t\t</ng-container>\n\n\t\t\t<div *ngSwitchCase=\"'file'\" class=\"mb-3\">\n\t\t\t\t<div class=\"d-flex\">\n\t\t\t\t\t<label *ngIf=\"item.description\" class=\"col\">{{ item.description }}\n\t\t\t\t\t\t<sup *ngIf=\"item.required\" class=\"text-danger\">*</sup></label>\n\t\t\t\t\t<div class=\"col-auto ml-auto ms-auto\">\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<input type=\"file\" class=\"form-control-file\" [multiple]=\"item.multiple\">\n\t\t\t</div>\n\n\t\t\t<div *ngSwitchCase=\"'enriched-text'\" class=\"enriched-text\" [ngClass]=\"item.classList\">\n\t\t\t\t<div class=\"d-flex justify-content-end\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"buttonsTpt\" [ngTemplateOutletContext]=\"{item: item}\">\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t\t<div [innerHTML]=\"item.value\"></div>\n\t\t\t</div>\n\t\t</ng-container>\n\t</div>\n</ng-template>\n\n<ng-template #buttonsTpt let-item=\"item\">\n\t<span *ngIf=\"!disabled\" class=\"build-item_button-bar\">\n\t\t<button class=\"btn btn-link px-1 text-muted\" (click)=\"edit(item)\">\n\t\t\t<i class=\"fas fa-pencil-alt\" aria-hidden=\"true\"></i>\n\t\t</button>\n\t\t<button class=\"btn btn-link px-1 text-muted\" (click)=\"clone(item)\">\n\t\t\t<i class=\"fas fa-clone\" aria-hidden=\"true\"></i>\n\t\t</button>\n\t\t<button class=\"btn btn-link px-1 text-danger\" (click)=\"delete(item)\">\n\t\t\t<i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n\t\t</button>\n\t</span>\n</ng-template>\n\n<div class=\"dndDroppingTarget\" *ngIf=\"schema\" dndDropzone (dndDrop)=\"onDrop($event, schema)\">\n\t<ng-container [ngTemplateOutlet]=\"recursiveList\" [ngTemplateOutletContext]=\"{property: schema}\">\n\t</ng-container>\n</div>\n","import { Component, forwardRef, OnInit } from '@angular/core';\nimport { FormBuilder, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\n\n@Component({\n\tselector: 'ngx-form-builder-display-settings',\n\ttemplateUrl: './display-settings.component.html',\n\tstyleUrls: ['./display-settings.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DisplaySettingsComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class DisplaySettingsComponent implements OnInit {\n\n\tform = this._fb.group({\n\t\t'col': [12, Validators.required],\n\t\t'col-sm': [12, Validators.required],\n\t\t'col-md': [12, Validators.required],\n\t\t'col-lg': [12, Validators.required],\n\t\t'col-xl': [12, Validators.required],\n\t\t'offset': [0, Validators.required],\n\t\t'offset-sm': [0, Validators.required],\n\t\t'offset-md': [0, Validators.required],\n\t\t'offset-lg': [0, Validators.required],\n\t\t'offset-xl': [0, Validators.required],\n\t});\n\n\tcolumnSizes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'auto', 'equal'];\n\toffsetSizes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\n\tisDisabled: boolean;\n\n\tconstructor(\n\t\tprivate _fb: FormBuilder\n\t) { }\n\n\tngOnInit(): void {\n\t\tthis.form.valueChanges.subscribe((changes) => {\n\t\t\tconst value = this.form.value;\n\t\t\tObject.keys(value).forEach((k) => !value[k] && delete value[k]);\n\t\t\tthis.onChange(value);\n\t\t});\n\t}\n\n\tonChange = (_: any) => { };\n\tonTouch = () => { };\n\n\twriteValue(value: any = null): void {\n\t\tthis.form.patchValue(value || {});\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.isDisabled = isDisabled;\n\t\tthis.isDisabled ? this.form.disable() : this.form.enable();\n\t}\n\n}\n","<form [formGroup]=\"form\">\n\t<ul class=\"list-group list-group-flush\">\n\t\t<li class=\"list-group-item\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"col-2\">{{ 'SCREEN_SIZE' | translate }}</div>\n\t\t\t\t<div class=\"col-5\">{{ 'COLS' | translate }}</div>\n\t\t\t\t<div class=\"col-5\">{{ 'Offset' | translate }}</div>\n\t\t\t</div>\n\t\t</li>\n\t\t<li class=\"list-group-item\">\n\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t<label class=\"col-sm-2 col-form-label\">{{ 'XS' | translate }}XS</label>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"col\">\n\t\t\t\t\t\t<option *ngFor=\"let size of columnSizes\" [value]=\"size\">{{ size }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"offset\">\n\t\t\t\t\t\t<option *ngFor=\"let offset of offsetSizes\" [value]=\"offset\">{{ offset }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</li>\n\t\t<li class=\"list-group-item\">\n\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t<label class=\"col-sm-2 col-form-label\">{{ 'SM' | translate }}SM</label>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"col-sm\">\n\t\t\t\t\t\t<option *ngFor=\"let size of columnSizes\" [value]=\"size\">{{ size }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"offset-sm\">\n\t\t\t\t\t\t<option *ngFor=\"let offset of offsetSizes\" [value]=\"offset\">{{ offset }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</li>\n\t\t<li class=\"list-group-item\">\n\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t<label class=\"col-sm-2 col-form-label\">{{ 'MD' | translate }}</label>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"col-md\">\n\t\t\t\t\t\t<option *ngFor=\"let size of columnSizes\" [value]=\"size\">{{ size }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"offset-md\">\n\t\t\t\t\t\t<option *ngFor=\"let offset of offsetSizes\" [value]=\"offset\">{{ offset }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</li>\n\t\t<li class=\"list-group-item\">\n\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t<label class=\"col-sm-2 col-form-label\">{{ 'LG' | translate }}LG</label>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"col-lg\">\n\t\t\t\t\t\t<option *ngFor=\"let size of columnSizes\" [value]=\"size\">{{ size }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"offset-lg\">\n\t\t\t\t\t\t<option *ngFor=\"let offset of offsetSizes\" [value]=\"offset\">{{ offset }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</li>\n\t\t<li class=\"list-group-item\">\n\t\t\t<div class=\"mb-3 row\">\n\t\t\t\t<label class=\"col-sm-2 col-form-label\">{{ 'XL' | translate }}</label>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"col-xl\">\n\t\t\t\t\t\t<option *ngFor=\"let size of columnSizes\" [value]=\"size\">{{ size }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-sm-5\">\n\t\t\t\t\t<select class=\"form-select\" formControlName=\"offset-xl\">\n\t\t\t\t\t\t<option *ngFor=\"let offset of offsetSizes\" [value]=\"offset\">{{ offset }}</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</li>\n\t</ul>\n</form>\n<ng-template #optionsTpt>\n\t<option value=\"1\">1</option>\n\t<option value=\"2\">2</option>\n\t<option value=\"3\">3</option>\n\t<option value=\"4\">4</option>\n\t<option value=\"5\">5</option>\n\t<option value=\"6\">6</option>\n\t<option value=\"7\">7</option>\n\t<option value=\"8\">8</option>\n\t<option value=\"9\">9</option>\n\t<option value=\"10\">10</option>\n\t<option value=\"11\">11</option>\n\t<option value=\"12\">12</option>\n\t<option value=\"auto\">{{ 'Auto' | translate }}</option>\n\t<option value=\"equal\">{{ 'Equal' | translate }}</option>\n</ng-template>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilderComponent } from './components/form-builder/form-builder.component';\nimport { DndModule } from 'ngx-drag-drop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbModalModule, NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { FieldsetComponent } from './components/fieldset/fieldset.component';\nimport { InputComponent } from './components/input/input.component';\nimport { TextAreaComponent } from './components/text-area/text-area.component';\nimport { SelectComponent } from './components/select/select.component';\nimport { TableComponent } from './components/table/table.component';\nimport { TabsComponent } from './components/tabs/tabs.component';\nimport { FileComponent } from './components/file/file.component';\nimport { TriggersComponent } from './components/triggers/triggers.component';\nimport { EnrichedTextComponent } from './components/enriched-text/enriched-text.component';\nimport { DisplaySettingsComponent } from './components/display-settings/display-settings.component';\nimport { CKEditorModule } from '@ckeditor/ckeditor5-angular';\nimport { FormBuilderConfig } from './interfaces/FormBuilderConfig';\nimport { FormBuilderConfigService } from './services/form-builder-config.service';\nimport { FormBuilderService } from './services/form-builder.service';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ConfigPerRoleComponent } from './components/config-per-role/config-per-role.component';\nimport { StructuralTableComponent } from './components/structural-table/structural-table.component';\nimport { UcfirstPipe } from './pipes/ucfirst.pipe';\n\n@NgModule({\n\tdeclarations: [\n\t\tFormBuilderComponent,\n\t\tFieldsetComponent,\n\t\tInputComponent,\n\t\tTextAreaComponent,\n\t\tSelectComponent,\n\t\tTableComponent,\n\t\tTabsComponent,\n\t\tFileComponent,\n\t\tTriggersComponent,\n\t\tEnrichedTextComponent,\n\t\tDisplaySettingsComponent,\n\t\tConfigPerRoleComponent,\n\t\tStructuralTableComponent,\n\t\tUcfirstPipe\n\t],\n\timports: [\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\tCommonModule,\n\t\tDndModule,\n\t\tNgbModalModule,\n\t\tNgbModule,\n\t\tCKEditorModule,\n\t\tTranslateModule.forChild()\n\t],\n\texports: [\n\t\tFormBuilderComponent\n\t],\n\tentryComponents: [\n\t\tTabsComponent,\n\t\tFieldsetComponent,\n\t\tInputComponent,\n\t\tTextAreaComponent,\n\t\tSelectComponent,\n\t\tFileComponent,\n\t\tEnrichedTextComponent,\n\t\tDisplaySettingsComponent,\n\t\tConfigPerRoleComponent,\n\t\tStructuralTableComponent\n\t]\n})\n\nexport class FormBuilderModule {\n\tstatic forRoot(config?: FormBuilderConfig): ModuleWithProviders<FormBuilderModule> {\n\t\treturn {\n\t\t\tngModule: FormBuilderModule,\n\t\t\tproviders: [\n\t\t\t\tFormBuilderService,\n\t\t\t\t{\n\t\t\t\t\tprovide: FormBuilderConfigService,\n\t\t\t\t\tuseValue: config\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n}\n","// Modules\nexport { FormBuilderModule } from './form-builder.module';\n\n// Components\nexport { FormBuilderComponent } from './components/form-builder/form-builder.component';\nexport { EnrichedTextComponent } from './components/enriched-text/enriched-text.component';\nexport { FieldsetComponent } from './components/fieldset/fieldset.component';\nexport { FileComponent } from './components/file/file.component';\nexport { InputComponent } from './components/input/input.component';\nexport { SelectComponent } from './components/select/select.component';\nexport { TableComponent } from './components/table/table.component';\nexport { TabsComponent } from './components/tabs/tabs.component';\nexport { TextAreaComponent } from './components/text-area/text-area.component';\nexport { TriggersComponent } from './components/triggers/triggers.component';\nexport { DisplaySettingsComponent } from './components/display-settings/display-settings.component';\nexport { ConfigPerRoleComponent } from './components/config-per-role/config-per-role.component';\n\n// Services\nexport { FormBuilderConfig } from './interfaces/FormBuilderConfig';\n\n// Services\nexport { FormBuilderConfigService } from './services/form-builder-config.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["locale","i1","i2","i3.TranslationService","i4.FormBuilderService","i3","i4","i2.FormBuilderService","i5.UcfirstPipe","i1.TriggersComponent","i2.ConfigPerRoleComponent","i6","i7","esLang","enLang","i1.TranslationService","i3.FormBuilderService","i5"],"mappings":"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"}