bit-ng-library 13.1.10 → 13.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -2
- package/esm2020/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.mjs +20 -5
- package/esm2020/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.mjs +38 -3
- package/fesm2015/bit-ng-library.mjs +55 -6
- package/fesm2015/bit-ng-library.mjs.map +1 -1
- package/fesm2020/bit-ng-library.mjs +55 -6
- package/fesm2020/bit-ng-library.mjs.map +1 -1
- package/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.d.ts +1 -0
- package/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.d.ts.map +1 -1
- package/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.d.ts +2 -0
- package/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bit-ng-library.mjs","sources":["../../../projects/bit-ng-library/src/lib/base/components/base.component.ts","../../../projects/bit-ng-library/src/lib/base/shared/utils.ts","../../../projects/bit-ng-library/src/lib/base/shared/base.filter.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/global.constants.ts","../../../projects/bit-ng-library/src/lib/base/shared/base.service.ts","../../../projects/bit-ng-library/src/lib/base/models/base-list.models.ts","../../../projects/bit-ng-library/src/lib/base/models/base-form.models.ts","../../../projects/bit-ng-library/src/lib/base/models/base-sublist.models.ts","../../../projects/bit-ng-library/src/lib/base/models/types.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/focus.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/directives/focus-register.directive.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/directives/view-mode.directive.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/directives/edit-mode.directive.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/breadcrumb/bit-breadcrumb.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/ayudacontextual.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/ayuda.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/domain.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/general-utils.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/translate.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/custom-validators.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/error.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/message.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/http-utils.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/locator.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/session-shared.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/tableview.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/toolbar.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/upload.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/base-data.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/base-data-adapter.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/domain.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/contol-messages/bit-control-messages.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/bitmessage.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/dialog/bit-dialog.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/help/bit-help.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/footer/bit-footer.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/footer/bit-footer.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/misc/bit-boton-ayuda.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/other-actions.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/toolbar/bit-toolbar.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/toolbar/bit-toolbar.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/header/bit-header.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/header/bit-header.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/loading/bit-loading.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/notificacion/bit-notification-toast.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/notificacion/bit-notification-error.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/upload/bit-ng-upload.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/upload/bit-ng-upload.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/user/bit-user-controls.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/misc/bit-column-boolean.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/misc/bit-domain-value.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/capitalize.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/pipe-cantidadmoneda.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/remove-line-breaks.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-general.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/text/bit-text.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/text/bit-text.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/textarea/bit-textarea.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/textarea/bit-textarea.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-custom.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/calendar/bit-calendar.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/date/bit-date.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/date/bit-date.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/time/bit-time.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/time/bit-time.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/datetime/bit-datetime.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/datetime/bit-datetime.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/checkbox/bit-checkbox.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/checkbox/bit-checkbox.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/switch/bit-switch.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/switch/bit-switch.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/autocomplete/bit-autocomplete.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/autocomplete/bit-autocomplete.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-general-v2.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-general-v2.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/configuration-editor.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/editor/bit-editor.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/editor/bit-editor.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/readonly/bit-readonly.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/readonly/bit-readonly.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-editable.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/sharedlibrary.module.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-general.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/item.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/fichero.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/bitnotification.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/bitnotification-error.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/guards/candeactivate.guard.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/utils/custom-http-interceptor.ts","../../../projects/bit-ng-library/src/public-api.ts","../../../projects/bit-ng-library/src/bit-ng-library.ts"],"sourcesContent":["import { Subject } from \"rxjs\";\r\nimport { Directive } from \"@angular/core\";\r\n\r\n@Directive()\r\nexport abstract class BaseComponent {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","/**\r\n * Actualiza el elemento de la lista en caso de que exista en dicha lista, o lo inserta en caso de que no exista\r\n * @param element objeto que queremos actualizar o insertar en la lista\r\n * @param list lista de elementos\r\n */\r\nexport function upsertElement(element, list) {\r\n let find: boolean = false;\r\n if (!list) list = [];\r\n list.forEach((item, index) => {\r\n if (item.id == element.id) {\r\n list[index] = element;\r\n find = true;\r\n }\r\n });\r\n if (!find) {\r\n list.push(element);\r\n }\r\n return list;\r\n}\r\n\r\n/**\r\n * Elimina el elemento de la lista\r\n * @param element elemento a eliminar de la lista\r\n * @param list lista de elementos\r\n */\r\nexport function deleteElement(element, list) {\r\n return list.filter((item) => item.id != element.id);\r\n}\r\n\r\n/** Permite copiar las propiedades de un objeto exceptuando las propiedades indicadas en keys.\r\n * Util para obtener los valores del filtro exceptuando las propiedades pagina y resultados.\r\n * La copia se realiza mediante Object.assign por lo que hay que tenerlo en cuenta por temas de propiedades anidadas\r\n * @param obj objeto que queremos copiar\r\n * @param keys array de propiedades que no queremos copiar\r\n */\r\nexport function reject(obj, keys) {\r\n return Object.keys(obj)\r\n .filter((k) => !keys.includes(k))\r\n .map((k) => Object.assign({}, { [k]: obj[k] }))\r\n .reduce((res, o) => Object.assign(res, o), {});\r\n}\r\n\r\n/** Permite seleccionar las propiedades de un objeto indicadas en keys, excluyendo el resto.\r\n * La copia se realiza mediante Object.assign por lo que hay que tenerlo en cuenta por temas de propiedades anidadas\r\n * @param obj objeto que queremos copiar\r\n * @param keys array de propiedades que queremos copiar\r\n */\r\nexport function choose(obj, keys) {\r\n return Object.keys(obj)\r\n .filter((k) => keys.includes(k))\r\n .map((k) => Object.assign({}, { [k]: obj[k] }))\r\n .reduce((res, o) => Object.assign(res, o), {});\r\n}\r\n\r\n/**\r\n * Equivalente al Object.assign() pero realiza una copia profunda: tanto los atributos como los objetos anidados\r\n * Modifica el objeto target asignando los objetos pasados como parámetros\r\n * ejemplo: assign({a: \"a\", b: {id: \"b\"}, c: \"c\"},\r\n * {a: \"a2\", b: {id: \"b2\"}, d: \"d\"}) =>\r\n * {a: \"a2\", b: {id: \"b2\"}, c: \"c\", d: \"d\"}\r\n *\r\n * @param target objeto destino\r\n * @param sources objetos cuyas propiedades se leen para mergear en el objeto destino\r\n * @see https://stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge\r\n */\r\nexport function assign(target, ...sources) {\r\n const isObject = (obj) => obj && typeof obj === \"object\" && !Array.isArray(obj);\r\n\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (isObject(target) && isObject(source)) {\r\n for (const key in source) {\r\n if (isObject(source[key])) {\r\n if (!target[key]) target[key] = {};\r\n assign(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n\r\n return assign(target, ...sources);\r\n}\r\n\r\nexport function objectoToQueryParameters(params: {}): string {\r\n return Object.keys(params)\r\n .filter((key) => !!params[key])\r\n .map((key) => key + \"=\" + params[key])\r\n .join(\"&\");\r\n}\r\n/*\r\nVersión immutable:\r\n\r\nexport function assign(...objects) {\r\n const isObject = obj => obj && typeof obj === 'object';\r\n\r\n return objects.reduce((prev, obj) => {\r\n Object.keys(obj).forEach(key => {\r\n const pVal = prev[key];\r\n const oVal = obj[key];\r\n\r\n if (Array.isArray(pVal) && Array.isArray(oVal)) {\r\n prev[key] = pVal.concat(...oVal);\r\n }\r\n else if (isObject(pVal) && isObject(oVal)) {\r\n prev[key] = assign(pVal, oVal);\r\n }\r\n else {\r\n prev[key] = oVal;\r\n }\r\n });\r\n\r\n return prev;\r\n }, {});\r\n}*/\r\n","import { reject } from \"./utils\";\r\n\r\nexport const BASE_RESULTADOS_PAGE: number = 20;\r\n\r\n/**\r\n * Clase base que contiene lo mínimo necesario para almacenar un filtro de búsqueda.\r\n */\r\nexport abstract class BaseFilter {\r\n public static RESULTADOS_PAGE: number = BASE_RESULTADOS_PAGE;\r\n public static PAGE: number = 1;\r\n\r\n /*\r\n * Ejemplo de uso de columnasOrdenacion:\r\n\r\n public static newObject(): CustomFilter {\r\n let filter = new PlantillaFilter(null, CustomFilter.getDefaultOrder(), BaseFilter.RESULTADOS_PAGE, BaseFilter.PAGE);\r\n return filter;\r\n }\r\n\r\n public static getDefaultOrder(): string[] {\r\n return ['-nombre', 'id'];\r\n }\r\n */\r\n public columnasOrdenacion: string[];\r\n\r\n constructor(public resultados: number, public pagina: number) {}\r\n\r\n public reset() {\r\n this.resultados = BaseFilter.RESULTADOS_PAGE;\r\n this.pagina = BaseFilter.PAGE;\r\n }\r\n\r\n /**\r\n * Permite obtener los valores del filtro exceptuando las propiedades pagina y resultados. Útil para inicializar el FormGroup\r\n * con los valores del filtro sin traernos estas propiedades que no interesan que estén en el FormGroup\r\n */\r\n public formValues(): { [x: string]: any } {\r\n let values = reject(this, [\"pagina\", \"resultados\"]);\r\n return values;\r\n }\r\n\r\n public allValues(): { [x: string]: any } {\r\n return reject(this, []);\r\n }\r\n}\r\n\r\n//Funciones genéricas para poder filtrar elementos en el store con ngrxdata\r\n\r\nlet initPagination: number;\r\nlet endPagination: number;\r\n\r\n/**\r\n * Permite filtrar las entidades especificadas por parámetro pasándolas por la función innerFilterFn\r\n * además de la función paginationFn.\r\n * Parametros:\r\n * pattern: corresponde con el filtro especificado por el usuario pero representado en JSON\r\n * filter: corresponde con el objeto Filter que es una imagen de pattern pero como Objeto. En este objeto\r\n * tendremos la información de qué pagina y cuantos resultados tenemos que mostrar además de los campos\r\n * seleccionados por el usuario\r\n * innerFilterFn: función que dado una entidad y un filter, determina si la entidad casa o no con el filter\r\n * Return:\r\n * Esta función retorna una lista de entidades que casan con el filtro. En el caso de que patter sea null,\r\n * se retornan tal cual todas las entities\r\n */\r\nexport function baseFilterFn<T>(entities: T[], pattern: string, filter: BaseFilter, innerFilterFn: any) {\r\n console.log(\"pattern recibido\", pattern);\r\n if (pattern) {\r\n console.log(\"filtramos entidades con este filter\", filter);\r\n initPagination = (filter.pagina - 1) * filter.resultados;\r\n endPagination = initPagination + filter.resultados;\r\n console.log(`pagination init ${initPagination} end ${endPagination}`);\r\n return entities.filter(innerFilterFn).filter(paginationFn);\r\n } else {\r\n return entities;\r\n }\r\n}\r\n\r\n/** Función de paginación. Se determina si index, que es la posición actual del elemento a analizar de las entidades,\r\n * está entre initPagination (>=) y endPagination (< exclusivo).\r\n * initpagination y endPagination son variables globales en esta clase\r\n */\r\n/**TODO: Hay un problema con la paginación si el usuario salta por ejemplo de la página 1 a la página 3 sin pasar por la 2.\r\n * En ese caso, en el store tendremos 40 elementos cargados pero los 20 últimos al ser de la página 3 no entrarán en esta\r\n * función porque sus índices dentro del array de elementos no están entre la posición 40 y 60 si no entre la posición\r\n * 20 y 40. De momento no se me ha ocurrido una forma de solucionarlo y tampoco sé si tiene sentido que un usuario no avance\r\n * de página en página. Una posible solución es que si un usuario salta a una página remota pero en el store no tenemos\r\n * cargados los elementos de páginas anteriores, entonces el rango de carga a enviar al servidor debería ser más amplio\r\n * para cargar los elementos anteriores y que los índices cuadren. Así, si el usuario salta de la página 1 a la 3, entonces\r\n * al servidor le debemos pedir que nos cargue también la 2 junto a la 3 por lo que al servidor en el fondo debemos darle un rango\r\n * de elementos a cargar y no solo el número de página a cargar.\r\n * */\r\nfunction paginationFn(element, index, array) {\r\n // let init = filter.page * filter.results;\r\n // let end = init + filter.results;\r\n // console.log(`init ${init} end ${end} index ${index} entra ${index >= init && index < end}`);\r\n return index >= initPagination && index < endPagination;\r\n}\r\n","export enum FormType {\r\n Insert,\r\n Update,\r\n Select\r\n}\r\nexport enum PageStatus {\r\n Init,\r\n Searching,\r\n FinishSearch,\r\n Error,\r\n ReadOnly,\r\n Reset,\r\n EmptyResult\r\n}\r\n\r\nexport const entityDefaultDispatcherOptions: any = {\r\n optimisticAdd: false,\r\n optimisticSaveEntities: false,\r\n optimisticUpsert: false,\r\n optimisticUpdate: false, //para cambiar la forma en que se guarda y actualiza la UI. True -> actualizo el store, la UI sin esperar respuesta del servidor\r\n optimisticDelete: false\r\n};\r\n","import { Observable } from \"rxjs\";\r\n\r\nimport { BaseCRUDServiceInterface } from \"./base-interface.service\";\r\nimport { BaseFilter } from \"./base.filter\";\r\nimport { Item } from \"../../sharedlibrary/data/item\";\r\nimport { FormType } from \"../../sharedlibrary/global.constants\";\r\nimport { HttpUtilsService } from \"../../sharedlibrary/services/http-utils.service\";\r\nimport { BitMessageService } from \"../../sharedlibrary/services/message.service\";\r\n\r\n/**\r\n * Clase básica que implementa un CRUD.\r\n * Es recomendable que todos los servicios que implementan un CRUD extiendan esta clase\r\n * o implementen la interface BaseCRUDServiceInterface.\r\n */\r\nexport abstract class BaseCRUDService implements BaseCRUDServiceInterface {\r\n /** URL base del servicio CRUD. */\r\n protected baseUrl: string;\r\n\r\n constructor(protected bitMessageService: BitMessageService, protected http: HttpUtilsService) {}\r\n\r\n /** Inserta o modifica la información del elemento. */\r\n save<T>(object: Item, mode: FormType, params?: { [key: string]: string }): Observable<T> {\r\n if (mode == FormType.Insert) {\r\n let resolveUrl = this.resolveUrl(this.baseUrl, params);\r\n return this.http.getHttpPost<T>(resolveUrl, object);\r\n } else {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/\" + object.id, params);\r\n return this.http.getHttpPut<T>(resolveUrl, object);\r\n }\r\n }\r\n\r\n /** Inserta o modifica la información del elemento. */\r\n saveObject<T>(object: Item, params?: { [key: string]: string }): Observable<T> {\r\n return this.save<T>(object, object && object.id ? FormType.Update : FormType.Insert, params);\r\n }\r\n\r\n /** Elimina el elemento. */\r\n delete(id: Number, params?: { [key: string]: string }) {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/\" + id, params);\r\n return this.http.getHttpDelete(resolveUrl);\r\n }\r\n\r\n /** Elimina todos los elementos pasados por parámetro */\r\n deleteAll(items: number[], params?: { [key: string]: string }): Observable<any> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/delete\", params);\r\n return this.http.getHttpPost(resolveUrl, items);\r\n }\r\n\r\n /** Recupera la información del elemento. */\r\n get<T>(id: Number, params?: { [key: string]: string }): Observable<T> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/\" + id, params);\r\n return this.http.getHttpGet<T>(resolveUrl);\r\n }\r\n\r\n /** Recupera todos los elementos. */\r\n getAll<T>(params?: { [key: string]: string }): Observable<T> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl, params);\r\n return this.http.getHttpGet<T>(resolveUrl);\r\n }\r\n\r\n /** Recupera la lista (opcionalmente, filtrada y paginada) de elementos. */\r\n getAllByFilter<T>(filter: BaseFilter, params?: { [key: string]: string }): Observable<T> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/filter\", params);\r\n return this.http.getHttpPost<T>(resolveUrl, filter);\r\n }\r\n\r\n /** Recupera el número total de la lista (filtrada) de elementos. */\r\n countAllByFilter(filter: BaseFilter, params?: { [key: string]: string }): Observable<number> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/count\", params);\r\n return this.http.getHttpPost<number>(resolveUrl, filter);\r\n }\r\n\r\n /**\r\n * Construye la URL final en base a la plantilla y la colección de parámetros.\r\n * Si la clave de un parámetro forma parte de la URL, la reemplaza por su valor.\r\n * Si la clave de un parámetro no forma parte de la URL, se añadirá como parte del queryString.\r\n */\r\n resolveUrl(url: string, params: { [key: string]: string }): string {\r\n let queryParams: Array<string> = [];\r\n let newUrl = url;\r\n if (params) {\r\n for (let key in params)\r\n if (newUrl.indexOf(key) >= 0) {\r\n newUrl = newUrl.replace(key, params[key]);\r\n } else {\r\n queryParams.push(`${key}=${params[key]}`);\r\n }\r\n }\r\n if (queryParams.length > 0) {\r\n if (newUrl.indexOf(\"?\") < 0) {\r\n newUrl += \"?\" + queryParams.join(\"&\");\r\n } else {\r\n newUrl += \"&\" + queryParams.join(\"&\");\r\n }\r\n }\r\n return newUrl;\r\n }\r\n}\r\n","import { BaseFilter } from \"../shared/base.filter\";\r\nimport { PageStatus } from \"../../sharedlibrary/global.constants\";\r\nimport { FactoryCreateNewFilter } from \"./types\";\r\n\r\nexport interface BaseListState<T, F extends BaseFilter> {\r\n filter: F;\r\n items: T[];\r\n totalItems: number;\r\n toolbar: any;\r\n status: PageStatus;\r\n readOnly: boolean;\r\n}\r\n\r\nexport class BaseListAdapter<T, F extends BaseFilter> {\r\n /** \r\n * Retorna el estado inicial que debe tener el store. Se permite añadir más info a través del parámetro optional\r\n * en el caso de que el componente que extienda de esta clase necesite más datos o necesite modificar la forma en que se inicializan\r\n * las propiedades del store. Por ejemplo, podría interesar que la lista de items no partiera vacía si no con resultados. En ese caso\r\n * en optional se pasaría un objeto con la lista de items rellenada. { items: [obj1, obj2,...]}\r\n * makeFilter: función que sabe como construir un filtro de búsqueda\r\n * optional: objeto con propiedades adicionales para incluir en el store o propiedades modificadas a la forma en que se inicializan aquí.\r\n * Basicamente la inicialización será:\r\n * filter: makeFilter(),\r\n items: [],\r\n totalItems: 0,\r\n toolbar: botones de imprimir y exportar deshabilitados\r\n status: PageStatus.Init,\r\n readOnly: false\r\n */\r\n getInitialState<S extends BaseListState<T, F>>(makeFilter: FactoryCreateNewFilter<F>, optional?: any): S {\r\n const initialState = Object.assign(\r\n {\r\n filter: makeFilter(),\r\n items: [],\r\n totalItems: 0,\r\n toolbar: makeToolbarList(false, false),\r\n status: PageStatus.Init,\r\n readOnly: false\r\n },\r\n optional\r\n );\r\n return initialState;\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleLoadItems<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n const filter = payload;\r\n const status = PageStatus.Searching;\r\n return Object.assign({}, state, { filter, status });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el la lista de elementos cargados, el status de la página a Finish\r\n * y la toolbar\r\n * payload: array de elementos de tipo T\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleLoadItemsSuccess<S extends BaseListState<T, F>>(payload: T[], state: S): S {\r\n const items = payload;\r\n const status = PageStatus.FinishSearch;\r\n let toolbar = makeToolbarList(state.readOnly, items && items.length > 0);\r\n return Object.assign({}, state, {\r\n items,\r\n toolbar,\r\n status\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store la lista de elementos a vacía, el status de la página a Error\r\n * y la toolbar.\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleLoadItemsFail<S extends BaseListState<T, F>>(state: S): S {\r\n const status = PageStatus.Error;\r\n const toolbar = makeToolbarList(state.readOnly, false);\r\n const items = [];\r\n return Object.assign({}, state, {\r\n items,\r\n toolbar,\r\n status\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos que se pueden cargar con el filtro actual de búsqueda\r\n * totalItems: número total de elementos\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCount<S extends BaseListState<T, F>>(totalItems: number, state: S): S {\r\n return Object.assign({}, state, {\r\n totalItems\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos a 0\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCountItems<S extends BaseListState<T, F>>(state: S): S {\r\n return this.handleCount(0, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos que se pueden cargar con el filtro actual de búsqueda\r\n * payload: número total de elementos\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCountItemsSuccess<S extends BaseListState<T, F>>(payload: number, state: S): S {\r\n return this.handleCount(payload, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos a 0\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCountItemsFail<S extends BaseListState<T, F>>(state: S): S {\r\n return this.handleCount(0, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handlePage<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n const filter = payload;\r\n const status = PageStatus.Searching;\r\n return Object.assign({}, state, {\r\n filter,\r\n status\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * como consecuencia de una cambio de página en el footer\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handlePageChange<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n return this.handlePage(payload, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * como consecuencia de una cambio del tamaño del número de elementos en el footer\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleNewPageSizeChange<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n return this.handlePage(payload, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleResetFilter<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n const filter = payload;\r\n return Object.assign({}, state, {\r\n filter\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store la toolbar para setearla a modo readonly (sin botón new)\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleListReadOnly<S extends BaseListState<T, F>>(payload: boolean, state: S): S {\r\n return Object.assign({}, state, {\r\n readOnly: payload,\r\n toolbar: makeToolbarList(payload, state.items.length > 0)\r\n });\r\n }\r\n\r\n /**\r\n * Retorna una colección de funciones para acceder a cada una de las propiedades del store\r\n * return retorna el siguiente objeto\r\n * {\r\n * getItems: (state: BaseListState<T, F>) => state.items,\r\n * getStatus: (state: BaseListState<T, F>) => state.status,\r\n * getFilter: (state: BaseListState<T, F>) => state.filter,\r\n * getToolbar: (state: BaseListState<T, F>) => state.toolbar,\r\n * getTotalItems: (state: BaseListState<T, F>) => state.totalItems\r\n * }\r\n */\r\n getSelectors(): BaseListSelectors<T, F> {\r\n return {\r\n getItems: (state: BaseListState<T, F>) => state.items,\r\n getStatus: (state: BaseListState<T, F>) => state.status,\r\n getFilter: (state: BaseListState<T, F>) => state.filter,\r\n getToolbar: (state: BaseListState<T, F>) => state.toolbar,\r\n getTotalItems: (state: BaseListState<T, F>) => state.totalItems\r\n };\r\n }\r\n}\r\n\r\nexport function makeToolbarList(readOnly: boolean, enable: boolean): any {\r\n let toolbar = {\r\n print: { enable: enable, visible: true },\r\n export: { enable: enable, visible: true }\r\n };\r\n if (!readOnly) {\r\n toolbar[\"new\"] = { enable: true, visible: true, estilo: \"fa fa-database\" };\r\n }\r\n return toolbar;\r\n}\r\n\r\n/** Función para crear un objeto de tipo BaseListAdapter */\r\nexport function createBaseListAdapter<T, F extends BaseFilter>(): BaseListAdapter<T, F> {\r\n return new BaseListAdapter();\r\n}\r\n\r\nexport declare type BaseListSelectors<T, F extends BaseFilter> = {\r\n getItems: (state: BaseListState<T, F>) => T[];\r\n getStatus: (state: BaseListState<T, F>) => PageStatus;\r\n getFilter: (state: BaseListState<T, F>) => F;\r\n getToolbar: (state: BaseListState<T, F>) => any;\r\n getTotalItems: (state: BaseListState<T, F>) => number;\r\n};\r\n","import { PageStatus, FormType } from \"../../sharedlibrary/global.constants\";\r\nimport { FactoryCreateNewObject, FactoryCreateToolbar } from \"./types\";\r\n\r\nexport interface BaseFormState<T> {\r\n item: T;\r\n toolbar: any;\r\n status: PageStatus;\r\n readOnly: boolean;\r\n formType: FormType;\r\n currentTab: number;\r\n loaded: boolean;\r\n updated: boolean;\r\n}\r\n\r\nexport class BaseFormAdapter<T> {\r\n constructor(protected fnCreateObject: FactoryCreateNewObject<T>, protected fnGetToolbarObjectLoaded?: FactoryCreateToolbar<T>) {}\r\n\r\n getInitialState<S extends BaseFormState<T>>(optional?: any): S {\r\n const initialState = Object.assign(\r\n {\r\n item: this.fnCreateObject(),\r\n toolbar: this.initToolbar(),\r\n status: PageStatus.Init,\r\n readOnly: false,\r\n formType: FormType.Insert,\r\n currentTab: 0,\r\n loaded: false,\r\n updated: false\r\n },\r\n optional\r\n );\r\n return initialState;\r\n }\r\n\r\n handleCreateObject<S extends BaseFormState<T>>(state: S): S {\r\n const item = this.fnCreateObject();\r\n const status = PageStatus.Init;\r\n const toolbar = this.initToolbar();\r\n const formType = FormType.Insert;\r\n return Object.assign({}, state, {\r\n item,\r\n status,\r\n toolbar,\r\n formType\r\n });\r\n }\r\n\r\n handleLoadObject<S extends BaseFormState<T>>(state: S): S {\r\n const status = PageStatus.Searching;\r\n const loaded = false;\r\n return Object.assign({}, state, { status, loaded });\r\n }\r\n\r\n handleLoadObjectSuccess<S extends BaseFormState<T>>(payload: T, state: S): S {\r\n const item = payload;\r\n const status = PageStatus.Init;\r\n const loaded = true;\r\n let toolbar;\r\n let formType;\r\n toolbar = this.fnGetToolbarObjectLoaded(item);\r\n formType = FormType.Update;\r\n return Object.assign({}, state, {\r\n item,\r\n status,\r\n toolbar,\r\n formType,\r\n loaded\r\n });\r\n }\r\n\r\n handleSaveObject<S extends BaseFormState<T>>(state: S): S {\r\n const updated = false;\r\n return Object.assign({}, state, { updated });\r\n }\r\n\r\n handleSaveObjectSuccess<S extends BaseFormState<T>>(payload: T, state: S): S {\r\n const item = payload;\r\n let toolbar = this.fnGetToolbarObjectLoaded(item);\r\n const formType = FormType.Update;\r\n const status = PageStatus.FinishSearch;\r\n const updated = true;\r\n return Object.assign({}, state, { item, formType, status, updated, toolbar });\r\n }\r\n\r\n handleSaveObjectFail<S extends BaseFormState<T>>(state: S): S {\r\n const status = PageStatus.Error;\r\n const updated = false;\r\n return Object.assign({}, state, { status, updated });\r\n }\r\n\r\n handleSetFormReadOnly<S extends BaseFormState<T>>(payload: boolean, state: S): S {\r\n const readOnly = payload;\r\n return Object.assign({}, state, { readOnly });\r\n }\r\n\r\n getSelectors(): BaseFormSelectors<T> {\r\n return {\r\n getItem: (state: BaseFormState<T>) => state.item,\r\n getToolbar: (state: BaseFormState<T>) => (state.readOnly ? {} : state.toolbar),\r\n getStatus: (state: BaseFormState<T>) => state.status,\r\n getFormType: (state: BaseFormState<T>) => state.formType,\r\n getCurrentTab: (state: BaseFormState<T>) => state.currentTab,\r\n getReadOnly: (state: BaseFormState<T>) => state.readOnly,\r\n getLoaded: (state: BaseFormState<T>) => state.loaded,\r\n getUpdated: (state: BaseFormState<T>) => state.updated\r\n };\r\n }\r\n\r\n initToolbar() {\r\n return getInitToolbar();\r\n }\r\n}\r\n\r\nexport function createBaseFormAdapter<T>(fnCreateObject: FactoryCreateNewObject<T>, fnGetToolbarObjectLoaded?: FactoryCreateToolbar<T>): BaseFormAdapter<T> {\r\n return new BaseFormAdapter(fnCreateObject, fnGetToolbarObjectLoaded ? fnGetToolbarObjectLoaded : getToolbarObjectLoadedDefault);\r\n}\r\n\r\nexport function getInitToolbar() {\r\n return {\r\n //mínimos toolbar de un formulario\r\n save: { visible: true, enable: true },\r\n delete: { visible: false, enable: true },\r\n print: { visible: false, enable: false }\r\n };\r\n}\r\n\r\nexport function getToolbarObjectLoadedDefault() {\r\n return {\r\n save: { visible: true, enable: true },\r\n delete: { visible: true, enable: true },\r\n print: { visible: true, enable: true }\r\n };\r\n}\r\n\r\nexport declare type BaseFormSelectors<T> = {\r\n getItem: (state: BaseFormState<T>) => T;\r\n getToolbar: (state: BaseFormState<T>) => any;\r\n getStatus: (state: BaseFormState<T>) => PageStatus;\r\n getFormType: (state: BaseFormState<T>) => FormType;\r\n getCurrentTab: (state: BaseFormState<T>) => number;\r\n getReadOnly: (state: BaseFormState<T>) => boolean;\r\n getLoaded: (state: BaseFormState<T>) => boolean;\r\n getUpdated: (state: BaseFormState<T>) => boolean;\r\n};\r\n\r\n// Construye una toolbar para un formulario en función del tip de formulario y de si el botón de guardar debe estar activo\r\nexport function makeToolbarForm(formType: FormType, saveEnable: boolean): any {\r\n switch (formType) {\r\n case FormType.Select:\r\n return { print: { visible: true, enable: true } };\r\n case FormType.Insert:\r\n return {\r\n save: { visible: true, enable: saveEnable },\r\n delete: { visible: false, enable: true },\r\n print: { visible: false, enable: false }\r\n };\r\n case FormType.Update:\r\n return {\r\n save: { visible: true, enable: saveEnable },\r\n delete: { visible: true, enable: true },\r\n print: { visible: true, enable: true }\r\n };\r\n default:\r\n return {};\r\n }\r\n}\r\n","import { EntityState, EntityAdapter, createEntityAdapter, Dictionary } from \"@ngrx/entity\";\r\n\r\nimport { FormType } from \"../../sharedlibrary/global.constants\";\r\n\r\nimport { FactoryCreateNewObject } from \"./types\";\r\n\r\nexport interface BaseChildListState<T> extends EntityState<T> {\r\n toolbar: any;\r\n modeInnerForm: FormType; //modo de edición del formulario: Insert, Update\r\n itemSelected: T; //elemento que debe mostrarse en el formulario interno\r\n displayInnerForm: boolean; //cuando debe verse el formulario interno del componente\r\n itemsSelected: number[]; //elementos seleccionados del listado mediante sus checks respectivos\r\n}\r\n\r\nexport class BaseChildListAdapter<T> {\r\n private adapter: EntityAdapter<T>;\r\n\r\n constructor(args?: any) {\r\n this.adapter = createEntityAdapter<T>(args);\r\n }\r\n\r\n getInitialState<S extends BaseChildListState<T>>(makeItem: FactoryCreateNewObject<T>, optional?: any): S {\r\n const initialState = Object.assign(\r\n {\r\n toolbar: makeToolbarChildList(false),\r\n modeInnerForm: FormType.Insert,\r\n itemSelected: makeItem(),\r\n displayInnerForm: false,\r\n itemsSelected: []\r\n },\r\n optional\r\n );\r\n return this.adapter.getInitialState(initialState);\r\n }\r\n\r\n handleLoadSucces<S extends BaseChildListState<T>>(payload: T[], state: S): S {\r\n return this.adapter.setAll(payload, state);\r\n }\r\n\r\n handleCloseForm<S extends BaseChildListState<T>>(state: S): S {\r\n const displayInnerForm = false;\r\n return Object.assign({}, state, {\r\n displayInnerForm\r\n });\r\n }\r\n\r\n handleShowForm<S extends BaseChildListState<T>>(payload: T, formType: FormType, state: S): S {\r\n const displayInnerForm = true;\r\n const modeInnerForm = formType;\r\n const itemSelected = payload;\r\n return Object.assign({}, state, {\r\n displayInnerForm,\r\n modeInnerForm,\r\n itemSelected\r\n });\r\n }\r\n\r\n handleItemsSelected<S extends BaseChildListState<T>>(payload: number[], state: S): S {\r\n let toolbar;\r\n if (payload && payload.length > 0) {\r\n toolbar = makeToolbarChildList(true);\r\n } else {\r\n toolbar = makeToolbarChildList(false);\r\n }\r\n const itemsSelected = payload;\r\n return Object.assign({}, state, {\r\n toolbar,\r\n itemsSelected\r\n });\r\n }\r\n\r\n handleSaveItem<S extends BaseChildListState<T>>(payload: T, state: S): S {\r\n const displayInnerForm = false;\r\n const newState = this.adapter.upsertOne(payload, state);\r\n return Object.assign({}, newState, {\r\n displayInnerForm\r\n });\r\n }\r\n\r\n handleDeleteItems<S extends BaseChildListState<T>>(payload: number[], state: S): S {\r\n const displayInnerForm = false;\r\n const toolbar = makeToolbarChildList(false);\r\n const itemsSelected = [];\r\n const newState = this.adapter.removeMany(payload, state);\r\n return Object.assign({}, newState, {\r\n displayInnerForm,\r\n toolbar,\r\n itemsSelected\r\n });\r\n }\r\n\r\n getEntityAdapter() {\r\n return this.adapter;\r\n }\r\n\r\n getEntityAdapterSelectors() {\r\n return this.adapter.getSelectors();\r\n }\r\n\r\n getSelectors(): BaseChildListSelectors<T> {\r\n return {\r\n getToolbar: (state: BaseChildListState<T>) => state.toolbar,\r\n getModelInnerForm: (state: BaseChildListState<T>) => state.modeInnerForm,\r\n getItemSelected: (state: BaseChildListState<T>) => state.itemSelected,\r\n getDisplayInnerForm: (state: BaseChildListState<T>) => state.displayInnerForm,\r\n getItemsSelected: (state: BaseChildListState<T>) => state.itemsSelected\r\n };\r\n }\r\n}\r\n\r\nexport function createBaseChildListAdapter<T>(): BaseChildListAdapter<T> {\r\n return new BaseChildListAdapter();\r\n}\r\n\r\nexport function makeToolbarChildList(enableDelete: boolean) {\r\n return {\r\n new: { enable: true, visible: true },\r\n delete: { enable: enableDelete, visible: enableDelete }\r\n };\r\n}\r\n\r\nexport declare type BaseChildListSelectors<T> = {\r\n getToolbar: (state: BaseChildListState<T>) => any;\r\n getModelInnerForm: (state: BaseChildListState<T>) => FormType;\r\n getItemSelected: (state: BaseChildListState<T>) => T;\r\n getDisplayInnerForm: (state: BaseChildListState<T>) => boolean;\r\n getItemsSelected: (state: BaseChildListState<T>) => number[];\r\n};\r\n","import { Action } from \"@ngrx/store\";\r\n\r\nexport type FactoryCreateAction = (type: string, payload?: any) => Action;\r\nexport type FactoryCreateNewObject<T> = (data?: any) => T;\r\nexport type FactoryCreateNewFilter<F> = () => F;\r\nexport type FactoryCreateNewFilterFromFilter<F> = (F) => F;\r\nexport type FactoryCopyObject<T> = (T) => T;\r\nexport type FactoryCreateToolbar<T> = (T) => any;\r\nexport type TranslatedMessage = { code: string; context?: string; params?: {} };\r\nexport type ErrorValidateForm = { prefixes: string[]; errorMessage: TranslatedMessage };\r\n\r\nexport enum GENERIC_TYPE {\r\n GO_FORM = \"[Models] Go Form\",\r\n GO_LIST = \"[Models] Go List\",\r\n LOAD_ITEMS = \"[Models] Load Items\",\r\n SAVE_ITEM = \"[Models] Save item\",\r\n INSERT_ITEM = \"[Models] Insert item\",\r\n UPDATE_ITEM = \"[Models] Update item\",\r\n DELETE_ITEM = \"[Models] Delete Item\",\r\n DELETE_ITEMS = \"[Models] Delete Items\",\r\n SHOW_ITEM_FOR_UPDATE = \"[Models] Show item for update\",\r\n SHOW_ITEM_FOR_INSERT = \"[Models] Show item for insert\",\r\n ITEMS_SELECTED = \"[Models] items selected\",\r\n CLOSE_ITEM = \"[Models] Close item\",\r\n NEW_PAGE_SIZE = \"[Modles] New Page Size\",\r\n PAGE_CHANGE = \"[Modles] Page Change\",\r\n RESET_FILTER = \"[Modles] Reset Filter\"\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n/**\r\n * FocusService almacena el campo/elemento que actualmente tiene el foco del usuario.\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class FocusService {\r\n // El campo/elemento con el foco\r\n private focused: string = \"none\";\r\n\r\n focus(id: string): void {\r\n //console.log(`focus on ${id}`);\r\n this.focused = id;\r\n }\r\n\r\n clear(): void {\r\n //console.log('clear focus');\r\n this.focused = undefined;\r\n }\r\n\r\n getFocusedElement(): string {\r\n //console.log(`returning focus on ${this.focused}`);\r\n return this.focused;\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener, Renderer2 } from \"@angular/core\";\r\n\r\nimport { FocusService } from \"../services/focus.service\";\r\n\r\n@Directive({\r\n selector: \"input,select,textarea,bit-input,bit-select\" //TODO: no funciona bien con autoComplete. No se registra el focus\r\n})\r\nexport class FocusRegisterDirective {\r\n constructor(private elRef: ElementRef, private renderer: Renderer2, private focusService: FocusService) {}\r\n\r\n @HostListener(\"focus\") onFocus() {\r\n this.focusService.focus(this.elRef.nativeElement.id);\r\n }\r\n\r\n @HostListener(\"blur\") onBlur() {\r\n this.focusService.clear();\r\n }\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[viewMode]\"\r\n})\r\nexport class ViewModeDirective {\r\n constructor(public tpl: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[editMode]\"\r\n})\r\nexport class EditModeDirective {\r\n constructor(public tpl: TemplateRef<any>) {}\r\n}\r\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n/**\r\n * Componenente que muestra la miga de pan en función de los datos de entrada. Estos datos corresponden con\r\n * un array de objetos que tendrán tres campos: label, url y params. El label debe ser obligatorio y corresponde con la\r\n * información en pantalla a mostrar. La url y params son opcionales y correposnden con la dirección a la que el usuario podrá ir\r\n * si pulsa en ella.\r\n * Ejemplos: [\r\n * {label: 'Desenvolupament', url: 'developer/exceptions'},\r\n * {label: 'Log'},\r\n * {label: 'Usuaris', url: 'mantenimiento/users', params: {query: 'true'}}\r\n * ]\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-breadcrumb\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <ul class=\"breadcrumb\">\r\n <li [class.active]=\"i == bc.length - 1\" *ngFor=\"let path of bc; let i = index\">\r\n <a class=\"breadcrumb-item\" *ngIf=\"i < bc.length - 1 && path.url\" (click)=\"goAddress(path)\" href=\"#\">{{ \"breadcrumb.\" + path.label | transloco }}</a>\r\n <span class=\"breadcrumb-item active\" *ngIf=\"i == bc.length - 1 || !path.url\">{{ \"breadcrumb.\" + path.label | transloco }}</span>\r\n </li>\r\n </ul>\r\n `\r\n //styleUrls: [\"bit-breadcrumb.component.css\"]\r\n})\r\nexport class BitBreadCrumbComponent implements OnInit {\r\n @Input(\"breadcrumb\") bc: any[];\r\n\r\n constructor(protected router: Router) {}\r\n\r\n /** Comprobamos si los datos de entrada no están definidos para inicializarlos en blanco */\r\n ngOnInit(): void {\r\n if (this.bc == undefined) this.bc = [];\r\n if (this.bc.length == 0) this.bc.push({ label: \" \" });\r\n }\r\n\r\n /** Vamos a la URL que contenga el path */\r\n goAddress(path: any) {\r\n if (path.params) {\r\n this.router.navigate([path.url, path.params]);\r\n } else {\r\n this.router.navigate([path.url]);\r\n }\r\n return false; //para evitar que navegue al href=\"#\"\r\n }\r\n}\r\n","export class AyudaContextual {\r\n constructor(public key: string, public header: string, public title: string, public body: string) {}\r\n\r\n public static newObject(obj): AyudaContextual {\r\n return new AyudaContextual(obj.key, obj.header || obj.title, obj.title || obj.header, obj.body);\r\n }\r\n}\r\n","import { Injectable, EventEmitter } from \"@angular/core\";\r\n\r\nimport { AyudaContextual } from \"../data/ayudacontextual\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class AyudaService {\r\n public mostrar: EventEmitter<AyudaContextual> = new EventEmitter<AyudaContextual>();\r\n\r\n public static AYUDAS = []; // Inicializar desde la aplicacion cliente\r\n\r\n protected mapaAyudas: Map<string, AyudaContextual>; // mapa de ayudas contextuales del sistema\r\n\r\n constructor() {\r\n this.loadAyudas();\r\n }\r\n\r\n // procesa el fichero app.ayudas.json y crea el mapa para acceder luego directamente por clave\r\n private loadAyudas() {\r\n this.mapaAyudas = new Map<string, AyudaContextual>();\r\n if (AyudaService.AYUDAS) {\r\n AyudaService.AYUDAS.forEach(elem => {\r\n this.mapaAyudas.set(elem.key, AyudaContextual.newObject(elem));\r\n });\r\n console.log(`Cargadas ${this.mapaAyudas.size} ayudas contextuales`);\r\n } else {\r\n console.warn(\"No se han podido cargar las ayudas contextuales de la aplicacion.\");\r\n }\r\n }\r\n\r\n mostrarAyuda(key: string) {\r\n if (this.mapaAyudas.has(key)) {\r\n this.mostrar.emit(this.mapaAyudas.get(key));\r\n } else {\r\n console.warn(`No existe ayuda para la clave [${key}]`);\r\n }\r\n }\r\n}\r\n","export class Domain {\r\n public static DUMMY: Domain = new Domain(null, \"Qualsevol\", false);\r\n constructor(public value: string, public label: string, public disabled?: boolean) {}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport moment from \"moment\";\r\nimport { Subject } from \"rxjs\";\r\nimport { UrlSegment } from \"@angular/router\";\r\nimport { Domain } from \"../data/domain\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class GeneralUtils {\r\n public static FORMAT_SHORT_DATE = \"DD/MM/YYYY\";\r\n public static FORMAT_LONG_DATE = \"DD/MM/YYYY HH:mm\";\r\n public static FORMAT_SHORT_TIME = \"HH:mm\";\r\n public static FORMAT_SHORT_SECONDS_TIME = \"HH:mm:ss\";\r\n private observableLoadingSource = new Subject<string>();\r\n public observableLoading;\r\n\r\n constructor() {\r\n console.log(\"GeneralUtils constructor\");\r\n this.observableLoading = this.observableLoadingSource.asObservable();\r\n }\r\n\r\n public startLoading(): void {\r\n this.observableLoadingSource.next(\"start\");\r\n }\r\n\r\n public stopLoading(): void {\r\n this.observableLoadingSource.next(\"stop\");\r\n }\r\n\r\n public static capitalizeFirstLetter(cad: string): string {\r\n return cad && cad.charAt(0).toUpperCase() + cad.slice(1);\r\n }\r\n\r\n public static getTwoDigits(digit: number): string {\r\n if (digit < 10) {\r\n return \"0\" + digit;\r\n } else {\r\n return \"\" + digit;\r\n }\r\n }\r\n\r\n public static getPathFromURL(segments: UrlSegment[]): string {\r\n let path = \"\";\r\n for (let seg of segments) {\r\n path += seg.path;\r\n path += \"/\";\r\n }\r\n return path;\r\n }\r\n\r\n /** Transforma el objeto en un objeto FormData para enviar como un multipart*/\r\n public static objectToFormData(object: Object) {\r\n let formData: any = new FormData();\r\n Object.keys(object).map((k) => {\r\n if (Array.isArray(object[k])) {\r\n for (let fileItem of object[k]) {\r\n formData.append(k, fileItem);\r\n }\r\n } else {\r\n formData.append(k, object[k]);\r\n }\r\n });\r\n return formData;\r\n }\r\n\r\n public static buildNombreCompleto(obj: any): string {\r\n let str = \"\";\r\n if (obj.nombre) str += obj.nombre;\r\n if (obj.apellido1) str += (str.length > 0 ? \" \" : \"\") + obj.apellido1;\r\n if (obj.apellido2) str += (str.length > 0 ? \" \" : \"\") + obj.apellido2;\r\n return str;\r\n }\r\n\r\n public static getTodayAsString(format: string = GeneralUtils.FORMAT_SHORT_DATE): string {\r\n return moment(new Date()).format(format);\r\n }\r\n\r\n public static getDateAsString(fecha: Date, format: string = GeneralUtils.FORMAT_SHORT_DATE): string {\r\n return moment(fecha).format(format);\r\n }\r\n\r\n public static getStringAsDate(fecha: string, format: string = GeneralUtils.FORMAT_SHORT_DATE): Date {\r\n return moment(fecha, format).toDate();\r\n }\r\n\r\n public static getDateTimeAsString(fecha: Date, format: string = GeneralUtils.FORMAT_LONG_DATE): string {\r\n return moment(fecha).format(format);\r\n }\r\n\r\n public static getTimeAsString(fecha: Date, format: string = GeneralUtils.FORMAT_SHORT_TIME): string {\r\n return moment(fecha).format(format);\r\n }\r\n\r\n public static stringToDate(fString: string): Date {\r\n return moment(fString).toDate();\r\n }\r\n\r\n public static stringShortToDate(fString: string): Date {\r\n return moment(fString, \"DD/MM/YYYY\").toDate();\r\n }\r\n\r\n public static stringToTime(tString: string): Date {\r\n return moment(tString, \"HH:mm\").toDate();\r\n }\r\n\r\n public static getTimeFromDateString(fecha: string): string {\r\n return moment(fecha).format(GeneralUtils.FORMAT_SHORT_TIME);\r\n }\r\n\r\n public static getWithDaysOffset(offset: number = 0): string {\r\n return moment().add(offset, \"days\").format(GeneralUtils.FORMAT_SHORT_DATE);\r\n }\r\n\r\n public static getFirstDayOfCurrentMonth(): string {\r\n return moment().startOf(\"month\").format(GeneralUtils.FORMAT_SHORT_DATE);\r\n }\r\n\r\n public static getLastDayOfCurrentMonth(): string {\r\n return moment().endOf(\"month\").format(GeneralUtils.FORMAT_SHORT_DATE);\r\n }\r\n\r\n public static fechaInicioDespuesIgualFechaFin(fechaInicio: string, fechaFin: string): boolean {\r\n if (fechaInicio && fechaFin) {\r\n return GeneralUtils.stringShortToDate(fechaInicio) > GeneralUtils.stringShortToDate(fechaFin);\r\n }\r\n return false;\r\n }\r\n\r\n public static horaInicioDespuesHoraFin(horaInicio: string, horaFin: string): boolean {\r\n if (horaInicio && horaFin) {\r\n return GeneralUtils.stringToTime(horaInicio) > GeneralUtils.stringToTime(horaFin);\r\n }\r\n return false;\r\n }\r\n\r\n public static fechaEnRango(fecha: string, fechaInicio: string, fechaFin: string): boolean {\r\n if (fecha) {\r\n let fechaDate = GeneralUtils.stringShortToDate(fecha);\r\n let output = !(\r\n (fechaInicio && fechaDate < GeneralUtils.stringShortToDate(fechaInicio)) ||\r\n (fechaFin && fechaDate > GeneralUtils.stringShortToDate(fechaFin))\r\n );\r\n return output;\r\n }\r\n return false;\r\n }\r\n\r\n public static addOpcionVacia(lista: any[], texto?: string) {\r\n let nLista = lista.slice();\r\n nLista.unshift(new Domain(null, texto ? texto : \"\"));\r\n return nLista;\r\n }\r\n\r\n public static getOptionText(list: Domain[], id: number): string {\r\n for (let d of list) {\r\n if (+d.value == id) {\r\n return d.label;\r\n }\r\n }\r\n return \"-\";\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { TranslocoService, TranslateParams, HashMap, TranslocoScope } from \"@ngneat/transloco\";\r\nimport { Observable, BehaviorSubject } from \"rxjs\";\r\n\r\nimport { TranslatedMessage } from \"../../base/models/types\";\r\n\r\n/**\r\n * Construye un objeto TranslatedMessage con información para que el receptor pueda traducir el mensaje según\r\n * el idioma especificado\r\n * @param code código dentro del fichero json para traducir el mensaje\r\n * @param context contexto de traducción que permitirár localizar el fichero json\r\n * @param params Hashmap de tipo nombre propiedad, valor que permitirá customizar el mensaje a traducir\r\n */\r\nexport function buildTranslatedMessage(code: string, context: string, params?: {}): TranslatedMessage {\r\n let translatedMessage: any = { code: code, context, params: params };\r\n return translatedMessage;\r\n}\r\n\r\n/** wrapper al servicio de traducción de textos */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class TranslateService {\r\n private langChangeSubject: BehaviorSubject<string>;\r\n langChanged$: Observable<string>;\r\n\r\n constructor(private translocoService: TranslocoService, @Inject(\"DEFAULT_LANGUAGE\") private defaultLanguage = \"es\") {\r\n //para suscribirnos a cambios de idioma y emitimos un primer valor que es el idioma en curso\r\n console.log(\"default language\", this.defaultLanguage);\r\n this.langChangeSubject = new BehaviorSubject<string>(this.defaultLanguage);\r\n this.langChanged$ = this.langChangeSubject.asObservable(); //.pipe(startWith(this.getActiveLang()));\r\n }\r\n\r\n /** Permite traducir un texto cuya clave tiene incluida el contexto en la propia key. Se entiende que el prefijo antes\r\n * del primer punto representará el contexto y el resto representará la clave que podrá ser compuesta:\r\n * Ejemplo: contexto.grupo.subgrupo.clave\r\n */\r\n selectTranslateWithContext(key: string) {\r\n let point = key.indexOf(\".\");\r\n let context = \"\";\r\n if (point != -1) {\r\n context = key.substring(0, point);\r\n key = key.substring(point + 1, key.length);\r\n }\r\n return this.selectTranslate(key, null, context);\r\n }\r\n\r\n selectTranslate(key: TranslateParams, params?: HashMap, lang?: string | TranslocoScope, _isObject?: boolean): Observable<any> {\r\n console.log(`selectTranslate ${key} ${lang}`);\r\n return this.translocoService.selectTranslate(key, params, lang, _isObject);\r\n }\r\n\r\n selectTranslateObject(key: string, params?: HashMap, lang?: string): Observable<any> {\r\n return this.translocoService.selectTranslateObject(key, params, lang);\r\n }\r\n\r\n setActiveLang(lang: string): this {\r\n this.translocoService.setActiveLang(lang);\r\n this.langChangeSubject.next(lang); //emitimos que hemos cambiado el idioma\r\n console.log(\"setActiveLang\", lang);\r\n return this;\r\n }\r\n\r\n getActiveLang(): string {\r\n let lang = this.translocoService.getActiveLang();\r\n console.log(\"getActiveLang\", lang);\r\n return lang;\r\n }\r\n}\r\n","import { FormGroup, FormControl, FormArray } from \"@angular/forms\";\r\nimport { GeneralUtils } from \"./general-utils.service\";\r\nimport { TranslatedMessage, ErrorValidateForm } from \"../../base/models/types\";\r\nimport { buildTranslatedMessage } from \"./translate.service\";\r\n\r\nexport class CustomValidators {\r\n static config = {\r\n required: CustomValidators.buildErrorMessage(\"required\"),\r\n invalidDate: CustomValidators.buildErrorMessage(\"Data incorrecta\"),\r\n invalidTime: CustomValidators.buildErrorMessage(\"invalidTime\"),\r\n invalidEmailAddress: CustomValidators.buildErrorMessage(\"invalidEmailAddress\"),\r\n invalidEmailCSVAddress: CustomValidators.buildErrorMessage(\"invalidEmailCSVAddress\"),\r\n invalidLogin: CustomValidators.buildErrorMessage(\"invalidLogin\"),\r\n invalidEtiqueta: CustomValidators.buildErrorMessage(\"invalidEtiqueta\"),\r\n invalidName: CustomValidators.buildErrorMessage(\"invalidName\"),\r\n invalidCodigo: CustomValidators.buildErrorMessage(\"invalidCodigo\"),\r\n invalidAlfanumerico: CustomValidators.buildErrorMessage(\"invalidAlfanumerico\"),\r\n invalidCantidad: CustomValidators.buildErrorMessage(\"invalidCantidad\"),\r\n invalidEnteroPositivo: CustomValidators.buildErrorMessage(\"invalidEnteroPositivo\"),\r\n invalidEnteroPositivoIncluyeCero: CustomValidators.buildErrorMessage(\"invalidEnteroPositivoIncluyeCero\"),\r\n invalidCantidadDecimal: CustomValidators.buildErrorMessage(\"invalidCantidadDecimal\"),\r\n invalidNumeroPositivo: CustomValidators.buildErrorMessage(\"invalidNumeroPositivo\"),\r\n invalidCodigoPostal: CustomValidators.buildErrorMessage(\"invalidCodigoPostal\"),\r\n invalidTelefono: CustomValidators.buildErrorMessage(\"invalidTelefono\"),\r\n invalidTelefonoCSV: CustomValidators.buildErrorMessage(\"invalidTelefonoCSV\"),\r\n invalidPorcentaje: CustomValidators.buildErrorMessage(\"invalidPorcentaje\"),\r\n invalidUrl: CustomValidators.buildErrorMessage(\"invalidUrl\"),\r\n invalidPath: CustomValidators.buildErrorMessage(\"invalidPath\"),\r\n invalidNIF: CustomValidators.buildErrorMessage(\"invalidNIF\"),\r\n invalidNIE: CustomValidators.buildErrorMessage(\"invalidNIE\"),\r\n invalidCIF: CustomValidators.buildErrorMessage(\"invalidCIF\"),\r\n invalidNIFNIE: CustomValidators.buildErrorMessage(\"invalidNIFNIE\"),\r\n invalidAnyo: CustomValidators.buildErrorMessage(\"invalidAnyo\"),\r\n maxlength: CustomValidators.buildErrorMessage(\"maxlength\"),\r\n invalidNumeroDocumentoTipoDocumento: CustomValidators.buildErrorMessage(\"invalidNumeroDocumentoTipoDocumento\"),\r\n direccionIncompleta: CustomValidators.buildErrorMessage(\"direccionIncompleta\"),\r\n requiredExtraData: CustomValidators.buildErrorMessage(\"requiredExtraData\"),\r\n invalidRangoFechaFinPosteriorInicio: CustomValidators.buildErrorMessage(\"invalidRangoFechaFinPosteriorInicio\"),\r\n invalidRangoHoraFinPosteriorInicio: CustomValidators.buildErrorMessage(\"invalidRangoHoraFinPosteriorInicio\"),\r\n invalidDateTimeNotAfterCurrentDate: CustomValidators.buildErrorMessage(\"invalidDateTimeNotAfterCurrentDate\")\r\n };\r\n\r\n static CustomValidatorsMap = {\r\n codigoNumerico: CustomValidators.codigoValidator,\r\n codigoAlfanumerico: CustomValidators.alfanumericoValidator,\r\n nombre: CustomValidators.nombreValidator,\r\n numero: CustomValidators.cantidadDecimalValidator,\r\n entero: CustomValidators.cantidadValidator,\r\n numeroPositivo: CustomValidators.numeroPositivoValidator,\r\n enteroPositivo: CustomValidators.enteroPositivoValidator,\r\n nif: CustomValidators.nifValidator,\r\n nie: CustomValidators.nieValidator,\r\n cif: CustomValidators.cifValidator,\r\n nifnie: CustomValidators.nifNieValidator,\r\n cp: CustomValidators.codigoPostalValidator,\r\n telefono: CustomValidators.telefonoValidator,\r\n telefonoCSV: CustomValidators.telefonoCSVValidator,\r\n emailCSV: CustomValidators.emailCSVValidator,\r\n email: CustomValidators.emailValidator,\r\n fecha: CustomValidators.dataValidator,\r\n anyo: CustomValidators.anyoValidator\r\n };\r\n\r\n static buildErrorMessage(code: string, params?: {}): TranslatedMessage {\r\n return buildTranslatedMessage(\"form.messages.\" + code, \"bitnglibrary\", params);\r\n }\r\n\r\n static getValidatorErrorMessage(code: string) {\r\n return CustomValidators.config[code];\r\n }\r\n\r\n // método para unir validadores\r\n static compose(validators: Function[]): Function {\r\n let result = function (g: FormGroup) {\r\n // ejecutamos cada uno de los validadores y unimos sus resultados\r\n let innerResult = validators.map((validator) => validator(g)).reduce((acc, result = {}) => Object.assign(acc, result), {});\r\n return innerResult;\r\n };\r\n return result;\r\n }\r\n\r\n static required(control): { [s: string]: boolean } {\r\n if (!control.value) {\r\n return {required: true};\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // este validador en realidad no está haciendo nada porque bit-input, para fechas no válidas, sustituye\r\n // control.value por un null y el validador pasa siempre\r\n static dataValidator(control): { [s: string]: boolean } {\r\n // formato dd/MM/yyyy\r\n if (!control.value || control.value.match(/^(0[1-9]|1\\d|2\\d|3[01])\\/(0[1-9]|1[0-2])\\/(19|20)\\d{2}$/)) {\r\n return null;\r\n } else {\r\n return {invalidDate: true};\r\n }\r\n }\r\n\r\n static timeValidator(control): { [s: string]: boolean } {\r\n // formato hh:mm\r\n if (!control.value || (control.value && control.value.match(/^[0-9][0-9]:[0-9][0-9]$/))) {\r\n return null;\r\n } else {\r\n return {invalidTime: true};\r\n }\r\n }\r\n\r\n static emailValidator(control): { [s: string]: boolean } {\r\n // RFC 2822 compliant regex\r\n if (!control.value || control.value.match(/\\S+@([-\\w]+\\.)+\\w+/g)) {\r\n return null;\r\n } else {\r\n return {invalidEmailAddress: true};\r\n }\r\n }\r\n\r\n static emailCSVValidator(control): { [s: string]: boolean } {\r\n // RFC 2822 compliant regex\r\n if (!control.value || control.value.match(/^(( )*[\\w\\.]+@([-\\w]+\\.)+\\w+( )*)(,( )*[\\w\\.]+@([-\\w]+\\.)+\\w+( )*)*$/g)) {\r\n return null;\r\n } else {\r\n return {invalidEmailCSVAddress: true};\r\n }\r\n }\r\n\r\n static loginValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[a-z0-9_-]{3,15}/)) {\r\n return null;\r\n } else {\r\n return {invalidLogin: true};\r\n }\r\n }\r\n\r\n static etiquetaValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[a-zA-Z0-9_-]+/)) {\r\n return null;\r\n } else {\r\n return {invalidEtiqueta: true};\r\n }\r\n }\r\n\r\n static nombreValidator(control): { [s: string]: boolean } {\r\n if (\r\n !control.value ||\r\n /^([A-Za-z0-9_\\.\\,\\'\\\"\\(\\)\\;\\:\\-\\/\\@\\?\\%\\?\\¿\\&\\+\\-\\*\\/\\ \\n\\rºª'´’·ïü?`áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙÄËÏÖÜäëïöüñÑçÇ¡!#])+$/.test(control.value)\r\n ) {\r\n return null;\r\n } else {\r\n return {invalidName: true};\r\n }\r\n }\r\n\r\n static codigoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^([0-9])+$/)) {\r\n return null;\r\n } else {\r\n return {invalidCodigo: true};\r\n }\r\n }\r\n\r\n static alfanumericoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^([A-Z0-9_\\.\\-ÑÇ])+$/)) {\r\n return null;\r\n } else {\r\n return {invalidAlfanumerico: true};\r\n }\r\n }\r\n\r\n static cantidadValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a number without decimals\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n }\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num % 1 == 0) {\r\n return null;\r\n }\r\n return {invalidCantidad: true};\r\n }\r\n\r\n /* Valida números enteros (sin decimales) positivos (>=0) */\r\n static enteroPositivoValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a number without decimals\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n }\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num % 1 == 0 && num >= 0) {\r\n return null;\r\n }\r\n return {invalidEnteroPositivo: true};\r\n }\r\n\r\n static enteroPositivoValidatorIncluyeCeroValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a positive number (including 0) without decimals\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n }\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num % 1 == 0 && num >= 0) {\r\n return null;\r\n }\r\n return {invalidEnteroPositivoIncluyeCero: true};\r\n }\r\n\r\n /* Valida números enteros (con decimales) */\r\n static cantidadDecimalValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a number (including decimals)\r\n if (!control.value || control.value === \"\" || !isNaN(Number(control.value))) {\r\n return null;\r\n } else {\r\n return {invalidCantidadDecimal: true};\r\n }\r\n }\r\n\r\n /* Valida números enteros (con decimales) positivos (>=0) */\r\n static numeroPositivoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value === \"\" || (!isNaN(Number(control.value)) && Number(control.value) >= 0)) {\r\n return null;\r\n } else {\r\n return {invalidNumeroPositivo: true};\r\n }\r\n }\r\n\r\n /* Valida código postal (numero de 5 dígitos) */\r\n static codigoPostalValidator(control): { [s: string]: boolean } {\r\n if (!control.value || (control.value.match(/^([0-9])+$/) && control.value.length == 5)) {\r\n return null;\r\n } else {\r\n return {invalidCodigoPostal: true};\r\n }\r\n }\r\n\r\n /* Valida telefono (numero de 9 dígitos) */\r\n static telefonoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/)) {\r\n return null;\r\n } else {\r\n return {invalidTelefono: true};\r\n }\r\n }\r\n\r\n /* Valida telefono (numero de 9 dígitos) */\r\n static telefonoCSVValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[0-9]{9}(( *, *)[0-9]{9})*$/g)) {\r\n return null;\r\n } else {\r\n return {invalidTelefonoCSV: true};\r\n }\r\n }\r\n\r\n static buildLongitudValidator(lon: number) {\r\n let errorKey = \"invalidLongitud\";\r\n let errorKeyIndex = errorKey + \" _\" + lon.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {lon: lon});\r\n return (control) => {\r\n if (!control.value || control.value.length <= lon) {\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static buildCantidadMinValidator(min: number) {\r\n let errorKey = \"invalidCantidadMin\";\r\n let errorKeyIndex = errorKey + \" _\" + min.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {min: min});\r\n return (control) => {\r\n if (control.value === \"\" || control.value == null) return null;\r\n let num = Number(control.value);\r\n if (isNaN(num) || num >= min) {\r\n // si no es numérico o el valor >= min, pasa la validación\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static buildCantidadMaxValidator(max: number) {\r\n let errorKey = \"invalidCantidadMax\";\r\n let errorKeyIndex = errorKey + \"_\" + max.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {max: max});\r\n return (control) => {\r\n if (control.value === \"\" || control.value == null) return null;\r\n let num = Number(control.value);\r\n if (isNaN(num) || num <= max) {\r\n // si no es numérico o el valor ≤ max, pasa la validación\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static buildCantidadMinMaxValidator(min: number, max: number) {\r\n let errorKey = \"invalidCantidadMinMax\";\r\n let errorKeyIndex = errorKey + \"_\" + min.toString() + \"_\" + max.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {\r\n min: min,\r\n max: max\r\n });\r\n return (control) => {\r\n if (control.value === \"\" || control.value == null) return null;\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num >= min && num <= max) {\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static porcentajeValidator(control): { [s: string]: boolean } {\r\n // expected a numeric value between 0 and 100\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n } else {\r\n let n = Number(control.value);\r\n if (!isNaN(n) && n >= 0 && n <= 100) {\r\n return null;\r\n } else {\r\n return {invalidPorcentaje: true};\r\n }\r\n }\r\n }\r\n\r\n static urlValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(\r\n \"^(https?:\\\\/\\\\/)?\" + // protocol\r\n \"((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|\" + // domain name\r\n \"((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))\" + // OR ip (v4) address\r\n \"(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*\" + // port and path\r\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\r\n \"(\\\\#[-a-z\\\\d_]*)?$\",\r\n \"i\"\r\n ); // fragment locator\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidUrl: true};\r\n }\r\n }\r\n\r\n static pathValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(\r\n \"^((\\\\/)?[-a-z\\\\d%_.~+]*)*\" + // port and path\r\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\r\n \"(\\\\#[-a-z\\\\d_]*)?$\",\r\n \"i\"\r\n ); // fragment locator\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidPath: true};\r\n }\r\n }\r\n\r\n /**\r\n * Retorna un string con todos los errores que contiene el formulario, separados por saltos de línea.\r\n */\r\n static validateForm(form: FormGroup, prefix: string[] = []): ErrorValidateForm[] {\r\n let mensajes: ErrorValidateForm[] = [];\r\n // errores en términos de grupo\r\n for (let errorKey in form.errors) {\r\n let pr = prefix ? `${prefix}: ` : \"\";\r\n mensajes.push({prefixes: [pr], errorMessage: CustomValidators.config[errorKey]});\r\n }\r\n\r\n for (let controlKey in form.controls) {\r\n let control = form.controls[controlKey];\r\n if (!control.valid) {\r\n // no es válido, hay mensajes que recuperar\r\n let controlLabel: string[] = prefix.concat([controlKey]); // nombre apilado\r\n\r\n // detectamos si es un campo o un formulario anidado\r\n if (control instanceof FormGroup) {\r\n // es un formulario anidado, seguimos bajando recursivamente\r\n mensajes = mensajes.concat(CustomValidators.validateForm(control, controlLabel));\r\n } else if (control instanceof FormControl) {\r\n // es un campo final, añadimos sus mensajes de error\r\n for (let errorKey in control.errors) {\r\n mensajes.push({prefixes: controlLabel, errorMessage: CustomValidators.config[errorKey]});\r\n }\r\n } else if (control instanceof FormArray) {\r\n // es una lista de controles anidada, la recorremos\r\n control.controls &&\r\n control.controls.forEach((arrControl, index) => {\r\n let arrControlLabel: string[] = controlLabel.concat([index.toString()]);\r\n if (arrControl instanceof FormGroup) {\r\n // es una lista de FormGroups, bajamos a ellos recursivamente\r\n mensajes = mensajes.concat(CustomValidators.validateForm(arrControl, arrControlLabel));\r\n } else if (arrControl instanceof FormControl) {\r\n // es una lista de FormControls, los tratamos desde aquí\r\n for (let errorKey in control.errors) {\r\n mensajes.push({prefixes: arrControlLabel, errorMessage: CustomValidators.config[errorKey]});\r\n }\r\n } else {\r\n // ??? ¿Un array de arrays? No está previsto.\r\n console.log(\"[CustomValidators] Unexpected FormArray with nested FormArrays\");\r\n }\r\n });\r\n }\r\n }\r\n }\r\n return mensajes;\r\n }\r\n\r\n /**\r\n * Recibe un objeto con las propiedades {fieldTipo, fieldNumero} y devuelve un validador de formulario para documentos de identificación.\r\n * El error que puede generarse es del tipo 'invalidNumeroDocumentoTipoDocumento'.\r\n */\r\n static buildNumeroDocumentoValidator({fieldTipo = \"documentoTipo\", fieldNumero = \"documentoNumero\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let documentoTipo = g.get(fieldTipo) && g.get(fieldTipo).value;\r\n let documentoNumero = g && g.get(fieldNumero) && g.get(fieldNumero).value;\r\n let invalid = false;\r\n if (documentoTipo && documentoNumero) {\r\n if (documentoTipo == \"DNI\") {\r\n invalid = !CustomValidators.isValidDNI(documentoNumero);\r\n } else if (documentoTipo == \"CIF\") {\r\n invalid = !CustomValidators.isValidCIF(documentoNumero);\r\n } else if (documentoTipo == \"NIF\") {\r\n //invalid = !documentoNumero.match(/^[0-9]{8}[a-z|A-Z]$/);\r\n invalid = !CustomValidators.isValidNIF(documentoNumero);\r\n } else if (documentoTipo == \"NIE\") {\r\n invalid = !CustomValidators.isValidNIE(documentoNumero);\r\n }\r\n }\r\n\r\n if (invalid) {\r\n return {invalidNumeroDocumentoTipoDocumento: true};\r\n } else {\r\n return null;\r\n }\r\n };\r\n return result;\r\n }\r\n\r\n static nifValidator(control): { [s: string]: boolean } {\r\n if (!control.value || CustomValidators.isValidNIF(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidNIF: true};\r\n }\r\n }\r\n\r\n static nieValidator(control): { [s: string]: boolean } {\r\n if (!control.value || CustomValidators.isValidNIE(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidNIE: true};\r\n }\r\n }\r\n\r\n static nifNieValidator(control): { [s: string]: boolean } {\r\n if (!control.value || CustomValidators.isValidNIF(control.value) || CustomValidators.isValidNIE(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidNIFNIE: true};\r\n }\r\n }\r\n\r\n static cifValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(/^[a-z|A-Z][0-9]{7}[a-z|A-Z|0-9]/); // TODO\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidCIF: true};\r\n }\r\n }\r\n\r\n static anyoValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(/^[0-9]{4}$/); // TODO\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidAnyo: true};\r\n }\r\n }\r\n\r\n static isValidDNI(value: string): boolean {\r\n return true; // ¿deberíamos validar algo? Con letra ya tenemos el NIF\r\n }\r\n\r\n // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/cifES.js\r\n static isValidCIF(value: string): boolean {\r\n let cifRegEx = new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi);\r\n let letter = value.substring(0, 1), // [ T ]\r\n number = value.substring(1, 8), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]\r\n control = value.substring(8, 9), // [ C ]\r\n all_sum = 0,\r\n even_sum = 0,\r\n odd_sum = 0,\r\n i,\r\n n,\r\n control_digit,\r\n control_letter;\r\n\r\n function isOdd(n) {\r\n return n % 2 === 0;\r\n }\r\n\r\n // Quick format test\r\n if (value.length !== 9 || !cifRegEx.test(value)) {\r\n return false;\r\n }\r\n\r\n for (i = 0; i < number.length; i++) {\r\n n = parseInt(number[i], 10);\r\n // Odd positions\r\n if (isOdd(i)) {\r\n // Odd positions are multiplied first.\r\n n *= 2;\r\n // If the multiplication is bigger than 10 we need to adjust\r\n odd_sum += n < 10 ? n : n - 9;\r\n // Even positions\r\n // Just sum them\r\n } else {\r\n even_sum += n;\r\n }\r\n }\r\n\r\n all_sum = even_sum + odd_sum;\r\n control_digit = (10 - Number(all_sum.toString().substring(-1))).toString();\r\n control_digit = parseInt(control_digit, 10) > 9 ? \"0\" : control_digit;\r\n control_letter = \"JABCDEFGHI\".substring(control_digit, 1).toString();\r\n\r\n // Control must be a digit\r\n if (letter.match(/[ABEH]/)) {\r\n return control === control_digit;\r\n // Control must be a letter\r\n } else if (letter.match(/[KPQS]/)) {\r\n return control === control_letter;\r\n }\r\n // Can be either\r\n return control === control_digit || control === control_letter;\r\n }\r\n\r\n // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/nifES.js\r\n static isValidNIF(value: string): boolean {\r\n value = value.toUpperCase();\r\n // Basic format test\r\n if (!value.match(\"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\")) {\r\n return false;\r\n }\r\n // Test NIF\r\n if (/^[0-9]{8}[A-Z]{1}$/.test(value)) {\r\n return \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(Number(value.substring(8, 0)) % 23) === value.charAt(8);\r\n }\r\n // Test specials NIF (starts with K, L or M)\r\n if (/^[KLM]{1}/.test(value)) {\r\n return value[8] !== \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(Number(value.substring(8, 1)) % 23);\r\n }\r\n return false;\r\n }\r\n\r\n static isValidNIE(value: string): boolean {\r\n // Un NIE sigue una validación muy similar a la de un DNI, con la diferencia\r\n // de que en lugar de ser ocho números + letra debe ser letra + siete números + letra,\r\n // siendo la primera letra X, Y o Z sustituible por 0, 1 o 2 respectivamente.\r\n let nieRegEx = new RegExp(/^[XYZ]{1}[0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi);\r\n\r\n // Si no tiene el formato básico, no es válido\r\n if (!nieRegEx.test(value)) {\r\n return false;\r\n }\r\n\r\n // Sustituimos la primera letra por el número equivalente y aprovechamos la validación de NIF\r\n value = value.toString().toUpperCase().replace(/^[X]/, \"0\").replace(/^[Y]/, \"1\").replace(/^[Z]/, \"2\");\r\n\r\n return CustomValidators.isValidNIF(value);\r\n }\r\n\r\n static rangoFechasValidator({fieldFechaInicio = \"fechaInicio\", fieldFechaFin = \"fechaFin\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let fechaInicio = g.get(fieldFechaInicio) && g.get(fieldFechaInicio).value;\r\n let fechaFin = g && g.get(fieldFechaFin) && g.get(fieldFechaFin).value;\r\n if (fechaInicio && fechaFin) {\r\n let inicio = GeneralUtils.stringShortToDate(fechaInicio);\r\n let fin = GeneralUtils.stringShortToDate(fechaFin);\r\n if (inicio > fin) {\r\n return {invalidRangoFechaFinPosteriorInicio: true, requiredTipoDatoTipoCheck: true};\r\n }\r\n }\r\n return null;\r\n };\r\n return result;\r\n }\r\n\r\n static rangoHorasValidator({fieldHoraInicio = \"horaInicio\", fieldHoraFin = \"horaFin\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let inicio = g.get(fieldHoraInicio) && g.get(fieldHoraInicio).value && GeneralUtils.stringToTime(g.get(fieldHoraInicio).value);\r\n let fin = g && g.get(fieldHoraFin) && g.get(fieldHoraFin).value && GeneralUtils.stringToTime(g.get(fieldHoraFin).value);\r\n if (inicio && fin && inicio >= fin) {\r\n return {invalidRangoHoraFinPosteriorInicio: true};\r\n }\r\n return null;\r\n };\r\n return result;\r\n }\r\n\r\n static dateTimeNotAfterCurrentDateValidator({fieldfecha = \"fecha\", fieldHora = \"hora\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let campoFecha = g.get(fieldfecha);\r\n let campoHora = g.get(fieldHora);\r\n if (campoFecha && campoFecha.value && campoFecha.value.match(/^(0[1-9]|1\\d|2\\d|3[01])\\/(0[1-9]|1[0-2])\\/(19|20)\\d{2}$/)) {\r\n let date = GeneralUtils.getStringAsDate(campoFecha.value);\r\n if (campoHora && campoHora.value && campoHora.value.match(/^[0-9][0-9]:[0-9][0-9]$/)) {\r\n date.setHours(campoHora.value.split(\":\")[0]);\r\n date.setMinutes(campoHora.value.split(\":\")[1]);\r\n }\r\n if (date < new Date()) {\r\n return {invalidDateTimeNotAfterCurrentDate: true};\r\n }\r\n }\r\n return null;\r\n };\r\n return result;\r\n }\r\n\r\n static buildMinLongitudValidator(lon: number) {\r\n let errorKey = \"invalidMinLongitud\";\r\n let errorKeyIndex = errorKey + \"_\" + lon.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {lon: lon});\r\n let result = (control) => {\r\n if (!control.value || control.value.length >= lon) {\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n return result;\r\n }\r\n}\r\n","/**\r\n * Clase base que contiene la información sobre un error producido en la aplicación.\r\n */\r\nexport class Error {\r\n constructor(\r\n public url: string,\r\n public summary: string,\r\n public errorText: string,\r\n public trazaError?: any,\r\n public notificacion?: boolean,\r\n public masInfo?: string\r\n ) {}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject, Observable } from \"rxjs\";\r\n\r\nimport { BitMessage } from \"../data/bitmessage\";\r\nimport { Error } from \"../data/error\";\r\nimport { BitNotification } from \"../data/bitnotification\";\r\nimport { BitNotificationError } from \"../data/bitnotification-error\";\r\n\r\n/**\r\n *\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class BitMessageService {\r\n // Observable string sources\r\n private observableMessagesSource = new Subject<BitMessage>(); //mensajes generales que se mostrarán como un dialog en el centro de la pantalla\r\n public observableMessages: Observable<BitMessage>;\r\n private observableNotificationsSource = new Subject<BitNotification>(); //notifiaciones que se mostrarán como un growl\r\n public observableNotifications: Observable<BitNotification>;\r\n private observableErrorsSource = new Subject<Error>(); //errores del servidor que se mostrarán como un dialog igual con la traza del error\r\n public observableErrors: Observable<Error>;\r\n private observableNotificacionsErrorsSource = new Subject<BitNotificationError>(); //errores controlados enviados del servidor que se mostrarán como una ventanita similar al growl\r\n public observableNotificationsErrors: Observable<BitNotificationError>;\r\n\r\n constructor() {\r\n this.observableMessages = this.observableMessagesSource.asObservable();\r\n this.observableErrors = this.observableErrorsSource.asObservable();\r\n this.observableNotificationsErrors = this.observableNotificacionsErrorsSource.asObservable();\r\n this.observableNotifications = this.observableNotificationsSource.asObservable();\r\n }\r\n\r\n /**\r\n * Ask user to confirm an action. `message` explains the action and choices.\r\n * Returns promise resolving to `true`=confirm or `false`=cancel\r\n */\r\n confirm(message?: string) {\r\n return new Promise<boolean>((resolve) => {\r\n return resolve(window.confirm(message || \" OK?\"));\r\n });\r\n }\r\n\r\n /** Enviamos un mensaje. Como mínimo el componente DialogComponent lo recibirá y lo mostrará al usuario */\r\n sendMessage(message: BitMessage) {\r\n this.observableMessagesSource.next(message);\r\n }\r\n\r\n /**\r\n * Enviamos un error. El componente DialogComponent lo recibirá y lo mostrará al usuario en el centro del usuario\r\n **/\r\n sendError(error: Error) {\r\n this.observableErrorsSource.next(error);\r\n }\r\n\r\n /** Enviamos una notificación. El componente NotificationComponent lo recibirá y la mostrará en pantalla */\r\n sendNotification(notification: BitNotification) {\r\n this.observableNotificationsSource.next(notification);\r\n }\r\n\r\n /**\r\n * Enviamos un error. Se mostrará como una ventana arriba a la derecha con un close para cerrarlo\r\n * @param bitNotificationError\r\n */\r\n sendNotificationError(bitNotificationError: BitNotificationError) {\r\n console.log(\"sendNotificationError\", bitNotificationError);\r\n this.observableNotificacionsErrorsSource.next(bitNotificationError);\r\n }\r\n\r\n hideNotificacionErrorPanel() {\r\n this.observableNotificacionsErrorsSource.next();\r\n }\r\n\r\n hideNotificacionPanel() {\r\n this.observableNotificationsSource.next();\r\n }\r\n\r\n hideMessagePanel() {\r\n this.observableMessagesSource.next();\r\n }\r\n\r\n hideErrorsPanel() {\r\n this.observableErrorsSource.next();\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nimport { Error as CustomError } from \"../data/error\";\r\nimport { BitMessageService } from \"./message.service\";\r\nimport { GeneralUtils } from \"./general-utils.service\";\r\nimport { TranslateService } from \"./translate.service\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class HttpUtilsService {\r\n // customizado por proyecto: {provide: 'CONTEXT_PATH', useValue: environment.CONTEXT}\r\n static CONTEXT_PATH = \"bitcitafront\";\r\n static LOGIN_AUTHENTICATION = \"\";\r\n static errorAccessServerTitle: string = \"\";\r\n static errorAccessServerMessage: string = \"\";\r\n static errorServerTitle: string = \"\";\r\n static errorServerMessage: string = \"\";\r\n\r\n constructor(\r\n protected http: HttpClient,\r\n protected bitMessageService: BitMessageService,\r\n protected generalUtils: GeneralUtils,\r\n protected translateService: TranslateService,\r\n @Inject(\"API_URL\") private apiUrl: string,\r\n @Inject(\"CONTEXT_PATH\") private contextPath: string\r\n ) {\r\n HttpUtilsService.CONTEXT_PATH = contextPath;\r\n console.log(\"HttpUtilsSerive creado con API Url:\" + this.apiUrl);\r\n this.getMessagesI18N();\r\n }\r\n\r\n getMessagesI18N() {\r\n this.translateService\r\n .selectTranslate(\"messages.erroraccessservertitle\", {}, \"bitnglibrary\")\r\n .subscribe((v) => (HttpUtilsService.errorAccessServerTitle = v));\r\n this.translateService\r\n .selectTranslate(\"messages.erroraccessservermessage\", {}, \"bitnglibrary\")\r\n .subscribe((v) => (HttpUtilsService.errorAccessServerMessage = v));\r\n this.translateService.selectTranslate(\"messages.errorservertitle\", {}, \"bitnglibrary\").subscribe((v) => (HttpUtilsService.errorServerTitle = v));\r\n this.translateService.selectTranslate(\"messages.errorservermessage\", {}, \"bitnglibrary\").subscribe((v) => (HttpUtilsService.errorServerMessage = v));\r\n }\r\n\r\n /*\r\n private handleError(error: HttpErrorResponse) {\r\n //this.generalUtils.stopLoading();\r\n let customError = HttpUtilsService.getCustomError(error);\r\n this.bitMessageService.sendError(customError);\r\n return throwError(customError);\r\n }*/\r\n\r\n static getCustomError(error: HttpErrorResponse): CustomError {\r\n let lastUrlAcceded = error.url;\r\n let innerError;\r\n let customError;\r\n\r\n if (\r\n error.message &&\r\n (error.message.includes(\"Unexpected token < in JSON\") || //chrome\r\n error.message.includes(\"JSON.parse: unexpected character at line 1 column 1\") || //firefox\r\n error.message.includes(\"JSON.parse Error: Invalid character at position:1\")) //explorer\r\n ) {\r\n console.log(\"Parece que hemos perdido la sesión\");\r\n //customError = new CustomError(lastUrlAcceded, \"S'ha detectat que s'ha perdut la sessió amb el servidor. És necessari que torni a autenticar-se en el sistema.\\n Si no apareix la pàgina d'introducció d'usuari i contrasenya, per favor tanqui el navegador i torni a obrir l'aplicació.\",\r\n //\"S'ha detectat que s'ha perdut la sessió amb el servidor. És necessari que torni a autenticar-se en el sistema.\\n Si no apareix la pàgina d'introducció d'usuari i contrasenya, per favor tanqui el navegador i torni a obrir l'aplicació.\", undefined, true, null);\r\n HttpUtilsService.reloadPage();\r\n return;\r\n }\r\n\r\n try {\r\n innerError = JSON.parse(error.error);\r\n } catch (err) {\r\n innerError = error.error;\r\n }\r\n if (innerError && (innerError[\"notificacion\"] || innerError[\"trazaError\"])) {\r\n //el error es controlado del servidor\r\n customError = <CustomError>innerError;\r\n } else {\r\n //el error es un problema de comunicaciones o del propio cliente Angular\r\n if (error.status || error.status === 0) {\r\n //caso jetty o error controlado del servidor\r\n console.log(\"HTTP Error con status \" + error.status);\r\n if (error.status >= 300 && error.status < 500) {\r\n customError = new CustomError(lastUrlAcceded, this.errorAccessServerTitle, this.errorAccessServerMessage, undefined, true);\r\n } else {\r\n customError = new CustomError(lastUrlAcceded, this.errorServerTitle, this.errorServerMessage, undefined, true);\r\n }\r\n } else {\r\n customError = new CustomError(lastUrlAcceded, error.message, error.message, error.error);\r\n }\r\n }\r\n return customError;\r\n }\r\n\r\n static reloadPage() {\r\n let currentUrl = window.location.href;\r\n console.log(`current url ${currentUrl}`);\r\n let index: number = currentUrl.lastIndexOf(HttpUtilsService.CONTEXT_PATH);\r\n let newUrl: string;\r\n if (index != -1) {\r\n newUrl = currentUrl.substring(0, index + HttpUtilsService.CONTEXT_PATH.length);\r\n } else {\r\n newUrl = currentUrl;\r\n }\r\n console.log(`new url ${newUrl}`);\r\n window.location.href = newUrl;\r\n }\r\n\r\n public getHttpPost<T>(url, hqlRequest, emptyResponse: boolean = false): Observable<T> {\r\n console.log(\"calling url server via POST:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let body = JSON.stringify(hqlRequest);\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n let vResponseType: any = emptyResponse ? \"text\" : \"json\";\r\n return this.http.post<T>(this.apiUrl + url, body, { headers, responseType: vResponseType });\r\n //.pipe(tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpPut<T>(url, hqlRequest): Observable<T> {\r\n console.log(\"calling url server via PUT:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let body = JSON.stringify(hqlRequest);\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n return this.http.put<T>(this.apiUrl + url, body, { headers });\r\n //.pipe(//tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpPatch<T>(url, hqlRequest): Observable<T> {\r\n console.log(\"calling url server via PUT:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let body = JSON.stringify(hqlRequest);\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n return this.http.patch<T>(this.apiUrl + url, body, { headers });\r\n //.pipe(//tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpDelete(url): Observable<any> {\r\n console.log(\"calling url server via DELETE:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n return this.http.delete(this.apiUrl + url, {\r\n headers,\r\n responseType: \"text\"\r\n });\r\n //.pipe(tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpGet<T>(url): Observable<T> {\r\n console.log(\"calling url server via GET:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let headers: HttpHeaders = this.addAuthenticationData(new HttpHeaders());\r\n\r\n return this.http.get<T>(this.apiUrl + url, {\r\n headers: headers\r\n });\r\n //.pipe(tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n private addAuthenticationData(httpHeaders: HttpHeaders) {\r\n if (HttpUtilsService.LOGIN_AUTHENTICATION && HttpUtilsService.LOGIN_AUTHENTICATION != \"\") {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Basic \" + HttpUtilsService.LOGIN_AUTHENTICATION);\r\n }\r\n return httpHeaders;\r\n }\r\n}\r\n\r\nexport var httpUtilsServiceInjectables: Array<any> = [\r\n {\r\n provide: HttpUtilsService,\r\n useClass: HttpUtilsService\r\n }\r\n];\r\n","import { Injector } from \"@angular/core\";\r\n\r\n/**\r\n * Este servicio almacena de forma estática el objeto Injector de angular para que pueda utilizarse desde cualquier\r\n * punto de la app\r\n */\r\nexport class LocatorService {\r\n static injector: Injector = null;\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class SessionSharedService {\r\n private data: Map<string, any>;\r\n\r\n //TO-DO. Guardarlo en un localstorage por un tiempo limitado por si hacen F5\r\n constructor() {\r\n this.data = new Map<string, any>();\r\n }\r\n\r\n get(key: string): any {\r\n // console.log('shared get', key);\r\n return this.data.get(key);\r\n }\r\n\r\n set(key: string, value: any): void {\r\n // console.log('shared set', key, value);\r\n this.data.set(key, value);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class TableViewService {\r\n private observableExportSource = new Subject<Boolean>();\r\n public observableExport;\r\n\r\n constructor() {\r\n this.observableExport = this.observableExportSource.asObservable();\r\n }\r\n\r\n sendExportMessage() {\r\n this.observableExportSource.next(true);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, ReplaySubject } from \"rxjs\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class ToolbarService {\r\n //private observableToolbarSource = new BehaviorSubject<any>(null);\r\n private observableToolbarSource = new ReplaySubject<any>(10);\r\n public observableToolbar: Observable<any>;\r\n\r\n constructor() {\r\n console.log(\"ToolbarService creado\");\r\n //el toolbar al suscribirse recibirá eiempre los últimos n mensajes (toolbar) enviados. Es para protegernos y garantizar que cuando un toolbar\r\n //se susbscribe después de que el componente padre envíe su toolbar, entonces si se cuelan delante más toolbars, al menos lo reciba\r\n //OJO!. Juntar share() con ReplaySubject o publishReplay hace que no se comporte como se esperaba\r\n this.observableToolbar = this.observableToolbarSource.asObservable(); //.share();//.publishReplay(3).refCount();\r\n }\r\n\r\n updateToolbar(componentId: string, toolbar: any) {\r\n toolbar.componentId = componentId;\r\n this.observableToolbarSource.next(toolbar);\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\n\r\nimport { HttpUtilsService } from \"./http-utils.service\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class UploadService {\r\n private UPLOAD_URL: string;\r\n private DOWNLOAD_URL: string;\r\n\r\n constructor(@Inject(\"API_URL\") private apiUrl: string) {\r\n this.UPLOAD_URL = `${this.apiUrl}ficheros/upload`;\r\n this.DOWNLOAD_URL = `${this.apiUrl}ficheros/download/`;\r\n console.log(\"UploadService creado con API_URL:\", this.apiUrl);\r\n }\r\n\r\n /**\r\n * servicio para hacer upload de ficheros al servidor\r\n * @param url indica la URL a la que queremos subir el fichero. Si es null se utilizará el endpoint por defecto definido en UPLOAD_URL\r\n * @param files fichero(s) a subir al servidor\r\n * @param params parámetros adicionales en forma de Map para hacer la subida\r\n */\r\n upload(url: string, files: Array<File>, params: { [key: string]: string }) {\r\n return new Promise((resolve, reject) => {\r\n let formData: any = new FormData();\r\n\r\n for (let key in params) {\r\n formData.append(key, params[key]);\r\n }\r\n\r\n let xhr = new XMLHttpRequest();\r\n for (let i = 0; i < files.length; i++) {\r\n formData.append(\"file\", files[i], files[i].name);\r\n }\r\n xhr.onreadystatechange = () => {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n resolve(xhr.response);\r\n } else {\r\n reject(xhr.response); //TODO: No llega a los componentes\r\n }\r\n }\r\n };\r\n xhr.open(\"POST\", url == null ? this.UPLOAD_URL : url, true);\r\n if (HttpUtilsService.LOGIN_AUTHENTICATION && HttpUtilsService.LOGIN_AUTHENTICATION != \"\") {\r\n xhr.setRequestHeader(\"Authorization\", \"Basic \" + HttpUtilsService.LOGIN_AUTHENTICATION);\r\n }\r\n xhr.send(formData);\r\n });\r\n }\r\n\r\n getUrlDownloadFile(id: number) {\r\n return `${this.DOWNLOAD_URL}${id}`;\r\n }\r\n}\r\n","import { DefaultDataService } from \"@ngrx/data\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nimport { HttpUtilsService } from \"./http-utils.service\";\r\nimport { Item } from \"../data\";\r\n\r\nexport abstract class BaseDataService<T extends Item> extends DefaultDataService<T> {\r\n protected httpUtilsService: HttpUtilsService;\r\n\r\n /** Borra las entidades del servidor asociadas al parentId proporcionado */\r\n abstract deleteEntities(entities: number[], parentId: number): Observable<any>;\r\n /** Cuenta el número total de elementos de una búsqueda con filtro */\r\n abstract countAllByFilter(queryParams: string): Observable<number>;\r\n /** Realiza el patch de la entidad y retorna la entidad completa */\r\n abstract patchEntity(patch: any): Observable<T>;\r\n}\r\n","import { Observable, of } from \"rxjs\";\r\n\r\nimport { Item } from \"../data\";\r\nimport { BaseDataService } from \"./base-data.service\";\r\n\r\nexport class BaseDataAdapterService<T extends Item> extends BaseDataService<T> {\r\n /** Borra las entidades del servidor */\r\n deleteEntities(entities: number[], parentId: number): Observable<any> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n /** Cuenta el número total de elementos de una búsqueda con filtro */\r\n countAllByFilter(queryParams: string): Observable<number> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n /** Realiza el patch de la entidad y retorna la entidad completa */\r\n patchEntity(patch: any): Observable<T> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { TranslateService } from \"./translate.service\";\r\nimport { withLatestFrom, mergeMap } from \"rxjs/operators\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class DomainService {\r\n constructor(protected translateService: TranslateService) {}\r\n\r\n /** Retorna un observable sobre el array de valores del dominio en el idioma seleccionado por el usuario */\r\n getTranslatedDomain(domain: Observable<Map<string, []>>) {\r\n return this.translateService.langChanged$.pipe(\r\n withLatestFrom(domain),\r\n mergeMap(([lang, list]) => {\r\n console.log(\"getTranslatedDomain\", lang);\r\n return of(list[lang]);\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\n\r\nimport { TranslateService, CustomValidators, FocusService } from \"../../services\";\r\nimport { Observable } from \"rxjs\";\r\nimport { TranslatedMessage } from \"../../../base/models/types\";\r\n\r\n@Component({\r\n selector: \"control-messages\",\r\n template: `\r\n <div *ngIf=\"isError\">\r\n <span class=\"mensaje-error-input\">{{ errorMessage$ | async }}</span>\r\n </div>\r\n `\r\n //styleUrls: [\"bit-control-messages.component.css\"]\r\n})\r\nexport class BitControlMessages {\r\n @Input() control: FormControl;\r\n @Input() field: string;\r\n errorMessage$: Observable<string>;\r\n\r\n //constructor( @Host() private formDir: FormGroup) { }\r\n constructor(private focusService: FocusService, protected translateService: TranslateService) {}\r\n\r\n get isError(): boolean {\r\n if (this.focusService.getFocusedElement() !== this.field) {\r\n for (let propertyName in this.control.errors) {\r\n // If control has a error\r\n if (this.control.errors.hasOwnProperty(propertyName) && this.control.touched) {\r\n // Return the appropriate error message from the Validation Service\r\n let translatedError: TranslatedMessage = CustomValidators.getValidatorErrorMessage(propertyName);\r\n this.errorMessage$ = this.translateService.selectTranslate(translatedError.code, translatedError.params, translatedError.context);\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import { TranslatedMessage } from \"../../base/models\";\r\n\r\nexport class BitMessage {\r\n static WIDTH: number = 600;\r\n static INFO: string = \"info\";\r\n static WARN: string = \"warn\";\r\n static ERROR: string = \"error\";\r\n\r\n constructor(\r\n public title: string,\r\n public message: string,\r\n public width: number = BitMessage.WIDTH,\r\n public height: number = 0,\r\n public modal: boolean = false,\r\n public severity: string = \"info\", //info, warn, error\r\n public masInfo?: string,\r\n public json: boolean = false\r\n ) {}\r\n\r\n public static newMessage(title, message, severity?): BitMessage {\r\n return new BitMessage(title, message, BitMessage.WIDTH, 0, false, severity);\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { BitMessage } from \"../../data/bitmessage\";\r\nimport { Error } from \"../../data/error\";\r\nimport { BitMessageService } from \"../../services/message.service\";\r\nimport { TranslateService } from \"../../services\";\r\n\r\n@Component({\r\n selector: \"bit-dialog\",\r\n template: `\r\n <p-dialog\r\n *ngIf=\"!isSeverityInfo\"\r\n class=\"scroll-y scroll-{{ message.height }}\"\r\n header=\"{{ message.title }}\"\r\n [(visible)]=\"display\"\r\n [style]=\"{ width: '50vw' }\"\r\n [modal]=\"message.modal\"\r\n showEffect=\"fade\"\r\n position=\"top\"\r\n >\r\n <p class=\"mensaje-dialogo\">{{ message.message }}</p>\r\n <span *ngIf=\"message.masInfo\">\r\n <pre>{{ message.masInfo }}</pre>\r\n </span>\r\n <footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\"> </div>\r\n </footer>\r\n </p-dialog>\r\n <p-dialog\r\n *ngIf=\"isSeverityInfo && !message.json\"\r\n class=\"scroll-y scroll-{{ message.height }}\"\r\n header=\"{{ message.title }}\"\r\n [style]=\"{ width: '50vw' }\"\r\n [(visible)]=\"display\"\r\n [modal]=\"message.modal\"\r\n showEffect=\"fade\"\r\n position=\"top\"\r\n >\r\n <p class=\"mensaje-dialogo\" [innerHTML]=\"message.message\"></p>\r\n </p-dialog>\r\n <p-dialog\r\n *ngIf=\"message.json\"\r\n class=\"scroll-y scroll-{{ message.height }}\"\r\n header=\"{{ message.title }}\"\r\n [(visible)]=\"display\"\r\n [style]=\"{ width: '50vw' }\"\r\n [baseZIndex]=\"10000\"\r\n [modal]=\"message.modal\"\r\n showEffect=\"fade\"\r\n position=\"top\"\r\n >\r\n <pre [innerHTML]=\"syntaxHighlight(message.message)\"></pre>\r\n </p-dialog>\r\n `\r\n //styleUrls: [\"bit-dialog.component.css\"]\r\n})\r\nexport class BitDialogComponent extends BaseComponent implements OnInit, OnDestroy {\r\n public static MENSAJE_VOID: string = \"No hi ha dades per mostrar\";\r\n display: boolean = false;\r\n message: BitMessage;\r\n height: number = 200;\r\n errorAccessUrl: string;\r\n\r\n constructor(protected bitMessageService: BitMessageService, protected translateService: TranslateService) {\r\n super();\r\n //console.log(\"DialogComponent contructor(\" + bitMessageService + \")\");\r\n //Nos suscribimos a la espera de que envíen mensajes\r\n bitMessageService.observableMessages.pipe(takeUntil(this.destroy$)).subscribe((message) => {\r\n this.showMessage(message);\r\n });\r\n bitMessageService.observableErrors.pipe(takeUntil(this.destroy$)).subscribe((message) => {\r\n this.showError(message);\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n //inicializamos el objeto para que no pete el template\r\n this.message = new BitMessage(\"\", \"\");\r\n this.getMessagesI18N();\r\n }\r\n\r\n getMessagesI18N() {\r\n this.translateService\r\n .selectTranslate(\"messages.erroraccessurl\", {}, \"bitnglibrary\")\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((v) => (this.errorAccessUrl = v));\r\n }\r\n\r\n showMessage(message: BitMessage) {\r\n this.message = message;\r\n if (this.message.json) {\r\n try {\r\n let json = eval(\"(\" + this.message.message + \")\"); //{\"w\":1, \"b\":'foo', \"c\":[false,'false',null, 'null', {\"d\":{\"e\":1.3e5,\"f\":'2.3e5'}}]};\r\n this.message.message = JSON.stringify(json, undefined, 2);\r\n } catch (error) {\r\n console.warn(\"No pudo convertirse a JSON la información del log\");\r\n }\r\n }\r\n message.height === 0 ? (this.message.height = this.calculateHeightNumber()) : undefined;\r\n this.display = true;\r\n }\r\n\r\n showError(error: Error) {\r\n this.showMessage(new BitMessage(`${this.errorAccessUrl} ${error.url}`, error.errorText, 1024, 600, false, BitMessage.ERROR, error.trazaError));\r\n }\r\n\r\n get isSeverityInfo() {\r\n return this.message && this.message.severity === \"info\";\r\n }\r\n\r\n /**\r\n * Calcula la altura del diálogo en función de la información a mostrar.\r\n * TODO: Contar las líneas reales del mensaje en vez de la longitud\r\n */\r\n private calculateHeightNumber(): number {\r\n let msj = this.message.message;\r\n if (msj) {\r\n if (msj.length < 100) {\r\n return 100;\r\n } else if (msj.length < 200) {\r\n return 200;\r\n } else if (msj.length < 300) {\r\n return 300;\r\n } else if (msj.length < 400) {\r\n return 400;\r\n } else {\r\n return 500;\r\n }\r\n } else {\r\n this.message.message = BitDialogComponent.MENSAJE_VOID;\r\n return 100;\r\n }\r\n }\r\n\r\n syntaxHighlight(json) {\r\n if (typeof json != \"string\") {\r\n json = JSON.stringify(json, undefined, 2);\r\n }\r\n json = json.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\r\n return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)/g, function (match) {\r\n var cls = \"number\";\r\n if (/^\"/.test(match)) {\r\n if (/:$/.test(match)) {\r\n cls = \"key\";\r\n } else {\r\n cls = \"string\";\r\n }\r\n } else if (/true|false/.test(match)) {\r\n cls = \"boolean\";\r\n } else if (/null/.test(match)) {\r\n cls = \"null\";\r\n }\r\n return '<span class=\"' + cls + '\">' + match + \"</span>\";\r\n });\r\n }\r\n}\r\n","import { Component, ChangeDetectorRef, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\nimport { AyudaContextual } from \"../../data/ayudacontextual\";\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\n\r\n@Component({\r\n selector: \"bit-help\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div class=\"ventana-ayuda\" *ngIf=\"ayudaPressed\">\r\n <div class=\"ayuda-header\">\r\n {{ ayuda.header }}\r\n <span class=\"fa fa-close\" (click)=\"hideAyuda()\"></span>\r\n </div>\r\n <div class=\"ayuda-body\">\r\n <p class=\"ayuda-subtitulo\" [innerHTML]=\"ayuda.title\"></p>\r\n <p [innerHTML]=\"ayuda.body\"></p>\r\n </div>\r\n </div>\r\n `\r\n //styleUrls: [\"bit-help.component.css\"]\r\n})\r\nexport class BitHelpComponent {\r\n ayuda: AyudaContextual;\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n this.ayuda = null;\r\n // cada vez que el servicio emite una nueva ayuda, la mostramos\r\n ayudaService.mostrar.subscribe(ayuda => {\r\n console.log(\"Mostrando ayuda\", ayuda);\r\n this.ayuda = ayuda;\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n /** Oculta el modal con los avisos */\r\n hideAyuda() {\r\n this.ayuda = null;\r\n }\r\n\r\n get ayudaPressed() {\r\n console.log(`ayudaPressed ${this.ayuda != null}`);\r\n return this.ayuda != null;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChange,\r\n ViewChild\r\n} from \"@angular/core\";\r\nimport {Paginator} from \"primeng/paginator\";\r\nimport {Observable} from \"rxjs\";\r\nimport { BASE_RESULTADOS_PAGE, BaseFilter } from '../../../base/shared/base.filter';\r\nimport { PageStatus } from '../../global.constants';\r\nimport { TranslateService } from '../../services';\r\n\r\n\r\n/**\r\n * Componente que muestra un paginador en la sección footer.\r\n **/\r\n@Component({\r\n selector: \"bit-footer\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: \"bit-footer.component.html\"\r\n})\r\nexport class BitFooterComponent implements OnInit, OnChanges {\r\n public static TYPE_LIST: string = \"list\";\r\n public static TYPE_SCROLL: string = \"scroll\";\r\n public static TYPE_FORM: string = \"form\";\r\n public static TYPE_BLANK: string = \"blank\";\r\n\r\n public static MORE_RESULTS = -1;\r\n\r\n @ViewChild(\"pc\")\r\n pc: Paginator;\r\n @Input()\r\n totalItems: number; // Número total de elementos recuperados de la consulta\r\n @Input()\r\n filter: BaseFilter;\r\n @Input()\r\n paginator: boolean;\r\n @Input()\r\n mostrarAvisos: boolean = true;\r\n @Input()\r\n fixed: boolean = true; // Indicará si lo queremos fijo abajo en la página. Por defecto sí.\r\n @Input()\r\n messages: Map<PageStatus, string>;\r\n @Input()\r\n status: PageStatus; // Determina en qué estado está la página: PageStatus.Init, PageStatus.SEARCHING, PageStatus.FINISH_SEARCH\r\n @Input(\"type\")\r\n typeFooter: string;\r\n @Input()\r\n mostrarEnlacesPaginas: boolean = true;\r\n @Input()\r\n mostrarPrimeraUltimaPagina: boolean = true;\r\n @Output()\r\n onPageChange = new EventEmitter<number>(); //para notificar cambios en la página a mostrar\r\n @Output()\r\n onNewPageSize = new EventEmitter<number>(); //para notificar cambios en los elementos a mostrar por página\r\n\r\n baseItemsPerPage: number = BaseFilter.RESULTADOS_PAGE; // guardamos el número de resultados pre-configurados por página para mostrar la lista de x, x+10 y x+20\r\n pageLinkSize: number; // número de enlaces en el paginador para poder navegar hacia delante o detrás\r\n itemsPerPage: number = BaseFilter.RESULTADOS_PAGE; // número de elementos por página que mostramos\r\n\r\n maxCurrentItems: number = -1;\r\n\r\n constructor(private translateService: TranslateService,\r\n private changeRef: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.typeFooter == undefined) {\r\n this.typeFooter = \"list\";\r\n }\r\n if (this.paginator == undefined) {\r\n this.paginator = false;\r\n }\r\n //mensajes por defecto si no vienen definidos\r\n if (this.messages == undefined) {\r\n this.setMessages();\r\n this.messages.set(PageStatus.Error, \"bitnglibrary.footer.error\");\r\n }\r\n }\r\n\r\n private setMessages() {\r\n console.log(\"definimos los mensajes del footer de manera estándar\");\r\n this.messages = new Map<PageStatus, string>();\r\n if (this.isFooterList() || this.isFooterScroll()) {\r\n this.messages.set(PageStatus.Init, \"bitnglibrary.footer.list.init\");\r\n this.messages.set(PageStatus.Searching, \"bitnglibrary.footer.list.searching\");\r\n this.messages.set(PageStatus.EmptyResult, \"bitnglibrary.footer.list.emptyresult\");\r\n this.messages.set(PageStatus.FinishSearch, \"bitnglibrary.footer.list.finishsearch\");\r\n this.messages.set(BitFooterComponent.MORE_RESULTS, \"bitnglibrary.footer.list.moreresults\")\r\n } else if (this.isFooterForm()) {\r\n this.messages.set(PageStatus.Init, \"bitnglibrary.footer.form.init\");\r\n this.messages.set(PageStatus.Searching, \"bitnglibrary.footer.form.searching\");\r\n this.messages.set(PageStatus.FinishSearch, \"bitnglibrary.footer.form.finishsearch\");\r\n this.messages.set(PageStatus.ReadOnly, \"bitnglibrary.footer.list.readonly\");\r\n } else if (this.typeFooter === BitFooterComponent.TYPE_BLANK) {\r\n console.log(\"the footer is BLANK!\");\r\n }\r\n }\r\n\r\n /**\r\n * Cuando tengamos la referencia al componente paginator actualizamos internamente el número de página y el número de páginas\r\n * del desplegable con la información del filtro proporcionado\r\n */\r\n ngAfterViewInit() {\r\n if (this.pc) {\r\n this.itemsPerPage = this.filter.resultados;\r\n console.log(`this.filter.resultados ${this.filter.resultados}`);\r\n console.log(`this.filter.pagina ${this.filter.pagina}`);\r\n this.pc.rows = this.filter.resultados;\r\n this.pc._first = (this.filter.pagina - 1) * this.pc.rows;\r\n this.pc.updatePageLinks();\r\n }\r\n }\r\n\r\n /**\r\n * Escucharemos a cambios en las propiedades totalItems para actualizar el paginador con respecto a las páginas que mostramos\r\n */\r\n ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"totalItems\") {\r\n this.totalItems = changedProp.currentValue;\r\n console.log(`new totalItems ${this.totalItems}`);\r\n if (changedProp.previousValue !== changedProp.currentValue) {\r\n this.calculatePageLinkSize(); //recalculamos\r\n }\r\n this.maxCurrentItems = this.filter ? this.filter.pagina * this.filter.resultados : -1;\r\n } else if (propName === \"filter\") {\r\n this.filter = changedProp.currentValue;\r\n if (this.filter?.pagina * this.filter?.resultados > this.maxCurrentItems) {\r\n this.maxCurrentItems = this.filter?.pagina * this.filter?.resultados;\r\n }\r\n console.log(`new filter ${this.filter?.pagina} - ${this.maxCurrentItems}`);\r\n if (changedProp.previousValue !== changedProp.currentValue) {\r\n this.calculatePageLinkSize(); //recalculamos\r\n if (!this.filter?.pagina || this.filter.pagina <= 1) {\r\n this.goToFirstPage();\r\n }\r\n }\r\n }\r\n }\r\n if (this.pc && this.changeRef) {\r\n console.log('updatePageLinks');\r\n this.pc.updatePageLinks();\r\n this.changeRef.detectChanges();\r\n }\r\n }\r\n\r\n /** Calcula el número de enlaces visibles en el paginador (en el rango entre 1 y BASE_RESULTADOS_PAGE). */\r\n calculatePageLinkSize() {\r\n console.log(`calculatePageLinkSize totalItems: ${this.totalItems} itemsPerPage:${this.itemsPerPage}`);\r\n this.pageLinkSize = Math.ceil(this.totalItems / this.itemsPerPage);\r\n if (this.pageLinkSize < 1) {\r\n this.pageLinkSize = 1;\r\n }\r\n if (this.pageLinkSize > BASE_RESULTADOS_PAGE) {\r\n this.pageLinkSize = BASE_RESULTADOS_PAGE;\r\n }\r\n }\r\n\r\n /** Establece el número de página en la visualización de resultados. Se invoca cuando el usuario cambia el número de resultados a mostrar o cambia de página */\r\n paginate(event: any): void {\r\n console.log(\"Page changed to\", event.page);\r\n if (event.rows !== this.itemsPerPage) {\r\n // han cambiado el número de elementos por página\r\n //notificamos que los elementos por página han cambiado\r\n this.onNewPageSize.emit(event.rows);\r\n this.itemsPerPage = event.rows;\r\n this.goToFirstPage();\r\n this.calculatePageLinkSize(); // recalculamos el número de enlaces de página\r\n } else {\r\n // notificamos a nuestro papá que la página ha cambiado\r\n this.onPageChange.emit(event.page + 1);\r\n }\r\n }\r\n\r\n private goToFirstPage() {\r\n if (this.pc) {\r\n //volvemos a la primera página\r\n this.pc._first = 1;\r\n this.pc.updatePageLinks();\r\n }\r\n }\r\n\r\n getStyle() {\r\n if (this.fixed && this.typeFooter === BitFooterComponent.TYPE_LIST || this.typeFooter === BitFooterComponent.TYPE_SCROLL) {\r\n if (this.totalItems > 0) {\r\n return \"footer navbar-fixed-bottom\";\r\n } else {\r\n return \"footer navbar-fixed-bottom-60\";\r\n }\r\n } else if (this.fixed && this.typeFooter === BitFooterComponent.TYPE_FORM) {\r\n return \"footer navbar-fixed-bottom-form\";\r\n } else {\r\n return \"footer\";\r\n }\r\n }\r\n\r\n isFooterList() {\r\n return this.typeFooter === BitFooterComponent.TYPE_LIST;\r\n }\r\n\r\n isFooterScroll() {\r\n return this.typeFooter === BitFooterComponent.TYPE_SCROLL;\r\n }\r\n\r\n isFooterForm() {\r\n return this.typeFooter === BitFooterComponent.TYPE_FORM;\r\n }\r\n\r\n /** Flag: la página está realizando la búsqueda. */\r\n get searchInitiated() {\r\n return this.status === PageStatus.Init || this.status == PageStatus.Reset || !this.status;\r\n }\r\n\r\n /** Flag: la página está realizando la búsqueda. */\r\n get searching() {\r\n return this.status === PageStatus.Searching;\r\n }\r\n\r\n /** Flag: la página ha finalizado la última búsqueda. */\r\n get searchFinished() {\r\n return this.status === PageStatus.FinishSearch;\r\n }\r\n\r\n /** Flag: la página está en modo solo lectura */\r\n get readOnly() {\r\n return this.status == PageStatus.ReadOnly;\r\n }\r\n\r\n /** Flag: la página ha finalizado con error */\r\n get error() {\r\n return this.status == PageStatus.Error;\r\n }\r\n\r\n /** Flag: encontrado resultado. */\r\n get foundResult() {\r\n return (\r\n this.status === PageStatus.FinishSearch &&\r\n ((this.typeFooter === BitFooterComponent.TYPE_LIST && this.totalItems > 0)\r\n || this.typeFooter === BitFooterComponent.TYPE_FORM\r\n || (this.typeFooter === BitFooterComponent.TYPE_SCROLL && this.totalItems <= this.maxCurrentItems))\r\n );\r\n }\r\n\r\n /** Flag: hay más resultados (scroll). */\r\n get moreResults() {\r\n return (\r\n this.status === PageStatus.FinishSearch &&\r\n (this.typeFooter === BitFooterComponent.TYPE_SCROLL && this.totalItems > this.maxCurrentItems)\r\n );\r\n }\r\n\r\n /** Flag: no hay resultados. */\r\n get emptyResult() {\r\n return this.status === PageStatus.FinishSearch && this.totalItems === 0;\r\n }\r\n\r\n get initMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.Init));\r\n }\r\n\r\n get searchingMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.Searching));\r\n }\r\n\r\n get finishMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.FinishSearch));\r\n }\r\n\r\n get moreResultsMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(BitFooterComponent.MORE_RESULTS));\r\n }\r\n\r\n get emptyMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.EmptyResult));\r\n }\r\n\r\n get readOnlyMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.ReadOnly));\r\n }\r\n\r\n get errorMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.Error));\r\n }\r\n}\r\n","<footer [class]=\"getStyle()\">\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"typeFooter === 'list'\" [hidden]=\"!this.status || emptyResult\">\r\n <div class=\"numero-resultados\">\r\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\r\n <span>{{totalItems}}</span>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"typeFooter === 'scroll'\" [hidden]=\"!this.status || emptyResult\">\r\n <div class=\"numero-resultados-scroll\">\r\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\r\n <span *ngIf=\"maxCurrentItems >= totalItems\">{{totalItems}}</span>\r\n <span *ngIf=\"maxCurrentItems < totalItems\">{{maxCurrentItems}} / {{totalItems}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-7 lg:col-7 p-text-center\" *ngIf=\"typeFooter === 'list'\"\r\n [hidden]=\"!this.status || emptyResult\">\r\n <p-paginator *ngIf=\"paginator\" #pc\r\n [rows]=\"itemsPerPage\"\r\n [totalRecords]=\"totalItems\"\r\n [pageLinkSize]=\"mostrarEnlacesPaginas ? pageLinkSize : 1\"\r\n [rowsPerPageOptions]=\"[baseItemsPerPage,baseItemsPerPage*5,baseItemsPerPage*25,baseItemsPerPage*50]\"\r\n [showPageLinks]=\"true\"\r\n [showJumpToPageDropdown]=\"false\"\r\n [showFirstLastIcon]=\"mostrarPrimeraUltimaPagina ? true : maxCurrentItems >= totalItems\"\r\n (onPageChange)=\"paginate($event)\"></p-paginator>\r\n </div>\r\n <div class=\"col-12 md:col-3 lg:col-3\">\r\n <div *ngIf=\"searchInitiated\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{initMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"searching\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{searchingMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"readOnly\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{readOnlyMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"foundResult\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{finishMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"moreResults\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{moreResultsMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"emptyResult\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-exclamation\"></i>\r\n <span>{{emptyMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"error\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n <span>{{errorMessage | async}}</span>\r\n </div>\r\n\r\n <bit-help></bit-help>\r\n </div>\r\n </div>\r\n</footer>\r\n","import { Input, Component } from \"@angular/core\";\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\n\r\n@Component({\r\n selector: \"bit-boton-ayuda\",\r\n template: `\r\n <p-button *ngIf=\"boton\" type=\"button\" (click)=\"mostrarAyuda()\" [ngClass]=\"'p-button-outlined p-button-secondary ' + extraClass\">\r\n {{ \"bitnglibrary.help\" | transloco }} <span class=\"fa fa-life-ring\"></span>\r\n </p-button>\r\n\r\n <i *ngIf=\"!boton\" [ngClass]=\"'btn-ayuda fa fa-question ' + extraClass\" (click)=\"mostrarAyuda()\"></i>\r\n `\r\n})\r\nexport class BitBotonAyudaComponent {\r\n @Input() ayuda: string;\r\n @Input() boton: boolean = false; // show a little [?] or a full button\r\n @Input() extraClass: string = \"\"; // extra CSS classes for HTML component\r\n\r\n constructor(private ayudaService: AyudaService) {}\r\n\r\n mostrarAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"otherToolbarAction\"\r\n})\r\n/**\r\n * Convierte un map de acciones del toolbar en un array de acciones pero conteniendo\r\n * solo aquellas acciones que tengan la propiedad otherAction definida a true\r\n */\r\nexport class OtherToolbarActionPipe implements PipeTransform {\r\n transform(toolbarMap: any): any[] {\r\n let actions = [];\r\n for (var key in toolbarMap) {\r\n if (toolbarMap[key].otherAction) {\r\n actions.push(toolbarMap[key]);\r\n }\r\n }\r\n return actions;\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, SimpleChanges, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/**\r\n * Componenente que muestra una barra de botones.\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-toolbar\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: \"bit-toolbar.component.html\"\r\n //styleUrls: [\"bit-toolbar.component.css\"]\r\n})\r\nexport class BitToolbarComponent {\r\n public static FILTER_BUTTON: string = \"filter\";\r\n public static PRINT_BUTTON: string = \"print\";\r\n public static EXPORT_BUTTON: string = \"export\";\r\n public static NEW_BUTTON: string = \"new\";\r\n public static SAVE_BUTTON: string = \"save\";\r\n public static DELETE_BUTTON: string = \"delete\";\r\n public static ADD_BUTTON: string = \"add\";\r\n public static HELP_BUTTON: string = \"help\";\r\n public mostrar: boolean = false;\r\n\r\n\r\n @Input() toolbar: {};\r\n @Input() ayuda: string; // clave de la ayuda contextual que mostrar para su botón\r\n @Input() femenino: boolean = false; // género femenino (para los nombres de botones) o no\r\n @Input() otherActionsDropdown: boolean = false; // determina si las \"other actions\" deben mostrarse en línea o como un desplegable\r\n @Output() onToolbarButtonPressed = new EventEmitter<string>();\r\n\r\n mostrarOtherActionsEnDesplegable: boolean;\r\n\r\n enable(button: string): boolean {\r\n return this.toolbar[button] && this.toolbar[button].enable;\r\n }\r\n\r\n visible(button: string): boolean {\r\n return this.toolbar[button] && this.toolbar[button].visible;\r\n }\r\n\r\n label(button: string, defaultLabel: string): string {\r\n return (this.toolbar[button] && this.toolbar[button].label) || defaultLabel;\r\n }\r\n\r\n estilo(button: string, defaultValue: string): string {\r\n return (this.toolbar[button] && this.toolbar[button].estilo) || defaultValue || \"fa fa-balance-spinner\";\r\n }\r\n\r\n showFilter() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.FILTER_BUTTON);\r\n }\r\n\r\n print() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.PRINT_BUTTON);\r\n }\r\n\r\n exportData() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.EXPORT_BUTTON);\r\n }\r\n\r\n newElement() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.NEW_BUTTON);\r\n }\r\n\r\n add() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.ADD_BUTTON);\r\n }\r\n\r\n save() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.SAVE_BUTTON);\r\n }\r\n\r\n delete() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.DELETE_BUTTON);\r\n }\r\n\r\n otherAction(button: any) {\r\n this.onToolbarButtonPressed.emit(button.action);\r\n }\r\n\r\n /* ver/ocultar menú opciones toolbar acciones */\r\n\r\n toogle() {\r\n this.mostrar = !this.mostrar;\r\n }\r\n\r\n\r\n /** escuchamos cuando la toolbar cambia para ajustar las other Actions */\r\n ngOnChanges(changes: SimpleChanges) {\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"toolbar\") {\r\n let newToolbar = changedProp.currentValue;\r\n console.log(\"nueva toolbar proporcionada\", newToolbar);\r\n this.toolbar = newToolbar;\r\n\r\n // calcular si las other actions deben mostrarse en desplegable\r\n // (se ha pedido asi y hay más de una)\r\n let otherActionsVisibles = 0;\r\n for (let key in this.toolbar) {\r\n if (this.toolbar[key].otherAction && this.toolbar[key].visible) {\r\n otherActionsVisibles++;\r\n }\r\n }\r\n\r\n this.mostrarOtherActionsEnDesplegable = this.otherActionsDropdown && otherActionsVisibles > 1;\r\n console.log(\"mostrarOtherActionsEnDesplegable:\" + this.mostrarOtherActionsEnDesplegable);\r\n }\r\n }\r\n }\r\n}\r\n","<!-- acciones no estandar definidas dinámicamente o muy particulares-->\r\n<!-- si otherActionsDropdown viene a true y hay más de una acción, se muestran como un desplegable, si no, todas las acciones en línea -->\r\n<div class=\"contenedor-toolbar\">\r\n <!-- <div class=\"btn-group dropdown\" role=\"group\" *ngIf=\"mostrarOtherActionsEnDesplegable\">\r\n <button type=\"button\" *ngIf=\"otherActionsDropdown\"\r\n class=\"btn btn-dinamico btn-accion dropdown-toggle\" data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\" aria-expanded=\"false\">Accions <span class=\"pi pi-caret-right\"></span></button>\r\n <div class=\"dropdown-menu desplegable-accion\">\r\n <ng-container *ngFor=\"let button of (toolbar | otherToolbarAction)\">\r\n <button type=\"button\" \r\n *ngIf=\"button.visible\"\r\n [disabled]=\"!button.enable\" (click)=\"otherAction(button)\" class=\"btn btn-dinamico btn-accion dropdown-item\"\r\n ><span [class]=\"button.estilo?button.estilo:'pi pi-caret-right'\"></span> {{\"bitnglibrary.toolbar.\"+button.label | transloco}}</button>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n\r\n <ng-container *ngIf=\"mostrarOtherActionsEnDesplegable\">\r\n <p-button (click)=\"toogle()\" *ngIf=\"otherActionsDropdown\"\r\n styleClass=\"p-button-primary\" icon=\"pi pi-caret-right\" iconPos=\"right\" label=\"Accions\"></p-button>\r\n <ul class=\"button-dropdown\" *ngIf=\"mostrar\">\r\n <ng-container *ngFor=\"let button of (toolbar | otherToolbarAction)\">\r\n <li *ngIf=\"button.visible\" (click)=\"otherAction(button)\"><span>{{\"bitnglibrary.toolbar.\"+button.label | transloco}}</span></li>\r\n </ng-container>\r\n </ul>\r\n </ng-container>\r\n \r\n <!-- si otherActionsDropdown viene a false o solo hay una acción, se muestran una tras otra en línea -->\r\n <ng-container *ngIf=\"!mostrarOtherActionsEnDesplegable\">\r\n <ng-container *ngFor=\"let button of (toolbar | otherToolbarAction)\">\r\n <p-button *ngIf=\"button.visible\" type=\"button\" [disabled]=\"!button.enable\" (click)=\"otherAction(button)\">{{\"bitnglibrary.toolbar.\"+button.label | transloco}} <span [class]=\"button.estilo?button.estilo:'pi pi-angle-right'\"></span></p-button>\r\n </ng-container>\r\n </ng-container>\r\n <!-- acciones estandar -->\r\n <p-button *ngIf=\"visible('new')\" type=\"button\" [disabled]=\"!enable('new')\" (click)=\"newElement()\" styleClass=\"p-button-danger\">{{(femenino ? \"bitnglibrary.toolbar.new-female\": \"bitnglibrary.toolbar.new\") | transloco}} <span [class]=\"estilo('new', 'pi pi-plus')\"></span></p-button>\r\n <p-button *ngIf=\"visible('add')\" type=\"button\" [disabled]=\"!enable('add')\" (click)=\"add()\" styleClass=\"p-button-danger\">{{\"bitnglibrary.toolbar.add\" | transloco}} <span [class]=\"estilo('add', 'pi pi-plus')\"></span></p-button>\r\n <!--div class=\"btn-group\" role=\"group\" *ngIf=\"visible('filter')\">\r\n <button type=\"button\" [disabled]=\"!enable('filter')\" (click)=\"showFilter()\" class=\"btn btn-transparent\">{{label('filter', 'Mostra filtre')}} <span [class]=\"estilo('filter', 'glyphicon glyphicon-search')\"></span></button>\r\n </div-->\r\n <p-button *ngIf=\"visible('export')\" type=\"button\" [disabled]=\"!enable('export')\" (click)=\"exportData()\" styleClass=\"p-button-outlined p-button-secondary\">{{\"bitnglibrary.toolbar.export\" | transloco}} <span [class]=\"estilo('export', 'pi pi-file')\"></span></p-button>\r\n <p-button *ngIf=\"visible('save')\" type=\"button\" [disabled]=\"!enable('save')\" (click)=\"save()\" styleClass=\"p-button-success\">{{\"bitnglibrary.toolbar.save\" | transloco}} <span [class]=\"estilo('save', 'pi pi-save')\"></span></p-button>\r\n <p-button *ngIf=\"visible('delete')\" type=\"button\" [disabled]=\"!enable('delete')\" (click)=\"delete()\" styleClass=\"p-button-outlined p-button-danger\">{{\"bitnglibrary.toolbar.delete\" | transloco}} <span [class]=\"estilo('delete', 'pi pi-trash')\"></span></p-button>\r\n <p-button *ngIf=\"visible('print')\" type=\"button\" [disabled]=\"!enable('print')\" (click)=\"print()\" styleClass=\"p-button-outlined p-button-secondary\">{{\"bitnglibrary.toolbar.print\" | transloco}} <span [class]=\"estilo('print', 'pi pi-print')\"></span></p-button>\r\n <ng-container *ngIf=\"ayuda\">\r\n <bit-boton-ayuda boton=\"true\" [ayuda]=\"ayuda\"></bit-boton-ayuda>\r\n </ng-container>\r\n</div>","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/**\r\n * Componente que muestra miga de pan y toolbar\r\n */\r\n@Component({\r\n selector: \"bit-header\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: \"bit-header.component.html\"\r\n})\r\nexport class BitHeaderComponent {\r\n @Input() toolbar: any = {};\r\n @Input() noToolbar: boolean = false;\r\n @Input() otherActionsDropdown: boolean = false; // determina si las \"other actions\" deben mostrarse en línea o como un desplegable\r\n @Input() breadcrumb: any[];\r\n @Input() masacciones: any[];\r\n @Input() colsBreadcrumb: number;\r\n @Input() femenino: boolean = false; // género femenino (para los nombres de botones) o no\r\n @Input() ayuda: string; // clave de la ayuda contextual para la botonera\r\n\r\n @Output() onToolbarButtonPressed = new EventEmitter<string>();\r\n\r\n /** Tenemos que capturar el evento y volver a subirlo, por diseño Angular2 no permite enviar un evento de un nieto a su abuelo, solo\r\n * de hijo a padre\r\n */\r\n onTBPressed(button) {\r\n this.onToolbarButtonPressed.emit(button);\r\n }\r\n}\r\n","<!-- <div class=\"grid mt-3 mb-3\">\r\n <div class=\"col-12 lg:col-4 sm:col-4 caja-breadcrumb\"> -->\r\n <!-- ruta de donde nos encontramos (miga de pan) -->\r\n <!-- <bit-breadcrumb *ngIf=\"breadcrumb\" [breadcrumb]=\"breadcrumb\"></bit-breadcrumb>\r\n </div>\r\n <div *ngIf=\"noToolbar === false\"\r\n class=\"col-12 lg:col-8 sm:col-8\"> -->\r\n <!-- botonera de acciones --> \r\n <!-- <bit-toolbar \r\n [toolbar]=\"toolbar\"\r\n [femenino]=\"femenino\"\r\n [otherActionsDropdown]=\"otherActionsDropdown\"\r\n [ayuda]=\"ayuda\"\r\n (onToolbarButtonPressed)=\"onTBPressed($event)\"></bit-toolbar>\r\n </div>\r\n</div> -->\r\n\r\n<div class=\"grid mt-3 mb-3\">\r\n <div class=\"col-12 caja-breadcrumb\" [ngClass]=\"[colsBreadcrumb ? 'lg:col-' + colsBreadcrumb : 'lg:col-4']\">\r\n <!-- ruta de donde nos encontramos (miga de pan) -->\r\n <bit-breadcrumb *ngIf=\"breadcrumb\" [breadcrumb]=\"breadcrumb\"></bit-breadcrumb>\r\n </div>\r\n <div *ngIf=\"noToolbar === false\"\r\n class=\"col-12\" [ngClass]=\"[colsBreadcrumb ? 'lg:col-' + (12- colsBreadcrumb) : 'lg:col-8']\">\r\n <!-- botonera de acciones --> \r\n <bit-toolbar\r\n [toolbar]=\"toolbar\"\r\n [femenino]=\"femenino\"\r\n [otherActionsDropdown]=\"otherActionsDropdown\"\r\n [ayuda]=\"ayuda\"\r\n (onToolbarButtonPressed)=\"onTBPressed($event)\"></bit-toolbar>\r\n </div>\r\n</div>","import { Component, Input, OnDestroy } from \"@angular/core\";\r\nimport { Subscription, Observable } from \"rxjs\";\r\n\r\nimport { GeneralUtils } from \"../../services/general-utils.service\";\r\nimport { startWith, map, tap, delay } from \"rxjs/operators\";\r\n\r\n@Component({\r\n selector: \"bit-loading\",\r\n template: `\r\n <div class=\"modal\" *ngIf=\"loading\"> \r\n <div class=\"grid\">\r\n <div class=\"col-12 text-center\">\r\n <i class=\"pi pi-spin pi-spinner icono-loading\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n //styleUrls: [\"bit-loading.component.css\"]\r\n})\r\nexport class BitLoadingComponent implements OnDestroy {\r\n @Input(\"source\") imageSource: string;\r\n loading: boolean = false;\r\n loading$: Observable<boolean>;\r\n inProgressCount: number; // cantidad de cargas en proceso\r\n private subscription: Subscription;\r\n\r\n constructor(private generalUtils: GeneralUtils) {\r\n console.log(\"Constructor bitloading\");\r\n this.inProgressCount = 0;\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription = this.generalUtils.observableLoading\r\n .pipe(\r\n map(value => (value == \"start\" ? true : false)),\r\n startWith(false),\r\n delay(0) //esto es para evitar el error ExpressionChangedAfterItHasBeenCheckedError. Mas info en: https://blog.angular-university.io/angular-debugging/\r\n )\r\n .subscribe(value => {\r\n console.log(\"loading: \" + value);\r\n if (value) {\r\n this.inProgressCount++;\r\n } else {\r\n if (this.inProgressCount > 0) this.inProgressCount--;\r\n }\r\n console.log(\"inProgressCount \" + this.inProgressCount);\r\n this.loading = this.inProgressCount > 0;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.loading = false;\r\n if (this.subscription != null) this.subscription.unsubscribe();\r\n }\r\n}\r\n","import { Component, OnDestroy } from \"@angular/core\";\r\nimport { concatMap, take } from \"rxjs/operators\";\r\nimport { combineLatest, of, Observable } from \"rxjs\";\r\nimport { Message } from \"primeng/api\";\r\nimport { MessageService } from \"primeng/api\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { BitMessageService, TranslateService } from \"../../services\";\r\n\r\n@Component({\r\n selector: \"bit-notification-toast\",\r\n template: ` <p-toast key=\"notification\" position=\"top-right\"></p-toast> `\r\n})\r\nexport class BitNotificationToastComponent extends BaseComponent implements OnDestroy {\r\n constructor(protected bitMessageService: BitMessageService, protected primeMessageService: MessageService, protected translateService: TranslateService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.subscribeToNotifications();\r\n }\r\n\r\n //Nos suscribimos a la espera de que envíen notificaciones\r\n subscribeToNotifications() {\r\n this.bitMessageService.observableNotifications\r\n .pipe(\r\n concatMap(\r\n (notification) =>\r\n combineLatest([\r\n of(notification.severity),\r\n this.translateService.selectTranslate(notification.title.code, notification.title.params, notification.title.context),\r\n this.translateService.selectTranslate(notification.message.code, notification.message.params, notification.message.context)\r\n ]).pipe(take(1)) //prevenimos que si nos cambian de idioma, se vuelva a disparar la traducción y vuelva a aparecer el mensaje en el idioma elegido\r\n )\r\n )\r\n .subscribe(([severity, title, message]) => {\r\n this.showNotification(severity, title, message);\r\n });\r\n }\r\n\r\n showNotification(severity: string, title: string, message: string) {\r\n this.primeMessageService.add({ key: \"notification\", severity: severity, summary: title, detail: message });\r\n }\r\n}\r\n","import { Component, OnDestroy } from \"@angular/core\";\r\nimport { concatMap, filter, take, tap } from \"rxjs/operators\";\r\nimport { combineLatest, of, Observable } from \"rxjs\";\r\nimport { Message } from \"primeng/api\";\r\nimport { MessageService } from \"primeng/api\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { BitMessageService, TranslateService } from \"../../services\";\r\nimport { ErrorValidateForm } from \"../../../base/models\";\r\n\r\n@Component({\r\n selector: \"bit-notification-error\",\r\n template: ` <p-messages [value]=\"messages\" [closable]=\"true\"></p-messages> `\r\n})\r\nexport class BitNotificationErrorComponent extends BaseComponent implements OnDestroy {\r\n messages: Message[] = [];\r\n\r\n constructor(protected bitMessageService: BitMessageService, protected primeMessageService: MessageService, protected translateService: TranslateService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n console.log(\"BitNotificationErrorComponent ngOnInit\");\r\n this.subscribeToNotificationMessages();\r\n }\r\n\r\n //Nos suscribimos a la espera de que envíen notificaciones de error\r\n private subscribeToNotificationMessages() {\r\n this.bitMessageService.observableNotificationsErrors\r\n .pipe(\r\n tap((notificacionError) => {\r\n //controlamos si nos llega vacio\r\n console.log(\"subscribeToNotificationMessages\", notificacionError);\r\n if (!notificacionError) {\r\n this.hideErrors();\r\n }\r\n }),\r\n filter((notificacionError) => !!notificacionError), //controlamos que no pasemos algo vacío\r\n concatMap((notificationError) =>\r\n combineLatest([\r\n //de momento, title y message no se están mostrando en pantalla\r\n this.translateService.selectTranslate(notificationError.title.code, notificationError.title.params, notificationError.title.context),\r\n this.translateService.selectTranslate(notificationError.message.code, notificationError.message.params, notificationError.message.context),\r\n of(notificationError.context),\r\n of(notificationError.multipleErrors)\r\n ]).pipe(take(1))\r\n )\r\n )\r\n .subscribe(([title, message, context, multipleErrros]) => {\r\n console.log(`subscribe ${title} ${message}`);\r\n this.showNotificationError(title, message, context, multipleErrros);\r\n });\r\n }\r\n\r\n /**\r\n * Muestra una notificación de error que puede ser o bien múltiple o simple\r\n * @param title\r\n * @param message\r\n * @param context\r\n * @param multipleErrors\r\n */\r\n showNotificationError(title: string, message: string, context: string, multipleErrors: ErrorValidateForm[]) {\r\n this.messages = [];\r\n console.log(`showNotificationError ${title} ${message}`);\r\n if (multipleErrors) {\r\n //Para cada error a mostrar\r\n multipleErrors.map((error) =>\r\n combineLatest([\r\n this.getTranslatedPrefixes(error, context),\r\n this.translateService.selectTranslate(error.errorMessage.code, error.errorMessage.params, error.errorMessage.context)\r\n ])\r\n .pipe(take(1)) //prevenimos que si nos cambian de idioma, se vuelva a disparar la traducción y concatenemos mensajes\r\n .subscribe(([prefixes, textError]) => {\r\n this.pushError(\r\n prefixes.reduce((acc, v) => acc + \" > \" + v),\r\n textError\r\n );\r\n })\r\n );\r\n } else {\r\n this.pushError(title, message);\r\n }\r\n }\r\n\r\n hideNotificacionError() {\r\n console.log(\"ocultamos las notificaciones\");\r\n this.messages = [];\r\n }\r\n\r\n /** Añade un mensaje de error a la lista general de errores que mostrará el componente usando Prime */\r\n private pushError(title: string, message: string) {\r\n console.log(`new error ${title} ${message}`);\r\n this.messages.push({\r\n severity: \"error\",\r\n summary: title,\r\n detail: message\r\n });\r\n }\r\n\r\n private hideErrors() {\r\n console.log(\"hideErrors\");\r\n this.messages = [];\r\n }\r\n\r\n /** Transforma un array de códigos a traducir en un array de observables para traducir cada código y combinado todo\r\n * con el operador combineLatest para recibir los valores traducidos en la misma secuencia que ocupan en el array\r\n */\r\n private getTranslatedPrefixes(error: ErrorValidateForm, context: string): Observable<string[]> {\r\n let prefixErrors$: Observable<string>[] = error.prefixes.map((code) => {\r\n if (typeof code == \"number\") {\r\n //para arrays\r\n return of(code);\r\n } else {\r\n return this.translateService.selectTranslate(code, undefined, context);\r\n }\r\n });\r\n return combineLatest(prefixErrors$);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\n\r\nimport { FileItem, FileUploader, ParsedResponseHeaders } from 'ng2-file-upload';\r\nimport { GeneralUtils } from '../../services';\r\n\r\n@Component({\r\n selector: \"bit-ng-upload\",\r\n templateUrl: \"bit-ng-upload.component.html\",\r\n //styleUrls: [\"bit-ng-upload.component.css\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class BitNGUploadComponent implements OnInit {\r\n @Input()\r\n uploader: FileUploader;\r\n @Input()\r\n hasDropZone: boolean;\r\n @Input()\r\n hasQueue: boolean;\r\n @Input()\r\n hasSingleUpload: boolean;\r\n @Input()\r\n hasMultipleUpload: boolean;\r\n @Input()\r\n deleteItemAfterUpload: boolean;\r\n @Input()\r\n canUpload: boolean;\r\n @Input()\r\n hasProgressBar: boolean;\r\n @Input()\r\n sizeDropZone: number;\r\n @Input()\r\n sizeQueue: number;\r\n @Input()\r\n inputAccept?: string = \"*\";\r\n\r\n @Output()\r\n onSuccess: EventEmitter<any> = new EventEmitter<any>();\r\n @Output()\r\n onError: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @ViewChild(\"fileRef\")\r\n fileInput: any;\r\n\r\n hasBaseDropZoneOver: boolean;\r\n\r\n constructor(private generalUtils: GeneralUtils, private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.uploader.onSuccessItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {\r\n console.log(\"success upload file\");\r\n this.stopLoading();\r\n this.onSuccess.emit({ item, response, status, headers });\r\n if (this.deleteItemAfterUpload) {\r\n item.remove();\r\n }\r\n };\r\n this.uploader.onErrorItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {\r\n console.log(\"error upload file\");\r\n this.stopLoading();\r\n this.onError.emit({ item, response, status, headers });\r\n };\r\n this.uploader.onProgressItem = (item: FileItem, progress: any) => {\r\n console.log(progress);\r\n this.changeDetector.detectChanges();\r\n };\r\n\r\n this.hasBaseDropZoneOver = false;\r\n }\r\n\r\n /** Arrancará el spinner en el caso de que la barra de progreso esté desactivada*/\r\n startLoading() {\r\n if (!this.hasProgressBar) {\r\n this.generalUtils.startLoading();\r\n }\r\n }\r\n\r\n /** Parará el spinner en el caso de que la barra de progreso esté desactivada*/\r\n stopLoading() {\r\n if (!this.hasProgressBar) {\r\n this.generalUtils.stopLoading();\r\n }\r\n }\r\n\r\n /** Sube todos los ficheros en cola al servidor */\r\n uploadAll() {\r\n this.startLoading();\r\n this.uploader.uploadAll();\r\n }\r\n\r\n /** Elimina la cola de ficheros y des-selecciona el fichero que pudiera estar seleccionado en el single input file */\r\n removeQueue() {\r\n this.stopLoading();\r\n this.uploader.clearQueue();\r\n this.changeDetector.detectChanges();\r\n this.removeInputFile();\r\n }\r\n\r\n /** Cancela la subida de ficheros al servidor */\r\n cancelQueue() {\r\n this.stopLoading();\r\n this.uploader.cancelAll();\r\n }\r\n\r\n /** Sube un fichero al servidor de manera individual */\r\n uploadFile(item) {\r\n this.startLoading();\r\n item.upload();\r\n }\r\n\r\n /** Elimina de la cola un fichero en concreto y en el caso de que coincida con el seleccionado en el single input file, también\r\n * lo des-selecciona\r\n */\r\n removeFile(item) {\r\n this.stopLoading();\r\n if (this.fileInput && this.fileInput.nativeElement.value.indexOf(item.file.name) != -1) {\r\n this.removeInputFile();\r\n }\r\n item.remove();\r\n }\r\n\r\n /** Cancela la subida de un fichero de manera individual */\r\n cancelFile(item) {\r\n this.stopLoading();\r\n item.cancel();\r\n }\r\n\r\n /** Des-selecciona el fichero seleccionado en el input file */\r\n removeInputFile() {\r\n if (this.fileInput) this.fileInput.nativeElement.value = \"\";\r\n }\r\n\r\n /** Evento que se dispara cuando arrastran un fichero a la zona de drag&drop */\r\n public fileOverBase(e: any): void {\r\n this.hasBaseDropZoneOver = e;\r\n }\r\n}\r\n"," <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div *ngIf=\"hasDropZone\"\r\n ng2FileDrop\r\n [ngClass]=\"{'nv-file-over': hasBaseDropZoneOver}\"\r\n (fileOver)=\"fileOverBase($event)\"\r\n [uploader]=\"uploader\"\r\n class=\"well my-drop-zone\">\r\n <div class=\"contenedor-upload\">\r\n <i class=\"fa fa-file documento\"></i>\r\n <div>\r\n <span>{{ \"bitnglibrary.upload.dropfiles\" | transloco }}</span>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <label *ngIf=\"hasMultipleUpload\" class=\"btn-upload\">\r\n <input type=\"file\" ng2FileSelect [uploader]=\"uploader\" multiple [accept]=\"inputAccept\" />\r\n <i class=\"fa fa-upload\"></i>{{'bitnglibrary.upload.multiple' | transloco}}\r\n </label>\r\n <label *ngIf=\"hasSingleUpload\" class=\"btn-upload\">\r\n <input #fileRef type=\"file\" ng2FileSelect [uploader]=\"uploader\" [accept]=\"inputAccept\" />\r\n <i class=\"fa fa-upload\"></i>{{'bitnglibrary.upload.simple' | transloco}}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div *ngIf=\"hasQueue\" class=\"col-12\">\r\n <p>{{\"bitnglibrary.upload.uploadfiles\" | transloco}}: {{ uploader?.queue?.length }}</p>\r\n\r\n <p-table [value]=\"uploader.queue\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th width=\"50%\">{{\"bitnglibrary.upload.filename\" | transloco}}</th>\r\n <th *ngIf=\"uploader.options.isHTML5\">{{\"bitnglibrary.upload.filesize\" | transloco}}</th>\r\n <th *ngIf=\"uploader.options.isHTML5 && hasProgressBar\">{{\"bitnglibrary.upload.progress\" | transloco}}</th>\r\n <th *ngIf=\"canUpload\">Estat</th>\r\n <th>{{\"bitnglibrary.upload.actions\" | transloco}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-item>\r\n <tr>\r\n <td><strong>{{ item?.file?.name }}</strong></td>\r\n <td *ngIf=\"uploader.options.isHTML5\" nowrap>{{ item?.file?.size/1024 | number:'.2' }} KB</td>\r\n <td *ngIf=\"uploader.options.isHTML5 && hasProgressBar\">\r\n <div class=\"progress\" style=\"margin-bottom: 0;\">\r\n <div class=\"progress-bar\" role=\"progressbar\" [ngStyle]=\"{ 'width': item.progress + '%' }\"></div>\r\n </div>\r\n </td>\r\n <td *ngIf=\"canUpload\" class=\"p-text-center\">\r\n <span *ngIf=\"item.isSuccess\"><i class=\"fa fa-check\"></i></span>\r\n <span *ngIf=\"item.isCancel\"><i class=\"fa fa-ban\"></i></span>\r\n <span *ngIf=\"item.isError\"><i class=\"fa fa-times\"></i></span>\r\n </td>\r\n <td nowrap>\r\n <p-button *ngIf=\"canUpload\" icon=\"fa fa-upload\" title=\"{{'bitnglibrary.upload.upload' | transloco}}\" styleClass=\"p-button-success\"\r\n (click)=\"uploadFile(item)\" [disabled]=\"item.isReady || item.isUploading || item.isSuccess\">\r\n </p-button>\r\n <p-button *ngIf=\"canUpload\" icon=\"fa fa-ban\" title=\"{{'bitnglibrary.upload.cancelupload' | transloco}}\" styleClass=\"p-button-warning\"\r\n (click)=\"cancelFile(item)\" [disabled]=\"!item.isUploading\">\r\n </p-button>\r\n <p-button icon=\"fa fa-trash\" title=\"{{'bitnglibrary.upload.removefromqueue' | transloco}}\" styleClass=\"p-button-danger\"\r\n (click)=\"removeFile(item)\">\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div *ngIf=\"hasProgressBar\" class=\"cola-progreso\">\r\n <span>{{\"bitnglibrary.upload.progressqueue\" | transloco}}<span>{{(uploader.progress.toString() == 'NaN'? (\"bitnglibrary.upload.finishupload\"|transloco): uploader.progress + ' %')}}</span></span>\r\n <div class=\"progress\">\r\n <div class=\"progress-bar\" role=\"progressbar\" [ngStyle]=\"{ 'width': (uploader.progress.toString() == 'NaN'?'0':uploader.progress) + '%' }\"></div>\r\n </div>\r\n </div>\r\n <div>\r\n <p-button icon=\"fa fa-upload\" *ngIf=\"canUpload\" title=\"{{'bitnglibrary.upload.uploadall' | transloco}}\" styleClass=\"p-button-success\"\r\n (click)=\"uploadAll()\" [disabled]=\"!uploader.getNotUploadedItems().length\">\r\n </p-button>\r\n <p-button icon=\"fa fa-ban\" *ngIf=\"canUpload\" title=\"{{'bitnglibrary.upload.cancelall' | transloco}}\" styleClass=\"p-button-warning\"\r\n (click)=\"cancelQueue()\" [disabled]=\"!uploader.isUploading\">\r\n </p-button>\r\n <p-button icon=\"fa fa-trash\" title=\"{{'bitnglibrary.upload.removeall' | transloco}}\" styleClass=\"p-button-danger\"\r\n (click)=\"removeQueue()\" [disabled]=\"!uploader.queue.length\">\r\n </p-button>\r\n </div>\r\n </div>\r\n </div>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componente general que muestra controles de sesión de usuario.\r\n *\r\n * Informa del login actualmente en sesión\r\n */\r\n@Component({\r\n selector: \"bit-user-controls\",\r\n template: `\r\n <span *ngIf=\"usuario\" class=\"userControls\"\r\n ><span class=\"fa fa-user\" title=\"{{ json }}\"></span> {{ usuario.nombreCompleto }} ({{\r\n usuario.login\r\n }}) </span\r\n >\r\n `\r\n //styleUrls:['bit-user-controls.component.css']\r\n})\r\nexport class BitUserControlsComponent {\r\n @Input() usuario;\r\n userJSON: string;\r\n\r\n constructor() {}\r\n\r\n get json(): string {\r\n return this.usuario && JSON.stringify(this.usuario, null, 4);\r\n }\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componenente que muestra un paginador en la sección footer.\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-column-boolean\",\r\n template: `\r\n <span class=\"ui-cell-data\" *ngIf=\"data\">\r\n {{ data[field] ? textTrue : textFalse }}\r\n </span>\r\n `\r\n})\r\nexport class BitColumnBooleanComponent {\r\n @Input() data: any; // objeto del que extraer la propiedad\r\n @Input() field: string; // propiedad booleana que procesar\r\n @Input() textTrue: string = \"Sí\";\r\n @Input() textFalse: string = \"No\";\r\n\r\n constructor() {}\r\n}\r\n","import { Component, OnChanges, Input } from \"@angular/core\";\r\n\r\nimport { Domain } from \"../../data/domain\";\r\n\r\n@Component({\r\n selector: \"bit-domain-value\",\r\n template: `\r\n <span>{{ translatedValue }}</span>\r\n `\r\n})\r\nexport class BitDomainValueComponent implements OnChanges {\r\n translatedValue: string = \"carregant...\";\r\n\r\n @Input() value: string;\r\n @Input() emptyText: string = \"\";\r\n @Input() data: Domain[];\r\n\r\n constructor() {}\r\n\r\n ngOnChanges() {\r\n // cada vez que cambia algo en el input, recalculamos\r\n this.translatedValue = this.resolveTranslatedValue();\r\n }\r\n\r\n resolveTranslatedValue(): string {\r\n // buscar traducción para el valor en el dominio\r\n let domainMatch = this.data && this.data.find(obj => obj.value == this.value);\r\n\r\n if (domainMatch) {\r\n return domainMatch.label;\r\n } else if (this.value) {\r\n return String(`??${this.value}??`);\r\n } else {\r\n return this.emptyText;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n/**\r\n * Cambia a mayúscula el primer carácter de un texto.\r\n */\r\n@Pipe({ name: \"capitalize\" })\r\nexport class CapitalizePipe implements PipeTransform {\r\n transform(texto: string): string {\r\n if (texto && texto.length > 0) {\r\n return texto.charAt(0).toUpperCase() + texto.slice(1);\r\n } else {\r\n return texto;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\nconst PADDING = \"000000\";\r\n\r\n@Pipe({ name: \"pipeCantidadMoneda\" })\r\nexport class PipeCantidadMoneda implements PipeTransform {\r\n private DECIMAL_SEPARATOR: string;\r\n private DECIMAL_SEPARATOR_INPUT: string;\r\n private THOUSANDS_SEPARATOR: string;\r\n\r\n constructor() {\r\n this.DECIMAL_SEPARATOR = \",\";\r\n this.DECIMAL_SEPARATOR_INPUT = \".\";\r\n this.THOUSANDS_SEPARATOR = \".\";\r\n }\r\n\r\n transform(value: number | string, fractionSize: number = 2): string {\r\n let svalue = String(value);\r\n\r\n var regexp = new RegExp(\"^[1-9]+[0-9]*([.]([0-9]+)?)?$\");\r\n var test = regexp.test(svalue);\r\n if (!test) {\r\n return svalue;\r\n }\r\n\r\n let [integer, fraction = \"\"] = (value || \"\").toString().split(this.DECIMAL_SEPARATOR_INPUT);\r\n\r\n fraction = fractionSize > 0 ? this.DECIMAL_SEPARATOR + (fraction + PADDING).substring(0, fractionSize) : \"\";\r\n\r\n integer = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.THOUSANDS_SEPARATOR);\r\n\r\n return integer + fraction;\r\n }\r\n\r\n parse(value: string, previous: string, event, fractionSize: number = 2): string {\r\n let svalue = String(value);\r\n\r\n var regexp = new RegExp(\"^[1-9]+[0-9]*([.][0-9]{3})*(,([0-9]+)?)?$\");\r\n var test = regexp.test(svalue);\r\n if (!test) {\r\n return svalue;\r\n }\r\n\r\n let [integer, fraction = \"\"] = (value || \"\").split(this.DECIMAL_SEPARATOR);\r\n\r\n integer = integer.replace(/\\./g, \"\");\r\n\r\n fraction =\r\n parseInt(fraction, 10) > 0 && fractionSize > 0\r\n ? this.DECIMAL_SEPARATOR_INPUT + (fraction + PADDING).substring(0, fractionSize)\r\n : \"\";\r\n\r\n return integer + fraction;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"removeLineBreaks\"\r\n})\r\n/**\r\n * Acorta un texto con saltos de línea, sustituyendo los saltos por \"//\" y limitando la cadena final a 200 caracteres\r\n */\r\nexport class RemoveLineBreaksPipe implements PipeTransform {\r\n transform(str: string): string {\r\n if (str.indexOf(\"\\n\") > 0) {\r\n str = str\r\n .split(\"\\n\")\r\n .filter(line => line.trim().length > 0)\r\n .join(\" // \");\r\n }\r\n if (str.length > 200) {\r\n str = str.substring(0, 200) + \" ...\";\r\n }\r\n return str;\r\n }\r\n}\r\n","import { Input, Output, EventEmitter, OnInit, SimpleChange, Directive } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\n\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\n\r\n/**\r\n * Clase general que todos los componentes personalizados deben extender. Contiene toda la lógica común para trabajar con\r\n * componentes personalizados\r\n */\r\n@Directive()\r\nexport abstract class BitGeneralComponent extends BaseComponent implements OnInit {\r\n @Input()\r\n control: FormControl;\r\n @Input()\r\n nombre: any;\r\n @Input()\r\n nombreDirectiva: any;\r\n @Input()\r\n label: string;\r\n @Input()\r\n estilo: string;\r\n @Input()\r\n tooltipTexto: string;\r\n @Input()\r\n tooltipPosicion: string;\r\n @Input()\r\n ayuda: string; // clave de la ayuda contextual\r\n @Input()\r\n placeholder: string = \"\";\r\n @Input()\r\n readOnly: boolean = false;\r\n @Input()\r\n hideLabel: boolean = false; // forzar que no se reserve espacio para el nombre del campo\r\n @Input()\r\n instanciaPipe: any;\r\n @Input()\r\n forceObligatorio: boolean = false;\r\n @Output()\r\n onChange = new EventEmitter<string>();\r\n\r\n constructor(protected ayudaService: AyudaService) {\r\n super();\r\n }\r\n\r\n /** Debemos suscribirnos a los cambios del FormControl para emitir mediante onChange el evento con el nuevo valor que tiene el componente. */\r\n ngOnInit() {\r\n if (this.control) {\r\n this.transformValue();\r\n this.control.valueChanges.subscribe((value) => {\r\n this.transformValue();\r\n this.onChange.emit(value);\r\n });\r\n } else {\r\n console.log(`control no definido para ${this.nombre}`);\r\n }\r\n }\r\n\r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado. */\r\n onBlur() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.transform(this.control.value));\r\n }\r\n }\r\n\r\n onFocus() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.parse(this.control.value));\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Si es necesario, transformamos el valor de entrada para que se muestre correctamente en el campo (ver BitDropDownGeneral).\r\n */\r\n protected transformValue(): void {}\r\n\r\n // decidimos marcar el campo como obligatorio si se ha indicado a la fuerza (por parámetro)\r\n // o si el control de formulario asociado está saltando por ser obligatorio y no haberse rellenado\r\n get obligatorio(): boolean {\r\n return this.forceObligatorio || (this.control && this.control.errors && this.control.errors[\"required\"]);\r\n }\r\n\r\n showAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n\r\n get value_lectura(): string {\r\n return this.control.value;\r\n }\r\n}\r\n","import { Component } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { BitGeneralComponent } from \"../bit-general.component\";\r\n\r\n@Component({\r\n selector: \"bit-text\",\r\n templateUrl: \"bit-text.component.html\"\r\n})\r\nexport class BitTextComponent extends BitGeneralComponent {\r\n constructor(protected ayudaService: AyudaService) {\r\n super(ayudaService);\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<input\r\n *ngIf=\"!tooltipTexto && !readOnly\"\r\n type=\"text\"\r\n pInputText\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [formControl]=\"control\"\r\n [attr.directive]=\"nombreDirectiva\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\"\r\n [placeholder]=\"placeholder\"\r\n/>\r\n<input\r\n *ngIf=\"tooltipTexto && !readOnly\"\r\n type=\"text\"\r\n pInputText\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [formControl]=\"control\"\r\n [attr.directive]=\"nombreDirectiva\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\"\r\n [pTooltip]=\"tooltipTexto\"\r\n [tooltipPosition]=\"tooltipPosicion\"\r\n/>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { AyudaService } from '../../../services';\r\nimport { BitGeneralComponent } from '../bit-general.component';\r\n\r\n@Component({\r\n selector: \"bit-textarea\",\r\n templateUrl: \"bit-textarea.component.html\"\r\n})\r\nexport class BitTextAreaComponent extends BitGeneralComponent {\r\n\r\n @Input()\r\n filas: number = 2;\r\n\r\n constructor(protected ayudaService: AyudaService) {\r\n super(ayudaService);\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<pre *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</pre>\r\n<textarea pInputTextarea\r\n *ngIf=\"!readOnly\"\r\n id=\"{{nombre}}\"\r\n name=\"{{nombre}}\"\r\n [formControl]=\"control\"\r\n class=\"{{estilo}}\"\r\n [rows]=\"filas\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\">\r\n</textarea>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { ChangeDetectorRef, Directive } from \"@angular/core\";\r\nimport { ControlValueAccessor } from \"@angular/forms\";\r\n\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\nimport { BitGeneralComponent } from \"./bit-general.component\";\r\n\r\nconst noop = () => {};\r\n\r\n/** Clase customizada para componentes personalizados que requieren implementar la interface ControlValueAccessor.\r\n * Tipicamente para aquellos componentes personalizados que trabajan sobre otros componentes no estándars HTML como\r\n * pueden ser los componentes de prime como switch, autocomplete, calendar, select, etc.\r\n */\r\n@Directive()\r\nexport abstract class BitCustomComponent extends BitGeneralComponent implements ControlValueAccessor {\r\n protected onTouchedCallback: () => void = noop;\r\n protected onChangeCallback: (_: any) => void = noop;\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService);\r\n }\r\n\r\n //sobreescribimos el getter para coger el valor del FormControl\r\n get value(): any {\r\n return this.control.value;\r\n }\r\n\r\n //sobreescribimos el setter del value para poder transformarlo\r\n set value(v: any) {\r\n v = this.transformData(v);\r\n if (v !== this.control.value) {\r\n //v != undefined &&\r\n this.control.setValue(v);\r\n this.onTouchedCallback();\r\n this.onChangeCallback(v);\r\n }\r\n }\r\n\r\n /** Solo se activa este método si el input readOnly es true */\r\n get value_lectura(): string {\r\n if (this.value == null) {\r\n return \"\";\r\n } else {\r\n return this.value;\r\n }\r\n }\r\n\r\n /** El comportamiento normal es no transformar nada. Si el componente hijo necesita transformarlo\r\n * que sobreecriba el método y modifique el comportamiento. Esto se dará típicamente en los campos fecha porque\r\n * no queremos la versión ISO que nos da Prime si no una versión españolizada*/\r\n transformData(v) {\r\n return v;\r\n }\r\n\r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onBlur() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.transform(this.control.value));\r\n this.onChangeCallback(this.control.value);\r\n }\r\n this.onTouchedCallback();\r\n }\r\n\r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onFocus() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.parse(this.control.value));\r\n this.control.updateValueAndValidity();\r\n this.onChangeCallback(this.control.value);\r\n }\r\n this.onTouchedCallback();\r\n }\r\n\r\n /** Se activa cuando debemos Angular nos informa de que debemos actualizar la vista. Cada componente hijo deberá ver\r\n * si requiere o no implementar este método */\r\n writeValue(value: any) {\r\n if (value !== this.control.value) {\r\n // hack para que el ControlValueAccesor funcione correctamente cuando está referenciado en componentes con ChangeDetectionStrategy.OnPush\r\n // (no es nada bonito, pero Angular lleva 2 años con este bug y no lo han solucionado)\r\n // si no lo incluimos, en algunos casos se corre el riesgo de ir varios valores por detrás en el bit-input\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any) {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any) {\r\n this.onTouchedCallback = fn;\r\n }\r\n}\r\n","import { ChangeDetectorRef, OnInit, Directive } from \"@angular/core\";\r\nimport { Input } from \"@angular/core\";\r\n\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\nimport { TranslateService, AyudaService } from \"../../../services\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/** Clase general para componentes personalizados de tipo Fecha como puede ser BitDate, BitTime y BitDateTime */\r\n@Directive()\r\nexport abstract class BitCalendarComponent extends BitCustomComponent implements OnInit {\r\n // calendarios\r\n @Input()\r\n fechaMinima: Date; // fecha mínima seleccionable\r\n @Input()\r\n fechaMaxima: Date; // fecha máxima seleccionable\r\n @Input()\r\n calendarReadOnlyInput: boolean; // desabilitar edicion por teclado\r\n locale: any;\r\n\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n ngOnInit() {\r\n this.getMessagesI18N();\r\n }\r\n\r\n getMessagesI18N() {\r\n console.log(\"getMessagesI18N\");\r\n this.translateService\r\n .selectTranslateObject(\"form.calendar\", {}, \"bitnglibrary\")\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((v) => (this.locale = v));\r\n }\r\n}\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { BitCalendarComponent } from \"../calendar/bit-calendar.component\";\r\nimport { TranslateService, AyudaService, GeneralUtils } from \"../../../services\";\r\n\r\nexport const CUSTOM_INPUT_DATE_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitDateComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-date\",\r\n templateUrl: \"bit-date.component.html\",\r\n providers: [CUSTOM_INPUT_DATE_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitDateComponent extends BitCalendarComponent {\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, translateService, changeDetectorRef);\r\n }\r\n\r\n transformData(value: any): any {\r\n let v = null;\r\n if (value) {\r\n v = GeneralUtils.getDateAsString(GeneralUtils.stringToDate(value));\r\n }\r\n return v;\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null || this.value == \"\") {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return GeneralUtils.getDateAsString(GeneralUtils.stringShortToDate(this.value));\r\n }\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{ value_lectura }}</p>\r\n<p-calendar\r\n *ngIf=\"!readOnly\"\r\n class=\"FormControl\"\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [(ngModel)]=\"value\"\r\n dateFormat=\"dd/mm/yy\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [monthNavigator]=\"true\"\r\n [readonlyInput]=\"calendarReadOnlyInput\"\r\n [minDate]=\"fechaMinima\"\r\n [maxDate]=\"fechaMaxima\"\r\n [yearNavigator]=\"true\"\r\n yearRange=\"2000:2030\"\r\n [firstDayOfWeek]=\"1\"\r\n>\r\n</p-calendar>\r\n<span *ngIf=\"!readOnly\" class=\"glyphicon glyphicon-calendar icono-input\"></span>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from \"@angular/forms\";\r\n\r\nimport { BitCalendarComponent } from \"../calendar/bit-calendar.component\";\r\nimport { TranslateService, AyudaService, GeneralUtils } from \"../../../services\";\r\n\r\nexport const CUSTOM_INPUT_TIME_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitTimeComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-time\",\r\n templateUrl: \"bit-time.component.html\",\r\n providers: [CUSTOM_INPUT_TIME_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitTimeComponent extends BitCalendarComponent {\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, translateService, changeDetectorRef);\r\n }\r\n\r\n transformData(value: any): any {\r\n let v;\r\n if (value) {\r\n v = GeneralUtils.getTimeAsString(GeneralUtils.stringToDate(value));\r\n }\r\n return v;\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null || this.value == \"\") {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return GeneralUtils.getTimeAsString(GeneralUtils.stringToTime(this.value));\r\n }\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{ value_lectura }}</p>\r\n<p-calendar\r\n *ngIf=\"!readOnly\"\r\n class=\"FormControl\"\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [(ngModel)]=\"value\"\r\n timeFormat=\"HH:mm\"\r\n [timeOnly]=\"true\"\r\n placeholder=\"HH:mm\"\r\n [firstDayOfWeek]=\"1\"\r\n>\r\n</p-calendar>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { BitCalendarComponent } from \"../calendar/bit-calendar.component\";\r\nimport { TranslateService, AyudaService, GeneralUtils } from \"../../../services\";\r\n\r\nexport const CUSTOM_INPUT_DATETIME_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitDateTimeComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-datetime\",\r\n templateUrl: \"bit-datetime.component.html\",\r\n providers: [CUSTOM_INPUT_DATETIME_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitDateTimeComponent extends BitCalendarComponent {\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, translateService, changeDetectorRef);\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null || this.value == \"\") {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return GeneralUtils.getDateTimeAsString(GeneralUtils.stringToDate(this.value));\r\n }\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{ value_lectura }}</p>\r\n<p-calendar\r\n *ngIf=\"!readOnly\"\r\n class=\"FormControl\"\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [(ngModel)]=\"value\"\r\n dateFormat=\"dd/mm/yy\"\r\n placeholder=\"dd/mm/yyyy hh:mm\"\r\n [monthNavigator]=\"true\"\r\n [minDate]=\"fechaMinima\"\r\n [maxDate]=\"fechaMaxima\"\r\n [yearNavigator]=\"true\"\r\n yearRange=\"2000:2030\"\r\n [locale]=\"locale\"\r\n [showTime]=\"true\"\r\n [firstDayOfWeek]=\"1\"\r\n>\r\n</p-calendar>\r\n<span *ngIf=\"!readOnly\" class=\"glyphicon glyphicon-calendar icono-input\"></span>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { BitGeneralComponent } from \"../bit-general.component\";\r\n\r\n@Component({\r\n selector: \"bit-checkbox\",\r\n templateUrl: \"bit-checkbox.component.html\"\r\n //styleUrls: [\"bit-checkbox.component.css\"]\r\n})\r\nexport class BitCheckBoxComponent extends BitGeneralComponent {\r\n constructor(protected ayudaService: AyudaService) {\r\n super(ayudaService);\r\n }\r\n\r\n get value_lectura(): string {\r\n return this.control.value ? \"Sí\" : \"No\";\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<p-checkbox \r\n *ngIf=\"!readOnly\"\r\n class=\"{{estilo}}\" \r\n binary=\"true\"\r\n [formControl]=\"control\"\r\n\t[label]=\"!hideLabel && label\" \r\n\tname=\"{{nombre}}\" \r\n id=\"{{nombre}}\">\r\n</p-checkbox>\r\n\r\n<i *ngIf=\"ayuda\" (click)=\"showAyuda();\"class=\"btn-ayuda-checkbox fa fa-question\"></i> \r\n\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\n\r\nexport const CUSTOM_INPUT_SWITCH_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitSwitchComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-switch\",\r\n templateUrl: \"bit-switch.component.html\",\r\n providers: [CUSTOM_INPUT_SWITCH_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitSwitchComponent extends BitCustomComponent {\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n get value(): any {\r\n return this.control.value ? true : false;\r\n }\r\n\r\n set value(v: any) {\r\n v = v ? true : false;\r\n if (v !== this.control.value) {\r\n //v != undefined &&\r\n this.control.setValue(v);\r\n this.onTouchedCallback();\r\n this.onChangeCallback(v);\r\n }\r\n }\r\n\r\n get value_lectura(): string {\r\n return this.value ? \"Sí\" : \"No\";\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<p-inputSwitch \r\n *ngIf=\"!readOnly\"\r\n onLabel=\"Sí\" \r\n offLabel=\"No\" \r\n binary=\"true\" \r\n [(ngModel)]=\"value\" \r\n name=\"{{nombre}}\" \r\n id=\"{{nombre}}\">\r\n</p-inputSwitch>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Component, forwardRef, ChangeDetectorRef, Input, Output, EventEmitter } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\n\r\nexport const CUSTOM_INPUT_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitAutoCompleteComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-autocomplete\",\r\n templateUrl: \"bit-autocomplete.component.html\",\r\n providers: [CUSTOM_INPUT_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitAutoCompleteComponent extends BitCustomComponent {\r\n @Input()\r\n suggestions: any[];\r\n @Input()\r\n suggestionField: string;\r\n @Input()\r\n multiple: boolean = false;\r\n @Output()\r\n completeMethod = new EventEmitter<string>();\r\n @Output()\r\n onSelect = new EventEmitter<string>();\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n search(event: any) {\r\n this.completeMethod.emit(event);\r\n }\r\n\r\n selectValue(event: any) {\r\n this.onSelect.emit(event);\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<p-autoComplete \r\n *ngIf=\"!readOnly\"\r\n [(ngModel)]=\"value\" \r\n id=\"{{nombre}}\" \r\n name=\"{{nombre}}\" \r\n [placeholder]=\"placeholder\"\r\n delay=\"400\" \r\n [suggestions]=\"suggestions\" \r\n [field]=\"suggestionField\" \r\n [multiple]=\"multiple\"\r\n (completeMethod)=\"search($event)\" \r\n (onSelect)=\"selectValue($event)\" \r\n (blur)=\"onBlur()\" \r\n (focus)=\"onFocus()\" \r\n></p-autoComplete>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Input, Output, EventEmitter, Directive } from \"@angular/core\";\r\nimport { FormControl, FormGroup } from \"@angular/forms\";\r\n\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\n\r\n/**\r\n * Clase general que todos los componentes personalizados declearben extender. Contiene toda la lógica común para trabajar con\r\n * componentes personalizados\r\n */\r\n@Directive()\r\nexport abstract class BitGeneralV2Component extends BaseComponent {\r\n @Input()\r\n control: FormControl;\r\n @Input()\r\n form: FormGroup;\r\n @Input()\r\n nombre: any;\r\n @Input()\r\n nombreDirectiva: any;\r\n @Input()\r\n label: string;\r\n @Input()\r\n estilo: string;\r\n @Input()\r\n tooltipTexto: string;\r\n @Input()\r\n tooltipPosicion: string;\r\n @Input()\r\n ayuda: string; // clave de la ayuda contextual\r\n @Input()\r\n placeholder: string = \"\";\r\n @Input()\r\n readOnly: boolean = false;\r\n @Input()\r\n hideLabel: boolean = false; // forzar que no se reserve espacio para el nombre del campo\r\n @Input()\r\n instanciaPipe: any;\r\n @Input()\r\n forceObligatorio: boolean = false;\r\n @Output()\r\n onChange = new EventEmitter<string>();\r\n \r\n constructor(protected ayudaService: AyudaService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n if (this.control) {\r\n this.control.valueChanges.subscribe((value) => {\r\n this.onChange.emit(value);\r\n });\r\n } else {\r\n console.log(`control no definido para ${this.nombre}`);\r\n }\r\n }\r\n \r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onBlur() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.transform(this.control.value));\r\n }\r\n }\r\n \r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onFocus() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.parse(this.control.value));\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n \r\n // decidimos marcar el campo como obligatorio si se ha indicado a la fuerza (por parámetro)\r\n // o si el control de formulario asociado está saltando por ser obligatorio y no haberse rellenado\r\n get obligatorio(): boolean {\r\n return this.forceObligatorio || (this.control && this.control.errors && this.control.errors[\"required\"]);\r\n }\r\n \r\n showAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n \r\n get value_lectura(): string {\r\n return this.control.value;\r\n }\r\n\r\n get myForm(): FormGroup {\r\n if (!!this.form) {\r\n return this.form;\r\n } else {\r\n return <FormGroup> this.control.parent;\r\n }\r\n }\r\n}\r\n","import { Input, Directive } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { take } from \"rxjs/operators\";\r\n\r\nimport { BitGeneralV2Component } from \"../bit-general-v2.component\";\r\nimport { AyudaService, TranslateService, SessionSharedService } from \"../../../services\";\r\n\r\n/**\r\n * Clase general común a ambos bit-dropdown (El normal y el múltiple).\r\n * Actualmente solo extendida por el dropdown normal, pendiente el múltiple que aún usa la interfaz ControlValueAccessor.\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n * @input filter: true indicará que podemos buscar dentro del select, false que no.\r\n **/\r\n@Directive()\r\nexport abstract class BitDropDownGeneralV2Component extends BitGeneralV2Component {\r\n @Input() hideLabel: boolean = false; // forzar no reservar espacio para el nombre del campo\r\n @Input() data: any[]; // lista de valores estáticos con lo que inicializamos el select\r\n @Input() id: any;\r\n @Input() excludedValues: any[];\r\n @Input() emptyText: string = \"bitnglibrary.bitdropdown.any\"; //valor por defecto seleccionable como primer elemento\r\n @Input() includeEmpty: boolean = true;\r\n\r\n listaOpciones: any[] = [];\r\n listaOpcionesVisible: any[] = [];\r\n valorActual: any; // solo se usa para hacer la transformación cuando es estrictamente necesario\r\n emptyTextResolved: string = \"\";\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected translateService: TranslateService\r\n ) {\r\n super(ayudaService);\r\n }\r\n\r\n // custom processing after retrieving data array from service\r\n postRetrieveData() {\r\n console.log(\"llamando a postRetrieveData para \" + this.nombre + \"{opciones:\" + this.listaOpciones + \"}\");\r\n if (this.listaOpciones) {\r\n this.listaOpcionesVisible = Object.assign([], this.listaOpciones);\r\n // repasamos si hay opciones a excluir que debamos eliminar\r\n if (this.excludedValues) {\r\n this.listaOpcionesVisible = this.listaOpcionesVisible.filter((op) => this.excludedValues.indexOf(op.value) < 0);\r\n }\r\n } else {\r\n this.listaOpcionesVisible = [];\r\n }\r\n // determinamos si debemos incluir la opción \"sin selección\" y con qué texto\r\n if (this.includeEmpty) {\r\n console.log(\"hay valor empty que hay que traducir para \" + this.nombre);\r\n this.translateService\r\n .selectTranslateWithContext(this.emptyText)\r\n .pipe(take(1))\r\n .subscribe((translation) => {\r\n console.log(\"se resuelve la traducción del emptyText para \" + this.nombre + \" con valor:\" + translation);\r\n this.listaOpcionesVisible.splice(0, 0, {value: null, label: translation});\r\n this.emptyTextResolved = translation;\r\n //console.log(\"la lista de opciones vale\", this.listaOpcionesVisible);\r\n });\r\n }\r\n }\r\n}\r\n ","import { Component, Input, OnChanges, SimpleChange } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\nimport { AyudaService, SessionSharedService, TranslateService } from '../../../services';\r\nimport { BitDropDownGeneralV2Component } from \"./bit-dropdown-general-v2.component\";\r\n\r\n/**\r\n * Clase que utiliza un custom componente para select de elementos\r\n * <bit-dropdown [domain]=\"'DOMAIN_TIPO_LOG'\" id=\"tipolog\" [control]=\"formControl\"> Tipus d'operació</bit-dropdown>\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n * @input filter: true indicará que podemos buscar dentro del select, false que no.\r\n **/\r\n@Component({\r\n selector: \"bit-dropdown\",\r\n templateUrl: \"bit-dropdown.component.html\"\r\n})\r\nexport class BitDropDownComponent extends BitDropDownGeneralV2Component implements OnChanges {\r\n @Input() filter: boolean = false;\r\n @Input()\r\n atributoLabel = \"label\"; // El atributo de los objetos de la lista que corresponde al label\r\n @Input()\r\n atributoValue = \"value\"; // El atributo de los objetos de la lista que corresponde al valor\r\n @Input()\r\n atributoDisabled = \"inactivo\"; // El atributo de los objetos de la lista que indica si un valor está deshabilitado\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected translateService: TranslateService\r\n ) {\r\n super(router, sessionShared, ayudaService, translateService);\r\n }\r\n\r\n ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\r\n let hayCambios: boolean = false;\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"data\") {\r\n this.listaOpciones = changedProp.currentValue ? changedProp.currentValue.slice() : [];\r\n hayCambios = true;\r\n } else if (propName === \"excludedValues\") {\r\n this.excludedValues = changedProp.currentValue;\r\n hayCambios = true;\r\n } else if (propName === \"includeEmpty\") {\r\n this.includeEmpty = changedProp.currentValue;\r\n hayCambios = true;\r\n }\r\n }\r\n if (hayCambios) {\r\n this.postRetrieveData();\r\n }\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> \r\n <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" (click)=\"showAyuda()\" class=\"btn-ayuda fa fa-question\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<ng-container *ngIf=\"!readOnly && !!myForm\">\r\n<div [formGroup]=\"myForm\">\r\n <p-dropdown\r\n id=\"{{nombre}}\"\r\n [options]=\"listaOpcionesVisible\"\r\n [formControl]=\"control\"\r\n [filter]=\"filter\"\r\n \r\n [optionLabel]=\"atributoLabel\"\r\n [optionValue]=\"atributoValue\"\r\n [optionDisabled]=\"atributoDisabled\"\r\n \r\n (onFocus)=\"onFocus()\"\r\n (onBlur)=\"onBlur()\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <span [ngClass]=\"{'opcion-desactivada': item.inactivo}\">{{item.label}}</span>\r\n <!-- span [ngClass]=\"{'opcion-desactivada': item[this.atributoDisabled]}\">{{item[this.atributoLabel]}}</span -->\r\n </ng-template>\r\n </p-dropdown>\r\n <control-messages *ngIf=\"control!=null\" [control]=\"control\" [field]=\"id\"></control-messages>\r\n</div>\r\n</ng-container>\r\n","import { Component, Input, OnChanges, SimpleChange } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\nimport { AyudaService, SessionSharedService, TranslateService } from '../../../services';\r\nimport { BitDropDownGeneralV2Component } from \"./bit-dropdown-general-v2.component\";\r\n\r\n/**\r\n * Clase que utiliza un custom componente para select múltiple de elementos\r\n * <bit-dropdown-multiple [domain]=\"'DOMAIN_TIPO_LOG'\" id=\"tipolog\" [control]=\"formControl\"\"> Tipus d'operació</bit-dropdown-multiple>\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-dropdown-multiple\",\r\n templateUrl: \"bit-dropdown-multiple.component.html\"\r\n})\r\nexport class BitDropDownMultipleComponent extends BitDropDownGeneralV2Component implements OnChanges {\r\n @Input() maxSelectedLabels: number = 3;\r\n @Input() showSeparateSelectedLabels: boolean = false; // indica si se muestran los elementos seleccionados en una columna separada\r\n @Input() title: string; //título que aparece en el link para eliminar un elemento una vez seleccionado\r\n @Input() filter: boolean;\r\n // Si se pueden seleccionar muchos elementos, que el label de los elementos seleccionados no\r\n // aparezca dentro del select, y hacerlo como una lista fuera del select.\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected translateService: TranslateService\r\n ) {\r\n super(router, sessionShared, ayudaService, translateService);\r\n }\r\n\r\n ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\r\n let hayCambios: boolean = false;\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"data\") {\r\n this.listaOpciones = changedProp.currentValue ? changedProp.currentValue.slice() : [];\r\n hayCambios = true;\r\n } else if (propName === \"excludedValues\") {\r\n this.excludedValues = changedProp.currentValue;\r\n hayCambios = true;\r\n } else if (propName === \"includeEmpty\") {\r\n this.includeEmpty = changedProp.currentValue;\r\n hayCambios = true;\r\n }\r\n }\r\n if (hayCambios) {\r\n this.postRetrieveData();\r\n }\r\n }\r\n\r\n labelSelectedItem(id): string {\r\n let label: string = \"\";\r\n if (this.listaOpciones) {\r\n let selected = this.listaOpciones.find((c) => c.value == id);\r\n if (selected) {\r\n label = selected.label;\r\n }\r\n }\r\n return label;\r\n }\r\n\r\n deleteSelectedItem(event, item) {\r\n event.preventDefault();\r\n let index = this.control.value.indexOf(item);\r\n let newValue = this.control.value.splice(index, 1);\r\n // se clona el array. Si no, el texto \"{0} elementos seleccionados\" del select de Prime no se actualiza.\r\n this.control.setValue(newValue.slice(0));\r\n }\r\n}\r\n","<div class=\"row separador\" *ngIf=\"showSeparateSelectedLabels; else normalBitSelectMultiple\">\r\n <div> <!-- class=\"col-sm-4\"-->\r\n <ng-container *ngTemplateOutlet=\"normalBitSelectMultiple\"></ng-container>\r\n </div>\r\n <div><!-- elementos seleccionados -->\r\n <label> </label>\r\n <div class=\"multiselect-labels\">\r\n <div class=\"label label-primary multiselect-labels-lg\" *ngFor=\"let item of control.value\">\r\n <span>{{labelSelectedItem(item)}}</span>\r\n \r\n <a (click)=\"deleteSelectedItem($event, item)\" title=\"{{title}}\"><i class=\"fa fa-times\"></i></a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #normalBitSelectMultiple>\r\n <label *ngIf=\"!hideLabel\"><ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" (click)=\"showAyuda()\" class=\"btn-ayuda fa fa-question\"></i>\r\n </label>\r\n <p *ngIf=\"readOnly\" class=\"lectura\">{{value_lectura}}</p>\r\n <div [formGroup]=\"myForm\" *ngIf=\"!readOnly\">\r\n <p-multiSelect\r\n id=\"{{id}}\"\r\n [options]=\"listaOpciones\"\r\n [formControl]=\"control\"\r\n \r\n [defaultLabel]=\"emptyTextResolved\"\r\n [maxSelectedLabels]=\"maxSelectedLabels\"\r\n selectedItemsLabel=\"{0} elements seleccionats\"\r\n (onFocus)=\"onFocus()\"\r\n (onBlur)=\"onBlur()\">\r\n </p-multiSelect>\r\n <control-messages *ngIf=\"control!=null\" [control]=\"control\" [field]=\"id\"></control-messages>\r\n </div>\r\n</ng-template>\r\n","export class ConfigurationEditor {\r\n fontFormat: boolean = true;\r\n fontSize: boolean = true;\r\n bullet: boolean = true;\r\n link: boolean = true;\r\n\r\n constructor() {}\r\n\r\n public static newObject(): ConfigurationEditor {\r\n return new ConfigurationEditor();\r\n }\r\n\r\n public static newCustomObject(object: any): ConfigurationEditor {\r\n let editor = new ConfigurationEditor();\r\n editor.fontFormat = object[\"fontFormat\"];\r\n editor.fontSize = object[\"fontSize\"];\r\n editor.bullet = object[\"bullet\"];\r\n editor.link = object[\"link\"];\r\n\r\n return editor;\r\n }\r\n}\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { Input } from \"@angular/core\";\r\n\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { ConfigurationEditor } from \"../../../data/configuration-editor\";\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\n\r\nexport const CUSTOM_BITEDITOR_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitEditorComponent),\r\n multi: true\r\n};\r\n\r\n/**\r\n * Clase que utiliza un custom componente para campo editor de HTML\r\n * Utiliza la interfaz ControlValueAccessor\r\n * <bit-editor [(ngModel)]=\"object.descripcion\" [ngModelOptions]=\"{standalone: true}\" height=\"250\"> Descripció</bit-editor>\r\n * Para utilizar, importar tambien js y css.\r\n *\r\n * https://www.primefaces.org/primeng/#/editor\r\n * https://quilljs.com/docs/modules/toolbar/\r\n *\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-editor\",\r\n templateUrl: \"bit-editor.component.html\",\r\n providers: [CUSTOM_BITEDITOR_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitEditorComponent extends BitCustomComponent {\r\n @Input() tipo: string = \"default\";\r\n // si es \"custom\", se utiliza el objeto de configuracion: configuration.\r\n // si es \"default\", no se utiliza ninguna configuracion (se muestran todos los controles)\r\n @Input() configuration: ConfigurationEditor = BitEditorComponent.globalConfiguration;\r\n @Input() height: number = 100;\r\n\r\n // es posible tener configuraciones globales en todos los bit-editor de un proyecto\r\n public static globalConfiguration = ConfigurationEditor.newObject();\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null) {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return this.value;\r\n }\r\n }\r\n\r\n onFocus() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n onInit(quill) {\r\n /*var toolbar = quill.editor.getModule('toolbar');\r\n toolbar.addHandler('link', function(value) {\r\n if (value) {\r\n var href = prompt('Introduzca la URL');\r\n this.quill.format('link', href);\r\n } else {\r\n this.quill.format('link', false);\r\n }\r\n });*/\r\n }\r\n\r\n get configuracion(): ConfigurationEditor {\r\n return this.configuration ? this.configuration : BitEditorComponent.globalConfiguration;\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> \r\n <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda();\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\">\r\n {{(value_lectura && value_lectura!='')?value_lectura:' '}}\r\n</p>\r\n<p-editor \r\n *ngIf=\"!readOnly && tipo=='custom'\" \r\n id=\"{{nombre}}\" \r\n name=\"{{nombre}}\"\r\n [(ngModel)]=\"value\"\r\n styleClass=\"editor\" \r\n [placeholder]=\"placeholder\" \r\n [style]=\"{'height':height+'px'}\" \r\n (onInit)=\"onInit($event)\">\r\n <p-header>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.fontSize\">\r\n <select class=\"ql-size\">\r\n <option value=\"small\">{{'bitnglibrary.form.biteditor.small' | transloco}}</option>\r\n <!-- Note a missing, thus falsy value, is used to reset to default -->\r\n <option selected>{{'bitnglibrary.form.biteditor.normal' | transloco}}</option>\r\n <option value=\"large\">{{'bitnglibrary.form.biteditor.large' | transloco}}</option>\r\n <option value=\"huge\">{{'bitnglibrary.form.biteditor.huge' | transloco}}</option>\r\n </select>\r\n </span>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.fontFormat\">\r\n <button class=\"ql-bold\" aria-label=\"Bold\"></button>\r\n <button class=\"ql-italic\" aria-label=\"Italic\"></button>\r\n <button class=\"ql-underline\" aria-label=\"Underline\"></button>\r\n <button class=\"ql-strike\" aria-label=\"Strikethrough\"></button>\r\n </span>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.bullet\">\r\n <button class=\"ql-list\" value=\"ordered\" type=\"button\"></button>\r\n <button class=\"ql-list\" value=\"bullet\" type=\"button\"></button>\r\n </span>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.link\">\r\n <button class=\"ql-link\" aria-label=\"Insert Link\" type=\"button\"></button>\r\n </span>\r\n </p-header>\r\n</p-editor>\r\n<!--(onTextChange)=\"changed($event)\"-->\r\n<p-editor \r\n *ngIf=\"!readOnly && (!tipo || tipo=='default')\" \r\n id=\"{{nombre}}\" \r\n name=\"{{nombre}}\" \r\n [(ngModel)]=\"value\"\r\n styleClass=\"editor\" \r\n [placeholder]=\"placeholder\" \r\n [style]=\"{'height':height+'px'}\">\r\n</p-editor>\r\n<control-messages *ngIf=\"control!=null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Component, Input, OnInit, OnChanges, ChangeDetectorRef, SimpleChanges } from \"@angular/core\";\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { GeneralUtils, SessionSharedService } from \"../../../services\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\n@Component({\r\n selector: \"bit-readonly\",\r\n templateUrl: \"bit-readonly.component.html\"\r\n})\r\nexport class BitReadonlyComponent implements OnInit, OnChanges {\r\n @Input() ayuda: string;\r\n @Input() valor: any;\r\n @Input() tipo: string; // text (default), date, datetime, time, boolean, textarea, list, list-multiple\r\n @Input() hideLabel: boolean = false;\r\n @Input() data: any[]; //lista de valores estáticos con lo que inicializamos el select\r\n @Input() domain: string; //nombre del dominio del que queremos extraer los datos\r\n\r\n private opcionesDropdown: any[] = [];\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected changeDetectorRef: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (!!this.domain && !this.data) {\r\n this.router.data.subscribe(result => {\r\n let dominios = result[\"dominios\"];\r\n let domainTipo = dominios[this.domain];\r\n if (domainTipo != null) {\r\n domainTipo.subscribe(\r\n result => {\r\n //console.log(result);\r\n this.sessionShared.set(this.domain, result.slice()); // almacenamos en sesión una copia para evitar transmitir cambios\r\n this.opcionesDropdown = result.slice();\r\n this.changeDetectorRef.detectChanges();\r\n },\r\n error => {\r\n console.log(\"Error carrega dominis\", this.domain, error);\r\n }\r\n );\r\n } else {\r\n console.log(\"Domini sense dades\", this.domain);\r\n }\r\n });\r\n } else if (this.data) {\r\n this.opcionesDropdown = this.data.slice();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n for (let propName in changes) {\r\n if (propName === \"data\") {\r\n let newData: any[] = changes[propName].currentValue || [];\r\n this.opcionesDropdown = newData.slice();\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n }\r\n\r\n showAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n\r\n get value_lectura(): string {\r\n this.tipo = this.tipo || \"text\";\r\n switch (this.tipo) {\r\n case \"date\":\r\n return this.valor ? GeneralUtils.getDateAsString(GeneralUtils.stringShortToDate(this.valor)) : \"\";\r\n case \"datetime\":\r\n return this.valor ? GeneralUtils.getDateTimeAsString(GeneralUtils.stringToDate(this.valor)) : \"\";\r\n case \"time\":\r\n return this.valor ? GeneralUtils.getTimeAsString(GeneralUtils.stringToTime(this.valor)) : \"\";\r\n case \"boolean\":\r\n return this.valor ? \"Sí\" : \"No\";\r\n case \"list\":\r\n let d = this.opcionesDropdown.find(d => d.value == this.valor);\r\n return d ? d.label : \"\";\r\n case \"list-multiple\":\r\n let labels: any[] = this.opcionesDropdown && this.opcionesDropdown.filter(d => this.valor && this.valor.indexOf(d.value) > -1).map(d => d.label);\r\n return labels ? labels.join(\", \") : null;\r\n default:\r\n return this.valor;\r\n }\r\n }\r\n\r\n get isTextarea(): boolean {\r\n return this.tipo === \"textarea\";\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"!isTextarea\" class=\"lectura\">{{value_lectura}}</p>\r\n<pre *ngIf=\"isTextarea\" class=\"lectura\">{{value_lectura}}</pre>","import { Component, Output, EventEmitter, ContentChild, ElementRef, OnInit, TemplateRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { fromEvent, Subject } from \"rxjs\";\r\nimport { takeUntil, filter, take, switchMapTo } from \"rxjs/operators\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { ViewModeDirective } from \"../../directives/view-mode.directive\";\r\nimport { EditModeDirective } from \"../../directives/edit-mode.directive\";\r\n\r\n/**\r\n * Componente que permite editar en linea valores\r\n */\r\n@Component({\r\n selector: \"bit-editable\",\r\n template: ` <ng-container *ngTemplateOutlet=\"currentView\"></ng-container> `\r\n})\r\nexport class BitEditableComponent extends BaseComponent implements OnInit {\r\n @Output() update = new EventEmitter();\r\n @ContentChild(ViewModeDirective) viewModeTpl: ViewModeDirective;\r\n @ContentChild(EditModeDirective) editModeTpl: EditModeDirective;\r\n\r\n editMode = new Subject();\r\n editMode$ = this.editMode.asObservable();\r\n mode: \"view\" | \"edit\" = \"view\";\r\n\r\n constructor(private host: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.viewModeHandler();\r\n this.editModeHandler();\r\n }\r\n\r\n /**alterna entre las dos vistas, la de visualización y la edición */\r\n get currentView(): TemplateRef<any> {\r\n return this.mode === \"view\" ? this.viewModeTpl.tpl : this.editModeTpl.tpl;\r\n }\r\n\r\n private get element(): any {\r\n return this.host.nativeElement;\r\n }\r\n\r\n /**Gestiona el dobleClick sobre el componente */\r\n viewModeHandler() {\r\n fromEvent(this.element, \"click\")\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n console.log(\"click on element\", this.element);\r\n this.mode = \"edit\";\r\n this.editMode.next(true); //emitimos el evento de que hemos pasado a edición\r\n this.changeDetectorRef.detectChanges(); //tenemos que activar el mecanismo de detección de cambios\r\n });\r\n }\r\n\r\n /**Gestiona hacer click fuera del componente. Solo se activa si estamos en modo edición */\r\n editModeHandler() {\r\n //observable cuando pulsan con el ratón en cualquier parte de la página\r\n const clickOutside$ = fromEvent(document, \"click\").pipe(\r\n filter(({ target }) => {\r\n //filtramos que el click no sea precisamente en el elemento que estamos editando\r\n return this.element.contains(target) === false;\r\n }),\r\n take(1)\r\n );\r\n //observable cuando pulsan enter en el input\r\n fromEvent(this.element, \"keyup\")\r\n .pipe(\r\n filter((e: any) => e.keyCode == 13),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((event) => {\r\n console.log(\"event enter pressed\");\r\n this.throwUpdate();\r\n });\r\n\r\n //cuando editMode se dispara, al hacer dobleclick el usuario, activamos el observable clickOutside para gestionar cuando\r\n //el usuario ha terminado de editar el componente\r\n this.editMode$.pipe(switchMapTo(clickOutside$), takeUntil(this.destroy$)).subscribe((event) => {\r\n console.log(\"event click outside\");\r\n this.throwUpdate();\r\n });\r\n }\r\n\r\n throwUpdate() {\r\n this.update.next();\r\n this.mode = \"view\";\r\n }\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { ReactiveFormsModule, FormsModule } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\nimport { TranslocoModule, TRANSLOCO_SCOPE } from \"@ngneat/transloco\";\r\n\r\nimport { CalendarModule } from \"primeng/calendar\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { DropdownModule } from \"primeng/dropdown\";\r\nimport { EditorModule } from \"primeng/editor\";\r\nimport { MultiSelectModule } from \"primeng/multiselect\";\r\nimport { PaginatorModule } from \"primeng/paginator\";\r\nimport { CheckboxModule } from \"primeng/checkbox\";\r\nimport { RadioButtonModule } from \"primeng/radiobutton\";\r\nimport { TabViewModule } from \"primeng/tabview\";\r\nimport { DialogModule } from \"primeng/dialog\";\r\nimport { AccordionModule } from \"primeng/accordion\";\r\nimport { AutoCompleteModule } from \"primeng/autocomplete\";\r\nimport { InputSwitchModule } from \"primeng/inputswitch\";\r\nimport { TooltipModule } from \"primeng/tooltip\";\r\nimport { OverlayPanelModule } from \"primeng/overlaypanel\";\r\nimport { MessagesModule } from \"primeng/messages\";\r\nimport { MenuModule } from \"primeng/menu\";\r\nimport { MenubarModule } from \"primeng/menubar\";\r\nimport { MegaMenuModule } from \"primeng/megamenu\";\r\nimport { TableModule } from \"primeng/table\";\r\nimport { DynamicDialogModule } from \"primeng/dynamicdialog\";\r\nimport { ToastModule } from \"primeng/toast\";\r\nimport { FileUploadModule } from \"ng2-file-upload\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { FocusRegisterDirective } from \"./directives/focus-register.directive\";\r\nimport { ViewModeDirective } from \"./directives/view-mode.directive\";\r\nimport { EditModeDirective } from \"./directives/edit-mode.directive\";\r\nimport { BitBreadCrumbComponent } from \"./components/breadcrumb/bit-breadcrumb.component\";\r\nimport { BitControlMessages } from \"./components/contol-messages/bit-control-messages.component\";\r\nimport { BitDialogComponent } from \"./components/dialog/bit-dialog.component\";\r\nimport { BitFooterComponent } from \"./components/footer/bit-footer.component\";\r\nimport { BitHeaderComponent } from \"./components/header/bit-header.component\";\r\nimport { BitHelpComponent } from \"./components/help/bit-help.component\";\r\nimport { BitLoadingComponent } from \"./components/loading/bit-loading.component\";\r\nimport { BitNotificationToastComponent } from \"./components/notificacion/bit-notification-toast.component\";\r\nimport { BitNotificationErrorComponent } from \"./components/notificacion/bit-notification-error.component\";\r\nimport { BitToolbarComponent } from \"./components/toolbar/bit-toolbar.component\";\r\nimport { BitNGUploadComponent } from \"./components/upload/bit-ng-upload.component\";\r\nimport { BitUserControlsComponent } from \"./components/user/bit-user-controls.component\";\r\nimport { BitBotonAyudaComponent } from \"./components/misc/bit-boton-ayuda.component\";\r\nimport { BitColumnBooleanComponent } from \"./components/misc/bit-column-boolean.component\";\r\nimport { BitDomainValueComponent } from \"./components/misc/bit-domain-value.component\";\r\nimport { CapitalizePipe } from \"./pipes/capitalize.pipe\";\r\nimport { OtherToolbarActionPipe } from \"./pipes/other-actions.pipe\";\r\nimport { PipeCantidadMoneda } from \"./pipes/pipe-cantidadmoneda.pipe\";\r\nimport { RemoveLineBreaksPipe } from \"./pipes/remove-line-breaks.pipe\";\r\nimport { BitTextComponent } from \"./components/form/text/bit-text.component\";\r\nimport { BitTextAreaComponent } from \"./components/form/textarea/bit-textarea.component\";\r\nimport { BitDateComponent } from \"./components/form/date/bit-date.component\";\r\nimport { BitTimeComponent } from \"./components/form/time/bit-time.component\";\r\nimport { BitDateTimeComponent } from \"./components/form/datetime/bit-datetime.component\";\r\nimport { BitCheckBoxComponent } from \"./components/form/checkbox/bit-checkbox.component\";\r\nimport { BitSwitchComponent } from \"./components/form/switch/bit-switch.component\";\r\nimport { BitAutoCompleteComponent } from \"./components/form/autocomplete/bit-autocomplete.component\";\r\nimport { BitDropDownComponent } from \"./components/form/dropdown/bit-dropdown.component\";\r\nimport { BitDropDownMultipleComponent } from \"./components/form/dropdown/bit-dropdown-multiple.component\";\r\nimport { BitEditorComponent } from \"./components/form/editor/bit-editor.component\";\r\nimport { BitReadonlyComponent } from \"./components/form/readonly/bit-readonly.component\";\r\nimport { BitEditableComponent } from \"./components/form/bit-editable.component\";\r\n\r\nconst modules: any[] = [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CalendarModule,\r\n DropdownModule,\r\n EditorModule,\r\n MultiSelectModule,\r\n PaginatorModule,\r\n CheckboxModule,\r\n RadioButtonModule,\r\n TabViewModule,\r\n DialogModule,\r\n MenuModule,\r\n MegaMenuModule,\r\n MenubarModule,\r\n TableModule,\r\n DynamicDialogModule,\r\n AccordionModule,\r\n AutoCompleteModule,\r\n InputSwitchModule,\r\n TooltipModule,\r\n OverlayPanelModule,\r\n MessagesModule,\r\n ToastModule,\r\n InputTextModule\r\n];\r\n\r\nexport const components: any[] = [\r\n BitBreadCrumbComponent,\r\n BitControlMessages,\r\n BitDialogComponent,\r\n BitFooterComponent,\r\n BitHeaderComponent,\r\n BitHelpComponent,\r\n BitLoadingComponent,\r\n BitNotificationToastComponent,\r\n BitNotificationErrorComponent,\r\n BitToolbarComponent,\r\n BitNGUploadComponent,\r\n BitUserControlsComponent,\r\n BitBotonAyudaComponent,\r\n BitColumnBooleanComponent,\r\n BitDomainValueComponent\r\n];\r\n\r\nexport const formComponents: any[] = [\r\n BitTextComponent,\r\n BitTextAreaComponent,\r\n BitDateComponent,\r\n BitTimeComponent,\r\n BitDateTimeComponent,\r\n BitCheckBoxComponent,\r\n BitSwitchComponent,\r\n BitAutoCompleteComponent,\r\n BitDropDownComponent,\r\n BitDropDownMultipleComponent,\r\n BitEditorComponent,\r\n BitReadonlyComponent,\r\n BitEditableComponent\r\n];\r\n\r\nexport const directives: any[] = [FocusRegisterDirective, ViewModeDirective, EditModeDirective];\r\n\r\nexport const pipes: any[] = [CapitalizePipe, OtherToolbarActionPipe, PipeCantidadMoneda, RemoveLineBreaksPipe];\r\n\r\n@NgModule({\r\n imports: [...modules, FileUploadModule, TranslocoModule],\r\n declarations: [...directives, ...components, ...formComponents, ...pipes],\r\n exports: [...modules, ...directives, ...pipes, ...components, ...formComponents],\r\n providers: [{ provide: TRANSLOCO_SCOPE, useValue: \"bitnglibrary\" }, MessageService]\r\n})\r\nexport class SharedLibraryModule {}\r\n","import { OnInit, Input, ChangeDetectorRef, Directive } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { take } from \"rxjs/operators\";\r\n\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\nimport { AyudaService, TranslateService, SessionSharedService } from \"../../../services\";\r\n\r\n/**\r\n * Clase que utiliza un custom componente para select de elementos\r\n * Utiliza la interfaz ControlValueAccessor\r\n * <bit-select [domain]=\"'DOMAIN_TIPO_LOG'\" id=\"tipolog\" [control]=\"formControl\"> Tipus d'operació</bit-select>\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n * @input filter: true indicará que podemos buscar dentro del select, false que no.\r\n **/\r\n@Directive()\r\nexport abstract class BitDropDownGeneralComponent extends BitCustomComponent implements OnInit {\r\n @Input() hideLabel: boolean = false; // forzar no reservar espacio para el nombre del campo\r\n @Input() data: any[]; // lista de valores estáticos con lo que inicializamos el select\r\n @Input() valueAs: string; // indica si hay que transformar el valor de entrada a un tipo de dato: \"string\", \"number\"\r\n @Input() id: any;\r\n @Input() excludedValues: any[];\r\n @Input() emptyText: string = \"bitnglibrary.bitdropdown.any\"; //valor por defecto seleccionable como primer elemento\r\n @Input() includeEmpty: boolean = true;\r\n\r\n listaOpciones: any[] = [];\r\n listaOpcionesVisible: any[] = [];\r\n valorActual: any; // solo se usa para hacer la transformación cuando es estrictamente necesario\r\n emptyTextResolved: string = \"\";\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected changeDetectorRef: ChangeDetectorRef,\r\n protected translateService: TranslateService\r\n ) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n /** Si se dan las condiciones, transforma los valores de number a string (o viceversa). */\r\n protected transformValue() {\r\n if (this.control.value !== this.valorActual) {\r\n if (!this.control.value || this.control.value.length === 0) {\r\n this.valorActual = this.control.value;\r\n }\r\n // si es necesario, realizamos la transformación y aplicamos el nuevo valor\r\n else if (this.valueAs === \"string\" && typeof this.control.value[0] !== \"string\") {\r\n this.valorActual = this.control.value.map(String);\r\n this.control.setValue(this.valorActual, {emitEvent: false});\r\n } else if (this.valueAs === \"number\" && typeof this.control.value[0] !== \"number\") {\r\n this.valorActual = this.control.value.map(Number);\r\n this.control.setValue(this.valorActual, {emitEvent: false});\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n }\r\n\r\n // custom processing after retrieving data array from service\r\n postRetrieveData() {\r\n console.log(\"llamando a postRetrieveData para \" + this.nombre + \"{opciones:\" + this.listaOpciones + \"}\");\r\n if (this.listaOpciones) {\r\n this.listaOpcionesVisible = Object.assign([], this.listaOpciones);\r\n // repasamos si hay opciones a excluir que debamos eliminar\r\n if (this.excludedValues) {\r\n this.listaOpcionesVisible = this.listaOpcionesVisible.filter((op) => this.excludedValues.indexOf(op.value) < 0);\r\n }\r\n } else {\r\n this.listaOpcionesVisible = [];\r\n }\r\n // determinamos si debemos incluir la opción \"sin selección\" y con qué texto\r\n if (this.includeEmpty) {\r\n console.log(\"hay valor empty que hay que traducir para \" + this.nombre);\r\n this.translateService\r\n .selectTranslateWithContext(this.emptyText)\r\n .pipe(take(1))\r\n .subscribe((translation) => {\r\n console.log(\"se resuelve la traducción del emptyText para \" + this.nombre + \" con valor:\" + translation);\r\n this.listaOpcionesVisible.splice(0, 0, {value: null, label: translation});\r\n this.emptyTextResolved = translation;\r\n //console.log(\"la lista de opciones vale\", this.listaOpcionesVisible);\r\n });\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n onFocus() {\r\n this.onTouchedCallback();\r\n }\r\n}\r\n","/**\r\n * Clase base que contiene la información que todos los objetos de datos pueden necesitar.\r\n */\r\nexport class Item {\r\n constructor(public id: number) {}\r\n}\r\n","import { Item } from \"./item\";\r\n\r\nexport class Fichero extends Item {\r\n constructor(\r\n public id: number,\r\n public nombre: string,\r\n public fileName: string,\r\n public mimeType: string,\r\n public tamano: number,\r\n public fechaModificacion: string,\r\n public tipoFichero: string,\r\n public observaciones: string\r\n ) {\r\n super(id);\r\n }\r\n\r\n public static newObject(): Fichero {\r\n return new Fichero(null, \"\", \"\", \"\", 0, \"\", null, \"\");\r\n }\r\n}\r\n","import { TranslatedMessage } from \"../../base/models\";\r\n\r\nexport class BitNotification {\r\n static INFO: string = \"info\";\r\n static WARN: string = \"warn\";\r\n static ERROR: string = \"error\";\r\n\r\n constructor(\r\n public title: TranslatedMessage,\r\n public message: TranslatedMessage,\r\n public severity: string = \"info\" //info, warn, error\r\n ) {}\r\n}\r\n","import { TranslatedMessage, ErrorValidateForm } from \"../../base/models\";\r\nimport { BitNotification } from \"./bitnotification\";\r\n\r\nexport class BitNotificationError extends BitNotification {\r\n constructor(public title: TranslatedMessage, public message: TranslatedMessage, public context?: string, public multipleErrors?: ErrorValidateForm[]) {\r\n super(title, message, BitNotification.ERROR);\r\n }\r\n}\r\n","import { CanDeactivate } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\nexport interface CanComponentDeactivate {\r\n canDeactivate: () => boolean | Observable<boolean>;\r\n}\r\n\r\n@Injectable()\r\nexport class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {\r\n canDeactivate(component: CanComponentDeactivate): Observable<boolean> | boolean {\r\n return component.canDeactivate ? component.canDeactivate() : true;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from \"@angular/common/http\";\r\nimport { Observable, throwError } from \"rxjs\";\r\nimport { catchError, finalize } from \"rxjs/operators\";\r\nimport { BitMessageService } from \"../services/message.service\";\r\nimport { GeneralUtils } from \"../services/general-utils.service\";\r\nimport { HttpUtilsService } from \"../services/http-utils.service\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class CustomHttpInterceptor implements HttpInterceptor {\r\n constructor(private bitMessageService: BitMessageService, private generalUtils: GeneralUtils) {\r\n console.log(\"construyendo el CustomHttpInterceptor\");\r\n }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n let url = request.url;\r\n console.log(\"interceptando la llamada http \" + url);\r\n this.generalUtils.startLoading();\r\n return next.handle(request).pipe(\r\n catchError((error: HttpErrorResponse) => {\r\n //this.store.dispatch(new AddGlobalError(error));\r\n console.log(\"error que nos retorna el server\", error);\r\n let customError = HttpUtilsService.getCustomError(error);\r\n console.log(\"custom error\", error);\r\n this.bitMessageService.sendError(customError);\r\n return throwError(error);\r\n }),\r\n finalize(() => {\r\n console.log(\"finalizando la llamada http\");\r\n this.generalUtils.stopLoading();\r\n })\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of bit-ng-library\r\n */\r\n\r\nexport * from \"./lib/base/components/base.component\";\r\nexport * from \"./lib/base/shared/base-interface.service\";\r\nexport * from \"./lib/base/shared/base.filter\";\r\nexport * from \"./lib/base/shared/base.service\";\r\nexport * from \"./lib/base/shared/utils\";\r\nexport * from \"./lib/base/models/base-list.models\";\r\nexport * from \"./lib/base/models/base-form.models\";\r\nexport * from \"./lib/base/models/base-sublist.models\";\r\nexport * from \"./lib/base/models/types\";\r\n\r\nexport * from \"./lib/sharedlibrary/sharedlibrary.module\";\r\n\r\nexport * from \"./lib/sharedlibrary/components/breadcrumb/bit-breadcrumb.component\";\r\nexport * from \"./lib/sharedlibrary/components/contol-messages/bit-control-messages.component\";\r\nexport * from \"./lib/sharedlibrary/components/dialog/bit-dialog.component\";\r\nexport * from \"./lib/sharedlibrary/components/footer/bit-footer.component\";\r\nexport * from \"./lib/sharedlibrary/components/header/bit-header.component\";\r\nexport * from \"./lib/sharedlibrary/components/help/bit-help.component\";\r\nexport * from \"./lib/sharedlibrary/components/loading/bit-loading.component\";\r\nexport * from \"./lib/sharedlibrary/components/notificacion/bit-notification-toast.component\";\r\nexport * from \"./lib/sharedlibrary/components/notificacion/bit-notification-error.component\";\r\nexport * from \"./lib/sharedlibrary/components/toolbar/bit-toolbar.component\";\r\nexport * from \"./lib/sharedlibrary/components/upload/bit-ng-upload.component\";\r\nexport * from \"./lib/sharedlibrary/components/user/bit-user-controls.component\";\r\nexport * from \"./lib/sharedlibrary/components/misc/bit-boton-ayuda.component\";\r\nexport * from \"./lib/sharedlibrary/components/misc/bit-column-boolean.component\";\r\nexport * from \"./lib/sharedlibrary/components/misc/bit-domain-value.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-custom.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-general.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-general-v2.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/calendar/bit-calendar.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown-general.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown-general-v2.component\";\r\n\r\nexport * from \"./lib/sharedlibrary/pipes/capitalize.pipe\";\r\nexport * from \"./lib/sharedlibrary/pipes/other-actions.pipe\";\r\nexport * from \"./lib/sharedlibrary/pipes/pipe-cantidadmoneda.pipe\";\r\nexport * from \"./lib/sharedlibrary/pipes/remove-line-breaks.pipe\";\r\n\r\nexport * from \"./lib/sharedlibrary/services\";\r\nexport * from \"./lib/sharedlibrary/services/ayuda.service\";\r\nexport * from \"./lib/sharedlibrary/services/custom-validators.service\";\r\nexport * from \"./lib/sharedlibrary/services/focus.service\";\r\nexport * from \"./lib/sharedlibrary/services/general-utils.service\";\r\nexport * from \"./lib/sharedlibrary/services/http-utils.service\";\r\nexport * from \"./lib/sharedlibrary/services/locator.service\";\r\nexport * from \"./lib/sharedlibrary/services/message.service\";\r\nexport * from \"./lib/sharedlibrary/services/session-shared.service\";\r\nexport * from \"./lib/sharedlibrary/services/tableview.service\";\r\nexport * from \"./lib/sharedlibrary/services/toolbar.service\";\r\nexport * from \"./lib/sharedlibrary/services/upload.service\";\r\nexport * from \"./lib/sharedlibrary/services/translate.service\";\r\nexport * from \"./lib/sharedlibrary/services/base-data-adapter.service\";\r\nexport * from \"./lib/sharedlibrary/services/base-data.service\";\r\nexport * from \"./lib/sharedlibrary/services/http-utils.service\";\r\n\r\nexport * from \"./lib/sharedlibrary/data/ayudacontextual\";\r\nexport * from \"./lib/sharedlibrary/data/bitmessage\";\r\nexport * from \"./lib/sharedlibrary/data/configuration-editor\";\r\nexport * from \"./lib/sharedlibrary/data/domain\";\r\nexport * from \"./lib/sharedlibrary/data/error\";\r\nexport * from \"./lib/sharedlibrary/data/fichero\";\r\nexport * from \"./lib/sharedlibrary/data/item\";\r\nexport * from \"./lib/sharedlibrary/data/bitnotification\";\r\nexport * from \"./lib/sharedlibrary/data/bitnotification-error\";\r\n\r\nexport * from \"./lib/sharedlibrary/directives/focus-register.directive\";\r\nexport * from \"./lib/sharedlibrary/directives/edit-mode.directive\";\r\nexport * from \"./lib/sharedlibrary/directives/view-mode.directive\";\r\n\r\nexport * from \"./lib/sharedlibrary/guards/candeactivate.guard\";\r\nexport * from \"./lib/sharedlibrary/global.constants\";\r\nexport * from \"./lib/sharedlibrary/utils/custom-http-interceptor\";\r\n\r\nexport * from \"./lib/sharedlibrary/components/form/text/bit-text.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/textarea/bit-textarea.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/date/bit-date.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/time/bit-time.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/datetime/bit-datetime.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/checkbox/bit-checkbox.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/switch/bit-switch.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/autocomplete/bit-autocomplete.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/editor/bit-editor.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-editable.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/readonly/bit-readonly.component\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Error","CustomError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bit-ng-library.mjs","sources":["../../../projects/bit-ng-library/src/lib/base/components/base.component.ts","../../../projects/bit-ng-library/src/lib/base/shared/utils.ts","../../../projects/bit-ng-library/src/lib/base/shared/base.filter.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/global.constants.ts","../../../projects/bit-ng-library/src/lib/base/shared/base.service.ts","../../../projects/bit-ng-library/src/lib/base/models/base-list.models.ts","../../../projects/bit-ng-library/src/lib/base/models/base-form.models.ts","../../../projects/bit-ng-library/src/lib/base/models/base-sublist.models.ts","../../../projects/bit-ng-library/src/lib/base/models/types.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/focus.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/directives/focus-register.directive.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/directives/view-mode.directive.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/directives/edit-mode.directive.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/breadcrumb/bit-breadcrumb.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/ayudacontextual.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/ayuda.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/domain.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/general-utils.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/translate.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/custom-validators.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/error.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/message.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/http-utils.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/locator.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/session-shared.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/tableview.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/toolbar.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/upload.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/base-data.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/base-data-adapter.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/services/domain.service.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/contol-messages/bit-control-messages.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/bitmessage.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/dialog/bit-dialog.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/help/bit-help.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/footer/bit-footer.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/footer/bit-footer.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/misc/bit-boton-ayuda.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/other-actions.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/toolbar/bit-toolbar.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/toolbar/bit-toolbar.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/header/bit-header.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/header/bit-header.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/loading/bit-loading.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/notificacion/bit-notification-toast.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/notificacion/bit-notification-error.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/upload/bit-ng-upload.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/upload/bit-ng-upload.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/user/bit-user-controls.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/misc/bit-column-boolean.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/misc/bit-domain-value.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/capitalize.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/pipe-cantidadmoneda.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/pipes/remove-line-breaks.pipe.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-general.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/text/bit-text.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/text/bit-text.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/textarea/bit-textarea.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/textarea/bit-textarea.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-custom.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/calendar/bit-calendar.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/date/bit-date.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/date/bit-date.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/time/bit-time.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/time/bit-time.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/datetime/bit-datetime.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/datetime/bit-datetime.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/checkbox/bit-checkbox.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/checkbox/bit-checkbox.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/switch/bit-switch.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/switch/bit-switch.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/autocomplete/bit-autocomplete.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/autocomplete/bit-autocomplete.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-general-v2.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-general-v2.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/configuration-editor.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/editor/bit-editor.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/editor/bit-editor.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/readonly/bit-readonly.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/readonly/bit-readonly.component.html","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/bit-editable.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/sharedlibrary.module.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/components/form/dropdown/bit-dropdown-general.component.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/item.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/fichero.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/bitnotification.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/data/bitnotification-error.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/guards/candeactivate.guard.ts","../../../projects/bit-ng-library/src/lib/sharedlibrary/utils/custom-http-interceptor.ts","../../../projects/bit-ng-library/src/public-api.ts","../../../projects/bit-ng-library/src/bit-ng-library.ts"],"sourcesContent":["import { Subject } from \"rxjs\";\r\nimport { Directive } from \"@angular/core\";\r\n\r\n@Directive()\r\nexport abstract class BaseComponent {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","/**\r\n * Actualiza el elemento de la lista en caso de que exista en dicha lista, o lo inserta en caso de que no exista\r\n * @param element objeto que queremos actualizar o insertar en la lista\r\n * @param list lista de elementos\r\n */\r\nexport function upsertElement(element, list) {\r\n let find: boolean = false;\r\n if (!list) list = [];\r\n list.forEach((item, index) => {\r\n if (item.id == element.id) {\r\n list[index] = element;\r\n find = true;\r\n }\r\n });\r\n if (!find) {\r\n list.push(element);\r\n }\r\n return list;\r\n}\r\n\r\n/**\r\n * Elimina el elemento de la lista\r\n * @param element elemento a eliminar de la lista\r\n * @param list lista de elementos\r\n */\r\nexport function deleteElement(element, list) {\r\n return list.filter((item) => item.id != element.id);\r\n}\r\n\r\n/** Permite copiar las propiedades de un objeto exceptuando las propiedades indicadas en keys.\r\n * Util para obtener los valores del filtro exceptuando las propiedades pagina y resultados.\r\n * La copia se realiza mediante Object.assign por lo que hay que tenerlo en cuenta por temas de propiedades anidadas\r\n * @param obj objeto que queremos copiar\r\n * @param keys array de propiedades que no queremos copiar\r\n */\r\nexport function reject(obj, keys) {\r\n return Object.keys(obj)\r\n .filter((k) => !keys.includes(k))\r\n .map((k) => Object.assign({}, { [k]: obj[k] }))\r\n .reduce((res, o) => Object.assign(res, o), {});\r\n}\r\n\r\n/** Permite seleccionar las propiedades de un objeto indicadas en keys, excluyendo el resto.\r\n * La copia se realiza mediante Object.assign por lo que hay que tenerlo en cuenta por temas de propiedades anidadas\r\n * @param obj objeto que queremos copiar\r\n * @param keys array de propiedades que queremos copiar\r\n */\r\nexport function choose(obj, keys) {\r\n return Object.keys(obj)\r\n .filter((k) => keys.includes(k))\r\n .map((k) => Object.assign({}, { [k]: obj[k] }))\r\n .reduce((res, o) => Object.assign(res, o), {});\r\n}\r\n\r\n/**\r\n * Equivalente al Object.assign() pero realiza una copia profunda: tanto los atributos como los objetos anidados\r\n * Modifica el objeto target asignando los objetos pasados como parámetros\r\n * ejemplo: assign({a: \"a\", b: {id: \"b\"}, c: \"c\"},\r\n * {a: \"a2\", b: {id: \"b2\"}, d: \"d\"}) =>\r\n * {a: \"a2\", b: {id: \"b2\"}, c: \"c\", d: \"d\"}\r\n *\r\n * @param target objeto destino\r\n * @param sources objetos cuyas propiedades se leen para mergear en el objeto destino\r\n * @see https://stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge\r\n */\r\nexport function assign(target, ...sources) {\r\n const isObject = (obj) => obj && typeof obj === \"object\" && !Array.isArray(obj);\r\n\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (isObject(target) && isObject(source)) {\r\n for (const key in source) {\r\n if (isObject(source[key])) {\r\n if (!target[key]) target[key] = {};\r\n assign(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n\r\n return assign(target, ...sources);\r\n}\r\n\r\nexport function objectoToQueryParameters(params: {}): string {\r\n return Object.keys(params)\r\n .filter((key) => !!params[key])\r\n .map((key) => key + \"=\" + params[key])\r\n .join(\"&\");\r\n}\r\n/*\r\nVersión immutable:\r\n\r\nexport function assign(...objects) {\r\n const isObject = obj => obj && typeof obj === 'object';\r\n\r\n return objects.reduce((prev, obj) => {\r\n Object.keys(obj).forEach(key => {\r\n const pVal = prev[key];\r\n const oVal = obj[key];\r\n\r\n if (Array.isArray(pVal) && Array.isArray(oVal)) {\r\n prev[key] = pVal.concat(...oVal);\r\n }\r\n else if (isObject(pVal) && isObject(oVal)) {\r\n prev[key] = assign(pVal, oVal);\r\n }\r\n else {\r\n prev[key] = oVal;\r\n }\r\n });\r\n\r\n return prev;\r\n }, {});\r\n}*/\r\n","import { reject } from \"./utils\";\r\n\r\nexport const BASE_RESULTADOS_PAGE: number = 20;\r\n\r\n/**\r\n * Clase base que contiene lo mínimo necesario para almacenar un filtro de búsqueda.\r\n */\r\nexport abstract class BaseFilter {\r\n public static RESULTADOS_PAGE: number = BASE_RESULTADOS_PAGE;\r\n public static PAGE: number = 1;\r\n\r\n /*\r\n * Ejemplo de uso de columnasOrdenacion:\r\n\r\n public static newObject(): CustomFilter {\r\n let filter = new PlantillaFilter(null, CustomFilter.getDefaultOrder(), BaseFilter.RESULTADOS_PAGE, BaseFilter.PAGE);\r\n return filter;\r\n }\r\n\r\n public static getDefaultOrder(): string[] {\r\n return ['-nombre', 'id'];\r\n }\r\n */\r\n public columnasOrdenacion: string[];\r\n\r\n constructor(public resultados: number, public pagina: number) {}\r\n\r\n public reset() {\r\n this.resultados = BaseFilter.RESULTADOS_PAGE;\r\n this.pagina = BaseFilter.PAGE;\r\n }\r\n\r\n /**\r\n * Permite obtener los valores del filtro exceptuando las propiedades pagina y resultados. Útil para inicializar el FormGroup\r\n * con los valores del filtro sin traernos estas propiedades que no interesan que estén en el FormGroup\r\n */\r\n public formValues(): { [x: string]: any } {\r\n let values = reject(this, [\"pagina\", \"resultados\"]);\r\n return values;\r\n }\r\n\r\n public allValues(): { [x: string]: any } {\r\n return reject(this, []);\r\n }\r\n}\r\n\r\n//Funciones genéricas para poder filtrar elementos en el store con ngrxdata\r\n\r\nlet initPagination: number;\r\nlet endPagination: number;\r\n\r\n/**\r\n * Permite filtrar las entidades especificadas por parámetro pasándolas por la función innerFilterFn\r\n * además de la función paginationFn.\r\n * Parametros:\r\n * pattern: corresponde con el filtro especificado por el usuario pero representado en JSON\r\n * filter: corresponde con el objeto Filter que es una imagen de pattern pero como Objeto. En este objeto\r\n * tendremos la información de qué pagina y cuantos resultados tenemos que mostrar además de los campos\r\n * seleccionados por el usuario\r\n * innerFilterFn: función que dado una entidad y un filter, determina si la entidad casa o no con el filter\r\n * Return:\r\n * Esta función retorna una lista de entidades que casan con el filtro. En el caso de que patter sea null,\r\n * se retornan tal cual todas las entities\r\n */\r\nexport function baseFilterFn<T>(entities: T[], pattern: string, filter: BaseFilter, innerFilterFn: any) {\r\n console.log(\"pattern recibido\", pattern);\r\n if (pattern) {\r\n console.log(\"filtramos entidades con este filter\", filter);\r\n initPagination = (filter.pagina - 1) * filter.resultados;\r\n endPagination = initPagination + filter.resultados;\r\n console.log(`pagination init ${initPagination} end ${endPagination}`);\r\n return entities.filter(innerFilterFn).filter(paginationFn);\r\n } else {\r\n return entities;\r\n }\r\n}\r\n\r\n/** Función de paginación. Se determina si index, que es la posición actual del elemento a analizar de las entidades,\r\n * está entre initPagination (>=) y endPagination (< exclusivo).\r\n * initpagination y endPagination son variables globales en esta clase\r\n */\r\n/**TODO: Hay un problema con la paginación si el usuario salta por ejemplo de la página 1 a la página 3 sin pasar por la 2.\r\n * En ese caso, en el store tendremos 40 elementos cargados pero los 20 últimos al ser de la página 3 no entrarán en esta\r\n * función porque sus índices dentro del array de elementos no están entre la posición 40 y 60 si no entre la posición\r\n * 20 y 40. De momento no se me ha ocurrido una forma de solucionarlo y tampoco sé si tiene sentido que un usuario no avance\r\n * de página en página. Una posible solución es que si un usuario salta a una página remota pero en el store no tenemos\r\n * cargados los elementos de páginas anteriores, entonces el rango de carga a enviar al servidor debería ser más amplio\r\n * para cargar los elementos anteriores y que los índices cuadren. Así, si el usuario salta de la página 1 a la 3, entonces\r\n * al servidor le debemos pedir que nos cargue también la 2 junto a la 3 por lo que al servidor en el fondo debemos darle un rango\r\n * de elementos a cargar y no solo el número de página a cargar.\r\n * */\r\nfunction paginationFn(element, index, array) {\r\n // let init = filter.page * filter.results;\r\n // let end = init + filter.results;\r\n // console.log(`init ${init} end ${end} index ${index} entra ${index >= init && index < end}`);\r\n return index >= initPagination && index < endPagination;\r\n}\r\n","export enum FormType {\r\n Insert,\r\n Update,\r\n Select\r\n}\r\nexport enum PageStatus {\r\n Init,\r\n Searching,\r\n FinishSearch,\r\n Error,\r\n ReadOnly,\r\n Reset,\r\n EmptyResult\r\n}\r\n\r\nexport const entityDefaultDispatcherOptions: any = {\r\n optimisticAdd: false,\r\n optimisticSaveEntities: false,\r\n optimisticUpsert: false,\r\n optimisticUpdate: false, //para cambiar la forma en que se guarda y actualiza la UI. True -> actualizo el store, la UI sin esperar respuesta del servidor\r\n optimisticDelete: false\r\n};\r\n","import { Observable } from \"rxjs\";\r\n\r\nimport { BaseCRUDServiceInterface } from \"./base-interface.service\";\r\nimport { BaseFilter } from \"./base.filter\";\r\nimport { Item } from \"../../sharedlibrary/data/item\";\r\nimport { FormType } from \"../../sharedlibrary/global.constants\";\r\nimport { HttpUtilsService } from \"../../sharedlibrary/services/http-utils.service\";\r\nimport { BitMessageService } from \"../../sharedlibrary/services/message.service\";\r\n\r\n/**\r\n * Clase básica que implementa un CRUD.\r\n * Es recomendable que todos los servicios que implementan un CRUD extiendan esta clase\r\n * o implementen la interface BaseCRUDServiceInterface.\r\n */\r\nexport abstract class BaseCRUDService implements BaseCRUDServiceInterface {\r\n /** URL base del servicio CRUD. */\r\n protected baseUrl: string;\r\n\r\n constructor(protected bitMessageService: BitMessageService, protected http: HttpUtilsService) {}\r\n\r\n /** Inserta o modifica la información del elemento. */\r\n save<T>(object: Item, mode: FormType, params?: { [key: string]: string }): Observable<T> {\r\n if (mode == FormType.Insert) {\r\n let resolveUrl = this.resolveUrl(this.baseUrl, params);\r\n return this.http.getHttpPost<T>(resolveUrl, object);\r\n } else {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/\" + object.id, params);\r\n return this.http.getHttpPut<T>(resolveUrl, object);\r\n }\r\n }\r\n\r\n /** Inserta o modifica la información del elemento. */\r\n saveObject<T>(object: Item, params?: { [key: string]: string }): Observable<T> {\r\n return this.save<T>(object, object && object.id ? FormType.Update : FormType.Insert, params);\r\n }\r\n\r\n /** Elimina el elemento. */\r\n delete(id: Number, params?: { [key: string]: string }) {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/\" + id, params);\r\n return this.http.getHttpDelete(resolveUrl);\r\n }\r\n\r\n /** Elimina todos los elementos pasados por parámetro */\r\n deleteAll(items: number[], params?: { [key: string]: string }): Observable<any> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/delete\", params);\r\n return this.http.getHttpPost(resolveUrl, items);\r\n }\r\n\r\n /** Recupera la información del elemento. */\r\n get<T>(id: Number, params?: { [key: string]: string }): Observable<T> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/\" + id, params);\r\n return this.http.getHttpGet<T>(resolveUrl);\r\n }\r\n\r\n /** Recupera todos los elementos. */\r\n getAll<T>(params?: { [key: string]: string }): Observable<T> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl, params);\r\n return this.http.getHttpGet<T>(resolveUrl);\r\n }\r\n\r\n /** Recupera la lista (opcionalmente, filtrada y paginada) de elementos. */\r\n getAllByFilter<T>(filter: BaseFilter, params?: { [key: string]: string }): Observable<T> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/filter\", params);\r\n return this.http.getHttpPost<T>(resolveUrl, filter);\r\n }\r\n\r\n /** Recupera el número total de la lista (filtrada) de elementos. */\r\n countAllByFilter(filter: BaseFilter, params?: { [key: string]: string }): Observable<number> {\r\n let resolveUrl = this.resolveUrl(this.baseUrl + \"/count\", params);\r\n return this.http.getHttpPost<number>(resolveUrl, filter);\r\n }\r\n\r\n /**\r\n * Construye la URL final en base a la plantilla y la colección de parámetros.\r\n * Si la clave de un parámetro forma parte de la URL, la reemplaza por su valor.\r\n * Si la clave de un parámetro no forma parte de la URL, se añadirá como parte del queryString.\r\n */\r\n resolveUrl(url: string, params: { [key: string]: string }): string {\r\n let queryParams: Array<string> = [];\r\n let newUrl = url;\r\n if (params) {\r\n for (let key in params)\r\n if (newUrl.indexOf(key) >= 0) {\r\n newUrl = newUrl.replace(key, params[key]);\r\n } else {\r\n queryParams.push(`${key}=${params[key]}`);\r\n }\r\n }\r\n if (queryParams.length > 0) {\r\n if (newUrl.indexOf(\"?\") < 0) {\r\n newUrl += \"?\" + queryParams.join(\"&\");\r\n } else {\r\n newUrl += \"&\" + queryParams.join(\"&\");\r\n }\r\n }\r\n return newUrl;\r\n }\r\n}\r\n","import { BaseFilter } from \"../shared/base.filter\";\r\nimport { PageStatus } from \"../../sharedlibrary/global.constants\";\r\nimport { FactoryCreateNewFilter } from \"./types\";\r\n\r\nexport interface BaseListState<T, F extends BaseFilter> {\r\n filter: F;\r\n items: T[];\r\n totalItems: number;\r\n toolbar: any;\r\n status: PageStatus;\r\n readOnly: boolean;\r\n}\r\n\r\nexport class BaseListAdapter<T, F extends BaseFilter> {\r\n /** \r\n * Retorna el estado inicial que debe tener el store. Se permite añadir más info a través del parámetro optional\r\n * en el caso de que el componente que extienda de esta clase necesite más datos o necesite modificar la forma en que se inicializan\r\n * las propiedades del store. Por ejemplo, podría interesar que la lista de items no partiera vacía si no con resultados. En ese caso\r\n * en optional se pasaría un objeto con la lista de items rellenada. { items: [obj1, obj2,...]}\r\n * makeFilter: función que sabe como construir un filtro de búsqueda\r\n * optional: objeto con propiedades adicionales para incluir en el store o propiedades modificadas a la forma en que se inicializan aquí.\r\n * Basicamente la inicialización será:\r\n * filter: makeFilter(),\r\n items: [],\r\n totalItems: 0,\r\n toolbar: botones de imprimir y exportar deshabilitados\r\n status: PageStatus.Init,\r\n readOnly: false\r\n */\r\n getInitialState<S extends BaseListState<T, F>>(makeFilter: FactoryCreateNewFilter<F>, optional?: any): S {\r\n const initialState = Object.assign(\r\n {\r\n filter: makeFilter(),\r\n items: [],\r\n totalItems: 0,\r\n toolbar: makeToolbarList(false, false),\r\n status: PageStatus.Init,\r\n readOnly: false\r\n },\r\n optional\r\n );\r\n return initialState;\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleLoadItems<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n const filter = payload;\r\n const status = PageStatus.Searching;\r\n return Object.assign({}, state, { filter, status });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el la lista de elementos cargados, el status de la página a Finish\r\n * y la toolbar\r\n * payload: array de elementos de tipo T\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleLoadItemsSuccess<S extends BaseListState<T, F>>(payload: T[], state: S): S {\r\n const items = payload;\r\n const status = PageStatus.FinishSearch;\r\n let toolbar = makeToolbarList(state.readOnly, items && items.length > 0);\r\n return Object.assign({}, state, {\r\n items,\r\n toolbar,\r\n status\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store la lista de elementos a vacía, el status de la página a Error\r\n * y la toolbar.\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleLoadItemsFail<S extends BaseListState<T, F>>(state: S): S {\r\n const status = PageStatus.Error;\r\n const toolbar = makeToolbarList(state.readOnly, false);\r\n const items = [];\r\n return Object.assign({}, state, {\r\n items,\r\n toolbar,\r\n status\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos que se pueden cargar con el filtro actual de búsqueda\r\n * totalItems: número total de elementos\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCount<S extends BaseListState<T, F>>(totalItems: number, state: S): S {\r\n return Object.assign({}, state, {\r\n totalItems\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos a 0\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCountItems<S extends BaseListState<T, F>>(state: S): S {\r\n return this.handleCount(0, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos que se pueden cargar con el filtro actual de búsqueda\r\n * payload: número total de elementos\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCountItemsSuccess<S extends BaseListState<T, F>>(payload: number, state: S): S {\r\n return this.handleCount(payload, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el número total de elementos a 0\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleCountItemsFail<S extends BaseListState<T, F>>(state: S): S {\r\n return this.handleCount(0, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handlePage<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n const filter = payload;\r\n const status = PageStatus.Searching;\r\n return Object.assign({}, state, {\r\n filter,\r\n status\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * como consecuencia de una cambio de página en el footer\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handlePageChange<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n return this.handlePage(payload, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda y el status de la página a Searching\r\n * como consecuencia de una cambio del tamaño del número de elementos en el footer\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleNewPageSizeChange<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n return this.handlePage(payload, state);\r\n }\r\n\r\n /**\r\n * Actualiza en el store el filtro de búsqueda\r\n * payload: Filtro de búsqueda de tipo F\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleResetFilter<S extends BaseListState<T, F>>(payload: F, state: S): S {\r\n const filter = payload;\r\n return Object.assign({}, state, {\r\n filter\r\n });\r\n }\r\n\r\n /**\r\n * Actualiza en el store la toolbar para setearla a modo readonly (sin botón new)\r\n * state: Representación actual del estado que deberá extender a BaseListState\r\n * return retorna la nueva representación del estado\r\n */\r\n handleListReadOnly<S extends BaseListState<T, F>>(payload: boolean, state: S): S {\r\n return Object.assign({}, state, {\r\n readOnly: payload,\r\n toolbar: makeToolbarList(payload, state.items.length > 0)\r\n });\r\n }\r\n\r\n /**\r\n * Retorna una colección de funciones para acceder a cada una de las propiedades del store\r\n * return retorna el siguiente objeto\r\n * {\r\n * getItems: (state: BaseListState<T, F>) => state.items,\r\n * getStatus: (state: BaseListState<T, F>) => state.status,\r\n * getFilter: (state: BaseListState<T, F>) => state.filter,\r\n * getToolbar: (state: BaseListState<T, F>) => state.toolbar,\r\n * getTotalItems: (state: BaseListState<T, F>) => state.totalItems\r\n * }\r\n */\r\n getSelectors(): BaseListSelectors<T, F> {\r\n return {\r\n getItems: (state: BaseListState<T, F>) => state.items,\r\n getStatus: (state: BaseListState<T, F>) => state.status,\r\n getFilter: (state: BaseListState<T, F>) => state.filter,\r\n getToolbar: (state: BaseListState<T, F>) => state.toolbar,\r\n getTotalItems: (state: BaseListState<T, F>) => state.totalItems\r\n };\r\n }\r\n}\r\n\r\nexport function makeToolbarList(readOnly: boolean, enable: boolean): any {\r\n let toolbar = {\r\n print: { enable: enable, visible: true },\r\n export: { enable: enable, visible: true }\r\n };\r\n if (!readOnly) {\r\n toolbar[\"new\"] = { enable: true, visible: true, estilo: \"fa fa-database\" };\r\n }\r\n return toolbar;\r\n}\r\n\r\n/** Función para crear un objeto de tipo BaseListAdapter */\r\nexport function createBaseListAdapter<T, F extends BaseFilter>(): BaseListAdapter<T, F> {\r\n return new BaseListAdapter();\r\n}\r\n\r\nexport declare type BaseListSelectors<T, F extends BaseFilter> = {\r\n getItems: (state: BaseListState<T, F>) => T[];\r\n getStatus: (state: BaseListState<T, F>) => PageStatus;\r\n getFilter: (state: BaseListState<T, F>) => F;\r\n getToolbar: (state: BaseListState<T, F>) => any;\r\n getTotalItems: (state: BaseListState<T, F>) => number;\r\n};\r\n","import { PageStatus, FormType } from \"../../sharedlibrary/global.constants\";\r\nimport { FactoryCreateNewObject, FactoryCreateToolbar } from \"./types\";\r\n\r\nexport interface BaseFormState<T> {\r\n item: T;\r\n toolbar: any;\r\n status: PageStatus;\r\n readOnly: boolean;\r\n formType: FormType;\r\n currentTab: number;\r\n loaded: boolean;\r\n updated: boolean;\r\n}\r\n\r\nexport class BaseFormAdapter<T> {\r\n constructor(protected fnCreateObject: FactoryCreateNewObject<T>, protected fnGetToolbarObjectLoaded?: FactoryCreateToolbar<T>) {}\r\n\r\n getInitialState<S extends BaseFormState<T>>(optional?: any): S {\r\n const initialState = Object.assign(\r\n {\r\n item: this.fnCreateObject(),\r\n toolbar: this.initToolbar(),\r\n status: PageStatus.Init,\r\n readOnly: false,\r\n formType: FormType.Insert,\r\n currentTab: 0,\r\n loaded: false,\r\n updated: false\r\n },\r\n optional\r\n );\r\n return initialState;\r\n }\r\n\r\n handleCreateObject<S extends BaseFormState<T>>(state: S): S {\r\n const item = this.fnCreateObject();\r\n const status = PageStatus.Init;\r\n const toolbar = this.initToolbar();\r\n const formType = FormType.Insert;\r\n return Object.assign({}, state, {\r\n item,\r\n status,\r\n toolbar,\r\n formType\r\n });\r\n }\r\n\r\n handleLoadObject<S extends BaseFormState<T>>(state: S): S {\r\n const status = PageStatus.Searching;\r\n const loaded = false;\r\n return Object.assign({}, state, { status, loaded });\r\n }\r\n\r\n handleLoadObjectSuccess<S extends BaseFormState<T>>(payload: T, state: S): S {\r\n const item = payload;\r\n const status = PageStatus.Init;\r\n const loaded = true;\r\n let toolbar;\r\n let formType;\r\n toolbar = this.fnGetToolbarObjectLoaded(item);\r\n formType = FormType.Update;\r\n return Object.assign({}, state, {\r\n item,\r\n status,\r\n toolbar,\r\n formType,\r\n loaded\r\n });\r\n }\r\n\r\n handleSaveObject<S extends BaseFormState<T>>(state: S): S {\r\n const updated = false;\r\n return Object.assign({}, state, { updated });\r\n }\r\n\r\n handleSaveObjectSuccess<S extends BaseFormState<T>>(payload: T, state: S): S {\r\n const item = payload;\r\n let toolbar = this.fnGetToolbarObjectLoaded(item);\r\n const formType = FormType.Update;\r\n const status = PageStatus.FinishSearch;\r\n const updated = true;\r\n return Object.assign({}, state, { item, formType, status, updated, toolbar });\r\n }\r\n\r\n handleSaveObjectFail<S extends BaseFormState<T>>(state: S): S {\r\n const status = PageStatus.Error;\r\n const updated = false;\r\n return Object.assign({}, state, { status, updated });\r\n }\r\n\r\n handleSetFormReadOnly<S extends BaseFormState<T>>(payload: boolean, state: S): S {\r\n const readOnly = payload;\r\n return Object.assign({}, state, { readOnly });\r\n }\r\n\r\n getSelectors(): BaseFormSelectors<T> {\r\n return {\r\n getItem: (state: BaseFormState<T>) => state.item,\r\n getToolbar: (state: BaseFormState<T>) => (state.readOnly ? {} : state.toolbar),\r\n getStatus: (state: BaseFormState<T>) => state.status,\r\n getFormType: (state: BaseFormState<T>) => state.formType,\r\n getCurrentTab: (state: BaseFormState<T>) => state.currentTab,\r\n getReadOnly: (state: BaseFormState<T>) => state.readOnly,\r\n getLoaded: (state: BaseFormState<T>) => state.loaded,\r\n getUpdated: (state: BaseFormState<T>) => state.updated\r\n };\r\n }\r\n\r\n initToolbar() {\r\n return getInitToolbar();\r\n }\r\n}\r\n\r\nexport function createBaseFormAdapter<T>(fnCreateObject: FactoryCreateNewObject<T>, fnGetToolbarObjectLoaded?: FactoryCreateToolbar<T>): BaseFormAdapter<T> {\r\n return new BaseFormAdapter(fnCreateObject, fnGetToolbarObjectLoaded ? fnGetToolbarObjectLoaded : getToolbarObjectLoadedDefault);\r\n}\r\n\r\nexport function getInitToolbar() {\r\n return {\r\n //mínimos toolbar de un formulario\r\n save: { visible: true, enable: true },\r\n delete: { visible: false, enable: true },\r\n print: { visible: false, enable: false }\r\n };\r\n}\r\n\r\nexport function getToolbarObjectLoadedDefault() {\r\n return {\r\n save: { visible: true, enable: true },\r\n delete: { visible: true, enable: true },\r\n print: { visible: true, enable: true }\r\n };\r\n}\r\n\r\nexport declare type BaseFormSelectors<T> = {\r\n getItem: (state: BaseFormState<T>) => T;\r\n getToolbar: (state: BaseFormState<T>) => any;\r\n getStatus: (state: BaseFormState<T>) => PageStatus;\r\n getFormType: (state: BaseFormState<T>) => FormType;\r\n getCurrentTab: (state: BaseFormState<T>) => number;\r\n getReadOnly: (state: BaseFormState<T>) => boolean;\r\n getLoaded: (state: BaseFormState<T>) => boolean;\r\n getUpdated: (state: BaseFormState<T>) => boolean;\r\n};\r\n\r\n// Construye una toolbar para un formulario en función del tip de formulario y de si el botón de guardar debe estar activo\r\nexport function makeToolbarForm(formType: FormType, saveEnable: boolean): any {\r\n switch (formType) {\r\n case FormType.Select:\r\n return { print: { visible: true, enable: true } };\r\n case FormType.Insert:\r\n return {\r\n save: { visible: true, enable: saveEnable },\r\n delete: { visible: false, enable: true },\r\n print: { visible: false, enable: false }\r\n };\r\n case FormType.Update:\r\n return {\r\n save: { visible: true, enable: saveEnable },\r\n delete: { visible: true, enable: true },\r\n print: { visible: true, enable: true }\r\n };\r\n default:\r\n return {};\r\n }\r\n}\r\n","import { EntityState, EntityAdapter, createEntityAdapter, Dictionary } from \"@ngrx/entity\";\r\n\r\nimport { FormType } from \"../../sharedlibrary/global.constants\";\r\n\r\nimport { FactoryCreateNewObject } from \"./types\";\r\n\r\nexport interface BaseChildListState<T> extends EntityState<T> {\r\n toolbar: any;\r\n modeInnerForm: FormType; //modo de edición del formulario: Insert, Update\r\n itemSelected: T; //elemento que debe mostrarse en el formulario interno\r\n displayInnerForm: boolean; //cuando debe verse el formulario interno del componente\r\n itemsSelected: number[]; //elementos seleccionados del listado mediante sus checks respectivos\r\n}\r\n\r\nexport class BaseChildListAdapter<T> {\r\n private adapter: EntityAdapter<T>;\r\n\r\n constructor(args?: any) {\r\n this.adapter = createEntityAdapter<T>(args);\r\n }\r\n\r\n getInitialState<S extends BaseChildListState<T>>(makeItem: FactoryCreateNewObject<T>, optional?: any): S {\r\n const initialState = Object.assign(\r\n {\r\n toolbar: makeToolbarChildList(false),\r\n modeInnerForm: FormType.Insert,\r\n itemSelected: makeItem(),\r\n displayInnerForm: false,\r\n itemsSelected: []\r\n },\r\n optional\r\n );\r\n return this.adapter.getInitialState(initialState);\r\n }\r\n\r\n handleLoadSucces<S extends BaseChildListState<T>>(payload: T[], state: S): S {\r\n return this.adapter.setAll(payload, state);\r\n }\r\n\r\n handleCloseForm<S extends BaseChildListState<T>>(state: S): S {\r\n const displayInnerForm = false;\r\n return Object.assign({}, state, {\r\n displayInnerForm\r\n });\r\n }\r\n\r\n handleShowForm<S extends BaseChildListState<T>>(payload: T, formType: FormType, state: S): S {\r\n const displayInnerForm = true;\r\n const modeInnerForm = formType;\r\n const itemSelected = payload;\r\n return Object.assign({}, state, {\r\n displayInnerForm,\r\n modeInnerForm,\r\n itemSelected\r\n });\r\n }\r\n\r\n handleItemsSelected<S extends BaseChildListState<T>>(payload: number[], state: S): S {\r\n let toolbar;\r\n if (payload && payload.length > 0) {\r\n toolbar = makeToolbarChildList(true);\r\n } else {\r\n toolbar = makeToolbarChildList(false);\r\n }\r\n const itemsSelected = payload;\r\n return Object.assign({}, state, {\r\n toolbar,\r\n itemsSelected\r\n });\r\n }\r\n\r\n handleSaveItem<S extends BaseChildListState<T>>(payload: T, state: S): S {\r\n const displayInnerForm = false;\r\n const newState = this.adapter.upsertOne(payload, state);\r\n return Object.assign({}, newState, {\r\n displayInnerForm\r\n });\r\n }\r\n\r\n handleDeleteItems<S extends BaseChildListState<T>>(payload: number[], state: S): S {\r\n const displayInnerForm = false;\r\n const toolbar = makeToolbarChildList(false);\r\n const itemsSelected = [];\r\n const newState = this.adapter.removeMany(payload, state);\r\n return Object.assign({}, newState, {\r\n displayInnerForm,\r\n toolbar,\r\n itemsSelected\r\n });\r\n }\r\n\r\n getEntityAdapter() {\r\n return this.adapter;\r\n }\r\n\r\n getEntityAdapterSelectors() {\r\n return this.adapter.getSelectors();\r\n }\r\n\r\n getSelectors(): BaseChildListSelectors<T> {\r\n return {\r\n getToolbar: (state: BaseChildListState<T>) => state.toolbar,\r\n getModelInnerForm: (state: BaseChildListState<T>) => state.modeInnerForm,\r\n getItemSelected: (state: BaseChildListState<T>) => state.itemSelected,\r\n getDisplayInnerForm: (state: BaseChildListState<T>) => state.displayInnerForm,\r\n getItemsSelected: (state: BaseChildListState<T>) => state.itemsSelected\r\n };\r\n }\r\n}\r\n\r\nexport function createBaseChildListAdapter<T>(): BaseChildListAdapter<T> {\r\n return new BaseChildListAdapter();\r\n}\r\n\r\nexport function makeToolbarChildList(enableDelete: boolean) {\r\n return {\r\n new: { enable: true, visible: true },\r\n delete: { enable: enableDelete, visible: enableDelete }\r\n };\r\n}\r\n\r\nexport declare type BaseChildListSelectors<T> = {\r\n getToolbar: (state: BaseChildListState<T>) => any;\r\n getModelInnerForm: (state: BaseChildListState<T>) => FormType;\r\n getItemSelected: (state: BaseChildListState<T>) => T;\r\n getDisplayInnerForm: (state: BaseChildListState<T>) => boolean;\r\n getItemsSelected: (state: BaseChildListState<T>) => number[];\r\n};\r\n","import { Action } from \"@ngrx/store\";\r\n\r\nexport type FactoryCreateAction = (type: string, payload?: any) => Action;\r\nexport type FactoryCreateNewObject<T> = (data?: any) => T;\r\nexport type FactoryCreateNewFilter<F> = () => F;\r\nexport type FactoryCreateNewFilterFromFilter<F> = (F) => F;\r\nexport type FactoryCopyObject<T> = (T) => T;\r\nexport type FactoryCreateToolbar<T> = (T) => any;\r\nexport type TranslatedMessage = { code: string; context?: string; params?: {} };\r\nexport type ErrorValidateForm = { prefixes: string[]; errorMessage: TranslatedMessage };\r\n\r\nexport enum GENERIC_TYPE {\r\n GO_FORM = \"[Models] Go Form\",\r\n GO_LIST = \"[Models] Go List\",\r\n LOAD_ITEMS = \"[Models] Load Items\",\r\n SAVE_ITEM = \"[Models] Save item\",\r\n INSERT_ITEM = \"[Models] Insert item\",\r\n UPDATE_ITEM = \"[Models] Update item\",\r\n DELETE_ITEM = \"[Models] Delete Item\",\r\n DELETE_ITEMS = \"[Models] Delete Items\",\r\n SHOW_ITEM_FOR_UPDATE = \"[Models] Show item for update\",\r\n SHOW_ITEM_FOR_INSERT = \"[Models] Show item for insert\",\r\n ITEMS_SELECTED = \"[Models] items selected\",\r\n CLOSE_ITEM = \"[Models] Close item\",\r\n NEW_PAGE_SIZE = \"[Modles] New Page Size\",\r\n PAGE_CHANGE = \"[Modles] Page Change\",\r\n RESET_FILTER = \"[Modles] Reset Filter\"\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n/**\r\n * FocusService almacena el campo/elemento que actualmente tiene el foco del usuario.\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class FocusService {\r\n // El campo/elemento con el foco\r\n private focused: string = \"none\";\r\n\r\n focus(id: string): void {\r\n //console.log(`focus on ${id}`);\r\n this.focused = id;\r\n }\r\n\r\n clear(): void {\r\n //console.log('clear focus');\r\n this.focused = undefined;\r\n }\r\n\r\n getFocusedElement(): string {\r\n //console.log(`returning focus on ${this.focused}`);\r\n return this.focused;\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener, Renderer2 } from \"@angular/core\";\r\n\r\nimport { FocusService } from \"../services/focus.service\";\r\n\r\n@Directive({\r\n selector: \"input,select,textarea,bit-input,bit-select\" //TODO: no funciona bien con autoComplete. No se registra el focus\r\n})\r\nexport class FocusRegisterDirective {\r\n constructor(private elRef: ElementRef, private renderer: Renderer2, private focusService: FocusService) {}\r\n\r\n @HostListener(\"focus\") onFocus() {\r\n this.focusService.focus(this.elRef.nativeElement.id);\r\n }\r\n\r\n @HostListener(\"blur\") onBlur() {\r\n this.focusService.clear();\r\n }\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[viewMode]\"\r\n})\r\nexport class ViewModeDirective {\r\n constructor(public tpl: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[editMode]\"\r\n})\r\nexport class EditModeDirective {\r\n constructor(public tpl: TemplateRef<any>) {}\r\n}\r\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n/**\r\n * Componenente que muestra la miga de pan en función de los datos de entrada. Estos datos corresponden con\r\n * un array de objetos que tendrán tres campos: label, url y params. El label debe ser obligatorio y corresponde con la\r\n * información en pantalla a mostrar. La url y params son opcionales y correposnden con la dirección a la que el usuario podrá ir\r\n * si pulsa en ella.\r\n * Ejemplos: [\r\n * {label: 'Desenvolupament', url: 'developer/exceptions'},\r\n * {label: 'Log'},\r\n * {label: 'Usuaris', url: 'mantenimiento/users', params: {query: 'true'}}\r\n * ]\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-breadcrumb\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <ul class=\"breadcrumb\">\r\n <li [class.active]=\"i == bc.length - 1\" *ngFor=\"let path of bc; let i = index\">\r\n <a class=\"breadcrumb-item\" *ngIf=\"i < bc.length - 1 && path.url\" (click)=\"goAddress(path)\" href=\"#\">{{ \"breadcrumb.\" + path.label | transloco }}</a>\r\n <span class=\"breadcrumb-item active\" *ngIf=\"i == bc.length - 1 || !path.url\">{{ \"breadcrumb.\" + path.label | transloco }}</span>\r\n </li>\r\n </ul>\r\n `\r\n //styleUrls: [\"bit-breadcrumb.component.css\"]\r\n})\r\nexport class BitBreadCrumbComponent implements OnInit {\r\n @Input(\"breadcrumb\") bc: any[];\r\n\r\n constructor(protected router: Router) {}\r\n\r\n /** Comprobamos si los datos de entrada no están definidos para inicializarlos en blanco */\r\n ngOnInit(): void {\r\n if (this.bc == undefined) this.bc = [];\r\n if (this.bc.length == 0) this.bc.push({ label: \" \" });\r\n }\r\n\r\n /** Vamos a la URL que contenga el path */\r\n goAddress(path: any) {\r\n if (path.params) {\r\n this.router.navigate([path.url, path.params]);\r\n } else {\r\n this.router.navigate([path.url]);\r\n }\r\n return false; //para evitar que navegue al href=\"#\"\r\n }\r\n}\r\n","export class AyudaContextual {\r\n constructor(public key: string, public header: string, public title: string, public body: string) {}\r\n\r\n public static newObject(obj): AyudaContextual {\r\n return new AyudaContextual(obj.key, obj.header || obj.title, obj.title || obj.header, obj.body);\r\n }\r\n}\r\n","import { Injectable, EventEmitter } from \"@angular/core\";\r\n\r\nimport { AyudaContextual } from \"../data/ayudacontextual\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class AyudaService {\r\n public mostrar: EventEmitter<AyudaContextual> = new EventEmitter<AyudaContextual>();\r\n\r\n public static AYUDAS = []; // Inicializar desde la aplicacion cliente\r\n\r\n protected mapaAyudas: Map<string, AyudaContextual>; // mapa de ayudas contextuales del sistema\r\n\r\n constructor() {\r\n this.loadAyudas();\r\n }\r\n\r\n // procesa el fichero app.ayudas.json y crea el mapa para acceder luego directamente por clave\r\n private loadAyudas() {\r\n this.mapaAyudas = new Map<string, AyudaContextual>();\r\n if (AyudaService.AYUDAS) {\r\n AyudaService.AYUDAS.forEach(elem => {\r\n this.mapaAyudas.set(elem.key, AyudaContextual.newObject(elem));\r\n });\r\n console.log(`Cargadas ${this.mapaAyudas.size} ayudas contextuales`);\r\n } else {\r\n console.warn(\"No se han podido cargar las ayudas contextuales de la aplicacion.\");\r\n }\r\n }\r\n\r\n mostrarAyuda(key: string) {\r\n if (this.mapaAyudas.has(key)) {\r\n this.mostrar.emit(this.mapaAyudas.get(key));\r\n } else {\r\n console.warn(`No existe ayuda para la clave [${key}]`);\r\n }\r\n }\r\n}\r\n","export class Domain {\r\n public static DUMMY: Domain = new Domain(null, \"Qualsevol\", false);\r\n constructor(public value: string, public label: string, public disabled?: boolean) {}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport moment from \"moment\";\r\nimport { Subject } from \"rxjs\";\r\nimport { UrlSegment } from \"@angular/router\";\r\nimport { Domain } from \"../data/domain\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class GeneralUtils {\r\n public static FORMAT_SHORT_DATE = \"DD/MM/YYYY\";\r\n public static FORMAT_LONG_DATE = \"DD/MM/YYYY HH:mm\";\r\n public static FORMAT_SHORT_TIME = \"HH:mm\";\r\n public static FORMAT_SHORT_SECONDS_TIME = \"HH:mm:ss\";\r\n private observableLoadingSource = new Subject<string>();\r\n public observableLoading;\r\n\r\n constructor() {\r\n console.log(\"GeneralUtils constructor\");\r\n this.observableLoading = this.observableLoadingSource.asObservable();\r\n }\r\n\r\n public startLoading(): void {\r\n this.observableLoadingSource.next(\"start\");\r\n }\r\n\r\n public stopLoading(): void {\r\n this.observableLoadingSource.next(\"stop\");\r\n }\r\n\r\n public static capitalizeFirstLetter(cad: string): string {\r\n return cad && cad.charAt(0).toUpperCase() + cad.slice(1);\r\n }\r\n\r\n public static getTwoDigits(digit: number): string {\r\n if (digit < 10) {\r\n return \"0\" + digit;\r\n } else {\r\n return \"\" + digit;\r\n }\r\n }\r\n\r\n public static getPathFromURL(segments: UrlSegment[]): string {\r\n let path = \"\";\r\n for (let seg of segments) {\r\n path += seg.path;\r\n path += \"/\";\r\n }\r\n return path;\r\n }\r\n\r\n /** Transforma el objeto en un objeto FormData para enviar como un multipart*/\r\n public static objectToFormData(object: Object) {\r\n let formData: any = new FormData();\r\n Object.keys(object).map((k) => {\r\n if (Array.isArray(object[k])) {\r\n for (let fileItem of object[k]) {\r\n formData.append(k, fileItem);\r\n }\r\n } else {\r\n formData.append(k, object[k]);\r\n }\r\n });\r\n return formData;\r\n }\r\n\r\n public static buildNombreCompleto(obj: any): string {\r\n let str = \"\";\r\n if (obj.nombre) str += obj.nombre;\r\n if (obj.apellido1) str += (str.length > 0 ? \" \" : \"\") + obj.apellido1;\r\n if (obj.apellido2) str += (str.length > 0 ? \" \" : \"\") + obj.apellido2;\r\n return str;\r\n }\r\n\r\n public static getTodayAsString(format: string = GeneralUtils.FORMAT_SHORT_DATE): string {\r\n return moment(new Date()).format(format);\r\n }\r\n\r\n public static getDateAsString(fecha: Date, format: string = GeneralUtils.FORMAT_SHORT_DATE): string {\r\n return moment(fecha).format(format);\r\n }\r\n\r\n public static getStringAsDate(fecha: string, format: string = GeneralUtils.FORMAT_SHORT_DATE): Date {\r\n return moment(fecha, format).toDate();\r\n }\r\n\r\n public static getDateTimeAsString(fecha: Date, format: string = GeneralUtils.FORMAT_LONG_DATE): string {\r\n return moment(fecha).format(format);\r\n }\r\n\r\n public static getTimeAsString(fecha: Date, format: string = GeneralUtils.FORMAT_SHORT_TIME): string {\r\n return moment(fecha).format(format);\r\n }\r\n\r\n public static stringToDate(fString: string): Date {\r\n return moment(fString).toDate();\r\n }\r\n\r\n public static stringShortToDate(fString: string): Date {\r\n return moment(fString, \"DD/MM/YYYY\").toDate();\r\n }\r\n\r\n public static stringToTime(tString: string): Date {\r\n return moment(tString, \"HH:mm\").toDate();\r\n }\r\n\r\n public static getTimeFromDateString(fecha: string): string {\r\n return moment(fecha).format(GeneralUtils.FORMAT_SHORT_TIME);\r\n }\r\n\r\n public static getWithDaysOffset(offset: number = 0): string {\r\n return moment().add(offset, \"days\").format(GeneralUtils.FORMAT_SHORT_DATE);\r\n }\r\n\r\n public static getFirstDayOfCurrentMonth(): string {\r\n return moment().startOf(\"month\").format(GeneralUtils.FORMAT_SHORT_DATE);\r\n }\r\n\r\n public static getLastDayOfCurrentMonth(): string {\r\n return moment().endOf(\"month\").format(GeneralUtils.FORMAT_SHORT_DATE);\r\n }\r\n\r\n public static fechaInicioDespuesIgualFechaFin(fechaInicio: string, fechaFin: string): boolean {\r\n if (fechaInicio && fechaFin) {\r\n return GeneralUtils.stringShortToDate(fechaInicio) > GeneralUtils.stringShortToDate(fechaFin);\r\n }\r\n return false;\r\n }\r\n\r\n public static horaInicioDespuesHoraFin(horaInicio: string, horaFin: string): boolean {\r\n if (horaInicio && horaFin) {\r\n return GeneralUtils.stringToTime(horaInicio) > GeneralUtils.stringToTime(horaFin);\r\n }\r\n return false;\r\n }\r\n\r\n public static fechaEnRango(fecha: string, fechaInicio: string, fechaFin: string): boolean {\r\n if (fecha) {\r\n let fechaDate = GeneralUtils.stringShortToDate(fecha);\r\n let output = !(\r\n (fechaInicio && fechaDate < GeneralUtils.stringShortToDate(fechaInicio)) ||\r\n (fechaFin && fechaDate > GeneralUtils.stringShortToDate(fechaFin))\r\n );\r\n return output;\r\n }\r\n return false;\r\n }\r\n\r\n public static addOpcionVacia(lista: any[], texto?: string) {\r\n let nLista = lista.slice();\r\n nLista.unshift(new Domain(null, texto ? texto : \"\"));\r\n return nLista;\r\n }\r\n\r\n public static getOptionText(list: Domain[], id: number): string {\r\n for (let d of list) {\r\n if (+d.value == id) {\r\n return d.label;\r\n }\r\n }\r\n return \"-\";\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { TranslocoService, TranslateParams, HashMap, TranslocoScope } from \"@ngneat/transloco\";\r\nimport { Observable, BehaviorSubject } from \"rxjs\";\r\n\r\nimport { TranslatedMessage } from \"../../base/models/types\";\r\n\r\n/**\r\n * Construye un objeto TranslatedMessage con información para que el receptor pueda traducir el mensaje según\r\n * el idioma especificado\r\n * @param code código dentro del fichero json para traducir el mensaje\r\n * @param context contexto de traducción que permitirár localizar el fichero json\r\n * @param params Hashmap de tipo nombre propiedad, valor que permitirá customizar el mensaje a traducir\r\n */\r\nexport function buildTranslatedMessage(code: string, context: string, params?: {}): TranslatedMessage {\r\n let translatedMessage: any = { code: code, context, params: params };\r\n return translatedMessage;\r\n}\r\n\r\n/** wrapper al servicio de traducción de textos */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class TranslateService {\r\n private langChangeSubject: BehaviorSubject<string>;\r\n langChanged$: Observable<string>;\r\n\r\n constructor(private translocoService: TranslocoService, @Inject(\"DEFAULT_LANGUAGE\") private defaultLanguage = \"es\") {\r\n //para suscribirnos a cambios de idioma y emitimos un primer valor que es el idioma en curso\r\n console.log(\"default language\", this.defaultLanguage);\r\n this.langChangeSubject = new BehaviorSubject<string>(this.defaultLanguage);\r\n this.langChanged$ = this.langChangeSubject.asObservable(); //.pipe(startWith(this.getActiveLang()));\r\n }\r\n\r\n /** Permite traducir un texto cuya clave tiene incluida el contexto en la propia key. Se entiende que el prefijo antes\r\n * del primer punto representará el contexto y el resto representará la clave que podrá ser compuesta:\r\n * Ejemplo: contexto.grupo.subgrupo.clave\r\n */\r\n selectTranslateWithContext(key: string) {\r\n let point = key.indexOf(\".\");\r\n let context = \"\";\r\n if (point != -1) {\r\n context = key.substring(0, point);\r\n key = key.substring(point + 1, key.length);\r\n }\r\n return this.selectTranslate(key, null, context);\r\n }\r\n\r\n selectTranslate(key: TranslateParams, params?: HashMap, lang?: string | TranslocoScope, _isObject?: boolean): Observable<any> {\r\n console.log(`selectTranslate ${key} ${lang}`);\r\n return this.translocoService.selectTranslate(key, params, lang, _isObject);\r\n }\r\n\r\n selectTranslateObject(key: string, params?: HashMap, lang?: string): Observable<any> {\r\n return this.translocoService.selectTranslateObject(key, params, lang);\r\n }\r\n\r\n setActiveLang(lang: string): this {\r\n this.translocoService.setActiveLang(lang);\r\n this.langChangeSubject.next(lang); //emitimos que hemos cambiado el idioma\r\n console.log(\"setActiveLang\", lang);\r\n return this;\r\n }\r\n\r\n getActiveLang(): string {\r\n let lang = this.translocoService.getActiveLang();\r\n console.log(\"getActiveLang\", lang);\r\n return lang;\r\n }\r\n}\r\n","import { FormGroup, FormControl, FormArray } from \"@angular/forms\";\r\nimport { GeneralUtils } from \"./general-utils.service\";\r\nimport { TranslatedMessage, ErrorValidateForm } from \"../../base/models/types\";\r\nimport { buildTranslatedMessage } from \"./translate.service\";\r\n\r\nexport class CustomValidators {\r\n static config = {\r\n required: CustomValidators.buildErrorMessage(\"required\"),\r\n invalidDate: CustomValidators.buildErrorMessage(\"Data incorrecta\"),\r\n invalidTime: CustomValidators.buildErrorMessage(\"invalidTime\"),\r\n invalidEmailAddress: CustomValidators.buildErrorMessage(\"invalidEmailAddress\"),\r\n invalidEmailCSVAddress: CustomValidators.buildErrorMessage(\"invalidEmailCSVAddress\"),\r\n invalidLogin: CustomValidators.buildErrorMessage(\"invalidLogin\"),\r\n invalidEtiqueta: CustomValidators.buildErrorMessage(\"invalidEtiqueta\"),\r\n invalidName: CustomValidators.buildErrorMessage(\"invalidName\"),\r\n invalidCodigo: CustomValidators.buildErrorMessage(\"invalidCodigo\"),\r\n invalidAlfanumerico: CustomValidators.buildErrorMessage(\"invalidAlfanumerico\"),\r\n invalidCantidad: CustomValidators.buildErrorMessage(\"invalidCantidad\"),\r\n invalidEnteroPositivo: CustomValidators.buildErrorMessage(\"invalidEnteroPositivo\"),\r\n invalidEnteroPositivoIncluyeCero: CustomValidators.buildErrorMessage(\"invalidEnteroPositivoIncluyeCero\"),\r\n invalidCantidadDecimal: CustomValidators.buildErrorMessage(\"invalidCantidadDecimal\"),\r\n invalidNumeroPositivo: CustomValidators.buildErrorMessage(\"invalidNumeroPositivo\"),\r\n invalidCodigoPostal: CustomValidators.buildErrorMessage(\"invalidCodigoPostal\"),\r\n invalidTelefono: CustomValidators.buildErrorMessage(\"invalidTelefono\"),\r\n invalidTelefonoCSV: CustomValidators.buildErrorMessage(\"invalidTelefonoCSV\"),\r\n invalidPorcentaje: CustomValidators.buildErrorMessage(\"invalidPorcentaje\"),\r\n invalidUrl: CustomValidators.buildErrorMessage(\"invalidUrl\"),\r\n invalidPath: CustomValidators.buildErrorMessage(\"invalidPath\"),\r\n invalidNIF: CustomValidators.buildErrorMessage(\"invalidNIF\"),\r\n invalidNIE: CustomValidators.buildErrorMessage(\"invalidNIE\"),\r\n invalidCIF: CustomValidators.buildErrorMessage(\"invalidCIF\"),\r\n invalidNIFNIE: CustomValidators.buildErrorMessage(\"invalidNIFNIE\"),\r\n invalidAnyo: CustomValidators.buildErrorMessage(\"invalidAnyo\"),\r\n maxlength: CustomValidators.buildErrorMessage(\"maxlength\"),\r\n invalidNumeroDocumentoTipoDocumento: CustomValidators.buildErrorMessage(\"invalidNumeroDocumentoTipoDocumento\"),\r\n direccionIncompleta: CustomValidators.buildErrorMessage(\"direccionIncompleta\"),\r\n requiredExtraData: CustomValidators.buildErrorMessage(\"requiredExtraData\"),\r\n invalidRangoFechaFinPosteriorInicio: CustomValidators.buildErrorMessage(\"invalidRangoFechaFinPosteriorInicio\"),\r\n invalidRangoHoraFinPosteriorInicio: CustomValidators.buildErrorMessage(\"invalidRangoHoraFinPosteriorInicio\"),\r\n invalidDateTimeNotAfterCurrentDate: CustomValidators.buildErrorMessage(\"invalidDateTimeNotAfterCurrentDate\")\r\n };\r\n\r\n static CustomValidatorsMap = {\r\n codigoNumerico: CustomValidators.codigoValidator,\r\n codigoAlfanumerico: CustomValidators.alfanumericoValidator,\r\n nombre: CustomValidators.nombreValidator,\r\n numero: CustomValidators.cantidadDecimalValidator,\r\n entero: CustomValidators.cantidadValidator,\r\n numeroPositivo: CustomValidators.numeroPositivoValidator,\r\n enteroPositivo: CustomValidators.enteroPositivoValidator,\r\n nif: CustomValidators.nifValidator,\r\n nie: CustomValidators.nieValidator,\r\n cif: CustomValidators.cifValidator,\r\n nifnie: CustomValidators.nifNieValidator,\r\n cp: CustomValidators.codigoPostalValidator,\r\n telefono: CustomValidators.telefonoValidator,\r\n telefonoCSV: CustomValidators.telefonoCSVValidator,\r\n emailCSV: CustomValidators.emailCSVValidator,\r\n email: CustomValidators.emailValidator,\r\n fecha: CustomValidators.dataValidator,\r\n anyo: CustomValidators.anyoValidator\r\n };\r\n\r\n static buildErrorMessage(code: string, params?: {}): TranslatedMessage {\r\n return buildTranslatedMessage(\"form.messages.\" + code, \"bitnglibrary\", params);\r\n }\r\n\r\n static getValidatorErrorMessage(code: string) {\r\n return CustomValidators.config[code];\r\n }\r\n\r\n // método para unir validadores\r\n static compose(validators: Function[]): Function {\r\n let result = function (g: FormGroup) {\r\n // ejecutamos cada uno de los validadores y unimos sus resultados\r\n let innerResult = validators.map((validator) => validator(g)).reduce((acc, result = {}) => Object.assign(acc, result), {});\r\n return innerResult;\r\n };\r\n return result;\r\n }\r\n\r\n static required(control): { [s: string]: boolean } {\r\n if (!control.value) {\r\n return {required: true};\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // este validador en realidad no está haciendo nada porque bit-input, para fechas no válidas, sustituye\r\n // control.value por un null y el validador pasa siempre\r\n static dataValidator(control): { [s: string]: boolean } {\r\n // formato dd/MM/yyyy\r\n if (!control.value || control.value.match(/^(0[1-9]|1\\d|2\\d|3[01])\\/(0[1-9]|1[0-2])\\/(19|20)\\d{2}$/)) {\r\n return null;\r\n } else {\r\n return {invalidDate: true};\r\n }\r\n }\r\n\r\n static timeValidator(control): { [s: string]: boolean } {\r\n // formato hh:mm\r\n if (!control.value || (control.value && control.value.match(/^[0-9][0-9]:[0-9][0-9]$/))) {\r\n return null;\r\n } else {\r\n return {invalidTime: true};\r\n }\r\n }\r\n\r\n static emailValidator(control): { [s: string]: boolean } {\r\n // RFC 2822 compliant regex\r\n if (!control.value || control.value.match(/\\S+@([-\\w]+\\.)+\\w+/g)) {\r\n return null;\r\n } else {\r\n return {invalidEmailAddress: true};\r\n }\r\n }\r\n\r\n static emailCSVValidator(control): { [s: string]: boolean } {\r\n // RFC 2822 compliant regex\r\n if (!control.value || control.value.match(/^(( )*[\\w\\.]+@([-\\w]+\\.)+\\w+( )*)(,( )*[\\w\\.]+@([-\\w]+\\.)+\\w+( )*)*$/g)) {\r\n return null;\r\n } else {\r\n return {invalidEmailCSVAddress: true};\r\n }\r\n }\r\n\r\n static loginValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[a-z0-9_-]{3,15}/)) {\r\n return null;\r\n } else {\r\n return {invalidLogin: true};\r\n }\r\n }\r\n\r\n static etiquetaValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[a-zA-Z0-9_-]+/)) {\r\n return null;\r\n } else {\r\n return {invalidEtiqueta: true};\r\n }\r\n }\r\n\r\n static nombreValidator(control): { [s: string]: boolean } {\r\n if (\r\n !control.value ||\r\n /^([A-Za-z0-9_\\.\\,\\'\\\"\\(\\)\\;\\:\\-\\/\\@\\?\\%\\?\\¿\\&\\+\\-\\*\\/\\ \\n\\rºª'´’·ïü?`áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙÄËÏÖÜäëïöüñÑçÇ¡!#])+$/.test(control.value)\r\n ) {\r\n return null;\r\n } else {\r\n return {invalidName: true};\r\n }\r\n }\r\n\r\n static codigoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^([0-9])+$/)) {\r\n return null;\r\n } else {\r\n return {invalidCodigo: true};\r\n }\r\n }\r\n\r\n static alfanumericoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^([A-Z0-9_\\.\\-ÑÇ])+$/)) {\r\n return null;\r\n } else {\r\n return {invalidAlfanumerico: true};\r\n }\r\n }\r\n\r\n static cantidadValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a number without decimals\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n }\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num % 1 == 0) {\r\n return null;\r\n }\r\n return {invalidCantidad: true};\r\n }\r\n\r\n /* Valida números enteros (sin decimales) positivos (>=0) */\r\n static enteroPositivoValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a number without decimals\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n }\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num % 1 == 0 && num >= 0) {\r\n return null;\r\n }\r\n return {invalidEnteroPositivo: true};\r\n }\r\n\r\n static enteroPositivoValidatorIncluyeCeroValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a positive number (including 0) without decimals\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n }\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num % 1 == 0 && num >= 0) {\r\n return null;\r\n }\r\n return {invalidEnteroPositivoIncluyeCero: true};\r\n }\r\n\r\n /* Valida números enteros (con decimales) */\r\n static cantidadDecimalValidator(control): { [s: string]: boolean } {\r\n // value is either empty, or a number (including decimals)\r\n if (!control.value || control.value === \"\" || !isNaN(Number(control.value))) {\r\n return null;\r\n } else {\r\n return {invalidCantidadDecimal: true};\r\n }\r\n }\r\n\r\n /* Valida números enteros (con decimales) positivos (>=0) */\r\n static numeroPositivoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value === \"\" || (!isNaN(Number(control.value)) && Number(control.value) >= 0)) {\r\n return null;\r\n } else {\r\n return {invalidNumeroPositivo: true};\r\n }\r\n }\r\n\r\n /* Valida código postal (numero de 5 dígitos) */\r\n static codigoPostalValidator(control): { [s: string]: boolean } {\r\n if (!control.value || (control.value.match(/^([0-9])+$/) && control.value.length == 5)) {\r\n return null;\r\n } else {\r\n return {invalidCodigoPostal: true};\r\n }\r\n }\r\n\r\n /* Valida telefono (numero de 9 dígitos) */\r\n static telefonoValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/)) {\r\n return null;\r\n } else {\r\n return {invalidTelefono: true};\r\n }\r\n }\r\n\r\n /* Valida telefono (numero de 9 dígitos) */\r\n static telefonoCSVValidator(control): { [s: string]: boolean } {\r\n if (!control.value || control.value.match(/^[0-9]{9}(( *, *)[0-9]{9})*$/g)) {\r\n return null;\r\n } else {\r\n return {invalidTelefonoCSV: true};\r\n }\r\n }\r\n\r\n static buildLongitudValidator(lon: number) {\r\n let errorKey = \"invalidLongitud\";\r\n let errorKeyIndex = errorKey + \" _\" + lon.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {lon: lon});\r\n return (control) => {\r\n if (!control.value || control.value.length <= lon) {\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static buildCantidadMinValidator(min: number) {\r\n let errorKey = \"invalidCantidadMin\";\r\n let errorKeyIndex = errorKey + \" _\" + min.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {min: min});\r\n return (control) => {\r\n if (control.value === \"\" || control.value == null) return null;\r\n let num = Number(control.value);\r\n if (isNaN(num) || num >= min) {\r\n // si no es numérico o el valor >= min, pasa la validación\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static buildCantidadMaxValidator(max: number) {\r\n let errorKey = \"invalidCantidadMax\";\r\n let errorKeyIndex = errorKey + \"_\" + max.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {max: max});\r\n return (control) => {\r\n if (control.value === \"\" || control.value == null) return null;\r\n let num = Number(control.value);\r\n if (isNaN(num) || num <= max) {\r\n // si no es numérico o el valor ≤ max, pasa la validación\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static buildCantidadMinMaxValidator(min: number, max: number) {\r\n let errorKey = \"invalidCantidadMinMax\";\r\n let errorKeyIndex = errorKey + \"_\" + min.toString() + \"_\" + max.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {\r\n min: min,\r\n max: max\r\n });\r\n return (control) => {\r\n if (control.value === \"\" || control.value == null) return null;\r\n let num = Number(control.value);\r\n if (!isNaN(num) && num >= min && num <= max) {\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n }\r\n\r\n static porcentajeValidator(control): { [s: string]: boolean } {\r\n // expected a numeric value between 0 and 100\r\n if (!control.value || control.value === \"\") {\r\n return null;\r\n } else {\r\n let n = Number(control.value);\r\n if (!isNaN(n) && n >= 0 && n <= 100) {\r\n return null;\r\n } else {\r\n return {invalidPorcentaje: true};\r\n }\r\n }\r\n }\r\n\r\n static urlValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(\r\n \"^(https?:\\\\/\\\\/)?\" + // protocol\r\n \"((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|\" + // domain name\r\n \"((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))\" + // OR ip (v4) address\r\n \"(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*\" + // port and path\r\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\r\n \"(\\\\#[-a-z\\\\d_]*)?$\",\r\n \"i\"\r\n ); // fragment locator\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidUrl: true};\r\n }\r\n }\r\n\r\n static pathValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(\r\n \"^((\\\\/)?[-a-z\\\\d%_.~+]*)*\" + // port and path\r\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\r\n \"(\\\\#[-a-z\\\\d_]*)?$\",\r\n \"i\"\r\n ); // fragment locator\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidPath: true};\r\n }\r\n }\r\n\r\n /**\r\n * Retorna un string con todos los errores que contiene el formulario, separados por saltos de línea.\r\n */\r\n static validateForm(form: FormGroup, prefix: string[] = []): ErrorValidateForm[] {\r\n let mensajes: ErrorValidateForm[] = [];\r\n // errores en términos de grupo\r\n for (let errorKey in form.errors) {\r\n let pr = prefix ? `${prefix}: ` : \"\";\r\n mensajes.push({prefixes: [pr], errorMessage: CustomValidators.config[errorKey]});\r\n }\r\n\r\n for (let controlKey in form.controls) {\r\n let control = form.controls[controlKey];\r\n if (!control.valid) {\r\n // no es válido, hay mensajes que recuperar\r\n let controlLabel: string[] = prefix.concat([controlKey]); // nombre apilado\r\n\r\n // detectamos si es un campo o un formulario anidado\r\n if (control instanceof FormGroup) {\r\n // es un formulario anidado, seguimos bajando recursivamente\r\n mensajes = mensajes.concat(CustomValidators.validateForm(control, controlLabel));\r\n } else if (control instanceof FormControl) {\r\n // es un campo final, añadimos sus mensajes de error\r\n for (let errorKey in control.errors) {\r\n mensajes.push({prefixes: controlLabel, errorMessage: CustomValidators.config[errorKey]});\r\n }\r\n } else if (control instanceof FormArray) {\r\n // es una lista de controles anidada, la recorremos\r\n control.controls &&\r\n control.controls.forEach((arrControl, index) => {\r\n let arrControlLabel: string[] = controlLabel.concat([index.toString()]);\r\n if (arrControl instanceof FormGroup) {\r\n // es una lista de FormGroups, bajamos a ellos recursivamente\r\n mensajes = mensajes.concat(CustomValidators.validateForm(arrControl, arrControlLabel));\r\n } else if (arrControl instanceof FormControl) {\r\n // es una lista de FormControls, los tratamos desde aquí\r\n for (let errorKey in control.errors) {\r\n mensajes.push({prefixes: arrControlLabel, errorMessage: CustomValidators.config[errorKey]});\r\n }\r\n } else {\r\n // ??? ¿Un array de arrays? No está previsto.\r\n console.log(\"[CustomValidators] Unexpected FormArray with nested FormArrays\");\r\n }\r\n });\r\n }\r\n }\r\n }\r\n return mensajes;\r\n }\r\n\r\n /**\r\n * Recibe un objeto con las propiedades {fieldTipo, fieldNumero} y devuelve un validador de formulario para documentos de identificación.\r\n * El error que puede generarse es del tipo 'invalidNumeroDocumentoTipoDocumento'.\r\n */\r\n static buildNumeroDocumentoValidator({fieldTipo = \"documentoTipo\", fieldNumero = \"documentoNumero\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let documentoTipo = g.get(fieldTipo) && g.get(fieldTipo).value;\r\n let documentoNumero = g && g.get(fieldNumero) && g.get(fieldNumero).value;\r\n let invalid = false;\r\n if (documentoTipo && documentoNumero) {\r\n if (documentoTipo == \"DNI\") {\r\n invalid = !CustomValidators.isValidDNI(documentoNumero);\r\n } else if (documentoTipo == \"CIF\") {\r\n invalid = !CustomValidators.isValidCIF(documentoNumero);\r\n } else if (documentoTipo == \"NIF\") {\r\n //invalid = !documentoNumero.match(/^[0-9]{8}[a-z|A-Z]$/);\r\n invalid = !CustomValidators.isValidNIF(documentoNumero);\r\n } else if (documentoTipo == \"NIE\") {\r\n invalid = !CustomValidators.isValidNIE(documentoNumero);\r\n }\r\n }\r\n\r\n if (invalid) {\r\n return {invalidNumeroDocumentoTipoDocumento: true};\r\n } else {\r\n return null;\r\n }\r\n };\r\n return result;\r\n }\r\n\r\n static nifValidator(control): { [s: string]: boolean } {\r\n if (!control.value || CustomValidators.isValidNIF(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidNIF: true};\r\n }\r\n }\r\n\r\n static nieValidator(control): { [s: string]: boolean } {\r\n if (!control.value || CustomValidators.isValidNIE(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidNIE: true};\r\n }\r\n }\r\n\r\n static nifNieValidator(control): { [s: string]: boolean } {\r\n if (!control.value || CustomValidators.isValidNIF(control.value) || CustomValidators.isValidNIE(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidNIFNIE: true};\r\n }\r\n }\r\n\r\n static cifValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(/^[a-z|A-Z][0-9]{7}[a-z|A-Z|0-9]/); // TODO\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidCIF: true};\r\n }\r\n }\r\n\r\n static anyoValidator(control): { [s: string]: boolean } {\r\n let pattern = new RegExp(/^[0-9]{4}$/); // TODO\r\n if (!control.value || pattern.test(control.value)) {\r\n return null;\r\n } else {\r\n return {invalidAnyo: true};\r\n }\r\n }\r\n\r\n static isValidDNI(value: string): boolean {\r\n return true; // ¿deberíamos validar algo? Con letra ya tenemos el NIF\r\n }\r\n\r\n // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/cifES.js\r\n static isValidCIF(value: string): boolean {\r\n let cifRegEx = new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi);\r\n let letter = value.substring(0, 1), // [ T ]\r\n number = value.substring(1, 8), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]\r\n control = value.substring(8, 9), // [ C ]\r\n all_sum = 0,\r\n even_sum = 0,\r\n odd_sum = 0,\r\n i,\r\n n,\r\n control_digit,\r\n control_letter;\r\n\r\n function isOdd(n) {\r\n return n % 2 === 0;\r\n }\r\n\r\n // Quick format test\r\n if (value.length !== 9 || !cifRegEx.test(value)) {\r\n return false;\r\n }\r\n\r\n for (i = 0; i < number.length; i++) {\r\n n = parseInt(number[i], 10);\r\n // Odd positions\r\n if (isOdd(i)) {\r\n // Odd positions are multiplied first.\r\n n *= 2;\r\n // If the multiplication is bigger than 10 we need to adjust\r\n odd_sum += n < 10 ? n : n - 9;\r\n // Even positions\r\n // Just sum them\r\n } else {\r\n even_sum += n;\r\n }\r\n }\r\n\r\n all_sum = even_sum + odd_sum;\r\n control_digit = (10 - Number(all_sum.toString().substring(-1))).toString();\r\n control_digit = parseInt(control_digit, 10) > 9 ? \"0\" : control_digit;\r\n control_letter = \"JABCDEFGHI\".substring(control_digit, 1).toString();\r\n\r\n // Control must be a digit\r\n if (letter.match(/[ABEH]/)) {\r\n return control === control_digit;\r\n // Control must be a letter\r\n } else if (letter.match(/[KPQS]/)) {\r\n return control === control_letter;\r\n }\r\n // Can be either\r\n return control === control_digit || control === control_letter;\r\n }\r\n\r\n // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/nifES.js\r\n static isValidNIF(value: string): boolean {\r\n value = value.toUpperCase();\r\n // Basic format test\r\n if (!value.match(\"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\")) {\r\n return false;\r\n }\r\n // Test NIF\r\n if (/^[0-9]{8}[A-Z]{1}$/.test(value)) {\r\n return \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(Number(value.substring(8, 0)) % 23) === value.charAt(8);\r\n }\r\n // Test specials NIF (starts with K, L or M)\r\n if (/^[KLM]{1}/.test(value)) {\r\n return value[8] !== \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(Number(value.substring(8, 1)) % 23);\r\n }\r\n return false;\r\n }\r\n\r\n static isValidNIE(value: string): boolean {\r\n // Un NIE sigue una validación muy similar a la de un DNI, con la diferencia\r\n // de que en lugar de ser ocho números + letra debe ser letra + siete números + letra,\r\n // siendo la primera letra X, Y o Z sustituible por 0, 1 o 2 respectivamente.\r\n let nieRegEx = new RegExp(/^[XYZ]{1}[0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi);\r\n\r\n // Si no tiene el formato básico, no es válido\r\n if (!nieRegEx.test(value)) {\r\n return false;\r\n }\r\n\r\n // Sustituimos la primera letra por el número equivalente y aprovechamos la validación de NIF\r\n value = value.toString().toUpperCase().replace(/^[X]/, \"0\").replace(/^[Y]/, \"1\").replace(/^[Z]/, \"2\");\r\n\r\n return CustomValidators.isValidNIF(value);\r\n }\r\n\r\n static rangoFechasValidator({fieldFechaInicio = \"fechaInicio\", fieldFechaFin = \"fechaFin\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let fechaInicio = g.get(fieldFechaInicio) && g.get(fieldFechaInicio).value;\r\n let fechaFin = g && g.get(fieldFechaFin) && g.get(fieldFechaFin).value;\r\n if (fechaInicio && fechaFin) {\r\n let inicio = GeneralUtils.stringShortToDate(fechaInicio);\r\n let fin = GeneralUtils.stringShortToDate(fechaFin);\r\n if (inicio > fin) {\r\n return {invalidRangoFechaFinPosteriorInicio: true, requiredTipoDatoTipoCheck: true};\r\n }\r\n }\r\n return null;\r\n };\r\n return result;\r\n }\r\n\r\n static rangoHorasValidator({fieldHoraInicio = \"horaInicio\", fieldHoraFin = \"horaFin\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let inicio = g.get(fieldHoraInicio) && g.get(fieldHoraInicio).value && GeneralUtils.stringToTime(g.get(fieldHoraInicio).value);\r\n let fin = g && g.get(fieldHoraFin) && g.get(fieldHoraFin).value && GeneralUtils.stringToTime(g.get(fieldHoraFin).value);\r\n if (inicio && fin && inicio >= fin) {\r\n return {invalidRangoHoraFinPosteriorInicio: true};\r\n }\r\n return null;\r\n };\r\n return result;\r\n }\r\n\r\n static dateTimeNotAfterCurrentDateValidator({fieldfecha = \"fecha\", fieldHora = \"hora\"} = {}): Function {\r\n let result = function (g: FormGroup) {\r\n if (!g) {\r\n return null;\r\n }\r\n let campoFecha = g.get(fieldfecha);\r\n let campoHora = g.get(fieldHora);\r\n if (campoFecha && campoFecha.value && campoFecha.value.match(/^(0[1-9]|1\\d|2\\d|3[01])\\/(0[1-9]|1[0-2])\\/(19|20)\\d{2}$/)) {\r\n let date = GeneralUtils.getStringAsDate(campoFecha.value);\r\n if (campoHora && campoHora.value && campoHora.value.match(/^[0-9][0-9]:[0-9][0-9]$/)) {\r\n date.setHours(campoHora.value.split(\":\")[0]);\r\n date.setMinutes(campoHora.value.split(\":\")[1]);\r\n }\r\n if (date < new Date()) {\r\n return {invalidDateTimeNotAfterCurrentDate: true};\r\n }\r\n }\r\n return null;\r\n };\r\n return result;\r\n }\r\n\r\n static buildMinLongitudValidator(lon: number) {\r\n let errorKey = \"invalidMinLongitud\";\r\n let errorKeyIndex = errorKey + \"_\" + lon.toString();\r\n CustomValidators.config[errorKeyIndex] = CustomValidators.buildErrorMessage(errorKey, {lon: lon});\r\n let result = (control) => {\r\n if (!control.value || control.value.length >= lon) {\r\n return null;\r\n } else {\r\n let ret = {};\r\n ret[errorKeyIndex] = true;\r\n return ret;\r\n }\r\n };\r\n return result;\r\n }\r\n}\r\n","/**\r\n * Clase base que contiene la información sobre un error producido en la aplicación.\r\n */\r\nexport class Error {\r\n constructor(\r\n public url: string,\r\n public summary: string,\r\n public errorText: string,\r\n public trazaError?: any,\r\n public notificacion?: boolean,\r\n public masInfo?: string\r\n ) {}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject, Observable } from \"rxjs\";\r\n\r\nimport { BitMessage } from \"../data/bitmessage\";\r\nimport { Error } from \"../data/error\";\r\nimport { BitNotification } from \"../data/bitnotification\";\r\nimport { BitNotificationError } from \"../data/bitnotification-error\";\r\n\r\n/**\r\n *\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class BitMessageService {\r\n // Observable string sources\r\n private observableMessagesSource = new Subject<BitMessage>(); //mensajes generales que se mostrarán como un dialog en el centro de la pantalla\r\n public observableMessages: Observable<BitMessage>;\r\n private observableNotificationsSource = new Subject<BitNotification>(); //notifiaciones que se mostrarán como un growl\r\n public observableNotifications: Observable<BitNotification>;\r\n private observableErrorsSource = new Subject<Error>(); //errores del servidor que se mostrarán como un dialog igual con la traza del error\r\n public observableErrors: Observable<Error>;\r\n private observableNotificacionsErrorsSource = new Subject<BitNotificationError>(); //errores controlados enviados del servidor que se mostrarán como una ventanita similar al growl\r\n public observableNotificationsErrors: Observable<BitNotificationError>;\r\n\r\n constructor() {\r\n this.observableMessages = this.observableMessagesSource.asObservable();\r\n this.observableErrors = this.observableErrorsSource.asObservable();\r\n this.observableNotificationsErrors = this.observableNotificacionsErrorsSource.asObservable();\r\n this.observableNotifications = this.observableNotificationsSource.asObservable();\r\n }\r\n\r\n /**\r\n * Ask user to confirm an action. `message` explains the action and choices.\r\n * Returns promise resolving to `true`=confirm or `false`=cancel\r\n */\r\n confirm(message?: string) {\r\n return new Promise<boolean>((resolve) => {\r\n return resolve(window.confirm(message || \" OK?\"));\r\n });\r\n }\r\n\r\n /** Enviamos un mensaje. Como mínimo el componente DialogComponent lo recibirá y lo mostrará al usuario */\r\n sendMessage(message: BitMessage) {\r\n this.observableMessagesSource.next(message);\r\n }\r\n\r\n /**\r\n * Enviamos un error. El componente DialogComponent lo recibirá y lo mostrará al usuario en el centro del usuario\r\n **/\r\n sendError(error: Error) {\r\n this.observableErrorsSource.next(error);\r\n }\r\n\r\n /** Enviamos una notificación. El componente NotificationComponent lo recibirá y la mostrará en pantalla */\r\n sendNotification(notification: BitNotification) {\r\n this.observableNotificationsSource.next(notification);\r\n }\r\n\r\n /**\r\n * Enviamos un error. Se mostrará como una ventana arriba a la derecha con un close para cerrarlo\r\n * @param bitNotificationError\r\n */\r\n sendNotificationError(bitNotificationError: BitNotificationError) {\r\n console.log(\"sendNotificationError\", bitNotificationError);\r\n this.observableNotificacionsErrorsSource.next(bitNotificationError);\r\n }\r\n\r\n hideNotificacionErrorPanel() {\r\n this.observableNotificacionsErrorsSource.next();\r\n }\r\n\r\n hideNotificacionPanel() {\r\n this.observableNotificationsSource.next();\r\n }\r\n\r\n hideMessagePanel() {\r\n this.observableMessagesSource.next();\r\n }\r\n\r\n hideErrorsPanel() {\r\n this.observableErrorsSource.next();\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nimport { Error as CustomError } from \"../data/error\";\r\nimport { BitMessageService } from \"./message.service\";\r\nimport { GeneralUtils } from \"./general-utils.service\";\r\nimport { TranslateService } from \"./translate.service\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class HttpUtilsService {\r\n // customizado por proyecto: {provide: 'CONTEXT_PATH', useValue: environment.CONTEXT}\r\n static CONTEXT_PATH = \"bitcitafront\";\r\n static LOGIN_AUTHENTICATION = \"\";\r\n static errorAccessServerTitle: string = \"\";\r\n static errorAccessServerMessage: string = \"\";\r\n static errorServerTitle: string = \"\";\r\n static errorServerMessage: string = \"\";\r\n\r\n constructor(\r\n protected http: HttpClient,\r\n protected bitMessageService: BitMessageService,\r\n protected generalUtils: GeneralUtils,\r\n protected translateService: TranslateService,\r\n @Inject(\"API_URL\") private apiUrl: string,\r\n @Inject(\"CONTEXT_PATH\") private contextPath: string\r\n ) {\r\n HttpUtilsService.CONTEXT_PATH = contextPath;\r\n console.log(\"HttpUtilsSerive creado con API Url:\" + this.apiUrl);\r\n this.getMessagesI18N();\r\n }\r\n\r\n getMessagesI18N() {\r\n this.translateService\r\n .selectTranslate(\"messages.erroraccessservertitle\", {}, \"bitnglibrary\")\r\n .subscribe((v) => (HttpUtilsService.errorAccessServerTitle = v));\r\n this.translateService\r\n .selectTranslate(\"messages.erroraccessservermessage\", {}, \"bitnglibrary\")\r\n .subscribe((v) => (HttpUtilsService.errorAccessServerMessage = v));\r\n this.translateService.selectTranslate(\"messages.errorservertitle\", {}, \"bitnglibrary\").subscribe((v) => (HttpUtilsService.errorServerTitle = v));\r\n this.translateService.selectTranslate(\"messages.errorservermessage\", {}, \"bitnglibrary\").subscribe((v) => (HttpUtilsService.errorServerMessage = v));\r\n }\r\n\r\n /*\r\n private handleError(error: HttpErrorResponse) {\r\n //this.generalUtils.stopLoading();\r\n let customError = HttpUtilsService.getCustomError(error);\r\n this.bitMessageService.sendError(customError);\r\n return throwError(customError);\r\n }*/\r\n\r\n static getCustomError(error: HttpErrorResponse): CustomError {\r\n let lastUrlAcceded = error.url;\r\n let innerError;\r\n let customError;\r\n\r\n if (\r\n error.message &&\r\n (error.message.includes(\"Unexpected token < in JSON\") || //chrome\r\n error.message.includes(\"JSON.parse: unexpected character at line 1 column 1\") || //firefox\r\n error.message.includes(\"JSON.parse Error: Invalid character at position:1\")) //explorer\r\n ) {\r\n console.log(\"Parece que hemos perdido la sesión\");\r\n //customError = new CustomError(lastUrlAcceded, \"S'ha detectat que s'ha perdut la sessió amb el servidor. És necessari que torni a autenticar-se en el sistema.\\n Si no apareix la pàgina d'introducció d'usuari i contrasenya, per favor tanqui el navegador i torni a obrir l'aplicació.\",\r\n //\"S'ha detectat que s'ha perdut la sessió amb el servidor. És necessari que torni a autenticar-se en el sistema.\\n Si no apareix la pàgina d'introducció d'usuari i contrasenya, per favor tanqui el navegador i torni a obrir l'aplicació.\", undefined, true, null);\r\n HttpUtilsService.reloadPage();\r\n return;\r\n }\r\n\r\n try {\r\n innerError = JSON.parse(error.error);\r\n } catch (err) {\r\n innerError = error.error;\r\n }\r\n if (innerError && (innerError[\"notificacion\"] || innerError[\"trazaError\"])) {\r\n //el error es controlado del servidor\r\n customError = <CustomError>innerError;\r\n } else {\r\n //el error es un problema de comunicaciones o del propio cliente Angular\r\n if (error.status || error.status === 0) {\r\n //caso jetty o error controlado del servidor\r\n console.log(\"HTTP Error con status \" + error.status);\r\n if (error.status >= 300 && error.status < 500) {\r\n customError = new CustomError(lastUrlAcceded, this.errorAccessServerTitle, this.errorAccessServerMessage, undefined, true);\r\n } else {\r\n customError = new CustomError(lastUrlAcceded, this.errorServerTitle, this.errorServerMessage, undefined, true);\r\n }\r\n } else {\r\n customError = new CustomError(lastUrlAcceded, error.message, error.message, error.error);\r\n }\r\n }\r\n return customError;\r\n }\r\n\r\n static reloadPage() {\r\n let currentUrl = window.location.href;\r\n console.log(`current url ${currentUrl}`);\r\n let index: number = currentUrl.lastIndexOf(HttpUtilsService.CONTEXT_PATH);\r\n let newUrl: string;\r\n if (index != -1) {\r\n newUrl = currentUrl.substring(0, index + HttpUtilsService.CONTEXT_PATH.length);\r\n } else {\r\n newUrl = currentUrl;\r\n }\r\n console.log(`new url ${newUrl}`);\r\n window.location.href = newUrl;\r\n }\r\n\r\n public getHttpPost<T>(url, hqlRequest, emptyResponse: boolean = false): Observable<T> {\r\n console.log(\"calling url server via POST:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let body = JSON.stringify(hqlRequest);\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n let vResponseType: any = emptyResponse ? \"text\" : \"json\";\r\n return this.http.post<T>(this.apiUrl + url, body, { headers, responseType: vResponseType });\r\n //.pipe(tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpPut<T>(url, hqlRequest): Observable<T> {\r\n console.log(\"calling url server via PUT:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let body = JSON.stringify(hqlRequest);\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n return this.http.put<T>(this.apiUrl + url, body, { headers });\r\n //.pipe(//tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpPatch<T>(url, hqlRequest): Observable<T> {\r\n console.log(\"calling url server via PUT:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let body = JSON.stringify(hqlRequest);\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n return this.http.patch<T>(this.apiUrl + url, body, { headers });\r\n //.pipe(//tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpDelete(url): Observable<any> {\r\n console.log(\"calling url server via DELETE:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let headers: HttpHeaders = new HttpHeaders().set(\"Content-Type\", \"application/json\");\r\n headers = this.addAuthenticationData(headers);\r\n return this.http.delete(this.apiUrl + url, {\r\n headers,\r\n responseType: \"text\"\r\n });\r\n //.pipe(tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n public getHttpGet<T>(url): Observable<T> {\r\n console.log(\"calling url server via GET:\" + this.apiUrl + url);\r\n //this.generalUtils.startLoading();\r\n let headers: HttpHeaders = this.addAuthenticationData(new HttpHeaders());\r\n\r\n return this.http.get<T>(this.apiUrl + url, {\r\n headers: headers\r\n });\r\n //.pipe(tap(res => //this.generalUtils.stopLoading(), error => this.handleError(error)));\r\n }\r\n\r\n private addAuthenticationData(httpHeaders: HttpHeaders) {\r\n if (HttpUtilsService.LOGIN_AUTHENTICATION && HttpUtilsService.LOGIN_AUTHENTICATION != \"\") {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Basic \" + HttpUtilsService.LOGIN_AUTHENTICATION);\r\n }\r\n return httpHeaders;\r\n }\r\n}\r\n\r\nexport var httpUtilsServiceInjectables: Array<any> = [\r\n {\r\n provide: HttpUtilsService,\r\n useClass: HttpUtilsService\r\n }\r\n];\r\n","import { Injector } from \"@angular/core\";\r\n\r\n/**\r\n * Este servicio almacena de forma estática el objeto Injector de angular para que pueda utilizarse desde cualquier\r\n * punto de la app\r\n */\r\nexport class LocatorService {\r\n static injector: Injector = null;\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class SessionSharedService {\r\n private data: Map<string, any>;\r\n\r\n //TO-DO. Guardarlo en un localstorage por un tiempo limitado por si hacen F5\r\n constructor() {\r\n this.data = new Map<string, any>();\r\n }\r\n\r\n get(key: string): any {\r\n // console.log('shared get', key);\r\n return this.data.get(key);\r\n }\r\n\r\n set(key: string, value: any): void {\r\n // console.log('shared set', key, value);\r\n this.data.set(key, value);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class TableViewService {\r\n private observableExportSource = new Subject<Boolean>();\r\n public observableExport;\r\n\r\n constructor() {\r\n this.observableExport = this.observableExportSource.asObservable();\r\n }\r\n\r\n sendExportMessage() {\r\n this.observableExportSource.next(true);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, ReplaySubject } from \"rxjs\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class ToolbarService {\r\n //private observableToolbarSource = new BehaviorSubject<any>(null);\r\n private observableToolbarSource = new ReplaySubject<any>(10);\r\n public observableToolbar: Observable<any>;\r\n\r\n constructor() {\r\n console.log(\"ToolbarService creado\");\r\n //el toolbar al suscribirse recibirá eiempre los últimos n mensajes (toolbar) enviados. Es para protegernos y garantizar que cuando un toolbar\r\n //se susbscribe después de que el componente padre envíe su toolbar, entonces si se cuelan delante más toolbars, al menos lo reciba\r\n //OJO!. Juntar share() con ReplaySubject o publishReplay hace que no se comporte como se esperaba\r\n this.observableToolbar = this.observableToolbarSource.asObservable(); //.share();//.publishReplay(3).refCount();\r\n }\r\n\r\n updateToolbar(componentId: string, toolbar: any) {\r\n toolbar.componentId = componentId;\r\n this.observableToolbarSource.next(toolbar);\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\n\r\nimport { HttpUtilsService } from \"./http-utils.service\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class UploadService {\r\n private UPLOAD_URL: string;\r\n private DOWNLOAD_URL: string;\r\n\r\n constructor(@Inject(\"API_URL\") private apiUrl: string) {\r\n this.UPLOAD_URL = `${this.apiUrl}ficheros/upload`;\r\n this.DOWNLOAD_URL = `${this.apiUrl}ficheros/download/`;\r\n console.log(\"UploadService creado con API_URL:\", this.apiUrl);\r\n }\r\n\r\n /**\r\n * servicio para hacer upload de ficheros al servidor\r\n * @param url indica la URL a la que queremos subir el fichero. Si es null se utilizará el endpoint por defecto definido en UPLOAD_URL\r\n * @param files fichero(s) a subir al servidor\r\n * @param params parámetros adicionales en forma de Map para hacer la subida\r\n */\r\n upload(url: string, files: Array<File>, params: { [key: string]: string }) {\r\n return new Promise((resolve, reject) => {\r\n let formData: any = new FormData();\r\n\r\n for (let key in params) {\r\n formData.append(key, params[key]);\r\n }\r\n\r\n let xhr = new XMLHttpRequest();\r\n for (let i = 0; i < files.length; i++) {\r\n formData.append(\"file\", files[i], files[i].name);\r\n }\r\n xhr.onreadystatechange = () => {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n resolve(xhr.response);\r\n } else {\r\n reject(xhr.response); //TODO: No llega a los componentes\r\n }\r\n }\r\n };\r\n xhr.open(\"POST\", url == null ? this.UPLOAD_URL : url, true);\r\n if (HttpUtilsService.LOGIN_AUTHENTICATION && HttpUtilsService.LOGIN_AUTHENTICATION != \"\") {\r\n xhr.setRequestHeader(\"Authorization\", \"Basic \" + HttpUtilsService.LOGIN_AUTHENTICATION);\r\n }\r\n xhr.send(formData);\r\n });\r\n }\r\n\r\n getUrlDownloadFile(id: number) {\r\n return `${this.DOWNLOAD_URL}${id}`;\r\n }\r\n}\r\n","import { DefaultDataService } from \"@ngrx/data\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nimport { HttpUtilsService } from \"./http-utils.service\";\r\nimport { Item } from \"../data\";\r\n\r\nexport abstract class BaseDataService<T extends Item> extends DefaultDataService<T> {\r\n protected httpUtilsService: HttpUtilsService;\r\n\r\n /** Borra las entidades del servidor asociadas al parentId proporcionado */\r\n abstract deleteEntities(entities: number[], parentId: number): Observable<any>;\r\n /** Cuenta el número total de elementos de una búsqueda con filtro */\r\n abstract countAllByFilter(queryParams: string): Observable<number>;\r\n /** Realiza el patch de la entidad y retorna la entidad completa */\r\n abstract patchEntity(patch: any): Observable<T>;\r\n}\r\n","import { Observable, of } from \"rxjs\";\r\n\r\nimport { Item } from \"../data\";\r\nimport { BaseDataService } from \"./base-data.service\";\r\n\r\nexport class BaseDataAdapterService<T extends Item> extends BaseDataService<T> {\r\n /** Borra las entidades del servidor */\r\n deleteEntities(entities: number[], parentId: number): Observable<any> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n /** Cuenta el número total de elementos de una búsqueda con filtro */\r\n countAllByFilter(queryParams: string): Observable<number> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n /** Realiza el patch de la entidad y retorna la entidad completa */\r\n patchEntity(patch: any): Observable<T> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { TranslateService } from \"./translate.service\";\r\nimport { withLatestFrom, mergeMap } from \"rxjs/operators\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class DomainService {\r\n constructor(protected translateService: TranslateService) {}\r\n\r\n /** Retorna un observable sobre el array de valores del dominio en el idioma seleccionado por el usuario */\r\n getTranslatedDomain(domain: Observable<Map<string, []>>) {\r\n return this.translateService.langChanged$.pipe(\r\n withLatestFrom(domain),\r\n mergeMap(([lang, list]) => {\r\n console.log(\"getTranslatedDomain\", lang);\r\n return of(list[lang]);\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\n\r\nimport { TranslateService, CustomValidators, FocusService } from \"../../services\";\r\nimport { Observable } from \"rxjs\";\r\nimport { TranslatedMessage } from \"../../../base/models/types\";\r\n\r\n@Component({\r\n selector: \"control-messages\",\r\n template: `\r\n <div *ngIf=\"isError\">\r\n <span class=\"mensaje-error-input\">{{ errorMessage$ | async }}</span>\r\n </div>\r\n `\r\n //styleUrls: [\"bit-control-messages.component.css\"]\r\n})\r\nexport class BitControlMessages {\r\n @Input() control: FormControl;\r\n @Input() field: string;\r\n errorMessage$: Observable<string>;\r\n\r\n //constructor( @Host() private formDir: FormGroup) { }\r\n constructor(private focusService: FocusService, protected translateService: TranslateService) {}\r\n\r\n get isError(): boolean {\r\n if (this.focusService.getFocusedElement() !== this.field) {\r\n for (let propertyName in this.control.errors) {\r\n // If control has a error\r\n if (this.control.errors.hasOwnProperty(propertyName) && this.control.touched) {\r\n // Return the appropriate error message from the Validation Service\r\n let translatedError: TranslatedMessage = CustomValidators.getValidatorErrorMessage(propertyName);\r\n this.errorMessage$ = this.translateService.selectTranslate(translatedError.code, translatedError.params, translatedError.context);\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import { TranslatedMessage } from \"../../base/models\";\r\n\r\nexport class BitMessage {\r\n static WIDTH: number = 600;\r\n static INFO: string = \"info\";\r\n static WARN: string = \"warn\";\r\n static ERROR: string = \"error\";\r\n\r\n constructor(\r\n public title: string,\r\n public message: string,\r\n public width: number = BitMessage.WIDTH,\r\n public height: number = 0,\r\n public modal: boolean = false,\r\n public severity: string = \"info\", //info, warn, error\r\n public masInfo?: string,\r\n public json: boolean = false\r\n ) {}\r\n\r\n public static newMessage(title, message, severity?): BitMessage {\r\n return new BitMessage(title, message, BitMessage.WIDTH, 0, false, severity);\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { BitMessage } from \"../../data/bitmessage\";\r\nimport { Error } from \"../../data/error\";\r\nimport { BitMessageService } from \"../../services/message.service\";\r\nimport { TranslateService } from \"../../services\";\r\n\r\n@Component({\r\n selector: \"bit-dialog\",\r\n template: `\r\n <p-dialog\r\n *ngIf=\"!isSeverityInfo\"\r\n class=\"scroll-y scroll-{{ message.height }}\"\r\n header=\"{{ message.title }}\"\r\n [(visible)]=\"display\"\r\n [style]=\"{ width: '50vw' }\"\r\n [modal]=\"message.modal\"\r\n showEffect=\"fade\"\r\n position=\"top\"\r\n >\r\n <p class=\"mensaje-dialogo\">{{ message.message }}</p>\r\n <span *ngIf=\"message.masInfo\">\r\n <pre>{{ message.masInfo }}</pre>\r\n </span>\r\n <footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\"> </div>\r\n </footer>\r\n </p-dialog>\r\n <p-dialog\r\n *ngIf=\"isSeverityInfo && !message.json\"\r\n class=\"scroll-y scroll-{{ message.height }}\"\r\n header=\"{{ message.title }}\"\r\n [style]=\"{ width: '50vw' }\"\r\n [(visible)]=\"display\"\r\n [modal]=\"message.modal\"\r\n showEffect=\"fade\"\r\n position=\"top\"\r\n >\r\n <p class=\"mensaje-dialogo\" [innerHTML]=\"message.message\"></p>\r\n </p-dialog>\r\n <p-dialog\r\n *ngIf=\"message.json\"\r\n class=\"scroll-y scroll-{{ message.height }}\"\r\n header=\"{{ message.title }}\"\r\n [(visible)]=\"display\"\r\n [style]=\"{ width: '50vw' }\"\r\n [baseZIndex]=\"10000\"\r\n [modal]=\"message.modal\"\r\n showEffect=\"fade\"\r\n position=\"top\"\r\n >\r\n <pre [innerHTML]=\"syntaxHighlight(message.message)\"></pre>\r\n </p-dialog>\r\n `\r\n //styleUrls: [\"bit-dialog.component.css\"]\r\n})\r\nexport class BitDialogComponent extends BaseComponent implements OnInit, OnDestroy {\r\n public static MENSAJE_VOID: string = \"No hi ha dades per mostrar\";\r\n display: boolean = false;\r\n message: BitMessage;\r\n height: number = 200;\r\n errorAccessUrl: string;\r\n\r\n constructor(protected bitMessageService: BitMessageService, protected translateService: TranslateService) {\r\n super();\r\n //console.log(\"DialogComponent contructor(\" + bitMessageService + \")\");\r\n //Nos suscribimos a la espera de que envíen mensajes\r\n bitMessageService.observableMessages.pipe(takeUntil(this.destroy$)).subscribe((message) => {\r\n this.showMessage(message);\r\n });\r\n bitMessageService.observableErrors.pipe(takeUntil(this.destroy$)).subscribe((message) => {\r\n this.showError(message);\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n //inicializamos el objeto para que no pete el template\r\n this.message = new BitMessage(\"\", \"\");\r\n this.getMessagesI18N();\r\n }\r\n\r\n getMessagesI18N() {\r\n this.translateService\r\n .selectTranslate(\"messages.erroraccessurl\", {}, \"bitnglibrary\")\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((v) => (this.errorAccessUrl = v));\r\n }\r\n\r\n showMessage(message: BitMessage) {\r\n this.message = message;\r\n if (this.message.json) {\r\n try {\r\n let json = eval(\"(\" + this.message.message + \")\"); //{\"w\":1, \"b\":'foo', \"c\":[false,'false',null, 'null', {\"d\":{\"e\":1.3e5,\"f\":'2.3e5'}}]};\r\n this.message.message = JSON.stringify(json, undefined, 2);\r\n } catch (error) {\r\n console.warn(\"No pudo convertirse a JSON la información del log\");\r\n }\r\n }\r\n message.height === 0 ? (this.message.height = this.calculateHeightNumber()) : undefined;\r\n this.display = true;\r\n }\r\n\r\n showError(error: Error) {\r\n this.showMessage(new BitMessage(`${this.errorAccessUrl} ${error.url}`, error.errorText, 1024, 600, false, BitMessage.ERROR, error.trazaError));\r\n }\r\n\r\n get isSeverityInfo() {\r\n return this.message && this.message.severity === \"info\";\r\n }\r\n\r\n /**\r\n * Calcula la altura del diálogo en función de la información a mostrar.\r\n * TODO: Contar las líneas reales del mensaje en vez de la longitud\r\n */\r\n private calculateHeightNumber(): number {\r\n let msj = this.message.message;\r\n if (msj) {\r\n if (msj.length < 100) {\r\n return 100;\r\n } else if (msj.length < 200) {\r\n return 200;\r\n } else if (msj.length < 300) {\r\n return 300;\r\n } else if (msj.length < 400) {\r\n return 400;\r\n } else {\r\n return 500;\r\n }\r\n } else {\r\n this.message.message = BitDialogComponent.MENSAJE_VOID;\r\n return 100;\r\n }\r\n }\r\n\r\n syntaxHighlight(json) {\r\n if (typeof json != \"string\") {\r\n json = JSON.stringify(json, undefined, 2);\r\n }\r\n json = json.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\r\n return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)/g, function (match) {\r\n var cls = \"number\";\r\n if (/^\"/.test(match)) {\r\n if (/:$/.test(match)) {\r\n cls = \"key\";\r\n } else {\r\n cls = \"string\";\r\n }\r\n } else if (/true|false/.test(match)) {\r\n cls = \"boolean\";\r\n } else if (/null/.test(match)) {\r\n cls = \"null\";\r\n }\r\n return '<span class=\"' + cls + '\">' + match + \"</span>\";\r\n });\r\n }\r\n}\r\n","import { Component, ChangeDetectorRef, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\nimport { AyudaContextual } from \"../../data/ayudacontextual\";\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\n\r\n@Component({\r\n selector: \"bit-help\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div class=\"ventana-ayuda\" *ngIf=\"ayudaPressed\">\r\n <div class=\"ayuda-header\">\r\n {{ ayuda.header }}\r\n <span class=\"fa fa-close\" (click)=\"hideAyuda()\"></span>\r\n </div>\r\n <div class=\"ayuda-body\">\r\n <p class=\"ayuda-subtitulo\" [innerHTML]=\"ayuda.title\"></p>\r\n <p [innerHTML]=\"ayuda.body\"></p>\r\n </div>\r\n </div>\r\n `\r\n //styleUrls: [\"bit-help.component.css\"]\r\n})\r\nexport class BitHelpComponent {\r\n ayuda: AyudaContextual;\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n this.ayuda = null;\r\n // cada vez que el servicio emite una nueva ayuda, la mostramos\r\n ayudaService.mostrar.subscribe(ayuda => {\r\n console.log(\"Mostrando ayuda\", ayuda);\r\n this.ayuda = ayuda;\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n /** Oculta el modal con los avisos */\r\n hideAyuda() {\r\n this.ayuda = null;\r\n }\r\n\r\n get ayudaPressed() {\r\n console.log(`ayudaPressed ${this.ayuda != null}`);\r\n return this.ayuda != null;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChange,\r\n ViewChild\r\n} from \"@angular/core\";\r\nimport {Paginator} from \"primeng/paginator\";\r\nimport {Observable} from \"rxjs\";\r\nimport { BASE_RESULTADOS_PAGE, BaseFilter } from '../../../base/shared/base.filter';\r\nimport { PageStatus } from '../../global.constants';\r\nimport { TranslateService } from '../../services';\r\n\r\n\r\n/**\r\n * Componente que muestra un paginador en la sección footer.\r\n **/\r\n@Component({\r\n selector: \"bit-footer\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: \"bit-footer.component.html\"\r\n})\r\nexport class BitFooterComponent implements OnInit, OnChanges {\r\n public static TYPE_LIST: string = \"list\";\r\n public static TYPE_SCROLL: string = \"scroll\";\r\n public static TYPE_FORM: string = \"form\";\r\n public static TYPE_BLANK: string = \"blank\";\r\n\r\n public static MORE_RESULTS = -1;\r\n\r\n @ViewChild(\"pc\")\r\n pc: Paginator;\r\n @Input()\r\n totalItems: number; // Número total de elementos recuperados de la consulta\r\n @Input()\r\n filter: BaseFilter;\r\n @Input()\r\n paginator: boolean;\r\n @Input()\r\n mostrarAvisos: boolean = true;\r\n @Input()\r\n fixed: boolean = true; // Indicará si lo queremos fijo abajo en la página. Por defecto sí.\r\n @Input()\r\n messages: Map<PageStatus, string>;\r\n @Input()\r\n status: PageStatus; // Determina en qué estado está la página: PageStatus.Init, PageStatus.SEARCHING, PageStatus.FINISH_SEARCH\r\n @Input(\"type\")\r\n typeFooter: string;\r\n @Input()\r\n mostrarEnlacesPaginas: boolean = true;\r\n @Input()\r\n mostrarPrimeraUltimaPagina: boolean = true;\r\n @Output()\r\n onPageChange = new EventEmitter<number>(); //para notificar cambios en la página a mostrar\r\n @Output()\r\n onNewPageSize = new EventEmitter<number>(); //para notificar cambios en los elementos a mostrar por página\r\n\r\n baseItemsPerPage: number = BaseFilter.RESULTADOS_PAGE; // guardamos el número de resultados pre-configurados por página para mostrar la lista de x, x+10 y x+20\r\n pageLinkSize: number; // número de enlaces en el paginador para poder navegar hacia delante o detrás\r\n itemsPerPage: number = BaseFilter.RESULTADOS_PAGE; // número de elementos por página que mostramos\r\n\r\n maxCurrentItems: number = -1;\r\n\r\n constructor(private translateService: TranslateService,\r\n private changeRef: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.typeFooter == undefined) {\r\n this.typeFooter = \"list\";\r\n }\r\n if (this.paginator == undefined) {\r\n this.paginator = false;\r\n }\r\n //mensajes por defecto si no vienen definidos\r\n if (this.messages == undefined) {\r\n this.setMessages();\r\n this.messages.set(PageStatus.Error, \"bitnglibrary.footer.error\");\r\n }\r\n }\r\n\r\n private setMessages() {\r\n console.log(\"definimos los mensajes del footer de manera estándar\");\r\n this.messages = new Map<PageStatus, string>();\r\n if (this.isFooterList() || this.isFooterScroll()) {\r\n this.messages.set(PageStatus.Init, \"bitnglibrary.footer.list.init\");\r\n this.messages.set(PageStatus.Searching, \"bitnglibrary.footer.list.searching\");\r\n this.messages.set(PageStatus.EmptyResult, \"bitnglibrary.footer.list.emptyresult\");\r\n this.messages.set(PageStatus.FinishSearch, \"bitnglibrary.footer.list.finishsearch\");\r\n this.messages.set(BitFooterComponent.MORE_RESULTS, \"bitnglibrary.footer.list.moreresults\")\r\n } else if (this.isFooterForm()) {\r\n this.messages.set(PageStatus.Init, \"bitnglibrary.footer.form.init\");\r\n this.messages.set(PageStatus.Searching, \"bitnglibrary.footer.form.searching\");\r\n this.messages.set(PageStatus.FinishSearch, \"bitnglibrary.footer.form.finishsearch\");\r\n this.messages.set(PageStatus.ReadOnly, \"bitnglibrary.footer.list.readonly\");\r\n } else if (this.typeFooter === BitFooterComponent.TYPE_BLANK) {\r\n console.log(\"the footer is BLANK!\");\r\n }\r\n }\r\n\r\n /**\r\n * Cuando tengamos la referencia al componente paginator actualizamos internamente el número de página y el número de páginas\r\n * del desplegable con la información del filtro proporcionado\r\n */\r\n ngAfterViewInit() {\r\n if (this.pc) {\r\n this.itemsPerPage = this.filter.resultados;\r\n console.log(`this.filter.resultados ${this.filter.resultados}`);\r\n console.log(`this.filter.pagina ${this.filter.pagina}`);\r\n this.pc.rows = this.filter.resultados;\r\n this.pc._first = (this.filter.pagina - 1) * this.pc.rows;\r\n this.pc.updatePageLinks();\r\n }\r\n }\r\n\r\n /**\r\n * Escucharemos a cambios en las propiedades totalItems para actualizar el paginador con respecto a las páginas que mostramos\r\n */\r\n ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"totalItems\") {\r\n this.totalItems = changedProp.currentValue;\r\n console.log(`new totalItems ${this.totalItems}`);\r\n if (changedProp.previousValue !== changedProp.currentValue) {\r\n this.calculatePageLinkSize(); //recalculamos\r\n }\r\n this.maxCurrentItems = this.filter ? this.filter.pagina * this.filter.resultados : -1;\r\n } else if (propName === \"filter\") {\r\n this.filter = changedProp.currentValue;\r\n if (this.filter?.pagina * this.filter?.resultados > this.maxCurrentItems) {\r\n this.maxCurrentItems = this.filter?.pagina * this.filter?.resultados;\r\n }\r\n console.log(`new filter ${this.filter?.pagina} - ${this.maxCurrentItems}`);\r\n if (changedProp.previousValue !== changedProp.currentValue) {\r\n this.calculatePageLinkSize(); //recalculamos\r\n if (!this.filter?.pagina || this.filter.pagina <= 1) {\r\n this.goToFirstPage();\r\n }\r\n }\r\n }\r\n }\r\n if (this.pc && this.changeRef) {\r\n console.log('updatePageLinks');\r\n this.pc.updatePageLinks();\r\n this.changeRef.detectChanges();\r\n }\r\n }\r\n\r\n /** Calcula el número de enlaces visibles en el paginador (en el rango entre 1 y BASE_RESULTADOS_PAGE). */\r\n calculatePageLinkSize() {\r\n console.log(`calculatePageLinkSize totalItems: ${this.totalItems} itemsPerPage:${this.itemsPerPage}`);\r\n this.pageLinkSize = Math.ceil(this.totalItems / this.itemsPerPage);\r\n if (this.pageLinkSize < 1) {\r\n this.pageLinkSize = 1;\r\n }\r\n if (this.pageLinkSize > BASE_RESULTADOS_PAGE) {\r\n this.pageLinkSize = BASE_RESULTADOS_PAGE;\r\n }\r\n }\r\n\r\n /** Establece el número de página en la visualización de resultados. Se invoca cuando el usuario cambia el número de resultados a mostrar o cambia de página */\r\n paginate(event: any): void {\r\n console.log(\"Page changed to\", event.page);\r\n if (event.rows !== this.itemsPerPage) {\r\n // han cambiado el número de elementos por página\r\n //notificamos que los elementos por página han cambiado\r\n this.onNewPageSize.emit(event.rows);\r\n this.itemsPerPage = event.rows;\r\n this.goToFirstPage();\r\n this.calculatePageLinkSize(); // recalculamos el número de enlaces de página\r\n } else {\r\n // notificamos a nuestro papá que la página ha cambiado\r\n this.onPageChange.emit(event.page + 1);\r\n }\r\n }\r\n\r\n private goToFirstPage() {\r\n if (this.pc) {\r\n //volvemos a la primera página\r\n this.pc._first = 1;\r\n this.pc.updatePageLinks();\r\n }\r\n }\r\n\r\n getStyle() {\r\n if (this.fixed && this.typeFooter === BitFooterComponent.TYPE_LIST || this.typeFooter === BitFooterComponent.TYPE_SCROLL) {\r\n if (this.totalItems > 0) {\r\n return \"footer navbar-fixed-bottom\";\r\n } else {\r\n return \"footer navbar-fixed-bottom-60\";\r\n }\r\n } else if (this.fixed && this.typeFooter === BitFooterComponent.TYPE_FORM) {\r\n return \"footer navbar-fixed-bottom-form\";\r\n } else {\r\n return \"footer\";\r\n }\r\n }\r\n\r\n isFooterList() {\r\n return this.typeFooter === BitFooterComponent.TYPE_LIST;\r\n }\r\n\r\n isFooterScroll() {\r\n return this.typeFooter === BitFooterComponent.TYPE_SCROLL;\r\n }\r\n\r\n isFooterForm() {\r\n return this.typeFooter === BitFooterComponent.TYPE_FORM;\r\n }\r\n\r\n /** Flag: la página está realizando la búsqueda. */\r\n get searchInitiated() {\r\n return this.status === PageStatus.Init || this.status == PageStatus.Reset || !this.status;\r\n }\r\n\r\n /** Flag: la página está realizando la búsqueda. */\r\n get searching() {\r\n return this.status === PageStatus.Searching;\r\n }\r\n\r\n /** Flag: la página ha finalizado la última búsqueda. */\r\n get searchFinished() {\r\n return this.status === PageStatus.FinishSearch;\r\n }\r\n\r\n /** Flag: la página está en modo solo lectura */\r\n get readOnly() {\r\n return this.status == PageStatus.ReadOnly;\r\n }\r\n\r\n /** Flag: la página ha finalizado con error */\r\n get error() {\r\n return this.status == PageStatus.Error;\r\n }\r\n\r\n /** Flag: encontrado resultado. */\r\n get foundResult() {\r\n return (\r\n this.status === PageStatus.FinishSearch &&\r\n ((this.typeFooter === BitFooterComponent.TYPE_LIST && this.totalItems > 0)\r\n || this.typeFooter === BitFooterComponent.TYPE_FORM\r\n || (this.typeFooter === BitFooterComponent.TYPE_SCROLL && this.totalItems <= this.maxCurrentItems))\r\n );\r\n }\r\n\r\n /** Flag: hay más resultados (scroll). */\r\n get moreResults() {\r\n return (\r\n this.status === PageStatus.FinishSearch &&\r\n (this.typeFooter === BitFooterComponent.TYPE_SCROLL && this.totalItems > this.maxCurrentItems)\r\n );\r\n }\r\n\r\n /** Flag: no hay resultados. */\r\n get emptyResult() {\r\n return this.status === PageStatus.FinishSearch && this.totalItems === 0;\r\n }\r\n\r\n get initMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.Init));\r\n }\r\n\r\n get searchingMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.Searching));\r\n }\r\n\r\n get finishMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.FinishSearch));\r\n }\r\n\r\n get moreResultsMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(BitFooterComponent.MORE_RESULTS));\r\n }\r\n\r\n get emptyMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.EmptyResult));\r\n }\r\n\r\n get readOnlyMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.ReadOnly));\r\n }\r\n\r\n get errorMessage(): Observable<string> {\r\n return this.translateService.selectTranslate(this.messages.get(PageStatus.Error));\r\n }\r\n}\r\n","<footer [class]=\"getStyle()\">\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"typeFooter === 'list'\" [hidden]=\"!this.status || emptyResult\">\r\n <div class=\"numero-resultados\">\r\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\r\n <span>{{totalItems}}</span>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"typeFooter === 'scroll'\" [hidden]=\"!this.status || emptyResult\">\r\n <div class=\"numero-resultados-scroll\">\r\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\r\n <span *ngIf=\"maxCurrentItems >= totalItems\">{{totalItems}}</span>\r\n <span *ngIf=\"maxCurrentItems < totalItems\">{{maxCurrentItems}} / {{totalItems}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-7 lg:col-7 p-text-center\" *ngIf=\"typeFooter === 'list'\"\r\n [hidden]=\"!this.status || emptyResult\">\r\n <p-paginator *ngIf=\"paginator\" #pc\r\n [rows]=\"itemsPerPage\"\r\n [totalRecords]=\"totalItems\"\r\n [pageLinkSize]=\"mostrarEnlacesPaginas ? pageLinkSize : 1\"\r\n [rowsPerPageOptions]=\"[baseItemsPerPage,baseItemsPerPage*5,baseItemsPerPage*25,baseItemsPerPage*50]\"\r\n [showPageLinks]=\"true\"\r\n [showJumpToPageDropdown]=\"false\"\r\n [showFirstLastIcon]=\"mostrarPrimeraUltimaPagina ? true : maxCurrentItems >= totalItems\"\r\n (onPageChange)=\"paginate($event)\"></p-paginator>\r\n </div>\r\n <div class=\"col-12 md:col-3 lg:col-3\">\r\n <div *ngIf=\"searchInitiated\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{initMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"searching\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{searchingMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"readOnly\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{readOnlyMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"foundResult\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{finishMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"moreResults\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-info\"></i>\r\n <span>{{moreResultsMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"emptyResult\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-exclamation\"></i>\r\n <span>{{emptyMessage | async}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"error\"\r\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n <span>{{errorMessage | async}}</span>\r\n </div>\r\n\r\n <bit-help></bit-help>\r\n </div>\r\n </div>\r\n</footer>\r\n","import { Input, Component } from \"@angular/core\";\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\n\r\n@Component({\r\n selector: \"bit-boton-ayuda\",\r\n template: `\r\n <p-button *ngIf=\"boton\" type=\"button\" (click)=\"mostrarAyuda()\" [ngClass]=\"'p-button-outlined p-button-secondary ' + extraClass\">\r\n {{ \"bitnglibrary.help\" | transloco }} <span class=\"fa fa-life-ring\"></span>\r\n </p-button>\r\n\r\n <i *ngIf=\"!boton\" [ngClass]=\"'btn-ayuda fa fa-question ' + extraClass\" (click)=\"mostrarAyuda()\"></i>\r\n `\r\n})\r\nexport class BitBotonAyudaComponent {\r\n @Input() ayuda: string;\r\n @Input() boton: boolean = false; // show a little [?] or a full button\r\n @Input() extraClass: string = \"\"; // extra CSS classes for HTML component\r\n\r\n constructor(private ayudaService: AyudaService) {}\r\n\r\n mostrarAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"otherToolbarAction\"\r\n})\r\n/**\r\n * Convierte un map de acciones del toolbar en un array de acciones pero conteniendo\r\n * solo aquellas acciones que tengan la propiedad otherAction definida a true\r\n */\r\nexport class OtherToolbarActionPipe implements PipeTransform {\r\n transform(toolbarMap: any): any[] {\r\n let actions = [];\r\n for (var key in toolbarMap) {\r\n if (toolbarMap[key].otherAction) {\r\n actions.push(toolbarMap[key]);\r\n }\r\n }\r\n return actions;\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, SimpleChanges, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/**\r\n * Componenente que muestra una barra de botones.\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-toolbar\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: \"bit-toolbar.component.html\"\r\n //styleUrls: [\"bit-toolbar.component.css\"]\r\n})\r\nexport class BitToolbarComponent {\r\n public static FILTER_BUTTON: string = \"filter\";\r\n public static PRINT_BUTTON: string = \"print\";\r\n public static EXPORT_BUTTON: string = \"export\";\r\n public static NEW_BUTTON: string = \"new\";\r\n public static SAVE_BUTTON: string = \"save\";\r\n public static DELETE_BUTTON: string = \"delete\";\r\n public static ADD_BUTTON: string = \"add\";\r\n public static HELP_BUTTON: string = \"help\";\r\n public mostrar: boolean = false;\r\n\r\n\r\n @Input() toolbar: {};\r\n @Input() ayuda: string; // clave de la ayuda contextual que mostrar para su botón\r\n @Input() femenino: boolean = false; // género femenino (para los nombres de botones) o no\r\n @Input() otherActionsDropdown: boolean = false; // determina si las \"other actions\" deben mostrarse en línea o como un desplegable\r\n @Output() onToolbarButtonPressed = new EventEmitter<string>();\r\n\r\n mostrarOtherActionsEnDesplegable: boolean;\r\n\r\n enable(button: string): boolean {\r\n return this.toolbar[button] && this.toolbar[button].enable;\r\n }\r\n\r\n visible(button: string): boolean {\r\n return this.toolbar[button] && this.toolbar[button].visible;\r\n }\r\n\r\n label(button: string, defaultLabel: string): string {\r\n return (this.toolbar[button] && this.toolbar[button].label) || defaultLabel;\r\n }\r\n\r\n estilo(button: string, defaultValue: string): string {\r\n return (this.toolbar[button] && this.toolbar[button].estilo) || defaultValue || \"fa fa-balance-spinner\";\r\n }\r\n\r\n showFilter() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.FILTER_BUTTON);\r\n }\r\n\r\n print() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.PRINT_BUTTON);\r\n }\r\n\r\n exportData() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.EXPORT_BUTTON);\r\n }\r\n\r\n newElement() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.NEW_BUTTON);\r\n }\r\n\r\n add() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.ADD_BUTTON);\r\n }\r\n\r\n save() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.SAVE_BUTTON);\r\n }\r\n\r\n delete() {\r\n this.onToolbarButtonPressed.emit(BitToolbarComponent.DELETE_BUTTON);\r\n }\r\n\r\n otherAction(button: any) {\r\n this.onToolbarButtonPressed.emit(button.action);\r\n }\r\n\r\n /* ver/ocultar menú opciones toolbar acciones */\r\n\r\n toogle() {\r\n this.mostrar = !this.mostrar;\r\n }\r\n\r\n\r\n /** escuchamos cuando la toolbar cambia para ajustar las other Actions */\r\n ngOnChanges(changes: SimpleChanges) {\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"toolbar\") {\r\n let newToolbar = changedProp.currentValue;\r\n console.log(\"nueva toolbar proporcionada\", newToolbar);\r\n this.toolbar = newToolbar;\r\n\r\n // calcular si las other actions deben mostrarse en desplegable\r\n // (se ha pedido asi y hay más de una)\r\n let otherActionsVisibles = 0;\r\n for (let key in this.toolbar) {\r\n if (this.toolbar[key].otherAction && this.toolbar[key].visible) {\r\n otherActionsVisibles++;\r\n }\r\n }\r\n\r\n this.mostrarOtherActionsEnDesplegable = this.otherActionsDropdown && otherActionsVisibles > 1;\r\n console.log(\"mostrarOtherActionsEnDesplegable:\" + this.mostrarOtherActionsEnDesplegable);\r\n }\r\n }\r\n }\r\n}\r\n","<!-- acciones no estandar definidas dinámicamente o muy particulares-->\r\n<!-- si otherActionsDropdown viene a true y hay más de una acción, se muestran como un desplegable, si no, todas las acciones en línea -->\r\n<div class=\"contenedor-toolbar\">\r\n <!-- <div class=\"btn-group dropdown\" role=\"group\" *ngIf=\"mostrarOtherActionsEnDesplegable\">\r\n <button type=\"button\" *ngIf=\"otherActionsDropdown\"\r\n class=\"btn btn-dinamico btn-accion dropdown-toggle\" data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\" aria-expanded=\"false\">Accions <span class=\"pi pi-caret-right\"></span></button>\r\n <div class=\"dropdown-menu desplegable-accion\">\r\n <ng-container *ngFor=\"let button of (toolbar | otherToolbarAction)\">\r\n <button type=\"button\" \r\n *ngIf=\"button.visible\"\r\n [disabled]=\"!button.enable\" (click)=\"otherAction(button)\" class=\"btn btn-dinamico btn-accion dropdown-item\"\r\n ><span [class]=\"button.estilo?button.estilo:'pi pi-caret-right'\"></span> {{\"bitnglibrary.toolbar.\"+button.label | transloco}}</button>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n\r\n <ng-container *ngIf=\"mostrarOtherActionsEnDesplegable\">\r\n <p-button (click)=\"toogle()\" *ngIf=\"otherActionsDropdown\"\r\n styleClass=\"p-button-primary\" icon=\"pi pi-caret-right\" iconPos=\"right\" label=\"Accions\"></p-button>\r\n <ul class=\"button-dropdown\" *ngIf=\"mostrar\">\r\n <ng-container *ngFor=\"let button of (toolbar | otherToolbarAction)\">\r\n <li *ngIf=\"button.visible\" (click)=\"otherAction(button)\"><span>{{\"bitnglibrary.toolbar.\"+button.label | transloco}}</span></li>\r\n </ng-container>\r\n </ul>\r\n </ng-container>\r\n \r\n <!-- si otherActionsDropdown viene a false o solo hay una acción, se muestran una tras otra en línea -->\r\n <ng-container *ngIf=\"!mostrarOtherActionsEnDesplegable\">\r\n <ng-container *ngFor=\"let button of (toolbar | otherToolbarAction)\">\r\n <p-button *ngIf=\"button.visible\" type=\"button\" [disabled]=\"!button.enable\" (click)=\"otherAction(button)\">{{\"bitnglibrary.toolbar.\"+button.label | transloco}} <span [class]=\"button.estilo?button.estilo:'pi pi-angle-right'\"></span></p-button>\r\n </ng-container>\r\n </ng-container>\r\n <!-- acciones estandar -->\r\n <p-button *ngIf=\"visible('new')\" type=\"button\" [disabled]=\"!enable('new')\" (click)=\"newElement()\" styleClass=\"p-button-danger\">{{(femenino ? \"bitnglibrary.toolbar.new-female\": \"bitnglibrary.toolbar.new\") | transloco}} <span [class]=\"estilo('new', 'pi pi-plus')\"></span></p-button>\r\n <p-button *ngIf=\"visible('add')\" type=\"button\" [disabled]=\"!enable('add')\" (click)=\"add()\" styleClass=\"p-button-danger\">{{\"bitnglibrary.toolbar.add\" | transloco}} <span [class]=\"estilo('add', 'pi pi-plus')\"></span></p-button>\r\n <!--div class=\"btn-group\" role=\"group\" *ngIf=\"visible('filter')\">\r\n <button type=\"button\" [disabled]=\"!enable('filter')\" (click)=\"showFilter()\" class=\"btn btn-transparent\">{{label('filter', 'Mostra filtre')}} <span [class]=\"estilo('filter', 'glyphicon glyphicon-search')\"></span></button>\r\n </div-->\r\n <p-button *ngIf=\"visible('export')\" type=\"button\" [disabled]=\"!enable('export')\" (click)=\"exportData()\" styleClass=\"p-button-outlined p-button-secondary\">{{\"bitnglibrary.toolbar.export\" | transloco}} <span [class]=\"estilo('export', 'pi pi-file')\"></span></p-button>\r\n <p-button *ngIf=\"visible('save')\" type=\"button\" [disabled]=\"!enable('save')\" (click)=\"save()\" styleClass=\"p-button-success\">{{\"bitnglibrary.toolbar.save\" | transloco}} <span [class]=\"estilo('save', 'pi pi-save')\"></span></p-button>\r\n <p-button *ngIf=\"visible('delete')\" type=\"button\" [disabled]=\"!enable('delete')\" (click)=\"delete()\" styleClass=\"p-button-outlined p-button-danger\">{{\"bitnglibrary.toolbar.delete\" | transloco}} <span [class]=\"estilo('delete', 'pi pi-trash')\"></span></p-button>\r\n <p-button *ngIf=\"visible('print')\" type=\"button\" [disabled]=\"!enable('print')\" (click)=\"print()\" styleClass=\"p-button-outlined p-button-secondary\">{{\"bitnglibrary.toolbar.print\" | transloco}} <span [class]=\"estilo('print', 'pi pi-print')\"></span></p-button>\r\n <ng-container *ngIf=\"ayuda\">\r\n <bit-boton-ayuda boton=\"true\" [ayuda]=\"ayuda\"></bit-boton-ayuda>\r\n </ng-container>\r\n</div>","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/**\r\n * Componente que muestra miga de pan y toolbar\r\n */\r\n@Component({\r\n selector: \"bit-header\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: \"bit-header.component.html\"\r\n})\r\nexport class BitHeaderComponent {\r\n @Input() toolbar: any = {};\r\n @Input() noToolbar: boolean = false;\r\n @Input() otherActionsDropdown: boolean = false; // determina si las \"other actions\" deben mostrarse en línea o como un desplegable\r\n @Input() breadcrumb: any[];\r\n @Input() masacciones: any[];\r\n @Input() colsBreadcrumb: number;\r\n @Input() femenino: boolean = false; // género femenino (para los nombres de botones) o no\r\n @Input() ayuda: string; // clave de la ayuda contextual para la botonera\r\n\r\n @Output() onToolbarButtonPressed = new EventEmitter<string>();\r\n\r\n /** Tenemos que capturar el evento y volver a subirlo, por diseño Angular2 no permite enviar un evento de un nieto a su abuelo, solo\r\n * de hijo a padre\r\n */\r\n onTBPressed(button) {\r\n this.onToolbarButtonPressed.emit(button);\r\n }\r\n}\r\n","<!-- <div class=\"grid mt-3 mb-3\">\r\n <div class=\"col-12 lg:col-4 sm:col-4 caja-breadcrumb\"> -->\r\n <!-- ruta de donde nos encontramos (miga de pan) -->\r\n <!-- <bit-breadcrumb *ngIf=\"breadcrumb\" [breadcrumb]=\"breadcrumb\"></bit-breadcrumb>\r\n </div>\r\n <div *ngIf=\"noToolbar === false\"\r\n class=\"col-12 lg:col-8 sm:col-8\"> -->\r\n <!-- botonera de acciones --> \r\n <!-- <bit-toolbar \r\n [toolbar]=\"toolbar\"\r\n [femenino]=\"femenino\"\r\n [otherActionsDropdown]=\"otherActionsDropdown\"\r\n [ayuda]=\"ayuda\"\r\n (onToolbarButtonPressed)=\"onTBPressed($event)\"></bit-toolbar>\r\n </div>\r\n</div> -->\r\n\r\n<div class=\"grid mt-3 mb-3\">\r\n <div class=\"col-12 caja-breadcrumb\" [ngClass]=\"[colsBreadcrumb ? 'lg:col-' + colsBreadcrumb : 'lg:col-4']\">\r\n <!-- ruta de donde nos encontramos (miga de pan) -->\r\n <bit-breadcrumb *ngIf=\"breadcrumb\" [breadcrumb]=\"breadcrumb\"></bit-breadcrumb>\r\n </div>\r\n <div *ngIf=\"noToolbar === false\"\r\n class=\"col-12\" [ngClass]=\"[colsBreadcrumb ? 'lg:col-' + (12- colsBreadcrumb) : 'lg:col-8']\">\r\n <!-- botonera de acciones --> \r\n <bit-toolbar\r\n [toolbar]=\"toolbar\"\r\n [femenino]=\"femenino\"\r\n [otherActionsDropdown]=\"otherActionsDropdown\"\r\n [ayuda]=\"ayuda\"\r\n (onToolbarButtonPressed)=\"onTBPressed($event)\"></bit-toolbar>\r\n </div>\r\n</div>","import { Component, Input, OnDestroy } from \"@angular/core\";\r\nimport { Subscription, Observable } from \"rxjs\";\r\n\r\nimport { GeneralUtils } from \"../../services/general-utils.service\";\r\nimport { startWith, map, tap, delay } from \"rxjs/operators\";\r\n\r\n@Component({\r\n selector: \"bit-loading\",\r\n template: `\r\n <div class=\"modal\" *ngIf=\"loading\"> \r\n <div class=\"grid\">\r\n <div class=\"col-12 text-center\">\r\n <i class=\"pi pi-spin pi-spinner icono-loading\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n //styleUrls: [\"bit-loading.component.css\"]\r\n})\r\nexport class BitLoadingComponent implements OnDestroy {\r\n @Input(\"source\") imageSource: string;\r\n loading: boolean = false;\r\n loading$: Observable<boolean>;\r\n inProgressCount: number; // cantidad de cargas en proceso\r\n private subscription: Subscription;\r\n\r\n constructor(private generalUtils: GeneralUtils) {\r\n console.log(\"Constructor bitloading\");\r\n this.inProgressCount = 0;\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription = this.generalUtils.observableLoading\r\n .pipe(\r\n map(value => (value == \"start\" ? true : false)),\r\n startWith(false),\r\n delay(0) //esto es para evitar el error ExpressionChangedAfterItHasBeenCheckedError. Mas info en: https://blog.angular-university.io/angular-debugging/\r\n )\r\n .subscribe(value => {\r\n console.log(\"loading: \" + value);\r\n if (value) {\r\n this.inProgressCount++;\r\n } else {\r\n if (this.inProgressCount > 0) this.inProgressCount--;\r\n }\r\n console.log(\"inProgressCount \" + this.inProgressCount);\r\n this.loading = this.inProgressCount > 0;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.loading = false;\r\n if (this.subscription != null) this.subscription.unsubscribe();\r\n }\r\n}\r\n","import { Component, OnDestroy } from \"@angular/core\";\r\nimport { concatMap, take } from \"rxjs/operators\";\r\nimport { combineLatest, of, Observable } from \"rxjs\";\r\nimport { Message } from \"primeng/api\";\r\nimport { MessageService } from \"primeng/api\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { BitMessageService, TranslateService } from \"../../services\";\r\n\r\n@Component({\r\n selector: \"bit-notification-toast\",\r\n template: ` <p-toast key=\"notification\" position=\"top-right\"></p-toast> `\r\n})\r\nexport class BitNotificationToastComponent extends BaseComponent implements OnDestroy {\r\n constructor(protected bitMessageService: BitMessageService, protected primeMessageService: MessageService, protected translateService: TranslateService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.subscribeToNotifications();\r\n }\r\n\r\n //Nos suscribimos a la espera de que envíen notificaciones\r\n subscribeToNotifications() {\r\n this.bitMessageService.observableNotifications\r\n .pipe(\r\n concatMap(\r\n (notification) =>\r\n combineLatest([\r\n of(notification.severity),\r\n this.translateService.selectTranslate(notification.title.code, notification.title.params, notification.title.context),\r\n this.translateService.selectTranslate(notification.message.code, notification.message.params, notification.message.context)\r\n ]).pipe(take(1)) //prevenimos que si nos cambian de idioma, se vuelva a disparar la traducción y vuelva a aparecer el mensaje en el idioma elegido\r\n )\r\n )\r\n .subscribe(([severity, title, message]) => {\r\n this.showNotification(severity, title, message);\r\n });\r\n }\r\n\r\n showNotification(severity: string, title: string, message: string) {\r\n this.primeMessageService.add({ key: \"notification\", severity: severity, summary: title, detail: message });\r\n }\r\n}\r\n","import { Component, OnDestroy } from \"@angular/core\";\r\nimport { concatMap, filter, take, tap } from \"rxjs/operators\";\r\nimport { combineLatest, of, Observable } from \"rxjs\";\r\nimport { Message } from \"primeng/api\";\r\nimport { MessageService } from \"primeng/api\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { BitMessageService, TranslateService } from \"../../services\";\r\nimport { ErrorValidateForm } from \"../../../base/models\";\r\n\r\n@Component({\r\n selector: \"bit-notification-error\",\r\n template: ` <p-messages [value]=\"messages\" [closable]=\"true\"></p-messages> `\r\n})\r\nexport class BitNotificationErrorComponent extends BaseComponent implements OnDestroy {\r\n messages: Message[] = [];\r\n\r\n constructor(protected bitMessageService: BitMessageService, protected primeMessageService: MessageService, protected translateService: TranslateService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n console.log(\"BitNotificationErrorComponent ngOnInit\");\r\n this.subscribeToNotificationMessages();\r\n }\r\n\r\n //Nos suscribimos a la espera de que envíen notificaciones de error\r\n private subscribeToNotificationMessages() {\r\n this.bitMessageService.observableNotificationsErrors\r\n .pipe(\r\n tap((notificacionError) => {\r\n //controlamos si nos llega vacio\r\n console.log(\"subscribeToNotificationMessages\", notificacionError);\r\n if (!notificacionError) {\r\n this.hideErrors();\r\n }\r\n }),\r\n filter((notificacionError) => !!notificacionError), //controlamos que no pasemos algo vacío\r\n concatMap((notificationError) =>\r\n combineLatest([\r\n //de momento, title y message no se están mostrando en pantalla\r\n this.translateService.selectTranslate(notificationError.title.code, notificationError.title.params, notificationError.title.context),\r\n this.translateService.selectTranslate(notificationError.message.code, notificationError.message.params, notificationError.message.context),\r\n of(notificationError.context),\r\n of(notificationError.multipleErrors)\r\n ]).pipe(take(1))\r\n )\r\n )\r\n .subscribe(([title, message, context, multipleErrros]) => {\r\n console.log(`subscribe ${title} ${message}`);\r\n this.showNotificationError(title, message, context, multipleErrros);\r\n });\r\n }\r\n\r\n /**\r\n * Muestra una notificación de error que puede ser o bien múltiple o simple\r\n * @param title\r\n * @param message\r\n * @param context\r\n * @param multipleErrors\r\n */\r\n showNotificationError(title: string, message: string, context: string, multipleErrors: ErrorValidateForm[]) {\r\n this.messages = [];\r\n console.log(`showNotificationError ${title} ${message}`);\r\n if (multipleErrors) {\r\n //Para cada error a mostrar\r\n multipleErrors.map((error) =>\r\n combineLatest([\r\n this.getTranslatedPrefixes(error, context),\r\n this.translateService.selectTranslate(error.errorMessage.code, error.errorMessage.params, error.errorMessage.context)\r\n ])\r\n .pipe(take(1)) //prevenimos que si nos cambian de idioma, se vuelva a disparar la traducción y concatenemos mensajes\r\n .subscribe(([prefixes, textError]) => {\r\n this.pushError(\r\n prefixes.reduce((acc, v) => acc + \" > \" + v),\r\n textError\r\n );\r\n })\r\n );\r\n } else {\r\n this.pushError(title, message);\r\n }\r\n }\r\n\r\n hideNotificacionError() {\r\n console.log(\"ocultamos las notificaciones\");\r\n this.messages = [];\r\n }\r\n\r\n /** Añade un mensaje de error a la lista general de errores que mostrará el componente usando Prime */\r\n private pushError(title: string, message: string) {\r\n console.log(`new error ${title} ${message}`);\r\n this.messages.push({\r\n severity: \"error\",\r\n summary: title,\r\n detail: message\r\n });\r\n }\r\n\r\n private hideErrors() {\r\n console.log(\"hideErrors\");\r\n this.messages = [];\r\n }\r\n\r\n /** Transforma un array de códigos a traducir en un array de observables para traducir cada código y combinado todo\r\n * con el operador combineLatest para recibir los valores traducidos en la misma secuencia que ocupan en el array\r\n */\r\n private getTranslatedPrefixes(error: ErrorValidateForm, context: string): Observable<string[]> {\r\n let prefixErrors$: Observable<string>[] = error.prefixes.map((code) => {\r\n if (typeof code == \"number\") {\r\n //para arrays\r\n return of(code);\r\n } else {\r\n return this.translateService.selectTranslate(code, undefined, context);\r\n }\r\n });\r\n return combineLatest(prefixErrors$);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\n\r\nimport { FileItem, FileUploader, ParsedResponseHeaders } from 'ng2-file-upload';\r\nimport { GeneralUtils } from '../../services';\r\n\r\n@Component({\r\n selector: \"bit-ng-upload\",\r\n templateUrl: \"bit-ng-upload.component.html\",\r\n //styleUrls: [\"bit-ng-upload.component.css\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class BitNGUploadComponent implements OnInit {\r\n @Input()\r\n uploader: FileUploader;\r\n @Input()\r\n hasDropZone: boolean;\r\n @Input()\r\n hasQueue: boolean;\r\n @Input()\r\n hasSingleUpload: boolean;\r\n @Input()\r\n hasMultipleUpload: boolean;\r\n @Input()\r\n deleteItemAfterUpload: boolean;\r\n @Input()\r\n canUpload: boolean;\r\n @Input()\r\n hasProgressBar: boolean;\r\n @Input()\r\n sizeDropZone: number;\r\n @Input()\r\n sizeQueue: number;\r\n @Input()\r\n inputAccept?: string = \"*\";\r\n\r\n @Output()\r\n onSuccess: EventEmitter<any> = new EventEmitter<any>();\r\n @Output()\r\n onError: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @ViewChild(\"fileRef\")\r\n fileInput: any;\r\n\r\n hasBaseDropZoneOver: boolean;\r\n\r\n constructor(private generalUtils: GeneralUtils, private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.uploader.onSuccessItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {\r\n console.log(\"success upload file\");\r\n this.stopLoading();\r\n this.onSuccess.emit({ item, response, status, headers });\r\n if (this.deleteItemAfterUpload) {\r\n item.remove();\r\n }\r\n };\r\n this.uploader.onErrorItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {\r\n console.log(\"error upload file\");\r\n this.stopLoading();\r\n this.onError.emit({ item, response, status, headers });\r\n };\r\n this.uploader.onProgressItem = (item: FileItem, progress: any) => {\r\n console.log(progress);\r\n this.changeDetector.detectChanges();\r\n };\r\n\r\n this.hasBaseDropZoneOver = false;\r\n }\r\n\r\n /** Arrancará el spinner en el caso de que la barra de progreso esté desactivada*/\r\n startLoading() {\r\n if (!this.hasProgressBar) {\r\n this.generalUtils.startLoading();\r\n }\r\n }\r\n\r\n /** Parará el spinner en el caso de que la barra de progreso esté desactivada*/\r\n stopLoading() {\r\n if (!this.hasProgressBar) {\r\n this.generalUtils.stopLoading();\r\n }\r\n }\r\n\r\n /** Sube todos los ficheros en cola al servidor */\r\n uploadAll() {\r\n this.startLoading();\r\n this.uploader.uploadAll();\r\n }\r\n\r\n /** Elimina la cola de ficheros y des-selecciona el fichero que pudiera estar seleccionado en el single input file */\r\n removeQueue() {\r\n this.stopLoading();\r\n this.uploader.clearQueue();\r\n this.changeDetector.detectChanges();\r\n this.removeInputFile();\r\n }\r\n\r\n /** Cancela la subida de ficheros al servidor */\r\n cancelQueue() {\r\n this.stopLoading();\r\n this.uploader.cancelAll();\r\n }\r\n\r\n /** Sube un fichero al servidor de manera individual */\r\n uploadFile(item) {\r\n this.startLoading();\r\n item.upload();\r\n }\r\n\r\n /** Elimina de la cola un fichero en concreto y en el caso de que coincida con el seleccionado en el single input file, también\r\n * lo des-selecciona\r\n */\r\n removeFile(item) {\r\n this.stopLoading();\r\n if (this.fileInput && this.fileInput.nativeElement.value.indexOf(item.file.name) != -1) {\r\n this.removeInputFile();\r\n }\r\n item.remove();\r\n }\r\n\r\n /** Cancela la subida de un fichero de manera individual */\r\n cancelFile(item) {\r\n this.stopLoading();\r\n item.cancel();\r\n }\r\n\r\n /** Des-selecciona el fichero seleccionado en el input file */\r\n removeInputFile() {\r\n if (this.fileInput) this.fileInput.nativeElement.value = \"\";\r\n }\r\n\r\n /** Evento que se dispara cuando arrastran un fichero a la zona de drag&drop */\r\n public fileOverBase(e: any): void {\r\n this.hasBaseDropZoneOver = e;\r\n }\r\n}\r\n"," <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div *ngIf=\"hasDropZone\"\r\n ng2FileDrop\r\n [ngClass]=\"{'nv-file-over': hasBaseDropZoneOver}\"\r\n (fileOver)=\"fileOverBase($event)\"\r\n [uploader]=\"uploader\"\r\n class=\"well my-drop-zone\">\r\n <div class=\"contenedor-upload\">\r\n <i class=\"fa fa-file documento\"></i>\r\n <div>\r\n <span>{{ \"bitnglibrary.upload.dropfiles\" | transloco }}</span>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <label *ngIf=\"hasMultipleUpload\" class=\"btn-upload\">\r\n <input type=\"file\" ng2FileSelect [uploader]=\"uploader\" multiple [accept]=\"inputAccept\" />\r\n <i class=\"fa fa-upload\"></i>{{'bitnglibrary.upload.multiple' | transloco}}\r\n </label>\r\n <label *ngIf=\"hasSingleUpload\" class=\"btn-upload\">\r\n <input #fileRef type=\"file\" ng2FileSelect [uploader]=\"uploader\" [accept]=\"inputAccept\" />\r\n <i class=\"fa fa-upload\"></i>{{'bitnglibrary.upload.simple' | transloco}}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div *ngIf=\"hasQueue\" class=\"col-12\">\r\n <p>{{\"bitnglibrary.upload.uploadfiles\" | transloco}}: {{ uploader?.queue?.length }}</p>\r\n\r\n <p-table [value]=\"uploader.queue\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th width=\"50%\">{{\"bitnglibrary.upload.filename\" | transloco}}</th>\r\n <th *ngIf=\"uploader.options.isHTML5\">{{\"bitnglibrary.upload.filesize\" | transloco}}</th>\r\n <th *ngIf=\"uploader.options.isHTML5 && hasProgressBar\">{{\"bitnglibrary.upload.progress\" | transloco}}</th>\r\n <th *ngIf=\"canUpload\">Estat</th>\r\n <th>{{\"bitnglibrary.upload.actions\" | transloco}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-item>\r\n <tr>\r\n <td><strong>{{ item?.file?.name }}</strong></td>\r\n <td *ngIf=\"uploader.options.isHTML5\" nowrap>{{ item?.file?.size/1024 | number:'.2' }} KB</td>\r\n <td *ngIf=\"uploader.options.isHTML5 && hasProgressBar\">\r\n <div class=\"progress\" style=\"margin-bottom: 0;\">\r\n <div class=\"progress-bar\" role=\"progressbar\" [ngStyle]=\"{ 'width': item.progress + '%' }\"></div>\r\n </div>\r\n </td>\r\n <td *ngIf=\"canUpload\" class=\"p-text-center\">\r\n <span *ngIf=\"item.isSuccess\"><i class=\"fa fa-check\"></i></span>\r\n <span *ngIf=\"item.isCancel\"><i class=\"fa fa-ban\"></i></span>\r\n <span *ngIf=\"item.isError\"><i class=\"fa fa-times\"></i></span>\r\n </td>\r\n <td nowrap>\r\n <p-button *ngIf=\"canUpload\" icon=\"fa fa-upload\" title=\"{{'bitnglibrary.upload.upload' | transloco}}\" styleClass=\"p-button-success\"\r\n (click)=\"uploadFile(item)\" [disabled]=\"item.isReady || item.isUploading || item.isSuccess\">\r\n </p-button>\r\n <p-button *ngIf=\"canUpload\" icon=\"fa fa-ban\" title=\"{{'bitnglibrary.upload.cancelupload' | transloco}}\" styleClass=\"p-button-warning\"\r\n (click)=\"cancelFile(item)\" [disabled]=\"!item.isUploading\">\r\n </p-button>\r\n <p-button icon=\"fa fa-trash\" title=\"{{'bitnglibrary.upload.removefromqueue' | transloco}}\" styleClass=\"p-button-danger\"\r\n (click)=\"removeFile(item)\">\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div *ngIf=\"hasProgressBar\" class=\"cola-progreso\">\r\n <span>{{\"bitnglibrary.upload.progressqueue\" | transloco}}<span>{{(uploader.progress.toString() == 'NaN'? (\"bitnglibrary.upload.finishupload\"|transloco): uploader.progress + ' %')}}</span></span>\r\n <div class=\"progress\">\r\n <div class=\"progress-bar\" role=\"progressbar\" [ngStyle]=\"{ 'width': (uploader.progress.toString() == 'NaN'?'0':uploader.progress) + '%' }\"></div>\r\n </div>\r\n </div>\r\n <div>\r\n <p-button icon=\"fa fa-upload\" *ngIf=\"canUpload\" title=\"{{'bitnglibrary.upload.uploadall' | transloco}}\" styleClass=\"p-button-success\"\r\n (click)=\"uploadAll()\" [disabled]=\"!uploader.getNotUploadedItems().length\">\r\n </p-button>\r\n <p-button icon=\"fa fa-ban\" *ngIf=\"canUpload\" title=\"{{'bitnglibrary.upload.cancelall' | transloco}}\" styleClass=\"p-button-warning\"\r\n (click)=\"cancelQueue()\" [disabled]=\"!uploader.isUploading\">\r\n </p-button>\r\n <p-button icon=\"fa fa-trash\" title=\"{{'bitnglibrary.upload.removeall' | transloco}}\" styleClass=\"p-button-danger\"\r\n (click)=\"removeQueue()\" [disabled]=\"!uploader.queue.length\">\r\n </p-button>\r\n </div>\r\n </div>\r\n </div>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componente general que muestra controles de sesión de usuario.\r\n *\r\n * Informa del login actualmente en sesión\r\n */\r\n@Component({\r\n selector: \"bit-user-controls\",\r\n template: `\r\n <span *ngIf=\"usuario\" class=\"userControls\"\r\n ><span class=\"fa fa-user\" title=\"{{ json }}\"></span> {{ usuario.nombreCompleto }} ({{\r\n usuario.login\r\n }}) </span\r\n >\r\n `\r\n //styleUrls:['bit-user-controls.component.css']\r\n})\r\nexport class BitUserControlsComponent {\r\n @Input() usuario;\r\n userJSON: string;\r\n\r\n constructor() {}\r\n\r\n get json(): string {\r\n return this.usuario && JSON.stringify(this.usuario, null, 4);\r\n }\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componenente que muestra un paginador en la sección footer.\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-column-boolean\",\r\n template: `\r\n <span class=\"ui-cell-data\" *ngIf=\"data\">\r\n {{ data[field] ? textTrue : textFalse }}\r\n </span>\r\n `\r\n})\r\nexport class BitColumnBooleanComponent {\r\n @Input() data: any; // objeto del que extraer la propiedad\r\n @Input() field: string; // propiedad booleana que procesar\r\n @Input() textTrue: string = \"Sí\";\r\n @Input() textFalse: string = \"No\";\r\n\r\n constructor() {}\r\n}\r\n","import { Component, OnChanges, Input } from \"@angular/core\";\r\n\r\nimport { Domain } from \"../../data/domain\";\r\n\r\n@Component({\r\n selector: \"bit-domain-value\",\r\n template: `\r\n <span>{{ translatedValue }}</span>\r\n `\r\n})\r\nexport class BitDomainValueComponent implements OnChanges {\r\n translatedValue: string = \"carregant...\";\r\n\r\n @Input() value: string;\r\n @Input() emptyText: string = \"\";\r\n @Input() data: Domain[];\r\n\r\n constructor() {}\r\n\r\n ngOnChanges() {\r\n // cada vez que cambia algo en el input, recalculamos\r\n this.translatedValue = this.resolveTranslatedValue();\r\n }\r\n\r\n resolveTranslatedValue(): string {\r\n // buscar traducción para el valor en el dominio\r\n let domainMatch = this.data && this.data.find(obj => obj.value == this.value);\r\n\r\n if (domainMatch) {\r\n return domainMatch.label;\r\n } else if (this.value) {\r\n return String(`??${this.value}??`);\r\n } else {\r\n return this.emptyText;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n/**\r\n * Cambia a mayúscula el primer carácter de un texto.\r\n */\r\n@Pipe({ name: \"capitalize\" })\r\nexport class CapitalizePipe implements PipeTransform {\r\n transform(texto: string): string {\r\n if (texto && texto.length > 0) {\r\n return texto.charAt(0).toUpperCase() + texto.slice(1);\r\n } else {\r\n return texto;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\nconst PADDING = \"000000\";\r\n\r\n@Pipe({ name: \"pipeCantidadMoneda\" })\r\nexport class PipeCantidadMoneda implements PipeTransform {\r\n private DECIMAL_SEPARATOR: string;\r\n private DECIMAL_SEPARATOR_INPUT: string;\r\n private THOUSANDS_SEPARATOR: string;\r\n\r\n constructor() {\r\n this.DECIMAL_SEPARATOR = \",\";\r\n this.DECIMAL_SEPARATOR_INPUT = \".\";\r\n this.THOUSANDS_SEPARATOR = \".\";\r\n }\r\n\r\n transform(value: number | string, fractionSize: number = 2): string {\r\n let svalue = String(value);\r\n\r\n var regexp = new RegExp(\"^[1-9]+[0-9]*([.]([0-9]+)?)?$\");\r\n var test = regexp.test(svalue);\r\n if (!test) {\r\n return svalue;\r\n }\r\n\r\n let [integer, fraction = \"\"] = (value || \"\").toString().split(this.DECIMAL_SEPARATOR_INPUT);\r\n\r\n fraction = fractionSize > 0 ? this.DECIMAL_SEPARATOR + (fraction + PADDING).substring(0, fractionSize) : \"\";\r\n\r\n integer = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.THOUSANDS_SEPARATOR);\r\n\r\n return integer + fraction;\r\n }\r\n\r\n parse(value: string, previous: string, event, fractionSize: number = 2): string {\r\n let svalue = String(value);\r\n\r\n var regexp = new RegExp(\"^[1-9]+[0-9]*([.][0-9]{3})*(,([0-9]+)?)?$\");\r\n var test = regexp.test(svalue);\r\n if (!test) {\r\n return svalue;\r\n }\r\n\r\n let [integer, fraction = \"\"] = (value || \"\").split(this.DECIMAL_SEPARATOR);\r\n\r\n integer = integer.replace(/\\./g, \"\");\r\n\r\n fraction =\r\n parseInt(fraction, 10) > 0 && fractionSize > 0\r\n ? this.DECIMAL_SEPARATOR_INPUT + (fraction + PADDING).substring(0, fractionSize)\r\n : \"\";\r\n\r\n return integer + fraction;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"removeLineBreaks\"\r\n})\r\n/**\r\n * Acorta un texto con saltos de línea, sustituyendo los saltos por \"//\" y limitando la cadena final a 200 caracteres\r\n */\r\nexport class RemoveLineBreaksPipe implements PipeTransform {\r\n transform(str: string): string {\r\n if (str.indexOf(\"\\n\") > 0) {\r\n str = str\r\n .split(\"\\n\")\r\n .filter(line => line.trim().length > 0)\r\n .join(\" // \");\r\n }\r\n if (str.length > 200) {\r\n str = str.substring(0, 200) + \" ...\";\r\n }\r\n return str;\r\n }\r\n}\r\n","import { Input, Output, EventEmitter, OnInit, SimpleChange, Directive } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\n\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\n\r\n/**\r\n * Clase general que todos los componentes personalizados deben extender. Contiene toda la lógica común para trabajar con\r\n * componentes personalizados\r\n */\r\n@Directive()\r\nexport abstract class BitGeneralComponent extends BaseComponent implements OnInit {\r\n @Input()\r\n control: FormControl;\r\n @Input()\r\n nombre: any;\r\n @Input()\r\n nombreDirectiva: any;\r\n @Input()\r\n label: string;\r\n @Input()\r\n estilo: string;\r\n @Input()\r\n tooltipTexto: string;\r\n @Input()\r\n tooltipPosicion: string;\r\n @Input()\r\n ayuda: string; // clave de la ayuda contextual\r\n @Input()\r\n placeholder: string = \"\";\r\n @Input()\r\n readOnly: boolean = false;\r\n @Input()\r\n hideLabel: boolean = false; // forzar que no se reserve espacio para el nombre del campo\r\n @Input()\r\n instanciaPipe: any;\r\n @Input()\r\n forceObligatorio: boolean = false;\r\n @Output()\r\n onChange = new EventEmitter<string>();\r\n\r\n constructor(protected ayudaService: AyudaService) {\r\n super();\r\n }\r\n\r\n /** Debemos suscribirnos a los cambios del FormControl para emitir mediante onChange el evento con el nuevo valor que tiene el componente. */\r\n ngOnInit() {\r\n if (this.control) {\r\n this.transformValue();\r\n this.control.valueChanges.subscribe((value) => {\r\n this.transformValue();\r\n this.onChange.emit(value);\r\n });\r\n } else {\r\n console.log(`control no definido para ${this.nombre}`);\r\n }\r\n }\r\n\r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado. */\r\n onBlur() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.transform(this.control.value));\r\n }\r\n }\r\n\r\n onFocus() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.parse(this.control.value));\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Si es necesario, transformamos el valor de entrada para que se muestre correctamente en el campo (ver BitDropDownGeneral).\r\n */\r\n protected transformValue(): void {}\r\n\r\n // decidimos marcar el campo como obligatorio si se ha indicado a la fuerza (por parámetro)\r\n // o si el control de formulario asociado está saltando por ser obligatorio y no haberse rellenado\r\n get obligatorio(): boolean {\r\n return this.forceObligatorio || (this.control && this.control.errors && this.control.errors[\"required\"]);\r\n }\r\n\r\n showAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n\r\n get value_lectura(): string {\r\n return this.control.value;\r\n }\r\n}\r\n","import { Component } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { BitGeneralComponent } from \"../bit-general.component\";\r\n\r\n@Component({\r\n selector: \"bit-text\",\r\n templateUrl: \"bit-text.component.html\"\r\n})\r\nexport class BitTextComponent extends BitGeneralComponent {\r\n constructor(protected ayudaService: AyudaService) {\r\n super(ayudaService);\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<input\r\n *ngIf=\"!tooltipTexto && !readOnly\"\r\n type=\"text\"\r\n pInputText\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [formControl]=\"control\"\r\n [attr.directive]=\"nombreDirectiva\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\"\r\n [placeholder]=\"placeholder\"\r\n/>\r\n<input\r\n *ngIf=\"tooltipTexto && !readOnly\"\r\n type=\"text\"\r\n pInputText\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [formControl]=\"control\"\r\n [attr.directive]=\"nombreDirectiva\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\"\r\n [pTooltip]=\"tooltipTexto\"\r\n [tooltipPosition]=\"tooltipPosicion\"\r\n/>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { AyudaService } from '../../../services';\r\nimport { BitGeneralComponent } from '../bit-general.component';\r\n\r\n@Component({\r\n selector: \"bit-textarea\",\r\n templateUrl: \"bit-textarea.component.html\"\r\n})\r\nexport class BitTextAreaComponent extends BitGeneralComponent {\r\n\r\n @Input()\r\n filas: number = 2;\r\n\r\n constructor(protected ayudaService: AyudaService) {\r\n super(ayudaService);\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<pre *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</pre>\r\n<textarea pInputTextarea\r\n *ngIf=\"!readOnly\"\r\n id=\"{{nombre}}\"\r\n name=\"{{nombre}}\"\r\n [formControl]=\"control\"\r\n class=\"{{estilo}}\"\r\n [rows]=\"filas\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\">\r\n</textarea>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { ChangeDetectorRef, Directive } from \"@angular/core\";\r\nimport { ControlValueAccessor } from \"@angular/forms\";\r\n\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\nimport { BitGeneralComponent } from \"./bit-general.component\";\r\n\r\nconst noop = () => {};\r\n\r\n/** Clase customizada para componentes personalizados que requieren implementar la interface ControlValueAccessor.\r\n * Tipicamente para aquellos componentes personalizados que trabajan sobre otros componentes no estándars HTML como\r\n * pueden ser los componentes de prime como switch, autocomplete, calendar, select, etc.\r\n */\r\n@Directive()\r\nexport abstract class BitCustomComponent extends BitGeneralComponent implements ControlValueAccessor {\r\n protected onTouchedCallback: () => void = noop;\r\n protected onChangeCallback: (_: any) => void = noop;\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService);\r\n }\r\n\r\n //sobreescribimos el getter para coger el valor del FormControl\r\n get value(): any {\r\n return this.control.value;\r\n }\r\n\r\n //sobreescribimos el setter del value para poder transformarlo\r\n set value(v: any) {\r\n v = this.transformData(v);\r\n if (v !== this.control.value) {\r\n //v != undefined &&\r\n this.control.setValue(v);\r\n this.onTouchedCallback();\r\n this.onChangeCallback(v);\r\n }\r\n }\r\n\r\n /** Solo se activa este método si el input readOnly es true */\r\n get value_lectura(): string {\r\n if (this.value == null) {\r\n return \"\";\r\n } else {\r\n return this.value;\r\n }\r\n }\r\n\r\n /** El comportamiento normal es no transformar nada. Si el componente hijo necesita transformarlo\r\n * que sobreecriba el método y modifique el comportamiento. Esto se dará típicamente en los campos fecha porque\r\n * no queremos la versión ISO que nos da Prime si no una versión españolizada*/\r\n transformData(v) {\r\n return v;\r\n }\r\n\r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onBlur() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.transform(this.control.value));\r\n this.onChangeCallback(this.control.value);\r\n }\r\n this.onTouchedCallback();\r\n }\r\n\r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onFocus() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.parse(this.control.value));\r\n this.control.updateValueAndValidity();\r\n this.onChangeCallback(this.control.value);\r\n }\r\n this.onTouchedCallback();\r\n }\r\n\r\n /** Se activa cuando debemos Angular nos informa de que debemos actualizar la vista. Cada componente hijo deberá ver\r\n * si requiere o no implementar este método */\r\n writeValue(value: any) {\r\n if (value !== this.control.value) {\r\n // hack para que el ControlValueAccesor funcione correctamente cuando está referenciado en componentes con ChangeDetectionStrategy.OnPush\r\n // (no es nada bonito, pero Angular lleva 2 años con este bug y no lo han solucionado)\r\n // si no lo incluimos, en algunos casos se corre el riesgo de ir varios valores por detrás en el bit-input\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any) {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any) {\r\n this.onTouchedCallback = fn;\r\n }\r\n}\r\n","import { ChangeDetectorRef, OnInit, Directive } from \"@angular/core\";\r\nimport { Input } from \"@angular/core\";\r\n\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\nimport { TranslateService, AyudaService } from \"../../../services\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/** Clase general para componentes personalizados de tipo Fecha como puede ser BitDate, BitTime y BitDateTime */\r\n@Directive()\r\nexport abstract class BitCalendarComponent extends BitCustomComponent implements OnInit {\r\n // calendarios\r\n @Input()\r\n fechaMinima: Date; // fecha mínima seleccionable\r\n @Input()\r\n fechaMaxima: Date; // fecha máxima seleccionable\r\n @Input()\r\n calendarReadOnlyInput: boolean; // desabilitar edicion por teclado\r\n locale: any;\r\n\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n ngOnInit() {\r\n this.getMessagesI18N();\r\n }\r\n\r\n getMessagesI18N() {\r\n console.log(\"getMessagesI18N\");\r\n this.translateService\r\n .selectTranslateObject(\"form.calendar\", {}, \"bitnglibrary\")\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((v) => (this.locale = v));\r\n }\r\n}\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { BitCalendarComponent } from \"../calendar/bit-calendar.component\";\r\nimport { TranslateService, AyudaService, GeneralUtils } from \"../../../services\";\r\n\r\nexport const CUSTOM_INPUT_DATE_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitDateComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-date\",\r\n templateUrl: \"bit-date.component.html\",\r\n providers: [CUSTOM_INPUT_DATE_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitDateComponent extends BitCalendarComponent {\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, translateService, changeDetectorRef);\r\n }\r\n\r\n transformData(value: any): any {\r\n let v = null;\r\n if (value) {\r\n v = GeneralUtils.getDateAsString(GeneralUtils.stringToDate(value));\r\n }\r\n return v;\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null || this.value == \"\") {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return GeneralUtils.getDateAsString(GeneralUtils.stringShortToDate(this.value));\r\n }\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{ value_lectura }}</p>\r\n<p-calendar\r\n *ngIf=\"!readOnly\"\r\n class=\"FormControl\"\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [(ngModel)]=\"value\"\r\n dateFormat=\"dd/mm/yy\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [monthNavigator]=\"true\"\r\n [readonlyInput]=\"calendarReadOnlyInput\"\r\n [minDate]=\"fechaMinima\"\r\n [maxDate]=\"fechaMaxima\"\r\n [yearNavigator]=\"true\"\r\n yearRange=\"2000:2030\"\r\n [firstDayOfWeek]=\"1\"\r\n>\r\n</p-calendar>\r\n<span *ngIf=\"!readOnly\" class=\"glyphicon glyphicon-calendar icono-input\"></span>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from \"@angular/forms\";\r\n\r\nimport { BitCalendarComponent } from \"../calendar/bit-calendar.component\";\r\nimport { TranslateService, AyudaService, GeneralUtils } from \"../../../services\";\r\n\r\nexport const CUSTOM_INPUT_TIME_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitTimeComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-time\",\r\n templateUrl: \"bit-time.component.html\",\r\n providers: [CUSTOM_INPUT_TIME_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitTimeComponent extends BitCalendarComponent {\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, translateService, changeDetectorRef);\r\n }\r\n\r\n transformData(value: any): any {\r\n let v;\r\n if (value) {\r\n v = GeneralUtils.getTimeAsString(GeneralUtils.stringToDate(value));\r\n }\r\n return v;\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null || this.value == \"\") {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return GeneralUtils.getTimeAsString(GeneralUtils.stringToTime(this.value));\r\n }\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{ value_lectura }}</p>\r\n<p-calendar\r\n *ngIf=\"!readOnly\"\r\n class=\"FormControl\"\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [(ngModel)]=\"value\"\r\n timeFormat=\"HH:mm\"\r\n [timeOnly]=\"true\"\r\n placeholder=\"HH:mm\"\r\n [firstDayOfWeek]=\"1\"\r\n>\r\n</p-calendar>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { BitCalendarComponent } from \"../calendar/bit-calendar.component\";\r\nimport { TranslateService, AyudaService, GeneralUtils } from \"../../../services\";\r\n\r\nexport const CUSTOM_INPUT_DATETIME_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitDateTimeComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-datetime\",\r\n templateUrl: \"bit-datetime.component.html\",\r\n providers: [CUSTOM_INPUT_DATETIME_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitDateTimeComponent extends BitCalendarComponent {\r\n constructor(protected ayudaService: AyudaService, protected translateService: TranslateService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, translateService, changeDetectorRef);\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null || this.value == \"\") {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return GeneralUtils.getDateTimeAsString(GeneralUtils.stringToDate(this.value));\r\n }\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{ value_lectura }}</p>\r\n<p-calendar\r\n *ngIf=\"!readOnly\"\r\n class=\"FormControl\"\r\n id=\"{{ nombre }}\"\r\n name=\"{{ nombre }}\"\r\n [(ngModel)]=\"value\"\r\n dateFormat=\"dd/mm/yy\"\r\n placeholder=\"dd/mm/yyyy hh:mm\"\r\n [monthNavigator]=\"true\"\r\n [minDate]=\"fechaMinima\"\r\n [maxDate]=\"fechaMaxima\"\r\n [yearNavigator]=\"true\"\r\n yearRange=\"2000:2030\"\r\n [locale]=\"locale\"\r\n [showTime]=\"true\"\r\n [firstDayOfWeek]=\"1\"\r\n>\r\n</p-calendar>\r\n<span *ngIf=\"!readOnly\" class=\"glyphicon glyphicon-calendar icono-input\"></span>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { BitGeneralComponent } from \"../bit-general.component\";\r\n\r\n@Component({\r\n selector: \"bit-checkbox\",\r\n templateUrl: \"bit-checkbox.component.html\"\r\n //styleUrls: [\"bit-checkbox.component.css\"]\r\n})\r\nexport class BitCheckBoxComponent extends BitGeneralComponent {\r\n constructor(protected ayudaService: AyudaService) {\r\n super(ayudaService);\r\n }\r\n\r\n get value_lectura(): string {\r\n return this.control.value ? \"Sí\" : \"No\";\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<p-checkbox \r\n *ngIf=\"!readOnly\"\r\n class=\"{{estilo}}\" \r\n binary=\"true\"\r\n [formControl]=\"control\"\r\n\t[label]=\"!hideLabel && label\" \r\n\tname=\"{{nombre}}\" \r\n id=\"{{nombre}}\">\r\n</p-checkbox>\r\n\r\n<i *ngIf=\"ayuda\" (click)=\"showAyuda();\"class=\"btn-ayuda-checkbox fa fa-question\"></i> \r\n\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\n\r\nexport const CUSTOM_INPUT_SWITCH_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitSwitchComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-switch\",\r\n templateUrl: \"bit-switch.component.html\",\r\n providers: [CUSTOM_INPUT_SWITCH_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitSwitchComponent extends BitCustomComponent {\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n get value(): any {\r\n return this.control.value ? true : false;\r\n }\r\n\r\n set value(v: any) {\r\n v = v ? true : false;\r\n if (v !== this.control.value) {\r\n //v != undefined &&\r\n this.control.setValue(v);\r\n this.onTouchedCallback();\r\n this.onChangeCallback(v);\r\n }\r\n }\r\n\r\n get value_lectura(): string {\r\n return this.value ? \"Sí\" : \"No\";\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<p-inputSwitch \r\n *ngIf=\"!readOnly\"\r\n onLabel=\"Sí\" \r\n offLabel=\"No\" \r\n binary=\"true\" \r\n [(ngModel)]=\"value\" \r\n name=\"{{nombre}}\" \r\n id=\"{{nombre}}\">\r\n</p-inputSwitch>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Component, forwardRef, ChangeDetectorRef, Input, Output, EventEmitter } from \"@angular/core\";\r\n\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\n\r\nexport const CUSTOM_INPUT_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitAutoCompleteComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: \"bit-autocomplete\",\r\n templateUrl: \"bit-autocomplete.component.html\",\r\n providers: [CUSTOM_INPUT_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitAutoCompleteComponent extends BitCustomComponent {\r\n @Input()\r\n suggestions: any[];\r\n @Input()\r\n suggestionField: string;\r\n @Input()\r\n multiple: boolean = false;\r\n @Output()\r\n completeMethod = new EventEmitter<string>();\r\n @Output()\r\n onSelect = new EventEmitter<string>();\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n search(event: any) {\r\n this.completeMethod.emit(event);\r\n }\r\n\r\n selectValue(event: any) {\r\n this.onSelect.emit(event);\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<p-autoComplete \r\n *ngIf=\"!readOnly\"\r\n [(ngModel)]=\"value\" \r\n id=\"{{nombre}}\" \r\n name=\"{{nombre}}\" \r\n [placeholder]=\"placeholder\"\r\n delay=\"400\" \r\n [suggestions]=\"suggestions\" \r\n [field]=\"suggestionField\" \r\n [multiple]=\"multiple\"\r\n (completeMethod)=\"search($event)\" \r\n (onSelect)=\"selectValue($event)\" \r\n (blur)=\"onBlur()\" \r\n (focus)=\"onFocus()\" \r\n></p-autoComplete>\r\n<control-messages *ngIf=\"control != null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Input, Output, EventEmitter, Directive } from \"@angular/core\";\r\nimport { FormControl, FormGroup } from \"@angular/forms\";\r\n\r\nimport { AyudaService } from \"../../services/ayuda.service\";\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\n\r\n/**\r\n * Clase general que todos los componentes personalizados declearben extender. Contiene toda la lógica común para trabajar con\r\n * componentes personalizados\r\n */\r\n@Directive()\r\nexport abstract class BitGeneralV2Component extends BaseComponent {\r\n @Input()\r\n control: FormControl;\r\n @Input()\r\n form: FormGroup;\r\n @Input()\r\n nombre: any;\r\n @Input()\r\n nombreDirectiva: any;\r\n @Input()\r\n label: string;\r\n @Input()\r\n estilo: string;\r\n @Input()\r\n tooltipTexto: string;\r\n @Input()\r\n tooltipPosicion: string;\r\n @Input()\r\n ayuda: string; // clave de la ayuda contextual\r\n @Input()\r\n placeholder: string = \"\";\r\n @Input()\r\n readOnly: boolean = false;\r\n @Input()\r\n hideLabel: boolean = false; // forzar que no se reserve espacio para el nombre del campo\r\n @Input()\r\n instanciaPipe: any;\r\n @Input()\r\n forceObligatorio: boolean = false;\r\n @Output()\r\n onChange = new EventEmitter<string>();\r\n \r\n constructor(protected ayudaService: AyudaService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n if (this.control) {\r\n this.control.valueChanges.subscribe((value) => {\r\n this.onChange.emit(value);\r\n });\r\n } else {\r\n console.log(`control no definido para ${this.nombre}`);\r\n }\r\n }\r\n \r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onBlur() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.transform(this.control.value));\r\n }\r\n }\r\n \r\n /** Controlamos si debemos modificar el valor interno del componente mediante una transformacion al tener un pipe asociado*/\r\n onFocus() {\r\n if (this.instanciaPipe != null) {\r\n this.control.setValue(this.instanciaPipe.parse(this.control.value));\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n \r\n // decidimos marcar el campo como obligatorio si se ha indicado a la fuerza (por parámetro)\r\n // o si el control de formulario asociado está saltando por ser obligatorio y no haberse rellenado\r\n get obligatorio(): boolean {\r\n return this.forceObligatorio || (this.control && this.control.errors && this.control.errors[\"required\"]);\r\n }\r\n \r\n showAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n \r\n get value_lectura(): string {\r\n return this.control.value;\r\n }\r\n\r\n get myForm(): FormGroup {\r\n if (!!this.form) {\r\n return this.form;\r\n } else {\r\n return <FormGroup> this.control.parent;\r\n }\r\n }\r\n}\r\n","import { Input, Directive } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { take } from \"rxjs/operators\";\r\n\r\nimport { BitGeneralV2Component } from \"../bit-general-v2.component\";\r\nimport { AyudaService, TranslateService, SessionSharedService } from \"../../../services\";\r\n\r\n/**\r\n * Clase general común a ambos bit-dropdown (El normal y el múltiple).\r\n * Actualmente solo extendida por el dropdown normal, pendiente el múltiple que aún usa la interfaz ControlValueAccessor.\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n * @input filter: true indicará que podemos buscar dentro del select, false que no.\r\n **/\r\n@Directive()\r\nexport abstract class BitDropDownGeneralV2Component extends BitGeneralV2Component {\r\n @Input() hideLabel: boolean = false; // forzar no reservar espacio para el nombre del campo\r\n @Input() data: any[]; // lista de valores estáticos con lo que inicializamos el select\r\n @Input() id: any;\r\n @Input() excludedValues: any[];\r\n @Input() emptyText: string = \"bitnglibrary.bitdropdown.any\"; //valor por defecto seleccionable como primer elemento\r\n @Input() includeEmpty: boolean = true;\r\n\r\n listaOpciones: any[] = [];\r\n listaOpcionesVisible: any[] = [];\r\n valorActual: any; // solo se usa para hacer la transformación cuando es estrictamente necesario\r\n emptyTextResolved: string = \"\";\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected translateService: TranslateService\r\n ) {\r\n super(ayudaService);\r\n }\r\n\r\n // custom processing after retrieving data array from service\r\n postRetrieveData() {\r\n console.log(\"llamando a postRetrieveData para \" + this.nombre + \"{opciones:\" + this.listaOpciones + \"}\");\r\n if (this.listaOpciones) {\r\n this.listaOpcionesVisible = Object.assign([], this.listaOpciones);\r\n // repasamos si hay opciones a excluir que debamos eliminar\r\n if (this.excludedValues) {\r\n this.listaOpcionesVisible = this.listaOpcionesVisible.filter((op) => this.excludedValues.indexOf(op.value) < 0);\r\n }\r\n } else {\r\n this.listaOpcionesVisible = [];\r\n }\r\n // determinamos si debemos incluir la opción \"sin selección\" y con qué texto\r\n if (this.includeEmpty) {\r\n console.log(\"hay valor empty que hay que traducir para \" + this.nombre);\r\n this.translateService\r\n .selectTranslateWithContext(this.emptyText)\r\n .pipe(take(1))\r\n .subscribe((translation) => {\r\n console.log(\"se resuelve la traducción del emptyText para \" + this.nombre + \" con valor:\" + translation);\r\n this.listaOpcionesVisible.splice(0, 0, {value: null, label: translation});\r\n this.emptyTextResolved = translation;\r\n //console.log(\"la lista de opciones vale\", this.listaOpcionesVisible);\r\n });\r\n }\r\n }\r\n}\r\n ","import { Component, Input, OnChanges, SimpleChange } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { take } from \"rxjs/operators\";\r\n\r\nimport { AyudaService, SessionSharedService, TranslateService } from '../../../services';\r\nimport { BitDropDownGeneralV2Component } from \"./bit-dropdown-general-v2.component\";\r\n\r\n/**\r\n * Clase que utiliza un custom componente para select de elementos\r\n * <bit-dropdown [domain]=\"'DOMAIN_TIPO_LOG'\" id=\"tipolog\" [control]=\"formControl\"> Tipus d'operació</bit-dropdown>\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n * @input filter: true indicará que podemos buscar dentro del select, false que no.\r\n **/\r\n@Component({\r\n selector: \"bit-dropdown\",\r\n templateUrl: \"bit-dropdown.component.html\"\r\n})\r\nexport class BitDropDownComponent extends BitDropDownGeneralV2Component implements OnChanges {\r\n @Input() filter: boolean = false;\r\n @Input()\r\n atributoLabel = \"label\"; // El atributo de los objetos de la lista que corresponde al label\r\n @Input()\r\n atributoValue = \"value\"; // El atributo de los objetos de la lista que corresponde al valor\r\n @Input()\r\n atributoDisabled = \"inactivo\"; // El atributo de los objetos de la lista que indica si un valor está deshabilitado\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected translateService: TranslateService\r\n ) {\r\n super(router, sessionShared, ayudaService, translateService);\r\n }\r\n\r\n ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\r\n let hayCambios: boolean = false;\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"data\") {\r\n this.listaOpciones = changedProp.currentValue ? changedProp.currentValue.slice() : [];\r\n hayCambios = true;\r\n } else if (propName === \"excludedValues\") {\r\n this.excludedValues = changedProp.currentValue;\r\n hayCambios = true;\r\n } else if (propName === \"includeEmpty\") {\r\n this.includeEmpty = changedProp.currentValue;\r\n hayCambios = true;\r\n }\r\n }\r\n if (hayCambios) {\r\n this.postRetrieveData();\r\n }\r\n }\r\n\r\n // custom processing after retrieving data array from service\r\n postRetrieveData() {\r\n console.log(\"llamando a postRetrieveData para \" + this.nombre + \"{opciones:\" + this.listaOpciones + \"}\");\r\n if (this.listaOpciones) {\r\n this.listaOpcionesVisible = Object.assign([], this.listaOpciones);\r\n // repasamos si hay opciones a excluir que debamos eliminar\r\n if (this.excludedValues) {\r\n this.listaOpcionesVisible = this.listaOpcionesVisible.filter((op) => this.excludedValues.indexOf(op.value) < 0);\r\n }\r\n } else {\r\n this.listaOpcionesVisible = [];\r\n }\r\n // determinamos si debemos incluir la opción \"sin selección\" y con qué texto\r\n if (this.includeEmpty) {\r\n console.log(\"hay valor empty que hay que traducir para \" + this.nombre);\r\n this.translateService\r\n .selectTranslateWithContext(this.emptyText)\r\n .pipe(take(1))\r\n .subscribe((translation) => {\r\n let newOption = {value: null, label: translation };\r\n newOption[this.atributoValue] = null;\r\n newOption[this.atributoLabel] = translation;\r\n this.listaOpcionesVisible.splice(0, 0, newOption);\r\n this.emptyTextResolved = translation;\r\n //console.log(\"la lista de opciones vale\", this.listaOpcionesVisible);\r\n });\r\n }\r\n }\r\n\r\n get value_lectura(): string {\r\n let val = this.control.value;\r\n let dom = this.listaOpciones && this.listaOpciones.find((d) => d.value == val);\r\n return dom ? dom.label : null;\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> \r\n <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" (click)=\"showAyuda()\" class=\"btn-ayuda fa fa-question\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\" [id]=\"nombre\">{{value_lectura}}</p>\r\n<ng-container *ngIf=\"!readOnly && !!myForm\">\r\n<div [formGroup]=\"myForm\">\r\n <p-dropdown\r\n id=\"{{nombre}}\"\r\n [options]=\"listaOpcionesVisible\"\r\n [formControl]=\"control\"\r\n [filter]=\"filter\"\r\n \r\n [optionLabel]=\"atributoLabel\"\r\n [optionValue]=\"atributoValue\"\r\n [optionDisabled]=\"atributoDisabled\"\r\n \r\n (onFocus)=\"onFocus()\"\r\n (onBlur)=\"onBlur()\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <span [ngClass]=\"{'opcion-desactivada': item[atributoDisabled]}\">{{item[atributoLabel]}}</span>\r\n </ng-template>\r\n </p-dropdown>\r\n <control-messages *ngIf=\"control!=null\" [control]=\"control\" [field]=\"id\"></control-messages>\r\n</div>\r\n</ng-container>\r\n","import { Component, Input, OnChanges, SimpleChange } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\nimport { AyudaService, SessionSharedService, TranslateService } from '../../../services';\r\nimport { BitDropDownGeneralV2Component } from \"./bit-dropdown-general-v2.component\";\r\n\r\n/**\r\n * Clase que utiliza un custom componente para select múltiple de elementos\r\n * <bit-dropdown-multiple [domain]=\"'DOMAIN_TIPO_LOG'\" id=\"tipolog\" [control]=\"formControl\"\"> Tipus d'operació</bit-dropdown-multiple>\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-dropdown-multiple\",\r\n templateUrl: \"bit-dropdown-multiple.component.html\"\r\n})\r\nexport class BitDropDownMultipleComponent extends BitDropDownGeneralV2Component implements OnChanges {\r\n @Input() maxSelectedLabels: number = 3;\r\n @Input() showSeparateSelectedLabels: boolean = false; // indica si se muestran los elementos seleccionados en una columna separada\r\n @Input() title: string; //título que aparece en el link para eliminar un elemento una vez seleccionado\r\n @Input() filter: boolean;\r\n // Si se pueden seleccionar muchos elementos, que el label de los elementos seleccionados no\r\n // aparezca dentro del select, y hacerlo como una lista fuera del select.\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected translateService: TranslateService\r\n ) {\r\n super(router, sessionShared, ayudaService, translateService);\r\n }\r\n\r\n ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\r\n let hayCambios: boolean = false;\r\n for (let propName in changes) {\r\n let changedProp = changes[propName];\r\n if (propName === \"data\") {\r\n this.listaOpciones = changedProp.currentValue ? changedProp.currentValue.slice() : [];\r\n hayCambios = true;\r\n } else if (propName === \"excludedValues\") {\r\n this.excludedValues = changedProp.currentValue;\r\n hayCambios = true;\r\n } else if (propName === \"includeEmpty\") {\r\n this.includeEmpty = changedProp.currentValue;\r\n hayCambios = true;\r\n }\r\n }\r\n if (hayCambios) {\r\n this.postRetrieveData();\r\n }\r\n }\r\n\r\n labelSelectedItem(id): string {\r\n let label: string = \"\";\r\n if (this.listaOpciones) {\r\n let selected = this.listaOpciones.find((c) => c.value == id);\r\n if (selected) {\r\n label = selected.label;\r\n }\r\n }\r\n return label;\r\n }\r\n\r\n deleteSelectedItem(event, item) {\r\n event.preventDefault();\r\n let index = this.control.value.indexOf(item);\r\n var currentValue = this.control.value;\r\n currentValue.splice(index, 1);\r\n // se clona el array. Si no, el texto \"{0} elementos seleccionados\" del select de Prime no se actualiza.\r\n this.control.setValue(currentValue.slice(0));\r\n }\r\n\r\n get value_lectura(): string {\r\n let vals = this.control.value;\r\n if (!!vals) {\r\n let value: any[] = [];\r\n for (var val of vals) {\r\n let opcion = this.listaOpciones.find((d) => d.value == val);\r\n if (opcion) {\r\n value.push(opcion.label);\r\n }\r\n }\r\n return value.join(\", \");\r\n }\r\n return \"\";\r\n }\r\n}\r\n","<div class=\"row separador\" *ngIf=\"showSeparateSelectedLabels; else normalBitSelectMultiple\">\r\n <div> <!-- class=\"col-sm-4\"-->\r\n <ng-container *ngTemplateOutlet=\"normalBitSelectMultiple\"></ng-container>\r\n </div>\r\n <div><!-- elementos seleccionados -->\r\n <label> </label>\r\n <div class=\"multiselect-labels\">\r\n <div class=\"label label-primary multiselect-labels-lg\" *ngFor=\"let item of control.value\">\r\n <span>{{labelSelectedItem(item)}}</span>\r\n <ng-container *ngIf=\"!readOnly\">\r\n \r\n <a (click)=\"deleteSelectedItem($event, item)\" title=\"{{title}}\"><i class=\"fa fa-times\"></i></a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #normalBitSelectMultiple>\r\n <label *ngIf=\"!hideLabel\"><ng-content></ng-content> <span *ngIf=\"obligatorio\" class=\"fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" (click)=\"showAyuda()\" class=\"btn-ayuda fa fa-question\"></i>\r\n </label>\r\n <p *ngIf=\"readOnly && !showSeparateSelectedLabels\" class=\"lectura\">{{value_lectura}}</p>\r\n <div [formGroup]=\"myForm\" *ngIf=\"!readOnly\">\r\n <p-multiSelect\r\n id=\"{{id}}\"\r\n [options]=\"listaOpciones\"\r\n [formControl]=\"control\"\r\n \r\n [defaultLabel]=\"emptyTextResolved\"\r\n [maxSelectedLabels]=\"maxSelectedLabels\"\r\n selectedItemsLabel=\"{0} elements seleccionats\"\r\n (onFocus)=\"onFocus()\"\r\n (onBlur)=\"onBlur()\">\r\n </p-multiSelect>\r\n <control-messages *ngIf=\"control!=null\" [control]=\"control\" [field]=\"id\"></control-messages>\r\n </div>\r\n</ng-template>\r\n","export class ConfigurationEditor {\r\n fontFormat: boolean = true;\r\n fontSize: boolean = true;\r\n bullet: boolean = true;\r\n link: boolean = true;\r\n\r\n constructor() {}\r\n\r\n public static newObject(): ConfigurationEditor {\r\n return new ConfigurationEditor();\r\n }\r\n\r\n public static newCustomObject(object: any): ConfigurationEditor {\r\n let editor = new ConfigurationEditor();\r\n editor.fontFormat = object[\"fontFormat\"];\r\n editor.fontSize = object[\"fontSize\"];\r\n editor.bullet = object[\"bullet\"];\r\n editor.link = object[\"link\"];\r\n\r\n return editor;\r\n }\r\n}\r\n","import { Component, forwardRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { Input } from \"@angular/core\";\r\n\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { ConfigurationEditor } from \"../../../data/configuration-editor\";\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\n\r\nexport const CUSTOM_BITEDITOR_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BitEditorComponent),\r\n multi: true\r\n};\r\n\r\n/**\r\n * Clase que utiliza un custom componente para campo editor de HTML\r\n * Utiliza la interfaz ControlValueAccessor\r\n * <bit-editor [(ngModel)]=\"object.descripcion\" [ngModelOptions]=\"{standalone: true}\" height=\"250\"> Descripció</bit-editor>\r\n * Para utilizar, importar tambien js y css.\r\n *\r\n * https://www.primefaces.org/primeng/#/editor\r\n * https://quilljs.com/docs/modules/toolbar/\r\n *\r\n **/\r\n\r\n@Component({\r\n selector: \"bit-editor\",\r\n templateUrl: \"bit-editor.component.html\",\r\n providers: [CUSTOM_BITEDITOR_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class BitEditorComponent extends BitCustomComponent {\r\n @Input() tipo: string = \"default\";\r\n // si es \"custom\", se utiliza el objeto de configuracion: configuration.\r\n // si es \"default\", no se utiliza ninguna configuracion (se muestran todos los controles)\r\n @Input() configuration: ConfigurationEditor = BitEditorComponent.globalConfiguration;\r\n @Input() height: number = 100;\r\n\r\n // es posible tener configuraciones globales en todos los bit-editor de un proyecto\r\n public static globalConfiguration = ConfigurationEditor.newObject();\r\n\r\n constructor(protected ayudaService: AyudaService, protected changeDetectorRef: ChangeDetectorRef) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n get value_lectura(): string {\r\n if (this.value == null) {\r\n return \"\";\r\n } // si es null o undefined (es lo que evalúa el \"==null\")\r\n else {\r\n return this.value;\r\n }\r\n }\r\n\r\n onFocus() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n onInit(quill) {\r\n /*var toolbar = quill.editor.getModule('toolbar');\r\n toolbar.addHandler('link', function(value) {\r\n if (value) {\r\n var href = prompt('Introduzca la URL');\r\n this.quill.format('link', href);\r\n } else {\r\n this.quill.format('link', false);\r\n }\r\n });*/\r\n }\r\n\r\n get configuracion(): ConfigurationEditor {\r\n return this.configuration ? this.configuration : BitEditorComponent.globalConfiguration;\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> \r\n <span *ngIf=\"obligatorio\" class=\"obligatorio fa fa-asterisk\"></span> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda();\"></i>\r\n</label>\r\n<p *ngIf=\"readOnly\" class=\"lectura\">\r\n {{(value_lectura && value_lectura!='')?value_lectura:' '}}\r\n</p>\r\n<p-editor \r\n *ngIf=\"!readOnly && tipo=='custom'\" \r\n id=\"{{nombre}}\" \r\n name=\"{{nombre}}\"\r\n [(ngModel)]=\"value\"\r\n styleClass=\"editor\" \r\n [placeholder]=\"placeholder\" \r\n [style]=\"{'height':height+'px'}\" \r\n (onInit)=\"onInit($event)\">\r\n <p-header>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.fontSize\">\r\n <select class=\"ql-size\">\r\n <option value=\"small\">{{'bitnglibrary.form.biteditor.small' | transloco}}</option>\r\n <!-- Note a missing, thus falsy value, is used to reset to default -->\r\n <option selected>{{'bitnglibrary.form.biteditor.normal' | transloco}}</option>\r\n <option value=\"large\">{{'bitnglibrary.form.biteditor.large' | transloco}}</option>\r\n <option value=\"huge\">{{'bitnglibrary.form.biteditor.huge' | transloco}}</option>\r\n </select>\r\n </span>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.fontFormat\">\r\n <button class=\"ql-bold\" aria-label=\"Bold\"></button>\r\n <button class=\"ql-italic\" aria-label=\"Italic\"></button>\r\n <button class=\"ql-underline\" aria-label=\"Underline\"></button>\r\n <button class=\"ql-strike\" aria-label=\"Strikethrough\"></button>\r\n </span>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.bullet\">\r\n <button class=\"ql-list\" value=\"ordered\" type=\"button\"></button>\r\n <button class=\"ql-list\" value=\"bullet\" type=\"button\"></button>\r\n </span>\r\n <span class=\"ql-formats\" *ngIf=\"configuracion.link\">\r\n <button class=\"ql-link\" aria-label=\"Insert Link\" type=\"button\"></button>\r\n </span>\r\n </p-header>\r\n</p-editor>\r\n<!--(onTextChange)=\"changed($event)\"-->\r\n<p-editor \r\n *ngIf=\"!readOnly && (!tipo || tipo=='default')\" \r\n id=\"{{nombre}}\" \r\n name=\"{{nombre}}\" \r\n [(ngModel)]=\"value\"\r\n styleClass=\"editor\" \r\n [placeholder]=\"placeholder\" \r\n [style]=\"{'height':height+'px'}\">\r\n</p-editor>\r\n<control-messages *ngIf=\"control!=null\" [control]=\"control\" [field]=\"nombre\"></control-messages>","import { Component, Input, OnInit, OnChanges, ChangeDetectorRef, SimpleChanges } from \"@angular/core\";\r\nimport { AyudaService } from \"../../../services/ayuda.service\";\r\nimport { GeneralUtils, SessionSharedService } from \"../../../services\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\n@Component({\r\n selector: \"bit-readonly\",\r\n templateUrl: \"bit-readonly.component.html\"\r\n})\r\nexport class BitReadonlyComponent implements OnInit, OnChanges {\r\n @Input() ayuda: string;\r\n @Input() valor: any;\r\n @Input() tipo: string; // text (default), date, datetime, time, boolean, textarea, list, list-multiple\r\n @Input() hideLabel: boolean = false;\r\n @Input() data: any[]; //lista de valores estáticos con lo que inicializamos el select\r\n @Input() domain: string; //nombre del dominio del que queremos extraer los datos\r\n\r\n private opcionesDropdown: any[] = [];\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected changeDetectorRef: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (!!this.domain && !this.data) {\r\n this.router.data.subscribe(result => {\r\n let dominios = result[\"dominios\"];\r\n let domainTipo = dominios[this.domain];\r\n if (domainTipo != null) {\r\n domainTipo.subscribe(\r\n result => {\r\n //console.log(result);\r\n this.sessionShared.set(this.domain, result.slice()); // almacenamos en sesión una copia para evitar transmitir cambios\r\n this.opcionesDropdown = result.slice();\r\n this.changeDetectorRef.detectChanges();\r\n },\r\n error => {\r\n console.log(\"Error carrega dominis\", this.domain, error);\r\n }\r\n );\r\n } else {\r\n console.log(\"Domini sense dades\", this.domain);\r\n }\r\n });\r\n } else if (this.data) {\r\n this.opcionesDropdown = this.data.slice();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n for (let propName in changes) {\r\n if (propName === \"data\") {\r\n let newData: any[] = changes[propName].currentValue || [];\r\n this.opcionesDropdown = newData.slice();\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n }\r\n\r\n showAyuda() {\r\n this.ayudaService.mostrarAyuda(this.ayuda);\r\n }\r\n\r\n get value_lectura(): string {\r\n this.tipo = this.tipo || \"text\";\r\n switch (this.tipo) {\r\n case \"date\":\r\n return this.valor ? GeneralUtils.getDateAsString(GeneralUtils.stringShortToDate(this.valor)) : \"\";\r\n case \"datetime\":\r\n return this.valor ? GeneralUtils.getDateTimeAsString(GeneralUtils.stringToDate(this.valor)) : \"\";\r\n case \"time\":\r\n return this.valor ? GeneralUtils.getTimeAsString(GeneralUtils.stringToTime(this.valor)) : \"\";\r\n case \"boolean\":\r\n return this.valor ? \"Sí\" : \"No\";\r\n case \"list\":\r\n let d = this.opcionesDropdown.find(d => d.value == this.valor);\r\n return d ? d.label : \"\";\r\n case \"list-multiple\":\r\n let labels: any[] = this.opcionesDropdown && this.opcionesDropdown.filter(d => this.valor && this.valor.indexOf(d.value) > -1).map(d => d.label);\r\n return labels ? labels.join(\", \") : null;\r\n default:\r\n return this.valor;\r\n }\r\n }\r\n\r\n get isTextarea(): boolean {\r\n return this.tipo === \"textarea\";\r\n }\r\n}\r\n","<label *ngIf=\"!hideLabel\">\r\n <ng-content></ng-content> \r\n <i *ngIf=\"ayuda\" class=\"btn-ayuda fa fa-question\" (click)=\"showAyuda()\"></i>\r\n</label>\r\n<p *ngIf=\"!isTextarea\" class=\"lectura\">{{value_lectura}}</p>\r\n<pre *ngIf=\"isTextarea\" class=\"lectura\">{{value_lectura}}</pre>","import { Component, Output, EventEmitter, ContentChild, ElementRef, OnInit, TemplateRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { fromEvent, Subject } from \"rxjs\";\r\nimport { takeUntil, filter, take, switchMapTo } from \"rxjs/operators\";\r\n\r\nimport { BaseComponent } from \"../../../base/components/base.component\";\r\nimport { ViewModeDirective } from \"../../directives/view-mode.directive\";\r\nimport { EditModeDirective } from \"../../directives/edit-mode.directive\";\r\n\r\n/**\r\n * Componente que permite editar en linea valores\r\n */\r\n@Component({\r\n selector: \"bit-editable\",\r\n template: ` <ng-container *ngTemplateOutlet=\"currentView\"></ng-container> `\r\n})\r\nexport class BitEditableComponent extends BaseComponent implements OnInit {\r\n @Output() update = new EventEmitter();\r\n @ContentChild(ViewModeDirective) viewModeTpl: ViewModeDirective;\r\n @ContentChild(EditModeDirective) editModeTpl: EditModeDirective;\r\n\r\n editMode = new Subject();\r\n editMode$ = this.editMode.asObservable();\r\n mode: \"view\" | \"edit\" = \"view\";\r\n\r\n constructor(private host: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.viewModeHandler();\r\n this.editModeHandler();\r\n }\r\n\r\n /**alterna entre las dos vistas, la de visualización y la edición */\r\n get currentView(): TemplateRef<any> {\r\n return this.mode === \"view\" ? this.viewModeTpl.tpl : this.editModeTpl.tpl;\r\n }\r\n\r\n private get element(): any {\r\n return this.host.nativeElement;\r\n }\r\n\r\n /**Gestiona el dobleClick sobre el componente */\r\n viewModeHandler() {\r\n fromEvent(this.element, \"click\")\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n console.log(\"click on element\", this.element);\r\n this.mode = \"edit\";\r\n this.editMode.next(true); //emitimos el evento de que hemos pasado a edición\r\n this.changeDetectorRef.detectChanges(); //tenemos que activar el mecanismo de detección de cambios\r\n });\r\n }\r\n\r\n /**Gestiona hacer click fuera del componente. Solo se activa si estamos en modo edición */\r\n editModeHandler() {\r\n //observable cuando pulsan con el ratón en cualquier parte de la página\r\n const clickOutside$ = fromEvent(document, \"click\").pipe(\r\n filter(({ target }) => {\r\n //filtramos que el click no sea precisamente en el elemento que estamos editando\r\n return this.element.contains(target) === false;\r\n }),\r\n take(1)\r\n );\r\n //observable cuando pulsan enter en el input\r\n fromEvent(this.element, \"keyup\")\r\n .pipe(\r\n filter((e: any) => e.keyCode == 13),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((event) => {\r\n console.log(\"event enter pressed\");\r\n this.throwUpdate();\r\n });\r\n\r\n //cuando editMode se dispara, al hacer dobleclick el usuario, activamos el observable clickOutside para gestionar cuando\r\n //el usuario ha terminado de editar el componente\r\n this.editMode$.pipe(switchMapTo(clickOutside$), takeUntil(this.destroy$)).subscribe((event) => {\r\n console.log(\"event click outside\");\r\n this.throwUpdate();\r\n });\r\n }\r\n\r\n throwUpdate() {\r\n this.update.next();\r\n this.mode = \"view\";\r\n }\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { ReactiveFormsModule, FormsModule } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\nimport { TranslocoModule, TRANSLOCO_SCOPE } from \"@ngneat/transloco\";\r\n\r\nimport { CalendarModule } from \"primeng/calendar\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { DropdownModule } from \"primeng/dropdown\";\r\nimport { EditorModule } from \"primeng/editor\";\r\nimport { MultiSelectModule } from \"primeng/multiselect\";\r\nimport { PaginatorModule } from \"primeng/paginator\";\r\nimport { CheckboxModule } from \"primeng/checkbox\";\r\nimport { RadioButtonModule } from \"primeng/radiobutton\";\r\nimport { TabViewModule } from \"primeng/tabview\";\r\nimport { DialogModule } from \"primeng/dialog\";\r\nimport { AccordionModule } from \"primeng/accordion\";\r\nimport { AutoCompleteModule } from \"primeng/autocomplete\";\r\nimport { InputSwitchModule } from \"primeng/inputswitch\";\r\nimport { TooltipModule } from \"primeng/tooltip\";\r\nimport { OverlayPanelModule } from \"primeng/overlaypanel\";\r\nimport { MessagesModule } from \"primeng/messages\";\r\nimport { MenuModule } from \"primeng/menu\";\r\nimport { MenubarModule } from \"primeng/menubar\";\r\nimport { MegaMenuModule } from \"primeng/megamenu\";\r\nimport { TableModule } from \"primeng/table\";\r\nimport { DynamicDialogModule } from \"primeng/dynamicdialog\";\r\nimport { ToastModule } from \"primeng/toast\";\r\nimport { FileUploadModule } from \"ng2-file-upload\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { FocusRegisterDirective } from \"./directives/focus-register.directive\";\r\nimport { ViewModeDirective } from \"./directives/view-mode.directive\";\r\nimport { EditModeDirective } from \"./directives/edit-mode.directive\";\r\nimport { BitBreadCrumbComponent } from \"./components/breadcrumb/bit-breadcrumb.component\";\r\nimport { BitControlMessages } from \"./components/contol-messages/bit-control-messages.component\";\r\nimport { BitDialogComponent } from \"./components/dialog/bit-dialog.component\";\r\nimport { BitFooterComponent } from \"./components/footer/bit-footer.component\";\r\nimport { BitHeaderComponent } from \"./components/header/bit-header.component\";\r\nimport { BitHelpComponent } from \"./components/help/bit-help.component\";\r\nimport { BitLoadingComponent } from \"./components/loading/bit-loading.component\";\r\nimport { BitNotificationToastComponent } from \"./components/notificacion/bit-notification-toast.component\";\r\nimport { BitNotificationErrorComponent } from \"./components/notificacion/bit-notification-error.component\";\r\nimport { BitToolbarComponent } from \"./components/toolbar/bit-toolbar.component\";\r\nimport { BitNGUploadComponent } from \"./components/upload/bit-ng-upload.component\";\r\nimport { BitUserControlsComponent } from \"./components/user/bit-user-controls.component\";\r\nimport { BitBotonAyudaComponent } from \"./components/misc/bit-boton-ayuda.component\";\r\nimport { BitColumnBooleanComponent } from \"./components/misc/bit-column-boolean.component\";\r\nimport { BitDomainValueComponent } from \"./components/misc/bit-domain-value.component\";\r\nimport { CapitalizePipe } from \"./pipes/capitalize.pipe\";\r\nimport { OtherToolbarActionPipe } from \"./pipes/other-actions.pipe\";\r\nimport { PipeCantidadMoneda } from \"./pipes/pipe-cantidadmoneda.pipe\";\r\nimport { RemoveLineBreaksPipe } from \"./pipes/remove-line-breaks.pipe\";\r\nimport { BitTextComponent } from \"./components/form/text/bit-text.component\";\r\nimport { BitTextAreaComponent } from \"./components/form/textarea/bit-textarea.component\";\r\nimport { BitDateComponent } from \"./components/form/date/bit-date.component\";\r\nimport { BitTimeComponent } from \"./components/form/time/bit-time.component\";\r\nimport { BitDateTimeComponent } from \"./components/form/datetime/bit-datetime.component\";\r\nimport { BitCheckBoxComponent } from \"./components/form/checkbox/bit-checkbox.component\";\r\nimport { BitSwitchComponent } from \"./components/form/switch/bit-switch.component\";\r\nimport { BitAutoCompleteComponent } from \"./components/form/autocomplete/bit-autocomplete.component\";\r\nimport { BitDropDownComponent } from \"./components/form/dropdown/bit-dropdown.component\";\r\nimport { BitDropDownMultipleComponent } from \"./components/form/dropdown/bit-dropdown-multiple.component\";\r\nimport { BitEditorComponent } from \"./components/form/editor/bit-editor.component\";\r\nimport { BitReadonlyComponent } from \"./components/form/readonly/bit-readonly.component\";\r\nimport { BitEditableComponent } from \"./components/form/bit-editable.component\";\r\n\r\nconst modules: any[] = [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CalendarModule,\r\n DropdownModule,\r\n EditorModule,\r\n MultiSelectModule,\r\n PaginatorModule,\r\n CheckboxModule,\r\n RadioButtonModule,\r\n TabViewModule,\r\n DialogModule,\r\n MenuModule,\r\n MegaMenuModule,\r\n MenubarModule,\r\n TableModule,\r\n DynamicDialogModule,\r\n AccordionModule,\r\n AutoCompleteModule,\r\n InputSwitchModule,\r\n TooltipModule,\r\n OverlayPanelModule,\r\n MessagesModule,\r\n ToastModule,\r\n InputTextModule\r\n];\r\n\r\nexport const components: any[] = [\r\n BitBreadCrumbComponent,\r\n BitControlMessages,\r\n BitDialogComponent,\r\n BitFooterComponent,\r\n BitHeaderComponent,\r\n BitHelpComponent,\r\n BitLoadingComponent,\r\n BitNotificationToastComponent,\r\n BitNotificationErrorComponent,\r\n BitToolbarComponent,\r\n BitNGUploadComponent,\r\n BitUserControlsComponent,\r\n BitBotonAyudaComponent,\r\n BitColumnBooleanComponent,\r\n BitDomainValueComponent\r\n];\r\n\r\nexport const formComponents: any[] = [\r\n BitTextComponent,\r\n BitTextAreaComponent,\r\n BitDateComponent,\r\n BitTimeComponent,\r\n BitDateTimeComponent,\r\n BitCheckBoxComponent,\r\n BitSwitchComponent,\r\n BitAutoCompleteComponent,\r\n BitDropDownComponent,\r\n BitDropDownMultipleComponent,\r\n BitEditorComponent,\r\n BitReadonlyComponent,\r\n BitEditableComponent\r\n];\r\n\r\nexport const directives: any[] = [FocusRegisterDirective, ViewModeDirective, EditModeDirective];\r\n\r\nexport const pipes: any[] = [CapitalizePipe, OtherToolbarActionPipe, PipeCantidadMoneda, RemoveLineBreaksPipe];\r\n\r\n@NgModule({\r\n imports: [...modules, FileUploadModule, TranslocoModule],\r\n declarations: [...directives, ...components, ...formComponents, ...pipes],\r\n exports: [...modules, ...directives, ...pipes, ...components, ...formComponents],\r\n providers: [{ provide: TRANSLOCO_SCOPE, useValue: \"bitnglibrary\" }, MessageService]\r\n})\r\nexport class SharedLibraryModule {}\r\n","import { OnInit, Input, ChangeDetectorRef, Directive } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { take } from \"rxjs/operators\";\r\n\r\nimport { BitCustomComponent } from \"../bit-custom.component\";\r\nimport { AyudaService, TranslateService, SessionSharedService } from \"../../../services\";\r\n\r\n/**\r\n * Clase que utiliza un custom componente para select de elementos\r\n * Utiliza la interfaz ControlValueAccessor\r\n * <bit-select [domain]=\"'DOMAIN_TIPO_LOG'\" id=\"tipolog\" [control]=\"formControl\"> Tipus d'operació</bit-select>\r\n *\r\n * @input data: array de objetos a mostrar en el select. Puede ser null, en cuyo caso domain no puede ser null\r\n * @input domain: nombre del dominio que contiene los datos y que nos resolverá la página cuando cargue el componente. Puede ser null, en cuyo caso data no puede ser null\r\n * @input id: identificador del componente select\r\n * @input filter: true indicará que podemos buscar dentro del select, false que no.\r\n **/\r\n@Directive()\r\nexport abstract class BitDropDownGeneralComponent extends BitCustomComponent implements OnInit {\r\n @Input() hideLabel: boolean = false; // forzar no reservar espacio para el nombre del campo\r\n @Input() data: any[]; // lista de valores estáticos con lo que inicializamos el select\r\n @Input() valueAs: string; // indica si hay que transformar el valor de entrada a un tipo de dato: \"string\", \"number\"\r\n @Input() id: any;\r\n @Input() excludedValues: any[];\r\n @Input() emptyText: string = \"bitnglibrary.bitdropdown.any\"; //valor por defecto seleccionable como primer elemento\r\n @Input() includeEmpty: boolean = true;\r\n\r\n listaOpciones: any[] = [];\r\n listaOpcionesVisible: any[] = [];\r\n valorActual: any; // solo se usa para hacer la transformación cuando es estrictamente necesario\r\n emptyTextResolved: string = \"\";\r\n\r\n constructor(\r\n protected router: ActivatedRoute,\r\n protected sessionShared: SessionSharedService,\r\n protected ayudaService: AyudaService,\r\n protected changeDetectorRef: ChangeDetectorRef,\r\n protected translateService: TranslateService\r\n ) {\r\n super(ayudaService, changeDetectorRef);\r\n }\r\n\r\n /** Si se dan las condiciones, transforma los valores de number a string (o viceversa). */\r\n protected transformValue() {\r\n if (this.control.value !== this.valorActual) {\r\n if (!this.control.value || this.control.value.length === 0) {\r\n this.valorActual = this.control.value;\r\n }\r\n // si es necesario, realizamos la transformación y aplicamos el nuevo valor\r\n else if (this.valueAs === \"string\" && typeof this.control.value[0] !== \"string\") {\r\n this.valorActual = this.control.value.map(String);\r\n this.control.setValue(this.valorActual, {emitEvent: false});\r\n } else if (this.valueAs === \"number\" && typeof this.control.value[0] !== \"number\") {\r\n this.valorActual = this.control.value.map(Number);\r\n this.control.setValue(this.valorActual, {emitEvent: false});\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n }\r\n\r\n // custom processing after retrieving data array from service\r\n postRetrieveData() {\r\n console.log(\"llamando a postRetrieveData para \" + this.nombre + \"{opciones:\" + this.listaOpciones + \"}\");\r\n if (this.listaOpciones) {\r\n this.listaOpcionesVisible = Object.assign([], this.listaOpciones);\r\n // repasamos si hay opciones a excluir que debamos eliminar\r\n if (this.excludedValues) {\r\n this.listaOpcionesVisible = this.listaOpcionesVisible.filter((op) => this.excludedValues.indexOf(op.value) < 0);\r\n }\r\n } else {\r\n this.listaOpcionesVisible = [];\r\n }\r\n // determinamos si debemos incluir la opción \"sin selección\" y con qué texto\r\n if (this.includeEmpty) {\r\n console.log(\"hay valor empty que hay que traducir para \" + this.nombre);\r\n this.translateService\r\n .selectTranslateWithContext(this.emptyText)\r\n .pipe(take(1))\r\n .subscribe((translation) => {\r\n console.log(\"se resuelve la traducción del emptyText para \" + this.nombre + \" con valor:\" + translation);\r\n this.listaOpcionesVisible.splice(0, 0, {value: null, label: translation});\r\n this.emptyTextResolved = translation;\r\n //console.log(\"la lista de opciones vale\", this.listaOpcionesVisible);\r\n });\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n onFocus() {\r\n this.onTouchedCallback();\r\n }\r\n}\r\n","/**\r\n * Clase base que contiene la información que todos los objetos de datos pueden necesitar.\r\n */\r\nexport class Item {\r\n constructor(public id: number) {}\r\n}\r\n","import { Item } from \"./item\";\r\n\r\nexport class Fichero extends Item {\r\n constructor(\r\n public id: number,\r\n public nombre: string,\r\n public fileName: string,\r\n public mimeType: string,\r\n public tamano: number,\r\n public fechaModificacion: string,\r\n public tipoFichero: string,\r\n public observaciones: string\r\n ) {\r\n super(id);\r\n }\r\n\r\n public static newObject(): Fichero {\r\n return new Fichero(null, \"\", \"\", \"\", 0, \"\", null, \"\");\r\n }\r\n}\r\n","import { TranslatedMessage } from \"../../base/models\";\r\n\r\nexport class BitNotification {\r\n static INFO: string = \"info\";\r\n static WARN: string = \"warn\";\r\n static ERROR: string = \"error\";\r\n\r\n constructor(\r\n public title: TranslatedMessage,\r\n public message: TranslatedMessage,\r\n public severity: string = \"info\" //info, warn, error\r\n ) {}\r\n}\r\n","import { TranslatedMessage, ErrorValidateForm } from \"../../base/models\";\r\nimport { BitNotification } from \"./bitnotification\";\r\n\r\nexport class BitNotificationError extends BitNotification {\r\n constructor(public title: TranslatedMessage, public message: TranslatedMessage, public context?: string, public multipleErrors?: ErrorValidateForm[]) {\r\n super(title, message, BitNotification.ERROR);\r\n }\r\n}\r\n","import { CanDeactivate } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\nexport interface CanComponentDeactivate {\r\n canDeactivate: () => boolean | Observable<boolean>;\r\n}\r\n\r\n@Injectable()\r\nexport class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {\r\n canDeactivate(component: CanComponentDeactivate): Observable<boolean> | boolean {\r\n return component.canDeactivate ? component.canDeactivate() : true;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from \"@angular/common/http\";\r\nimport { Observable, throwError } from \"rxjs\";\r\nimport { catchError, finalize } from \"rxjs/operators\";\r\nimport { BitMessageService } from \"../services/message.service\";\r\nimport { GeneralUtils } from \"../services/general-utils.service\";\r\nimport { HttpUtilsService } from \"../services/http-utils.service\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class CustomHttpInterceptor implements HttpInterceptor {\r\n constructor(private bitMessageService: BitMessageService, private generalUtils: GeneralUtils) {\r\n console.log(\"construyendo el CustomHttpInterceptor\");\r\n }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n let url = request.url;\r\n console.log(\"interceptando la llamada http \" + url);\r\n this.generalUtils.startLoading();\r\n return next.handle(request).pipe(\r\n catchError((error: HttpErrorResponse) => {\r\n //this.store.dispatch(new AddGlobalError(error));\r\n console.log(\"error que nos retorna el server\", error);\r\n let customError = HttpUtilsService.getCustomError(error);\r\n console.log(\"custom error\", error);\r\n this.bitMessageService.sendError(customError);\r\n return throwError(error);\r\n }),\r\n finalize(() => {\r\n console.log(\"finalizando la llamada http\");\r\n this.generalUtils.stopLoading();\r\n })\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of bit-ng-library\r\n */\r\n\r\nexport * from \"./lib/base/components/base.component\";\r\nexport * from \"./lib/base/shared/base-interface.service\";\r\nexport * from \"./lib/base/shared/base.filter\";\r\nexport * from \"./lib/base/shared/base.service\";\r\nexport * from \"./lib/base/shared/utils\";\r\nexport * from \"./lib/base/models/base-list.models\";\r\nexport * from \"./lib/base/models/base-form.models\";\r\nexport * from \"./lib/base/models/base-sublist.models\";\r\nexport * from \"./lib/base/models/types\";\r\n\r\nexport * from \"./lib/sharedlibrary/sharedlibrary.module\";\r\n\r\nexport * from \"./lib/sharedlibrary/components/breadcrumb/bit-breadcrumb.component\";\r\nexport * from \"./lib/sharedlibrary/components/contol-messages/bit-control-messages.component\";\r\nexport * from \"./lib/sharedlibrary/components/dialog/bit-dialog.component\";\r\nexport * from \"./lib/sharedlibrary/components/footer/bit-footer.component\";\r\nexport * from \"./lib/sharedlibrary/components/header/bit-header.component\";\r\nexport * from \"./lib/sharedlibrary/components/help/bit-help.component\";\r\nexport * from \"./lib/sharedlibrary/components/loading/bit-loading.component\";\r\nexport * from \"./lib/sharedlibrary/components/notificacion/bit-notification-toast.component\";\r\nexport * from \"./lib/sharedlibrary/components/notificacion/bit-notification-error.component\";\r\nexport * from \"./lib/sharedlibrary/components/toolbar/bit-toolbar.component\";\r\nexport * from \"./lib/sharedlibrary/components/upload/bit-ng-upload.component\";\r\nexport * from \"./lib/sharedlibrary/components/user/bit-user-controls.component\";\r\nexport * from \"./lib/sharedlibrary/components/misc/bit-boton-ayuda.component\";\r\nexport * from \"./lib/sharedlibrary/components/misc/bit-column-boolean.component\";\r\nexport * from \"./lib/sharedlibrary/components/misc/bit-domain-value.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-custom.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-general.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-general-v2.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/calendar/bit-calendar.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown-general.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown-general-v2.component\";\r\n\r\nexport * from \"./lib/sharedlibrary/pipes/capitalize.pipe\";\r\nexport * from \"./lib/sharedlibrary/pipes/other-actions.pipe\";\r\nexport * from \"./lib/sharedlibrary/pipes/pipe-cantidadmoneda.pipe\";\r\nexport * from \"./lib/sharedlibrary/pipes/remove-line-breaks.pipe\";\r\n\r\nexport * from \"./lib/sharedlibrary/services\";\r\nexport * from \"./lib/sharedlibrary/services/ayuda.service\";\r\nexport * from \"./lib/sharedlibrary/services/custom-validators.service\";\r\nexport * from \"./lib/sharedlibrary/services/focus.service\";\r\nexport * from \"./lib/sharedlibrary/services/general-utils.service\";\r\nexport * from \"./lib/sharedlibrary/services/http-utils.service\";\r\nexport * from \"./lib/sharedlibrary/services/locator.service\";\r\nexport * from \"./lib/sharedlibrary/services/message.service\";\r\nexport * from \"./lib/sharedlibrary/services/session-shared.service\";\r\nexport * from \"./lib/sharedlibrary/services/tableview.service\";\r\nexport * from \"./lib/sharedlibrary/services/toolbar.service\";\r\nexport * from \"./lib/sharedlibrary/services/upload.service\";\r\nexport * from \"./lib/sharedlibrary/services/translate.service\";\r\nexport * from \"./lib/sharedlibrary/services/base-data-adapter.service\";\r\nexport * from \"./lib/sharedlibrary/services/base-data.service\";\r\nexport * from \"./lib/sharedlibrary/services/http-utils.service\";\r\n\r\nexport * from \"./lib/sharedlibrary/data/ayudacontextual\";\r\nexport * from \"./lib/sharedlibrary/data/bitmessage\";\r\nexport * from \"./lib/sharedlibrary/data/configuration-editor\";\r\nexport * from \"./lib/sharedlibrary/data/domain\";\r\nexport * from \"./lib/sharedlibrary/data/error\";\r\nexport * from \"./lib/sharedlibrary/data/fichero\";\r\nexport * from \"./lib/sharedlibrary/data/item\";\r\nexport * from \"./lib/sharedlibrary/data/bitnotification\";\r\nexport * from \"./lib/sharedlibrary/data/bitnotification-error\";\r\n\r\nexport * from \"./lib/sharedlibrary/directives/focus-register.directive\";\r\nexport * from \"./lib/sharedlibrary/directives/edit-mode.directive\";\r\nexport * from \"./lib/sharedlibrary/directives/view-mode.directive\";\r\n\r\nexport * from \"./lib/sharedlibrary/guards/candeactivate.guard\";\r\nexport * from \"./lib/sharedlibrary/global.constants\";\r\nexport * from \"./lib/sharedlibrary/utils/custom-http-interceptor\";\r\n\r\nexport * from \"./lib/sharedlibrary/components/form/text/bit-text.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/textarea/bit-textarea.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/date/bit-date.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/time/bit-time.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/datetime/bit-datetime.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/checkbox/bit-checkbox.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/switch/bit-switch.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/autocomplete/bit-autocomplete.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/editor/bit-editor.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/bit-editable.component\";\r\nexport * from \"./lib/sharedlibrary/components/form/readonly/bit-readonly.component\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Error","CustomError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAIsB,aAAa;IADnC;QAEE,aAAQ,GAAqB,IAAI,OAAO,EAAW,CAAC;KAMrD;IAJC,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KAC7B;;0GANmB,aAAa;8FAAb,aAAa;2FAAb,aAAa;kBADlC,SAAS;;;ACHV;;;;;SAKgB,aAAa,CAAC,OAAO,EAAE,IAAI;IACzC,IAAI,IAAI,GAAY,KAAK,CAAC;IAC1B,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK;QACvB,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;YACtB,IAAI,GAAG,IAAI,CAAC;SACb;KACF,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACpB;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;SAKgB,aAAa,CAAC,OAAO,EAAE,IAAI;IACzC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;SAMgB,MAAM,CAAC,GAAG,EAAE,IAAI;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC9C,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;SAKgB,MAAM,CAAC,GAAG,EAAE,IAAI;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC9C,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;SAWgB,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO;IACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhF,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAE/B,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aAClC;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;aAC3B;SACF;KACF;IAED,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;AACpC,CAAC;SAEe,wBAAwB,CAAC,MAAU;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SACvB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC9B,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SACrC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;MCzFa,oBAAoB,GAAW,GAAG;AAE/C;;;MAGsB,UAAU;IAkB9B,YAAmB,UAAkB,EAAS,MAAc;QAAzC,eAAU,GAAV,UAAU,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;KAAI;IAEzD,KAAK;QACV,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;KAC/B;;;;;IAMM,UAAU;QACf,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;KACf;IAEM,SAAS;QACd,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KACzB;;AAnCa,0BAAe,GAAW,oBAAoB,CAAC;AAC/C,eAAI,GAAW,CAAC,CAAC;AAqCjC;AAEA,IAAI,cAAsB,CAAC;AAC3B,IAAI,aAAqB,CAAC;AAE1B;;;;;;;;;;;;;SAagB,YAAY,CAAI,QAAa,EAAE,OAAe,EAAE,MAAkB,EAAE,aAAkB;IACpG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;QAC3D,cAAc,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC;QACzD,aAAa,GAAG,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,QAAQ,aAAa,EAAE,CAAC,CAAC;QACtE,OAAO,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAC5D;SAAM;QACL,OAAO,QAAQ,CAAC;KACjB;AACH,CAAC;AAED;;;;AAIA;;;;;;;;;;AAUA,SAAS,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK;;;;IAIzC,OAAO,KAAK,IAAI,cAAc,IAAI,KAAK,GAAG,aAAa,CAAC;AAC1D;;IChGY;AAAZ,WAAY,QAAQ;IAClB,2CAAM,CAAA;IACN,2CAAM,CAAA;IACN,2CAAM,CAAA;AACR,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;IACW;AAAZ,WAAY,UAAU;IACpB,2CAAI,CAAA;IACJ,qDAAS,CAAA;IACT,2DAAY,CAAA;IACZ,6CAAK,CAAA;IACL,mDAAQ,CAAA;IACR,6CAAK,CAAA;IACL,yDAAW,CAAA;AACb,CAAC,EARW,UAAU,KAAV,UAAU,QAQrB;MAEY,8BAA8B,GAAQ;IACjD,aAAa,EAAE,KAAK;IACpB,sBAAsB,EAAE,KAAK;IAC7B,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;;;ACXzB;;;;;MAKsB,eAAe;IAInC,YAAsB,iBAAoC,EAAY,IAAsB;QAAtE,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAY,SAAI,GAAJ,IAAI,CAAkB;KAAI;;IAGhG,IAAI,CAAI,MAAY,EAAE,IAAc,EAAE,MAAkC;QACtE,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC3B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAI,UAAU,EAAE,MAAM,CAAC,CAAC;SACrD;aAAM;YACL,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAI,UAAU,EAAE,MAAM,CAAC,CAAC;SACpD;KACF;;IAGD,UAAU,CAAI,MAAY,EAAE,MAAkC;QAC5D,OAAO,IAAI,CAAC,IAAI,CAAI,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9F;;IAGD,MAAM,CAAC,EAAU,EAAE,MAAkC;QACnD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;KAC5C;;IAGD,SAAS,CAAC,KAAe,EAAE,MAAkC;QAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACjD;;IAGD,GAAG,CAAI,EAAU,EAAE,MAAkC;QACnD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAI,UAAU,CAAC,CAAC;KAC5C;;IAGD,MAAM,CAAI,MAAkC;QAC1C,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAI,UAAU,CAAC,CAAC;KAC5C;;IAGD,cAAc,CAAI,MAAkB,EAAE,MAAkC;QACtE,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAI,UAAU,EAAE,MAAM,CAAC,CAAC;KACrD;;IAGD,gBAAgB,CAAC,MAAkB,EAAE,MAAkC;QACrE,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAS,UAAU,EAAE,MAAM,CAAC,CAAC;KAC1D;;;;;;IAOD,UAAU,CAAC,GAAW,EAAE,MAAiC;QACvD,IAAI,WAAW,GAAkB,EAAE,CAAC;QACpC,IAAI,MAAM,GAAG,GAAG,CAAC;QACjB,IAAI,MAAM,EAAE;YACV,KAAK,IAAI,GAAG,IAAI,MAAM;gBACpB,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBAC5B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC3C;SACJ;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACvC;iBAAM;gBACL,MAAM,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACvC;SACF;QACD,OAAO,MAAM,CAAC;KACf;;;MCnFU,eAAe;;;;;;;;;;;;;;;;IAgB1B,eAAe,CAAgC,UAAqC,EAAE,QAAc;QAClG,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC;YACE,MAAM,EAAE,UAAU,EAAE;YACpB,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;YACtC,MAAM,EAAE,UAAU,CAAC,IAAI;YACvB,QAAQ,EAAE,KAAK;SAChB,EACD,QAAQ,CACT,CAAC;QACF,OAAO,YAAY,CAAC;KACrB;;;;;;;IAQD,eAAe,CAAgC,OAAU,EAAE,KAAQ;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC;QACvB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;QACpC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACrD;;;;;;;;IASD,sBAAsB,CAAgC,OAAY,EAAE,KAAQ;QAC1E,MAAM,KAAK,GAAG,OAAO,CAAC;QACtB,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;QACvC,IAAI,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,KAAK;YACL,OAAO;YACP,MAAM;SACP,CAAC,CAAC;KACJ;;;;;;;;IASD,mBAAmB,CAAgC,KAAQ;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QAChC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,KAAK;YACL,OAAO;YACP,MAAM;SACP,CAAC,CAAC;KACJ;;;;;;;IAQD,WAAW,CAAgC,UAAkB,EAAE,KAAQ;QACrE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,UAAU;SACX,CAAC,CAAC;KACJ;;;;;;IAOD,gBAAgB,CAAgC,KAAQ;QACtD,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KACnC;;;;;;;IAQD,uBAAuB,CAAgC,OAAe,EAAE,KAAQ;QAC9E,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACzC;;;;;;IAOD,oBAAoB,CAAgC,KAAQ;QAC1D,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KACnC;;;;;;;IAQD,UAAU,CAAgC,OAAU,EAAE,KAAQ;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC;QACvB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;QACpC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,MAAM;YACN,MAAM;SACP,CAAC,CAAC;KACJ;;;;;;;;IASD,gBAAgB,CAAgC,OAAU,EAAE,KAAQ;QAClE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACxC;;;;;;;;IASD,uBAAuB,CAAgC,OAAU,EAAE,KAAQ;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACxC;;;;;;;IAQD,iBAAiB,CAAgC,OAAU,EAAE,KAAQ;QACnE,MAAM,MAAM,GAAG,OAAO,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,MAAM;SACP,CAAC,CAAC;KACJ;;;;;;IAOD,kBAAkB,CAAgC,OAAgB,EAAE,KAAQ;QAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SAC1D,CAAC,CAAC;KACJ;;;;;;;;;;;;IAaD,YAAY;QACV,OAAO;YACL,QAAQ,EAAE,CAAC,KAA0B,KAAK,KAAK,CAAC,KAAK;YACrD,SAAS,EAAE,CAAC,KAA0B,KAAK,KAAK,CAAC,MAAM;YACvD,SAAS,EAAE,CAAC,KAA0B,KAAK,KAAK,CAAC,MAAM;YACvD,UAAU,EAAE,CAAC,KAA0B,KAAK,KAAK,CAAC,OAAO;YACzD,aAAa,EAAE,CAAC,KAA0B,KAAK,KAAK,CAAC,UAAU;SAChE,CAAC;KACH;CACF;SAEe,eAAe,CAAC,QAAiB,EAAE,MAAe;IAChE,IAAI,OAAO,GAAG;QACZ,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QACxC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;KAC1C,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;KAC5E;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;SACgB,qBAAqB;IACnC,OAAO,IAAI,eAAe,EAAE,CAAC;AAC/B;;MCxNa,eAAe;IAC1B,YAAsB,cAAyC,EAAY,wBAAkD;QAAvG,mBAAc,GAAd,cAAc,CAA2B;QAAY,6BAAwB,GAAxB,wBAAwB,CAA0B;KAAI;IAEjI,eAAe,CAA6B,QAAc;QACxD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC;YACE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE;YAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;YAC3B,MAAM,EAAE,UAAU,CAAC,IAAI;YACvB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;SACf,EACD,QAAQ,CACT,CAAC;QACF,OAAO,YAAY,CAAC;KACrB;IAED,kBAAkB,CAA6B,KAAQ;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,IAAI;YACJ,MAAM;YACN,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;KACJ;IAED,gBAAgB,CAA6B,KAAQ;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACrD;IAED,uBAAuB,CAA6B,OAAU,EAAE,KAAQ;QACtE,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,OAAO,CAAC;QACZ,IAAI,QAAQ,CAAC;QACb,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC9C,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,IAAI;YACJ,MAAM;YACN,OAAO;YACP,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;KACJ;IAED,gBAAgB,CAA6B,KAAQ;QACnD,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;KAC9C;IAED,uBAAuB,CAA6B,OAAU,EAAE,KAAQ;QACtE,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,IAAI,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;KAC/E;IAED,oBAAoB,CAA6B,KAAQ;QACvD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;KACtD;IAED,qBAAqB,CAA6B,OAAgB,EAAE,KAAQ;QAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC;QACzB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC/C;IAED,YAAY;QACV,OAAO;YACL,OAAO,EAAE,CAAC,KAAuB,KAAK,KAAK,CAAC,IAAI;YAChD,UAAU,EAAE,CAAC,KAAuB,MAAM,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9E,SAAS,EAAE,CAAC,KAAuB,KAAK,KAAK,CAAC,MAAM;YACpD,WAAW,EAAE,CAAC,KAAuB,KAAK,KAAK,CAAC,QAAQ;YACxD,aAAa,EAAE,CAAC,KAAuB,KAAK,KAAK,CAAC,UAAU;YAC5D,WAAW,EAAE,CAAC,KAAuB,KAAK,KAAK,CAAC,QAAQ;YACxD,SAAS,EAAE,CAAC,KAAuB,KAAK,KAAK,CAAC,MAAM;YACpD,UAAU,EAAE,CAAC,KAAuB,KAAK,KAAK,CAAC,OAAO;SACvD,CAAC;KACH;IAED,WAAW;QACT,OAAO,cAAc,EAAE,CAAC;KACzB;CACF;SAEe,qBAAqB,CAAI,cAAyC,EAAE,wBAAkD;IACpI,OAAO,IAAI,eAAe,CAAC,cAAc,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,6BAA6B,CAAC,CAAC;AAClI,CAAC;SAEe,cAAc;IAC5B,OAAO;;QAEL,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACrC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QACxC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;KACzC,CAAC;AACJ,CAAC;SAEe,6BAA6B;IAC3C,OAAO;QACL,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACrC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACvC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;KACvC,CAAC;AACJ,CAAC;AAaD;SACgB,eAAe,CAAC,QAAkB,EAAE,UAAmB;IACrE,QAAQ,QAAQ;QACd,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACpD,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO;gBACL,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;gBAC3C,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;gBACxC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;aACzC,CAAC;QACJ,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO;gBACL,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;gBAC3C,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;gBACvC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;aACvC,CAAC;QACJ;YACE,OAAO,EAAE,CAAC;KACb;AACH;;MCvJa,oBAAoB;IAG/B,YAAY,IAAU;QACpB,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAI,IAAI,CAAC,CAAC;KAC7C;IAED,eAAe,CAAkC,QAAmC,EAAE,QAAc;QAClG,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC;YACE,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC;YACpC,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,YAAY,EAAE,QAAQ,EAAE;YACxB,gBAAgB,EAAE,KAAK;YACvB,aAAa,EAAE,EAAE;SAClB,EACD,QAAQ,CACT,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;KACnD;IAED,gBAAgB,CAAkC,OAAY,EAAE,KAAQ;QACtE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAC5C;IAED,eAAe,CAAkC,KAAQ;QACvD,MAAM,gBAAgB,GAAG,KAAK,CAAC;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,gBAAgB;SACjB,CAAC,CAAC;KACJ;IAED,cAAc,CAAkC,OAAU,EAAE,QAAkB,EAAE,KAAQ;QACtF,MAAM,gBAAgB,GAAG,IAAI,CAAC;QAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC;QAC/B,MAAM,YAAY,GAAG,OAAO,CAAC;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,gBAAgB;YAChB,aAAa;YACb,YAAY;SACb,CAAC,CAAC;KACJ;IAED,mBAAmB,CAAkC,OAAiB,EAAE,KAAQ;QAC9E,IAAI,OAAO,CAAC;QACZ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;SACtC;aAAM;YACL,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;SACvC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;YAC9B,OAAO;YACP,aAAa;SACd,CAAC,CAAC;KACJ;IAED,cAAc,CAAkC,OAAU,EAAE,KAAQ;QAClE,MAAM,gBAAgB,GAAG,KAAK,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE;YACjC,gBAAgB;SACjB,CAAC,CAAC;KACJ;IAED,iBAAiB,CAAkC,OAAiB,EAAE,KAAQ;QAC5E,MAAM,gBAAgB,GAAG,KAAK,CAAC;QAC/B,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE;YACjC,gBAAgB;YAChB,OAAO;YACP,aAAa;SACd,CAAC,CAAC;KACJ;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;IAED,YAAY;QACV,OAAO;YACL,UAAU,EAAE,CAAC,KAA4B,KAAK,KAAK,CAAC,OAAO;YAC3D,iBAAiB,EAAE,CAAC,KAA4B,KAAK,KAAK,CAAC,aAAa;YACxE,eAAe,EAAE,CAAC,KAA4B,KAAK,KAAK,CAAC,YAAY;YACrE,mBAAmB,EAAE,CAAC,KAA4B,KAAK,KAAK,CAAC,gBAAgB;YAC7E,gBAAgB,EAAE,CAAC,KAA4B,KAAK,KAAK,CAAC,aAAa;SACxE,CAAC;KACH;CACF;SAEe,0BAA0B;IACxC,OAAO,IAAI,oBAAoB,EAAE,CAAC;AACpC,CAAC;SAEe,oBAAoB,CAAC,YAAqB;IACxD,OAAO;QACL,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;QACpC,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;KACxD,CAAC;AACJ;;IC5GY;AAAZ,WAAY,YAAY;IACtB,4CAA4B,CAAA;IAC5B,4CAA4B,CAAA;IAC5B,kDAAkC,CAAA;IAClC,gDAAgC,CAAA;IAChC,oDAAoC,CAAA;IACpC,oDAAoC,CAAA;IACpC,oDAAoC,CAAA;IACpC,sDAAsC,CAAA;IACtC,sEAAsD,CAAA;IACtD,sEAAsD,CAAA;IACtD,0DAA0C,CAAA;IAC1C,kDAAkC,CAAA;IAClC,wDAAwC,CAAA;IACxC,oDAAoC,CAAA;IACpC,sDAAsC,CAAA;AACxC,CAAC,EAhBW,YAAY,KAAZ,YAAY;;ACTxB;;;MAIa,YAAY;IADzB;;QAGU,YAAO,GAAW,MAAM,CAAC;KAgBlC;IAdC,KAAK,CAAC,EAAU;;QAEd,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;KACnB;IAED,KAAK;;QAEH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;KAC1B;IAED,iBAAiB;;QAEf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;;yGAjBU,YAAY;6GAAZ,YAAY,cADC,MAAM;2FACnB,YAAY;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,sBAAsB;IACjC,YAAoB,KAAiB,EAAU,QAAmB,EAAU,YAA0B;QAAlF,UAAK,GAAL,KAAK,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAW;QAAU,iBAAY,GAAZ,YAAY,CAAc;KAAI;IAEnF,OAAO;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;KACtD;IAEqB,MAAM;QAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;KAC3B;;mHATU,sBAAsB;uGAAtB,sBAAsB;2FAAtB,sBAAsB;kBAHlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,4CAA4C;iBACvD;iJAIwB,OAAO;sBAA7B,YAAY;uBAAC,OAAO;gBAIC,MAAM;sBAA3B,YAAY;uBAAC,MAAM;;;MCTT,iBAAiB;IAC5B,YAAmB,GAAqB;QAArB,QAAG,GAAH,GAAG,CAAkB;KAAI;;8GADjC,iBAAiB;kGAAjB,iBAAiB;2FAAjB,iBAAiB;kBAH7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,YAAY;iBACvB;;;MCCY,iBAAiB;IAC5B,YAAmB,GAAqB;QAArB,QAAG,GAAH,GAAG,CAAkB;KAAI;;8GADjC,iBAAiB;kGAAjB,iBAAiB;2FAAjB,iBAAiB;kBAH7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,YAAY;iBACvB;;;ACDD;;;;;;;;;;;MAyBa,sBAAsB;IAGjC,YAAsB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;KAAI;;IAGxC,QAAQ;QACN,IAAI,IAAI,CAAC,EAAE,IAAI,SAAS;YAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC;YAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;KACvD;;IAGD,SAAS,CAAC,IAAS;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SAC/C;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAClC;QACD,OAAO,KAAK,CAAC;KACd;;mHAnBU,sBAAsB;uGAAtB,sBAAsB,4FAVvB;;;;;;;GAOT;2FAGU,sBAAsB;kBAblC,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;;;;GAOT;;iBAEF;6FAEsB,EAAE;sBAAtB,KAAK;uBAAC,YAAY;;;MC7BR,eAAe;IAC1B,YAAmB,GAAW,EAAS,MAAc,EAAS,KAAa,EAAS,IAAY;QAA7E,QAAG,GAAH,GAAG,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAQ;KAAI;IAE7F,OAAO,SAAS,CAAC,GAAG;QACzB,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;KACjG;;;MCAU,YAAY;IAOvB;QANO,YAAO,GAAkC,IAAI,YAAY,EAAmB,CAAC;QAOlF,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;;IAGO,UAAU;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QACrD,IAAI,YAAY,CAAC,MAAM,EAAE;YACvB,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;gBAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAChE,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,sBAAsB,CAAC,CAAC;SACrE;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;SACnF;KACF;IAED,YAAY,CAAC,GAAW;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC7C;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,kCAAkC,GAAG,GAAG,CAAC,CAAC;SACxD;KACF;;AA3Ba,mBAAM,GAAG,EAAG,CAAA;yGAHf,YAAY;6GAAZ,YAAY,cADC,MAAM;2FACnB,YAAY;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCJrB,MAAM;IAEjB,YAAmB,KAAa,EAAS,KAAa,EAAS,QAAkB;QAA9D,UAAK,GAAL,KAAK,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAU;KAAI;;AADvE,YAAK,GAAW,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC;;MCMvD,YAAY;IAQvB;QAHQ,4BAAuB,GAAG,IAAI,OAAO,EAAU,CAAC;QAItD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,CAAC;KACtE;IAEM,YAAY;QACjB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5C;IAEM,WAAW;QAChB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3C;IAEM,OAAO,qBAAqB,CAAC,GAAW;QAC7C,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1D;IAEM,OAAO,YAAY,CAAC,KAAa;QACtC,IAAI,KAAK,GAAG,EAAE,EAAE;YACd,OAAO,GAAG,GAAG,KAAK,CAAC;SACpB;aAAM;YACL,OAAO,EAAE,GAAG,KAAK,CAAC;SACnB;KACF;IAEM,OAAO,cAAc,CAAC,QAAsB;QACjD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;YACxB,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;YACjB,IAAI,IAAI,GAAG,CAAC;SACb;QACD,OAAO,IAAI,CAAC;KACb;;IAGM,OAAO,gBAAgB,CAAC,MAAc;QAC3C,IAAI,QAAQ,GAAQ,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC5B,KAAK,IAAI,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;oBAC9B,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;iBAC9B;aACF;iBAAM;gBACL,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/B;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;KACjB;IAEM,OAAO,mBAAmB,CAAC,GAAQ;QACxC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,CAAC,MAAM;YAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;QAClC,IAAI,GAAG,CAAC,SAAS;YAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC;QACtE,IAAI,GAAG,CAAC,SAAS;YAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC;QACtE,OAAO,GAAG,CAAC;KACZ;IAEM,OAAO,gBAAgB,CAAC,SAAiB,YAAY,CAAC,iBAAiB;QAC5E,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC1C;IAEM,OAAO,eAAe,CAAC,KAAW,EAAE,SAAiB,YAAY,CAAC,iBAAiB;QACxF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACrC;IAEM,OAAO,eAAe,CAAC,KAAa,EAAE,SAAiB,YAAY,CAAC,iBAAiB;QAC1F,OAAO,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;KACvC;IAEM,OAAO,mBAAmB,CAAC,KAAW,EAAE,SAAiB,YAAY,CAAC,gBAAgB;QAC3F,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACrC;IAEM,OAAO,eAAe,CAAC,KAAW,EAAE,SAAiB,YAAY,CAAC,iBAAiB;QACxF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACrC;IAEM,OAAO,YAAY,CAAC,OAAe;QACxC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;KACjC;IAEM,OAAO,iBAAiB,CAAC,OAAe;QAC7C,OAAO,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;KAC/C;IAEM,OAAO,YAAY,CAAC,OAAe;QACxC,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;KAC1C;IAEM,OAAO,qBAAqB,CAAC,KAAa;QAC/C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;KAC7D;IAEM,OAAO,iBAAiB,CAAC,SAAiB,CAAC;QAChD,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;KAC5E;IAEM,OAAO,yBAAyB;QACrC,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;KACzE;IAEM,OAAO,wBAAwB;QACpC,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;KACvE;IAEM,OAAO,+BAA+B,CAAC,WAAmB,EAAE,QAAgB;QACjF,IAAI,WAAW,IAAI,QAAQ,EAAE;YAC3B,OAAO,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;SAC/F;QACD,OAAO,KAAK,CAAC;KACd;IAEM,OAAO,wBAAwB,CAAC,UAAkB,EAAE,OAAe;QACxE,IAAI,UAAU,IAAI,OAAO,EAAE;YACzB,OAAO,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SACnF;QACD,OAAO,KAAK,CAAC;KACd;IAEM,OAAO,YAAY,CAAC,KAAa,EAAE,WAAmB,EAAE,QAAgB;QAC7E,IAAI,KAAK,EAAE;YACT,IAAI,SAAS,GAAG,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,MAAM,GAAG,EACX,CAAC,WAAW,IAAI,SAAS,GAAG,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC;iBACtE,QAAQ,IAAI,SAAS,GAAG,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CACnE,CAAC;YACF,OAAO,MAAM,CAAC;SACf;QACD,OAAO,KAAK,CAAC;KACd;IAEM,OAAO,cAAc,CAAC,KAAY,EAAE,KAAc;QACvD,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;IAEM,OAAO,aAAa,CAAC,IAAc,EAAE,EAAU;QACpD,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;YAClB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE;gBAClB,OAAO,CAAC,CAAC,KAAK,CAAC;aAChB;SACF;QACD,OAAO,GAAG,CAAC;KACZ;;AAvJa,8BAAiB,GAAG,YAAa,CAAA;AACjC,6BAAgB,GAAG,kBAAmB,CAAA;AACtC,8BAAiB,GAAG,OAAQ,CAAA;AAC5B,sCAAyB,GAAG,UAAW,CAAA;yGAJ1C,YAAY;6GAAZ,YAAY,cADC,MAAM;2FACnB,YAAY;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACAlC;;;;;;;SAOgB,sBAAsB,CAAC,IAAY,EAAE,OAAe,EAAE,MAAW;IAC/E,IAAI,iBAAiB,GAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrE,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;MAEa,gBAAgB;IAI3B,YAAoB,gBAAkC,EAAsC,kBAAkB,IAAI;QAA9F,qBAAgB,GAAhB,gBAAgB,CAAkB;QAAsC,oBAAe,GAAf,eAAe,CAAO;;QAEhH,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KAC3D;;;;;IAMD,0BAA0B,CAAC,GAAW;QACpC,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;YACf,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;KACjD;IAED,eAAe,CAAC,GAAoB,EAAE,MAAgB,EAAE,IAA8B,EAAE,SAAmB;QACzG,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;KAC5E;IAED,qBAAqB,CAAC,GAAW,EAAE,MAAgB,EAAE,IAAa;QAChE,OAAO,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACvE;IAED,aAAa,CAAC,IAAY;QACxB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;KACb;IAED,aAAa;QACX,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;KACb;;6GA7CU,gBAAgB,oDAIqC,kBAAkB;iHAJvE,gBAAgB,cADH,MAAM;2FACnB,gBAAgB;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;8BAKyB,MAAM;+BAAC,kBAAkB;;;;MCnBvE,gBAAgB;IA0D3B,OAAO,iBAAiB,CAAC,IAAY,EAAE,MAAW;QAChD,OAAO,sBAAsB,CAAC,gBAAgB,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;KAChF;IAED,OAAO,wBAAwB,CAAC,IAAY;QAC1C,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACtC;;IAGD,OAAO,OAAO,CAAC,UAAsB;QACnC,IAAI,MAAM,GAAG,UAAU,CAAY;;YAEjC,IAAI,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3H,OAAO,WAAW,CAAC;SACpB,CAAC;QACF,OAAO,MAAM,CAAC;KACf;IAED,OAAO,QAAQ,CAAC,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClB,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;SACzB;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;;IAID,OAAO,aAAa,CAAC,OAAO;;QAE1B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,yDAAyD,CAAC,EAAE;YACpG,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;SAC5B;KACF;IAED,OAAO,aAAa,CAAC,OAAO;;QAE1B,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,EAAE;YACvF,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;SAC5B;KACF;IAED,OAAO,cAAc,CAAC,OAAO;;QAE3B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAC,CAAC;SACpC;KACF;IAED,OAAO,iBAAiB,CAAC,OAAO;;QAE9B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,uEAAuE,CAAC,EAAE;YAClH,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,sBAAsB,EAAE,IAAI,EAAC,CAAC;SACvC;KACF;IAED,OAAO,cAAc,CAAC,OAAO;QAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;YAC9D,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC;SAC7B;KACF;IAED,OAAO,iBAAiB,CAAC,OAAO;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;YAC5D,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,eAAe,EAAE,IAAI,EAAC,CAAC;SAChC;KACF;IAED,OAAO,eAAe,CAAC,OAAO;QAC5B,IACE,CAAC,OAAO,CAAC,KAAK;YACd,gHAAgH,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EACpI;YACA,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;SAC5B;KACF;IAED,OAAO,eAAe,CAAC,OAAO;QAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YACvD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC;SAC9B;KACF;IAED,OAAO,qBAAqB,CAAC,OAAO;QAClC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE;YACjE,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAC,CAAC;SACpC;KACF;IAED,OAAO,iBAAiB,CAAC,OAAO;;QAE9B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YAC1C,OAAO,IAAI,CAAC;SACb;QACD,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;QACD,OAAO,EAAC,eAAe,EAAE,IAAI,EAAC,CAAC;KAChC;;IAGD,OAAO,uBAAuB,CAAC,OAAO;;QAEpC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YAC1C,OAAO,IAAI,CAAC;SACb;QACD,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC;SACb;QACD,OAAO,EAAC,qBAAqB,EAAE,IAAI,EAAC,CAAC;KACtC;IAED,OAAO,2CAA2C,CAAC,OAAO;;QAExD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YAC1C,OAAO,IAAI,CAAC;SACb;QACD,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC;SACb;QACD,OAAO,EAAC,gCAAgC,EAAE,IAAI,EAAC,CAAC;KACjD;;IAGD,OAAO,wBAAwB,CAAC,OAAO;;QAErC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;YAC3E,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,sBAAsB,EAAE,IAAI,EAAC,CAAC;SACvC;KACF;;IAGD,OAAO,uBAAuB,CAAC,OAAO;QACpC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;YAC3G,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,qBAAqB,EAAE,IAAI,EAAC,CAAC;SACtC;KACF;;IAGD,OAAO,qBAAqB,CAAC,OAAO;QAClC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;YACtF,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAC,CAAC;SACpC;KACF;;IAGD,OAAO,iBAAiB,CAAC,OAAO;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iDAAiD,CAAC,EAAE;YAC5F,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,eAAe,EAAE,IAAI,EAAC,CAAC;SAChC;KACF;;IAGD,OAAO,oBAAoB,CAAC,OAAO;QACjC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE;YAC1E,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAC,CAAC;SACnC;KACF;IAED,OAAO,sBAAsB,CAAC,GAAW;QACvC,IAAI,QAAQ,GAAG,iBAAiB,CAAC;QACjC,IAAI,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrD,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;QAClG,OAAO,CAAC,OAAO;YACb,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE;gBACjD,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;gBAC1B,OAAO,GAAG,CAAC;aACZ;SACF,CAAC;KACH;IAED,OAAO,yBAAyB,CAAC,GAAW;QAC1C,IAAI,QAAQ,GAAG,oBAAoB,CAAC;QACpC,IAAI,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrD,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;QAClG,OAAO,CAAC,OAAO;YACb,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/D,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE;;gBAE5B,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;gBAC1B,OAAO,GAAG,CAAC;aACZ;SACF,CAAC;KACH;IAED,OAAO,yBAAyB,CAAC,GAAW;QAC1C,IAAI,QAAQ,GAAG,oBAAoB,CAAC;QACpC,IAAI,aAAa,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpD,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;QAClG,OAAO,CAAC,OAAO;YACb,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/D,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE;;gBAE5B,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;gBAC1B,OAAO,GAAG,CAAC;aACZ;SACF,CAAC;KACH;IAED,OAAO,4BAA4B,CAAC,GAAW,EAAE,GAAW;QAC1D,IAAI,QAAQ,GAAG,uBAAuB,CAAC;QACvC,IAAI,aAAa,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3E,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YACpF,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;QACH,OAAO,CAAC,OAAO;YACb,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/D,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;gBAC3C,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;gBAC1B,OAAO,GAAG,CAAC;aACZ;SACF,CAAC;KACH;IAED,OAAO,mBAAmB,CAAC,OAAO;;QAEhC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YAC1C,OAAO,IAAI,CAAC;SACb;aAAM;YACL,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE;gBACnC,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,OAAO,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC;aAClC;SACF;KACF;IAED,OAAO,YAAY,CAAC,OAAO;QACzB,IAAI,OAAO,GAAG,IAAI,MAAM,CACtB,mBAAmB;YACnB,mDAAmD;YACnD,6BAA6B;YAC7B,iCAAiC;YACjC,0BAA0B;YAC1B,oBAAoB,EACpB,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;SAC3B;KACF;IAED,OAAO,aAAa,CAAC,OAAO;QAC1B,IAAI,OAAO,GAAG,IAAI,MAAM,CACtB,2BAA2B;YAC3B,0BAA0B;YAC1B,oBAAoB,EACpB,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;SAC5B;KACF;;;;IAKD,OAAO,YAAY,CAAC,IAAe,EAAE,SAAmB,EAAE;QACxD,IAAI,QAAQ,GAAwB,EAAE,CAAC;;QAEvC,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;YAChC,IAAI,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC;SAClF;QAED,KAAK,IAAI,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE;YACpC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;gBAElB,IAAI,YAAY,GAAa,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;;gBAGzD,IAAI,OAAO,YAAY,SAAS,EAAE;;oBAEhC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;iBAClF;qBAAM,IAAI,OAAO,YAAY,WAAW,EAAE;;oBAEzC,KAAK,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE;wBACnC,QAAQ,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC;qBAC1F;iBACF;qBAAM,IAAI,OAAO,YAAY,SAAS,EAAE;;oBAEvC,OAAO,CAAC,QAAQ;wBAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK;4BACzC,IAAI,eAAe,GAAa,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;4BACxE,IAAI,UAAU,YAAY,SAAS,EAAE;;gCAEnC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;6BACxF;iCAAM,IAAI,UAAU,YAAY,WAAW,EAAE;;gCAE5C,KAAK,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE;oCACnC,QAAQ,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC;iCAC7F;6BACF;iCAAM;;gCAEL,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;6BAC/E;yBACF,CAAC,CAAC;iBACJ;aACF;SACF;QACD,OAAO,QAAQ,CAAC;KACjB;;;;;IAMD,OAAO,6BAA6B,CAAC,EAAC,SAAS,GAAG,eAAe,EAAE,WAAW,GAAG,iBAAiB,EAAC,GAAG,EAAE;QACtG,IAAI,MAAM,GAAG,UAAU,CAAY;YACjC,IAAI,CAAC,CAAC,EAAE;gBACN,OAAO,IAAI,CAAC;aACb;YACD,IAAI,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;YAC/D,IAAI,eAAe,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YAC1E,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,aAAa,IAAI,eAAe,EAAE;gBACpC,IAAI,aAAa,IAAI,KAAK,EAAE;oBAC1B,OAAO,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;iBACzD;qBAAM,IAAI,aAAa,IAAI,KAAK,EAAE;oBACjC,OAAO,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;iBACzD;qBAAM,IAAI,aAAa,IAAI,KAAK,EAAE;;oBAEjC,OAAO,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;iBACzD;qBAAM,IAAI,aAAa,IAAI,KAAK,EAAE;oBACjC,OAAO,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;iBACzD;aACF;YAED,IAAI,OAAO,EAAE;gBACX,OAAO,EAAC,mCAAmC,EAAE,IAAI,EAAC,CAAC;aACpD;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;SACF,CAAC;QACF,OAAO,MAAM,CAAC;KACf;IAED,OAAO,YAAY,CAAC,OAAO;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;SAC3B;KACF;IAED,OAAO,YAAY,CAAC,OAAO;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;SAC3B;KACF;IAED,OAAO,eAAe,CAAC,OAAO;QAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC9G,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC;SAC9B;KACF;IAED,OAAO,YAAY,CAAC,OAAO;QACzB,IAAI,OAAO,GAAG,IAAI,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;SAC3B;KACF;IAED,OAAO,aAAa,CAAC,OAAO;QAC1B,IAAI,OAAO,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;SAC5B;KACF;IAED,OAAO,UAAU,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC;KACb;;IAGD,OAAO,UAAU,CAAC,KAAa;QAC7B,IAAI,QAAQ,GAAG,IAAI,MAAM,CAAC,+CAA+C,CAAC,CAAC;QAC3E,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,CAAC,EACZ,OAAO,GAAG,CAAC,EACX,CAAC,EACD,CAAC,EACD,aAAa,EACb,cAAc,CAAC;QAEjB,SAAS,KAAK,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpB;;QAGD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/C,OAAO,KAAK,CAAC;SACd;QAED,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;;YAE5B,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;;gBAEZ,CAAC,IAAI,CAAC,CAAC;;gBAEP,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;;aAG/B;iBAAM;gBACL,QAAQ,IAAI,CAAC,CAAC;aACf;SACF;QAED,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC7B,aAAa,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC3E,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,aAAa,CAAC;QACtE,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;;QAGrE,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YAC1B,OAAO,OAAO,KAAK,aAAa,CAAC;;SAElC;aAAM,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACjC,OAAO,OAAO,KAAK,cAAc,CAAC;SACnC;;QAED,OAAO,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,cAAc,CAAC;KAChE;;IAGD,OAAO,UAAU,CAAC,KAAa;QAC7B,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;;QAE5B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,0EAA0E,CAAC,EAAE;YAC5F,OAAO,KAAK,CAAC;SACd;;QAED,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACpC,OAAO,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACjG;;QAED,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAC1F;QACD,OAAO,KAAK,CAAC;KACd;IAED,OAAO,UAAU,CAAC,KAAa;;;;QAI7B,IAAI,QAAQ,GAAG,IAAI,MAAM,CAAC,mDAAmD,CAAC,CAAC;;QAG/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,KAAK,CAAC;SACd;;QAGD,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAEtG,OAAO,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC3C;IAED,OAAO,oBAAoB,CAAC,EAAC,gBAAgB,GAAG,aAAa,EAAE,aAAa,GAAG,UAAU,EAAC,GAAG,EAAE;QAC7F,IAAI,MAAM,GAAG,UAAU,CAAY;YACjC,IAAI,CAAC,CAAC,EAAE;gBACN,OAAO,IAAI,CAAC;aACb;YACD,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;YAC3E,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;YACvE,IAAI,WAAW,IAAI,QAAQ,EAAE;gBAC3B,IAAI,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBACzD,IAAI,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,MAAM,GAAG,GAAG,EAAE;oBAChB,OAAO,EAAC,mCAAmC,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAC,CAAC;iBACrF;aACF;YACD,OAAO,IAAI,CAAC;SACb,CAAC;QACF,OAAO,MAAM,CAAC;KACf;IAED,OAAO,mBAAmB,CAAC,EAAC,eAAe,GAAG,YAAY,EAAE,YAAY,GAAG,SAAS,EAAC,GAAG,EAAE;QACxF,IAAI,MAAM,GAAG,UAAU,CAAY;YACjC,IAAI,CAAC,CAAC,EAAE;gBACN,OAAO,IAAI,CAAC;aACb;YACD,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/H,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;YACxH,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE;gBAClC,OAAO,EAAC,kCAAkC,EAAE,IAAI,EAAC,CAAC;aACnD;YACD,OAAO,IAAI,CAAC;SACb,CAAC;QACF,OAAO,MAAM,CAAC;KACf;IAED,OAAO,oCAAoC,CAAC,EAAC,UAAU,GAAG,OAAO,EAAE,SAAS,GAAG,MAAM,EAAC,GAAG,EAAE;QACzF,IAAI,MAAM,GAAG,UAAU,CAAY;YACjC,IAAI,CAAC,CAAC,EAAE;gBACN,OAAO,IAAI,CAAC;aACb;YACD,IAAI,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnC,IAAI,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,yDAAyD,CAAC,EAAE;gBACvH,IAAI,IAAI,GAAG,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC1D,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE;oBACpF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChD;gBACD,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE;oBACrB,OAAO,EAAC,kCAAkC,EAAE,IAAI,EAAC,CAAC;iBACnD;aACF;YACD,OAAO,IAAI,CAAC;SACb,CAAC;QACF,OAAO,MAAM,CAAC;KACf;IAED,OAAO,yBAAyB,CAAC,GAAW;QAC1C,IAAI,QAAQ,GAAG,oBAAoB,CAAC;QACpC,IAAI,aAAa,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpD,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;QAClG,IAAI,MAAM,GAAG,CAAC,OAAO;YACnB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE;gBACjD,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;gBAC1B,OAAO,GAAG,CAAC;aACZ;SACF,CAAC;QACF,OAAO,MAAM,CAAC;KACf;;AA5oBM,uBAAM,GAAG;IACd,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC;IACxD,WAAW,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;IAClE,WAAW,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC;IAC9D,mBAAmB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;IAC9E,sBAAsB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,wBAAwB,CAAC;IACpF,YAAY,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,CAAC;IAChE,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;IACtE,WAAW,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC;IAC9D,aAAa,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,eAAe,CAAC;IAClE,mBAAmB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;IAC9E,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;IACtE,qBAAqB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,uBAAuB,CAAC;IAClF,gCAAgC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,kCAAkC,CAAC;IACxG,sBAAsB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,wBAAwB,CAAC;IACpF,qBAAqB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,uBAAuB,CAAC;IAClF,mBAAmB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;IAC9E,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;IACtE,kBAAkB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;IAC5E,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC;IAC1E,UAAU,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC5D,WAAW,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC;IAC9D,UAAU,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC5D,UAAU,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC5D,UAAU,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC5D,aAAa,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,eAAe,CAAC;IAClE,WAAW,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC;IAC9D,SAAS,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,WAAW,CAAC;IAC1D,mCAAmC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,qCAAqC,CAAC;IAC9G,mBAAmB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;IAC9E,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC;IAC1E,mCAAmC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,qCAAqC,CAAC;IAC9G,kCAAkC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,oCAAoC,CAAC;IAC5G,kCAAkC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,oCAAoC,CAAC;CAC7G,CAAC;AAEK,oCAAmB,GAAG;IAC3B,cAAc,EAAE,gBAAgB,CAAC,eAAe;IAChD,kBAAkB,EAAE,gBAAgB,CAAC,qBAAqB;IAC1D,MAAM,EAAE,gBAAgB,CAAC,eAAe;IACxC,MAAM,EAAE,gBAAgB,CAAC,wBAAwB;IACjD,MAAM,EAAE,gBAAgB,CAAC,iBAAiB;IAC1C,cAAc,EAAE,gBAAgB,CAAC,uBAAuB;IACxD,cAAc,EAAE,gBAAgB,CAAC,uBAAuB;IACxD,GAAG,EAAE,gBAAgB,CAAC,YAAY;IAClC,GAAG,EAAE,gBAAgB,CAAC,YAAY;IAClC,GAAG,EAAE,gBAAgB,CAAC,YAAY;IAClC,MAAM,EAAE,gBAAgB,CAAC,eAAe;IACxC,EAAE,EAAE,gBAAgB,CAAC,qBAAqB;IAC1C,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB;IAC5C,WAAW,EAAE,gBAAgB,CAAC,oBAAoB;IAClD,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB;IAC5C,KAAK,EAAE,gBAAgB,CAAC,cAAc;IACtC,KAAK,EAAE,gBAAgB,CAAC,aAAa;IACrC,IAAI,EAAE,gBAAgB,CAAC,aAAa;CACrC;;AC7DH;;;MAGaA,OAAK;IAChB,YACS,GAAW,EACX,OAAe,EACf,SAAiB,EACjB,UAAgB,EAChB,YAAsB,EACtB,OAAgB;QALhB,QAAG,GAAH,GAAG,CAAQ;QACX,YAAO,GAAP,OAAO,CAAQ;QACf,cAAS,GAAT,SAAS,CAAQ;QACjB,eAAU,GAAV,UAAU,CAAM;QAChB,iBAAY,GAAZ,YAAY,CAAU;QACtB,YAAO,GAAP,OAAO,CAAS;KACrB;;;ACHN;;;MAIa,iBAAiB;IAW5B;;QATQ,6BAAwB,GAAG,IAAI,OAAO,EAAc,CAAC;QAErD,kCAA6B,GAAG,IAAI,OAAO,EAAmB,CAAC;QAE/D,2BAAsB,GAAG,IAAI,OAAO,EAAS,CAAC;QAE9C,wCAAmC,GAAG,IAAI,OAAO,EAAwB,CAAC;QAIhF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;QACnE,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,mCAAmC,CAAC,YAAY,EAAE,CAAC;QAC7F,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,6BAA6B,CAAC,YAAY,EAAE,CAAC;KAClF;;;;;IAMD,OAAO,CAAC,OAAgB;QACtB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO;YAClC,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;SACnD,CAAC,CAAC;KACJ;;IAGD,WAAW,CAAC,OAAmB;QAC7B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC7C;;;;IAKD,SAAS,CAAC,KAAY;QACpB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzC;;IAGD,gBAAgB,CAAC,YAA6B;QAC5C,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACvD;;;;;IAMD,qBAAqB,CAAC,oBAA0C;QAC9D,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;QAC3D,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KACrE;IAED,0BAA0B;QACxB,IAAI,CAAC,mCAAmC,CAAC,IAAI,EAAE,CAAC;KACjD;IAED,qBAAqB;QACnB,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,CAAC;KAC3C;IAED,gBAAgB;QACd,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC;KACtC;IAED,eAAe;QACb,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;KACpC;;8GApEU,iBAAiB;kHAAjB,iBAAiB,cADJ,MAAM;2FACnB,iBAAiB;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDrB,gBAAgB;IAS3B,YACY,IAAgB,EAChB,iBAAoC,EACpC,YAA0B,EAC1B,gBAAkC,EACjB,MAAc,EACT,WAAmB;QALzC,SAAI,GAAJ,IAAI,CAAY;QAChB,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAkB;QACjB,WAAM,GAAN,MAAM,CAAQ;QACT,gBAAW,GAAX,WAAW,CAAQ;QAEnD,gBAAgB,CAAC,YAAY,GAAG,WAAW,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,eAAe;QACb,IAAI,CAAC,gBAAgB;aAClB,eAAe,CAAC,iCAAiC,EAAE,EAAE,EAAE,cAAc,CAAC;aACtE,SAAS,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,gBAAgB;aAClB,eAAe,CAAC,mCAAmC,EAAE,EAAE,EAAE,cAAc,CAAC;aACxE,SAAS,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,2BAA2B,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;QACjJ,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,6BAA6B,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;KACtJ;;;;;;;;IAUD,OAAO,cAAc,CAAC,KAAwB;QAC5C,IAAI,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC;QAC/B,IAAI,UAAU,CAAC;QACf,IAAI,WAAW,CAAC;QAEhB,IACE,KAAK,CAAC,OAAO;aACZ,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC;gBACrD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,qDAAqD,CAAC;gBAC3E,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC;UAC9E;YACA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;;;YAGlD,gBAAgB,CAAC,UAAU,EAAE,CAAC;YAC9B,OAAO;SACR;QAED,IAAI;YACF,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACtC;QAAC,OAAO,GAAG,EAAE;YACZ,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;SAC1B;QACD,IAAI,UAAU,KAAK,UAAU,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE;;YAE1E,WAAW,GAAgB,UAAU,CAAC;SACvC;aAAM;;YAEL,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;gBAEtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;oBAC7C,WAAW,GAAG,IAAIC,OAAW,CAAC,cAAc,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,wBAAwB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;iBAC5H;qBAAM;oBACL,WAAW,GAAG,IAAIA,OAAW,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;iBAChH;aACF;iBAAM;gBACL,WAAW,GAAG,IAAIA,OAAW,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;aAC1F;SACF;QACD,OAAO,WAAW,CAAC;KACpB;IAED,OAAO,UAAU;QACf,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;QACzC,IAAI,KAAK,GAAW,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,MAAc,CAAC;QACnB,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;YACf,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAChF;aAAM;YACL,MAAM,GAAG,UAAU,CAAC;SACrB;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;KAC/B;IAEM,WAAW,CAAI,GAAG,EAAE,UAAU,EAAE,gBAAyB,KAAK;QACnE,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;;QAEhE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACrF,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,aAAa,GAAQ,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;;KAE7F;IAEM,UAAU,CAAI,GAAG,EAAE,UAAU;QAClC,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;;QAE/D,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACrF,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;;KAE/D;IAEM,YAAY,CAAI,GAAG,EAAE,UAAU;QACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;;QAE/D,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACrF,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;;KAEjE;IAEM,aAAa,CAAC,GAAG;QACtB,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;;QAElE,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACrF,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;YACzC,OAAO;YACP,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;;KAEJ;IAEM,UAAU,CAAI,GAAG;QACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;;QAE/D,IAAI,OAAO,GAAgB,IAAI,CAAC,qBAAqB,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QAEzE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;YACzC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;;KAEJ;IAEO,qBAAqB,CAAC,WAAwB;QACpD,IAAI,gBAAgB,CAAC,oBAAoB,IAAI,gBAAgB,CAAC,oBAAoB,IAAI,EAAE,EAAE;YACxF,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;SACrG;QACD,OAAO,WAAW,CAAC;KACpB;;AA5JD;AACO,6BAAY,GAAG,cAAc,CAAC;AAC9B,qCAAoB,GAAG,EAAE,CAAC;AAC1B,uCAAsB,GAAW,EAAG,CAAA;AACpC,yCAAwB,GAAW,EAAG,CAAA;AACtC,iCAAgB,GAAW,EAAG,CAAA;AAC9B,mCAAkB,GAAW,EAAG,CAAA;6GAP5B,gBAAgB,kIAcjB,SAAS,aACT,cAAc;iHAfb,gBAAgB,cADH,MAAM;2FACnB,gBAAgB;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;8BAe7B,MAAM;+BAAC,SAAS;;8BAChB,MAAM;+BAAC,cAAc;;;IAiJf,2BAA2B,GAAe;IACnD;QACE,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,gBAAgB;KAC3B;;;AC5KH;;;;MAIa,cAAc;;AAClB,uBAAQ,GAAa,IAAI;;MCJrB,oBAAoB;;IAI/B;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;KACpC;IAED,GAAG,CAAC,GAAW;;QAEb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;IAED,GAAG,CAAC,GAAW,EAAE,KAAU;;QAEzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAC3B;;iHAhBU,oBAAoB;qHAApB,oBAAoB,cADP,MAAM;2FACnB,oBAAoB;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,gBAAgB;IAI3B;QAHQ,2BAAsB,GAAG,IAAI,OAAO,EAAW,CAAC;QAItD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;KACpE;IAED,iBAAiB;QACf,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxC;;6GAVU,gBAAgB;iHAAhB,gBAAgB,cADH,MAAM;2FACnB,gBAAgB;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,cAAc;IAKzB;;QAHQ,4BAAuB,GAAG,IAAI,aAAa,CAAM,EAAE,CAAC,CAAC;QAI3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;;;;QAIrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,CAAC;KACtE;IAED,aAAa,CAAC,WAAmB,EAAE,OAAY;QAC7C,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QAClC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5C;;2GAhBU,cAAc;+GAAd,cAAc,cADD,MAAM;2FACnB,cAAc;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,aAAa;IAIxB,YAAuC,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QACnD,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC,MAAM,iBAAiB,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,CAAC,MAAM,oBAAoB,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/D;;;;;;;IAQD,MAAM,CAAC,GAAW,EAAE,KAAkB,EAAE,MAAiC;QACvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACjC,IAAI,QAAQ,GAAQ,IAAI,QAAQ,EAAE,CAAC;YAEnC,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;gBACtB,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACnC;YAED,IAAI,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAClD;YACD,GAAG,CAAC,kBAAkB,GAAG;gBACvB,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE;oBACxB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;wBACtB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;qBACvB;yBAAM;wBACL,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;qBACtB;iBACF;aACF,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,gBAAgB,CAAC,oBAAoB,IAAI,gBAAgB,CAAC,oBAAoB,IAAI,EAAE,EAAE;gBACxF,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,QAAQ,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;aACzF;YACD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpB,CAAC,CAAC;KACJ;IAED,kBAAkB,CAAC,EAAU;QAC3B,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC;KACpC;;0GA/CU,aAAa,kBAIJ,SAAS;8GAJlB,aAAa,cADA,MAAM;2FACnB,aAAa;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;8BAKnB,MAAM;+BAAC,SAAS;;;;MCHT,wBAAwC,kBAAqB;;;MCDtE,+BAA+C,eAAkB;;IAE5E,cAAc,CAAC,QAAkB,EAAE,QAAgB;QACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;;IAED,gBAAgB,CAAC,WAAmB;QAClC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;;IAGD,WAAW,CAAC,KAAU;QACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;;;MCZU,aAAa;IACxB,YAAsB,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;KAAI;;IAG5D,mBAAmB,CAAC,MAAmC;QACrD,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAC5C,cAAc,CAAC,MAAM,CAAC,EACtB,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;YACzC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACvB,CAAC,CACH,CAAC;KACH;;0GAZU,aAAa;8GAAb,aAAa,cADA,MAAM;2FACnB,aAAa;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCWrB,kBAAkB;;IAM7B,YAAoB,YAA0B,EAAY,gBAAkC;QAAxE,iBAAY,GAAZ,YAAY,CAAc;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;KAAI;IAEhG,IAAI,OAAO;QACT,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE;YACxD,KAAK,IAAI,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;gBAE5C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;;oBAE5E,IAAI,eAAe,GAAsB,gBAAgB,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;oBACjG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;oBAClI,OAAO,IAAI,CAAC;iBACb;aACF;SACF;QACD,OAAO,KAAK,CAAC;KACd;;+GArBU,kBAAkB;mGAAlB,kBAAkB,wGAPnB;;;;GAIT;2FAGU,kBAAkB;kBAT9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE;;;;GAIT;;iBAEF;4HAEU,OAAO;sBAAf,KAAK;gBACG,KAAK;sBAAb,KAAK;;;MChBK,UAAU;IAMrB,YACS,KAAa,EACb,OAAe,EACf,QAAgB,UAAU,CAAC,KAAK,EAChC,SAAiB,CAAC,EAClB,QAAiB,KAAK,EACtB,WAAmB,MAAM;IACzB,OAAgB,EAChB,OAAgB,KAAK;QAPrB,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAA2B;QAChC,WAAM,GAAN,MAAM,CAAY;QAClB,UAAK,GAAL,KAAK,CAAiB;QACtB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,YAAO,GAAP,OAAO,CAAS;QAChB,SAAI,GAAJ,IAAI,CAAiB;KAC1B;IAEG,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAS;QAChD,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KAC7E;;AAlBM,gBAAK,GAAW,GAAG,CAAC;AACpB,eAAI,GAAW,MAAM,CAAC;AACtB,eAAI,GAAW,MAAM,CAAC;AACtB,gBAAK,GAAW,OAAO;;MCoDnB,2BAA2B,aAAa;IAOnD,YAAsB,iBAAoC,EAAY,gBAAkC;QACtG,KAAK,EAAE,CAAC;QADY,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;QALxG,YAAO,GAAY,KAAK,CAAC;QAEzB,WAAM,GAAW,GAAG,CAAC;;;QAOnB,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO;YACpF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC3B,CAAC,CAAC;QACH,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO;YAClF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACzB,CAAC,CAAC;KACJ;IAED,QAAQ;;QAEN,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,eAAe;QACb,IAAI,CAAC,gBAAgB;aAClB,eAAe,CAAC,yBAAyB,EAAE,EAAE,EAAE,cAAc,CAAC;aAC9D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;KAChD;IAED,WAAW,CAAC,OAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACrB,IAAI;gBACF,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;aAC3D;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;aACnE;SACF;QACD,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,IAAI,SAAS,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;IAED,SAAS,CAAC,KAAY;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;KAChJ;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC;KACzD;;;;;IAMO,qBAAqB;QAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,GAAG,EAAE;YACP,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBACpB,OAAO,GAAG,CAAC;aACZ;iBAAM,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBAC3B,OAAO,GAAG,CAAC;aACZ;iBAAM,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBAC3B,OAAO,GAAG,CAAC;aACZ;iBAAM,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBAC3B,OAAO,GAAG,CAAC;aACZ;iBAAM;gBACL,OAAO,GAAG,CAAC;aACZ;SACF;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC;YACvD,OAAO,GAAG,CAAC;SACZ;KACF;IAED,eAAe,CAAC,IAAI;QAClB,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;YAC3B,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;SAC3C;QACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,OAAO,CAAC,wGAAwG,EAAE,UAAU,KAAK;YAC3I,IAAI,GAAG,GAAG,QAAQ,CAAC;YACnB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACpB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,GAAG,GAAG,KAAK,CAAC;iBACb;qBAAM;oBACL,GAAG,GAAG,QAAQ,CAAC;iBAChB;aACF;iBAAM,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACnC,GAAG,GAAG,SAAS,CAAC;aACjB;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC7B,GAAG,GAAG,MAAM,CAAC;aACd;YACD,OAAO,eAAe,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;SACzD,CAAC,CAAC;KACJ;;AAjGa,+BAAY,GAAW,4BAA6B,CAAA;+GADvD,kBAAkB;mGAAlB,kBAAkB,yEA/CnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CT;2FAGU,kBAAkB;kBAjD9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CT;;iBAEF;;;MCnCY,gBAAgB;IAG3B,YAAsB,YAA0B,EAAY,iBAAoC;QAA1E,iBAAY,GAAZ,YAAY,CAAc;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;QAC9F,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;;QAElB,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK;YAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC,CAAC,CAAC;KACJ;;IAGD,SAAS;QACP,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB;IAED,IAAI,YAAY;QACd,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;KAC3B;;6GArBU,gBAAgB;iGAAhB,gBAAgB,gDAdjB;;;;;;;;;;;GAWT;2FAGU,gBAAgB;kBAjB5B,SAAS;mBAAC;oBACT,QAAQ,EAAE,UAAU;oBACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;;;;;;;;GAWT;;iBAEF;;;ACFD;;;MAQa,kBAAkB;IAyC7B,YAAoB,gBAAkC,EAClC,SAA4B;QAD5B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,cAAS,GAAT,SAAS,CAAmB;QAzBhD,kBAAa,GAAY,IAAI,CAAC;QAE9B,UAAK,GAAY,IAAI,CAAC;QAQtB,0BAAqB,GAAY,IAAI,CAAC;QAEtC,+BAA0B,GAAY,IAAI,CAAC;QAE3C,iBAAY,GAAG,IAAI,YAAY,EAAU,CAAC;QAE1C,kBAAa,GAAG,IAAI,YAAY,EAAU,CAAC;QAE3C,qBAAgB,GAAW,UAAU,CAAC,eAAe,CAAC;QAEtD,iBAAY,GAAW,UAAU,CAAC,eAAe,CAAC;QAElD,oBAAe,GAAW,CAAC,CAAC,CAAC;KAI5B;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;SAC1B;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB;;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;YAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;SAClE;KACF;IAEO,WAAW;QACjB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC9C,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;YAClF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,uCAAuC,CAAC,CAAC;YACpF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,YAAY,EAAE,sCAAsC,CAAC,CAAA;SAC3F;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,uCAAuC,CAAC,CAAC;YACpF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;SAC7E;aAAM,IAAI,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,UAAU,EAAE;YAC5D,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;SACrC;KACF;;;;;IAMD,eAAe;QACb,IAAI,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;SAC3B;KACF;;;;IAKD,WAAW,CAAC,OAA4C;;QACtD,KAAK,IAAI,QAAQ,IAAI,OAAO,EAAE;YAC5B,IAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,YAAY,EAAE;gBAC7B,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACjD,IAAI,WAAW,CAAC,aAAa,KAAK,WAAW,CAAC,YAAY,EAAE;oBAC1D,IAAI,CAAC,qBAAqB,EAAE,CAAC;iBAC9B;gBACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;aACvF;iBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;gBAChC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC;gBACvC,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,KAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,UAAU,CAAA,GAAG,IAAI,CAAC,eAAe,EAAE;oBACxE,IAAI,CAAC,eAAe,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,KAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,UAAU,CAAA,CAAC;iBACtE;gBACD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC3E,IAAI,WAAW,CAAC,aAAa,KAAK,WAAW,CAAC,YAAY,EAAE;oBAC1D,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC7B,IAAI,EAAC,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,CAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;wBACnD,IAAI,CAAC,aAAa,EAAE,CAAC;qBACtB;iBACF;aACF;SACF;QACD,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;YAC7B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;SAChC;KACF;;IAGD,qBAAqB;QACnB,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACtG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;SACvB;QACD,IAAI,IAAI,CAAC,YAAY,GAAG,oBAAoB,EAAE;YAC5C,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC;SAC1C;KACF;;IAGD,QAAQ,CAAC,KAAU;QACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE;;;YAGpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;aAAM;;YAEL,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SACxC;KACF;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,EAAE,EAAE;;YAEX,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;SAC3B;KACF;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,WAAW,EAAE;YACxH,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;gBACvB,OAAO,4BAA4B,CAAC;aACrC;iBAAM;gBACL,OAAO,+BAA+B,CAAC;aACxC;SACF;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,SAAS,EAAE;YACzE,OAAO,iCAAiC,CAAC;SAC1C;aAAM;YACL,OAAO,QAAQ,CAAC;SACjB;KACF;IAED,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,SAAS,CAAC;KACzD;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,WAAW,CAAC;KAC3D;IAED,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,SAAS,CAAC;KACzD;;IAGD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KAC3F;;IAGD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,CAAC;KAC7C;;IAGD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,YAAY,CAAC;KAChD;;IAGD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC;KAC3C;;IAGD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC;KACxC;;IAGD,IAAI,WAAW;QACb,QACE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,YAAY;aACtC,CAAC,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;mBACpE,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,SAAS;oBAC/C,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,EACrG;KACH;;IAGD,IAAI,WAAW;QACb,QACE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,YAAY;aACtC,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,EAC9F;KACH;;IAGD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC;KACzE;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;KAClF;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;KACvF;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;KAC1F;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;KAClG;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;KACzF;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;KACtF;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KACnF;;AAtQa,4BAAS,GAAW,MAAO,CAAA;AAC3B,8BAAW,GAAW,QAAS,CAAA;AAC/B,4BAAS,GAAW,MAAO,CAAA;AAC3B,6BAAU,GAAW,OAAQ,CAAA;AAE7B,+BAAY,GAAG,CAAC,CAAE,CAAA;+GANrB,kBAAkB;mGAAlB,kBAAkB,kiBC3B/B,y/GA2EA;2FDhDa,kBAAkB;kBAL9B,SAAS;+BACE,YAAY,mBACL,uBAAuB,CAAC,MAAM;oIAY/C,EAAE;sBADD,SAAS;uBAAC,IAAI;gBAGf,UAAU;sBADT,KAAK;gBAGN,MAAM;sBADL,KAAK;gBAGN,SAAS;sBADR,KAAK;gBAGN,aAAa;sBADZ,KAAK;gBAGN,KAAK;sBADJ,KAAK;gBAGN,QAAQ;sBADP,KAAK;gBAGN,MAAM;sBADL,KAAK;gBAGN,UAAU;sBADT,KAAK;uBAAC,MAAM;gBAGb,qBAAqB;sBADpB,KAAK;gBAGN,0BAA0B;sBADzB,KAAK;gBAGN,YAAY;sBADX,MAAM;gBAGP,aAAa;sBADZ,MAAM;;;ME9CI,sBAAsB;IAKjC,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAHrC,UAAK,GAAY,KAAK,CAAC;QACvB,eAAU,GAAW,EAAE,CAAC;KAEiB;IAElD,YAAY;QACV,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5C;;mHATU,sBAAsB;uGAAtB,sBAAsB,6HARvB;;;;;;GAMT;2FAEU,sBAAsB;kBAVlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE;;;;;;GAMT;iBACF;gGAEU,KAAK;sBAAb,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,UAAU;sBAAlB,KAAK;;;ACXR;;;;MAIa,sBAAsB;IACjC,SAAS,CAAC,UAAe;QACvB,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE;YAC1B,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;gBAC/B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;aAC/B;SACF;QACD,OAAO,OAAO,CAAC;KAChB;;mHATU,sBAAsB;iHAAtB,sBAAsB;2FAAtB,sBAAsB;kBAPlC,IAAI;mBAAC;oBACJ,IAAI,EAAE,oBAAoB;iBAC3B;;;ACFD;;;MAUa,mBAAmB;IANhC;QAeS,YAAO,GAAY,KAAK,CAAC;QAKvB,aAAQ,GAAY,KAAK,CAAC;QAC1B,yBAAoB,GAAY,KAAK,CAAC;QACrC,2BAAsB,GAAG,IAAI,YAAY,EAAU,CAAC;KAkF/D;IA9EC,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;KAC5D;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;KAC7D;IAED,KAAK,CAAC,MAAc,EAAE,YAAoB;QACxC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC;KAC7E;IAED,MAAM,CAAC,MAAc,EAAE,YAAoB;QACzC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,uBAAuB,CAAC;KACzG;IAED,UAAU;QACR,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;KACrE;IAED,KAAK;QACH,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;KACpE;IAED,UAAU;QACR,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;KACrE;IAED,UAAU;QACR,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;KAClE;IAED,GAAG;QACD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;KAClE;IAED,IAAI;QACF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;KACnE;IAED,MAAM;QACJ,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;KACrE;IAED,WAAW,CAAC,MAAW;QACrB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjD;;IAID,MAAM;QACJ,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;KAC9B;;IAID,WAAW,CAAC,OAAsB;QAChC,KAAK,IAAI,QAAQ,IAAI,OAAO,EAAE;YAC5B,IAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC1B,IAAI,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC;gBACvD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;;;gBAI1B,IAAI,oBAAoB,GAAG,CAAC,CAAC;gBAC7B,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;oBAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;wBAC9D,oBAAoB,EAAE,CAAC;qBACxB;iBACF;gBAED,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,oBAAoB,IAAI,oBAAoB,GAAG,CAAC,CAAC;gBAC9F,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,IAAI,CAAC,gCAAgC,CAAC,CAAC;aAC1F;SACF;KACF;;AAhGa,iCAAa,GAAW,QAAS,CAAA;AACjC,gCAAY,GAAW,OAAQ,CAAA;AAC/B,iCAAa,GAAW,QAAS,CAAA;AACjC,8BAAU,GAAW,KAAM,CAAA;AAC3B,+BAAW,GAAW,MAAO,CAAA;AAC7B,iCAAa,GAAW,QAAS,CAAA;AACjC,8BAAU,GAAW,KAAM,CAAA;AAC3B,+BAAW,GAAW,MAAO,CAAA;gHARhC,mBAAmB;oGAAnB,mBAAmB,2PCZhC,4rJA8CM;2FDlCO,mBAAmB;kBAN/B,SAAS;+BACE,aAAa,mBACN,uBAAuB,CAAC,MAAM;8BAgBtC,OAAO;sBAAf,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,oBAAoB;sBAA5B,KAAK;gBACI,sBAAsB;sBAA/B,MAAM;;;AE1BT;;;MAQa,kBAAkB;IAL/B;QAMW,YAAO,GAAQ,EAAE,CAAC;QAClB,cAAS,GAAY,KAAK,CAAC;QAC3B,yBAAoB,GAAY,KAAK,CAAC;QAItC,aAAQ,GAAY,KAAK,CAAC;QAGzB,2BAAsB,GAAG,IAAI,YAAY,EAAU,CAAC;KAQ/D;;;;IAHC,WAAW,CAAC,MAAM;QAChB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1C;;+GAjBU,kBAAkB;mGAAlB,kBAAkB,qVCV/B,wgDAgCM;2FDtBO,kBAAkB;kBAL9B,SAAS;+BACE,YAAY,mBACL,uBAAuB,CAAC,MAAM;8BAItC,OAAO;sBAAf,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,oBAAoB;sBAA5B,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,KAAK;sBAAb,KAAK;gBAEI,sBAAsB;sBAA/B,MAAM;;;MEDI,mBAAmB;IAO9B,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAL9C,YAAO,GAAY,KAAK,CAAC;QAMvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;KAC1B;IAED,QAAQ;QACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB;aACpD,IAAI,CACH,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,EAC/C,SAAS,CAAC,KAAK,CAAC,EAChB,KAAK,CAAC,CAAC,CAAC;SACT;aACA,SAAS,CAAC,KAAK;YACd,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;YACjC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;iBAAM;gBACL,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC;oBAAE,IAAI,CAAC,eAAe,EAAE,CAAC;aACtD;YACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;SACzC,CAAC,CAAC;KACN;IAED,WAAW;QACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;YAAE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KAChE;;gHAlCU,mBAAmB;oGAAnB,mBAAmB,uGAXpB;;;;;;;;GAQT;2FAGU,mBAAmB;kBAb/B,SAAS;mBAAC;oBACT,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE;;;;;;;;GAQT;;iBAEF;gGAEkB,WAAW;sBAA3B,KAAK;uBAAC,QAAQ;;;MCPJ,sCAAsC,aAAa;IAC9D,YAAsB,iBAAoC,EAAY,mBAAmC,EAAY,gBAAkC;QACrJ,KAAK,EAAE,CAAC;QADY,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAY,wBAAmB,GAAnB,mBAAmB,CAAgB;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;KAEtJ;IAED,QAAQ;QACN,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;;IAGD,wBAAwB;QACtB,IAAI,CAAC,iBAAiB,CAAC,uBAAuB;aAC3C,IAAI,CACH,SAAS,CACP,CAAC,YAAY,KACX,aAAa,CAAC;YACZ,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;YACzB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;YACrH,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;SAC5H,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB,CACF;aACA,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACjD,CAAC,CAAC;KACN;IAED,gBAAgB,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAe;QAC/D,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;KAC5G;;0HA7BU,6BAA6B;8GAA7B,6BAA6B,qFAF9B,+DAA+D;2FAE9D,6BAA6B;kBAJzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,wBAAwB;oBAClC,QAAQ,EAAE,+DAA+D;iBAC1E;;;MCEY,sCAAsC,aAAa;IAG9D,YAAsB,iBAAoC,EAAY,mBAAmC,EAAY,gBAAkC;QACrJ,KAAK,EAAE,CAAC;QADY,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAY,wBAAmB,GAAnB,mBAAmB,CAAgB;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;QAFvJ,aAAQ,GAAc,EAAE,CAAC;KAIxB;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,IAAI,CAAC,+BAA+B,EAAE,CAAC;KACxC;;IAGO,+BAA+B;QACrC,IAAI,CAAC,iBAAiB,CAAC,6BAA6B;aACjD,IAAI,CACH,GAAG,CAAC,CAAC,iBAAiB;;YAEpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,iBAAiB,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,EAAE;gBACtB,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;SACF,CAAC,EACF,MAAM,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAClD,SAAS,CAAC,CAAC,iBAAiB,KAC1B,aAAa,CAAC;;YAEZ,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;YACpI,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1I,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC7B,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC;SACrC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACjB,CACF;aACA,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;SACrE,CAAC,CAAC;KACN;;;;;;;;IASD,qBAAqB,CAAC,KAAa,EAAE,OAAe,EAAE,OAAe,EAAE,cAAmC;QACxG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;QACzD,IAAI,cAAc,EAAE;;YAElB,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,KACvB,aAAa,CAAC;gBACZ,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;aACtH,CAAC;iBACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACb,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC/B,IAAI,CAAC,SAAS,CACZ,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,EAC5C,SAAS,CACV,CAAC;aACH,CAAC,CACL,CAAC;SACH;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAChC;KACF;IAED,qBAAqB;QACnB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;;IAGO,SAAS,CAAC,KAAa,EAAE,OAAe;QAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;KACJ;IAEO,UAAU;QAChB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;;;;IAKO,qBAAqB,CAAC,KAAwB,EAAE,OAAe;QACrE,IAAI,aAAa,GAAyB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI;YAChE,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;;gBAE3B,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;aACjB;iBAAM;gBACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;aACxE;SACF,CAAC,CAAC;QACH,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;KACrC;;0HAvGU,6BAA6B;8GAA7B,6BAA6B,qFAF9B,kEAAkE;2FAEjE,6BAA6B;kBAJzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,wBAAwB;oBAClC,QAAQ,EAAE,kEAAkE;iBAC7E;;;MCFY,oBAAoB;IAkC/B,YAAoB,YAA0B,EAAU,cAAiC;QAArE,iBAAY,GAAZ,YAAY,CAAc;QAAU,mBAAc,GAAd,cAAc,CAAmB;QAZzF,gBAAW,GAAY,GAAG,CAAC;QAG3B,cAAS,GAAsB,IAAI,YAAY,EAAO,CAAC;QAEvD,YAAO,GAAsB,IAAI,YAAY,EAAO,CAAC;KAOwC;IAE7F,QAAQ;QACN,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B;YAC7G,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;SACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B;YAC3G,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;SACxD,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,IAAc,EAAE,QAAa;YAC3D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;SACrC,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;KAClC;;IAGD,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;SAClC;KACF;;IAGD,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC;KACF;;IAGD,SAAS;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;KAC3B;;IAGD,WAAW;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;;IAGD,WAAW;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;KAC3B;;IAGD,UAAU,CAAC,IAAI;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;;;;IAKD,UAAU,CAAC,IAAI;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;YACtF,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;;IAGD,UAAU,CAAC,IAAI;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;;IAGD,eAAe;QACb,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;KAC7D;;IAGM,YAAY,CAAC,CAAM;QACxB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;KAC9B;;iHA3HU,oBAAoB;qGAApB,oBAAoB,gjBCXjC,umMA2FA;2FDhFa,oBAAoB;kBANhC,SAAS;+BACE,eAAe,mBAGR,uBAAuB,CAAC,MAAM;gIAI/C,QAAQ;sBADP,KAAK;gBAGN,WAAW;sBADV,KAAK;gBAGN,QAAQ;sBADP,KAAK;gBAGN,eAAe;sBADd,KAAK;gBAGN,iBAAiB;sBADhB,KAAK;gBAGN,qBAAqB;sBADpB,KAAK;gBAGN,SAAS;sBADR,KAAK;gBAGN,cAAc;sBADb,KAAK;gBAGN,YAAY;sBADX,KAAK;gBAGN,SAAS;sBADR,KAAK;gBAGN,WAAW;sBADV,KAAK;gBAIN,SAAS;sBADR,MAAM;gBAGP,OAAO;sBADN,MAAM;gBAIP,SAAS;sBADR,SAAS;uBAAC,SAAS;;;AEtCtB;;;;;MAgBa,wBAAwB;IAInC,iBAAgB;IAEhB,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KAC9D;;qHARU,wBAAwB;yGAAxB,wBAAwB,yFATzB;;;;;;GAMT;2FAGU,wBAAwB;kBAXpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,QAAQ,EAAE;;;;;;GAMT;;iBAEF;0EAEU,OAAO;sBAAf,KAAK;;;ACjBR;;;MAYa,yBAAyB;IAMpC;QAHS,aAAQ,GAAW,IAAI,CAAC;QACxB,cAAS,GAAW,IAAI,CAAC;KAElB;;sHANL,yBAAyB;0GAAzB,yBAAyB,kJAN1B;;;;GAIT;2FAEU,yBAAyB;kBARrC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE;;;;GAIT;iBACF;0EAEU,IAAI;sBAAZ,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,SAAS;sBAAjB,KAAK;;;MCRK,uBAAuB;IAOlC;QANA,oBAAe,GAAW,cAAc,CAAC;QAGhC,cAAS,GAAW,EAAE,CAAC;KAGhB;IAEhB,WAAW;;QAET,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACtD;IAED,sBAAsB;;QAEpB,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9E,IAAI,WAAW,EAAE;YACf,OAAO,WAAW,CAAC,KAAK,CAAC;SAC1B;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE;YACrB,OAAO,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;SACpC;aAAM;YACL,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;KACF;;oHAzBU,uBAAuB;wGAAvB,uBAAuB,+IAJxB;;GAET;2FAEU,uBAAuB;kBANnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE;;GAET;iBACF;0EAIU,KAAK;sBAAb,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,IAAI;sBAAZ,KAAK;;;ACbR;;;MAIa,cAAc;IACzB,SAAS,CAAC,KAAa;QACrB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACvD;aAAM;YACL,OAAO,KAAK,CAAC;SACd;KACF;;2GAPU,cAAc;yGAAd,cAAc;2FAAd,cAAc;kBAD1B,IAAI;mBAAC,EAAE,IAAI,EAAE,YAAY,EAAE;;;ACH5B,MAAM,OAAO,GAAG,QAAQ,CAAC;MAGZ,kBAAkB;IAK7B;QACE,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,uBAAuB,GAAG,GAAG,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC;KAChC;IAED,SAAS,CAAC,KAAsB,EAAE,eAAuB,CAAC;QACxD,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3B,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,+BAA+B,CAAC,CAAC;QACzD,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,MAAM,CAAC;SACf;QAED,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE5F,QAAQ,GAAG,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,QAAQ,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;QAE5G,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE7E,OAAO,OAAO,GAAG,QAAQ,CAAC;KAC3B;IAED,KAAK,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAK,EAAE,eAAuB,CAAC;QACpE,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3B,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,2CAA2C,CAAC,CAAC;QACrE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,MAAM,CAAC;SACf;QAED,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE3E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAErC,QAAQ;YACN,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC;kBAC1C,IAAI,CAAC,uBAAuB,GAAG,CAAC,QAAQ,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC;kBAC9E,EAAE,CAAC;QAET,OAAO,OAAO,GAAG,QAAQ,CAAC;KAC3B;;+GAhDU,kBAAkB;6GAAlB,kBAAkB;2FAAlB,kBAAkB;kBAD9B,IAAI;mBAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE;;;ACCpC;;;MAGa,oBAAoB;IAC/B,SAAS,CAAC,GAAW;QACnB,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACzB,GAAG,GAAG,GAAG;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;iBACtC,IAAI,CAAC,MAAM,CAAC,CAAC;SACjB;QACD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YACpB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;SACtC;QACD,OAAO,GAAG,CAAC;KACZ;;iHAZU,oBAAoB;+GAApB,oBAAoB;2FAApB,oBAAoB;kBANhC,IAAI;mBAAC;oBACJ,IAAI,EAAE,kBAAkB;iBACzB;;;ACED;;;;MAKsB,4BAA4B,aAAa;IA8B7D,YAAsB,YAA0B;QAC9C,KAAK,EAAE,CAAC;QADY,iBAAY,GAAZ,YAAY,CAAc;QAZhD,gBAAW,GAAW,EAAE,CAAC;QAEzB,aAAQ,GAAY,KAAK,CAAC;QAE1B,cAAS,GAAY,KAAK,CAAC;QAI3B,qBAAgB,GAAY,KAAK,CAAC;QAElC,aAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;KAIrC;;IAGD,QAAQ;QACN,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK;gBACxC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC3B,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;SACxD;KACF;;IAGD,MAAM;QACJ,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SACzE;KACF;IAED,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;SACvC;KACF;;;;IAKS,cAAc,MAAW;;;IAInC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1G;IAED,SAAS;QACP,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5C;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;;gHA9EmB,mBAAmB;oGAAnB,mBAAmB;2FAAnB,mBAAmB;kBADxC,SAAS;gGAGR,OAAO;sBADN,KAAK;gBAGN,MAAM;sBADL,KAAK;gBAGN,eAAe;sBADd,KAAK;gBAGN,KAAK;sBADJ,KAAK;gBAGN,MAAM;sBADL,KAAK;gBAGN,YAAY;sBADX,KAAK;gBAGN,eAAe;sBADd,KAAK;gBAGN,KAAK;sBADJ,KAAK;gBAGN,WAAW;sBADV,KAAK;gBAGN,QAAQ;sBADP,KAAK;gBAGN,SAAS;sBADR,KAAK;gBAGN,aAAa;sBADZ,KAAK;gBAGN,gBAAgB;sBADf,KAAK;gBAGN,QAAQ;sBADP,MAAM;;;MC7BI,yBAAyB,mBAAmB;IACvD,YAAsB,YAA0B;QAC9C,KAAK,CAAC,YAAY,CAAC,CAAC;QADA,iBAAY,GAAZ,YAAY,CAAc;KAE/C;;6GAHU,gBAAgB;iGAAhB,gBAAgB,uECT7B,onCA+BA;2FDtBa,gBAAgB;kBAJ5B,SAAS;+BACE,UAAU;;;MEGT,6BAA6B,mBAAmB;IAK3D,YAAsB,YAA0B;QAC9C,KAAK,CAAC,YAAY,CAAC,CAAC;QADA,iBAAY,GAAZ,YAAY,CAAc;QAFhD,UAAK,GAAW,CAAC,CAAC;KAIjB;;iHAPU,oBAAoB;qGAApB,oBAAoB,uGCTjC,4vBAgBA;2FDPa,oBAAoB;kBAJhC,SAAS;+BACE,cAAc;gGAMxB,KAAK;sBADJ,KAAK;;;AELR,MAAM,IAAI,GAAG,SAAQ,CAAC;AAEtB;;;;MAKsB,2BAA2B,mBAAmB;IAIlE,YAAsB,YAA0B,EAAY,iBAAoC;QAC9F,KAAK,CAAC,YAAY,CAAC,CAAC;QADA,iBAAY,GAAZ,YAAY,CAAc;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;QAHtF,sBAAiB,GAAe,IAAI,CAAC;QACrC,qBAAgB,GAAqB,IAAI,CAAC;KAInD;;IAGD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;;IAGD,IAAI,KAAK,CAAC,CAAM;QACd,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;YAE5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;;IAGD,IAAI,aAAa;QACf,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,OAAO,EAAE,CAAC;SACX;aAAM;YACL,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;KACF;;;;IAKD,aAAa,CAAC,CAAC;QACb,OAAO,CAAC,CAAC;KACV;;IAGD,MAAM;QACJ,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;;IAGD,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;;;IAID,UAAU,CAAC,KAAU;QACnB,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;;;YAIhC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACvC;KACF;IAED,gBAAgB,CAAC,EAAO;QACtB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;KAC5B;IAED,iBAAiB,CAAC,EAAO;QACvB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC7B;;+GA5EmB,kBAAkB;mGAAlB,kBAAkB;2FAAlB,kBAAkB;kBADvC,SAAS;;;ACLV;MAEsB,6BAA6B,kBAAkB;IAUnE,YAAsB,YAA0B,EAAY,gBAAkC,EAAY,iBAAoC;QAC5I,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QADnB,iBAAY,GAAZ,YAAY,CAAc;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;KAE7I;IAED,QAAQ;QACN,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,eAAe;QACb,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,IAAI,CAAC,gBAAgB;aAClB,qBAAqB,CAAC,eAAe,EAAE,EAAE,EAAE,cAAc,CAAC;aAC1D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;KACxC;;iHAxBmB,oBAAoB;qGAApB,oBAAoB;2FAApB,oBAAoB;kBADzC,SAAS;4JAIR,WAAW;sBADV,KAAK;gBAGN,WAAW;sBADV,KAAK;gBAGN,qBAAqB;sBADpB,KAAK;;;MCTK,wCAAwC,GAAQ;IAC3D,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC;IAC/C,KAAK,EAAE,IAAI;EACX;MAOW,yBAAyB,oBAAoB;IACxD,YAAsB,YAA0B,EAAY,gBAAkC,EAAY,iBAAoC;QAC5I,KAAK,CAAC,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QADrC,iBAAY,GAAZ,YAAY,CAAc;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;KAE7I;IAED,aAAa,CAAC,KAAU;QACtB,IAAI,CAAC,GAAG,IAAI,CAAC;QACb,IAAI,KAAK,EAAE;YACT,CAAC,GAAG,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;SACpE;QACD,OAAO,CAAC,CAAC;KACV;IAED,IAAI,aAAa;QACf,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;YAC1C,OAAO,EAAE,CAAC;SACX;aACI;YACH,OAAO,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACjF;KACF;;6GApBU,gBAAgB;iGAAhB,gBAAgB,mCAFhB,CAAC,wCAAwC,CAAC,iDCfvD,89BAwBA;2FDPa,gBAAgB;kBAL5B,SAAS;+BACE,UAAU,aAET,CAAC,wCAAwC,CAAC;;;MET1C,wCAAwC,GAAQ;IAC3D,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC;IAC/C,KAAK,EAAE,IAAI;EACX;MAOW,yBAAyB,oBAAoB;IACxD,YAAsB,YAA0B,EAAY,gBAAkC,EAAY,iBAAoC;QAC5I,KAAK,CAAC,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QADrC,iBAAY,GAAZ,YAAY,CAAc;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;KAE7I;IAED,aAAa,CAAC,KAAU;QACtB,IAAI,CAAC,CAAC;QACN,IAAI,KAAK,EAAE;YACT,CAAC,GAAG,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;SACpE;QACD,OAAO,CAAC,CAAC;KACV;IAED,IAAI,aAAa;QACf,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;YAC1C,OAAO,EAAE,CAAC;SACX;aACI;YACH,OAAO,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAC5E;KACF;;6GApBU,gBAAgB;iGAAhB,gBAAgB,mCAFhB,CAAC,wCAAwC,CAAC,iDCfvD,gtBAkBA;2FDDa,gBAAgB;kBAL5B,SAAS;+BACE,UAAU,aAET,CAAC,wCAAwC,CAAC;;;MET1C,4CAA4C,GAAQ;IAC/D,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;IACnD,KAAK,EAAE,IAAI;EACX;MAOW,6BAA6B,oBAAoB;IAC5D,YAAsB,YAA0B,EAAY,gBAAkC,EAAY,iBAAoC;QAC5I,KAAK,CAAC,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QADrC,iBAAY,GAAZ,YAAY,CAAc;QAAY,qBAAgB,GAAhB,gBAAgB,CAAkB;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;KAE7I;IAED,IAAI,aAAa;QACf,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;YAC1C,OAAO,EAAE,CAAC;SACX;aACI;YACH,OAAO,YAAY,CAAC,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAChF;KACF;;iHAZU,oBAAoB;qGAApB,oBAAoB,uCAFpB,CAAC,4CAA4C,CAAC,iDCf3D,u+BAyBA;2FDRa,oBAAoB;kBALhC,SAAS;+BACE,cAAc,aAEb,CAAC,4CAA4C,CAAC;;;MEL9C,6BAA6B,mBAAmB;IAC3D,YAAsB,YAA0B;QAC9C,KAAK,CAAC,YAAY,CAAC,CAAC;QADA,iBAAY,GAAZ,YAAY,CAAc;KAE/C;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;KACzC;;iHAPU,oBAAoB;qGAApB,oBAAoB,2ECVjC,0xBAiBkG;2FDPrF,oBAAoB;kBALhC,SAAS;+BACE,cAAc;;;MEAb,0CAA0C,GAAQ;IAC7D,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;IACjD,KAAK,EAAE,IAAI;EACX;MAOW,2BAA2B,kBAAkB;IACxD,YAAsB,YAA0B,EAAY,iBAAoC;QAC9F,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QADnB,iBAAY,GAAZ,YAAY,CAAc;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;KAE/F;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;KAC1C;IAED,IAAI,KAAK,CAAC,CAAM;QACd,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;YAE5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;KACjC;;+GArBU,kBAAkB;mGAAlB,kBAAkB,qCAFlB,CAAC,0CAA0C,CAAC,iDCfzD,8pBAckG;2FDGrF,kBAAkB;kBAL9B,SAAS;+BACE,YAAY,aAEX,CAAC,0CAA0C,CAAC;;;MET5C,gDAAgD,GAAQ;IACnE,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;IACvD,KAAK,EAAE,IAAI;EACX;MAOW,iCAAiC,kBAAkB;IAY9D,YAAsB,YAA0B,EAAY,iBAAoC;QAC9F,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QADnB,iBAAY,GAAZ,YAAY,CAAc;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;QANhG,aAAQ,GAAY,KAAK,CAAC;QAE1B,mBAAc,GAAG,IAAI,YAAY,EAAU,CAAC;QAE5C,aAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;KAIrC;IAED,MAAM,CAAC,KAAU;QACf,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;IAED,WAAW,CAAC,KAAU;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;;qHAtBU,wBAAwB;yGAAxB,wBAAwB,kNAFxB,CAAC,gDAAgD,CAAC,iDCf/D,04BAoBkG;2FDHrF,wBAAwB;kBALpC,SAAS;+BACE,kBAAkB,aAEjB,CAAC,gDAAgD,CAAC;gIAI7D,WAAW;sBADV,KAAK;gBAGN,eAAe;sBADd,KAAK;gBAGN,QAAQ;sBADP,KAAK;gBAGN,cAAc;sBADb,MAAM;gBAGP,QAAQ;sBADP,MAAM;;;AEpBT;;;;MAKsB,8BAA8B,aAAa;IAgC/D,YAAsB,YAA0B;QAC9C,KAAK,EAAE,CAAC;QADY,iBAAY,GAAZ,YAAY,CAAc;QAZhD,gBAAW,GAAW,EAAE,CAAC;QAEzB,aAAQ,GAAY,KAAK,CAAC;QAE1B,cAAS,GAAY,KAAK,CAAC;QAI3B,qBAAgB,GAAY,KAAK,CAAC;QAElC,aAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;KAIrC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK;gBACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC3B,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;SACxD;KACF;;IAGD,MAAM;QACJ,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SACzE;KACF;;IAGD,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;SACvC;KACF;;;IAID,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1G;IAED,SAAS;QACP,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5C;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;IAED,IAAI,MAAM;QACR,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YACf,OAAO,IAAI,CAAC,IAAI,CAAC;SAClB;aAAM;YACL,OAAmB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACxC;KACF;;kHAjFmB,qBAAqB;sGAArB,qBAAqB;2FAArB,qBAAqB;kBAD1C,SAAS;gGAGR,OAAO;sBADN,KAAK;gBAGN,IAAI;sBADH,KAAK;gBAGN,MAAM;sBADL,KAAK;gBAGN,eAAe;sBADd,KAAK;gBAGN,KAAK;sBADJ,KAAK;gBAGN,MAAM;sBADL,KAAK;gBAGN,YAAY;sBADX,KAAK;gBAGN,eAAe;sBADd,KAAK;gBAGN,KAAK;sBADJ,KAAK;gBAGN,WAAW;sBADV,KAAK;gBAGN,QAAQ;sBADP,KAAK;gBAGN,SAAS;sBADR,KAAK;gBAGN,aAAa;sBADZ,KAAK;gBAGN,gBAAgB;sBADf,KAAK;gBAGN,QAAQ;sBADP,MAAM;;;ACjCT;;;;;;;;;MAUsB,sCAAsC,qBAAqB;IAa/E,YACY,MAAsB,EACtB,aAAmC,EACnC,YAA0B,EAC1B,gBAAkC;QAE5C,KAAK,CAAC,YAAY,CAAC,CAAC;QALV,WAAM,GAAN,MAAM,CAAgB;QACtB,kBAAa,GAAb,aAAa,CAAsB;QACnC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAhBrC,cAAS,GAAY,KAAK,CAAC;QAI3B,cAAS,GAAW,8BAA8B,CAAC;QACnD,iBAAY,GAAY,IAAI,CAAC;QAEtC,kBAAa,GAAU,EAAE,CAAC;QAC1B,yBAAoB,GAAU,EAAE,CAAC;QAEjC,sBAAiB,GAAW,EAAE,CAAC;KAS9B;;IAGD,gBAAgB;QACd,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;QACzG,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;YAElE,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACjH;SACF;aAAM;YACL,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;SAChC;;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,4CAA4C,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACxE,IAAI,CAAC,gBAAgB;iBAClB,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACb,SAAS,CAAC,CAAC,WAAW;gBACrB,OAAO,CAAC,GAAG,CAAC,+CAA+C,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC,CAAC;gBACzG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;;aAEtC,CAAC,CAAC;SACN;KACF;;0HA/CmB,6BAA6B;8GAA7B,6BAA6B;2FAA7B,6BAA6B;kBADlD,SAAS;yLAEC,SAAS;sBAAjB,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBACG,EAAE;sBAAV,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,YAAY;sBAApB,KAAK;;;AChBR;;;;;;;;;MAaa,6BAA6B,6BAA6B;IASrE,YACY,MAAsB,EACtB,aAAmC,EACnC,YAA0B,EAC1B,gBAAkC;QAE5C,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QALnD,WAAM,GAAN,MAAM,CAAgB;QACtB,kBAAa,GAAb,aAAa,CAAsB;QACnC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAZrC,WAAM,GAAY,KAAK,CAAC;QAEjC,kBAAa,GAAG,OAAO,CAAC;QAExB,kBAAa,GAAG,OAAO,CAAC;QAExB,qBAAgB,GAAG,UAAU,CAAC;KAS7B;IAED,WAAW,CAAC,OAA4C;QACtD,IAAI,UAAU,GAAY,KAAK,CAAC;QAChC,KAAK,IAAI,QAAQ,IAAI,OAAO,EAAE;YAC5B,IAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,MAAM,EAAE;gBACvB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;gBACtF,UAAU,GAAG,IAAI,CAAC;aACnB;iBAAM,IAAI,QAAQ,KAAK,gBAAgB,EAAE;gBACxC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC/C,UAAU,GAAG,IAAI,CAAC;aACnB;iBAAM,IAAI,QAAQ,KAAK,cAAc,EAAE;gBACtC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC7C,UAAU,GAAG,IAAI,CAAC;aACnB;SACF;QACD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;KACF;;IAGD,gBAAgB;QACd,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;QACzG,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;YAElE,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACjH;SACF;aAAM;YACL,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;SAChC;;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,4CAA4C,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACxE,IAAI,CAAC,gBAAgB;iBAClB,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACb,SAAS,CAAC,CAAC,WAAW;gBACrB,IAAI,SAAS,GAAG,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gBACnD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;gBACrC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC;gBAC5C,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBAClD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;;aAEtC,CAAC,CAAC;SACN;KACF;IAED,IAAI,aAAa;QACf,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7B,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QAC/E,OAAO,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;KAC/B;;iHAvEU,oBAAoB;qGAApB,oBAAoB,oOCpBjC,gpCA2BA;2FDPa,oBAAoB;kBAJhC,SAAS;+BACE,cAAc;yLAIf,MAAM;sBAAd,KAAK;gBAEN,aAAa;sBADZ,KAAK;gBAGN,aAAa;sBADZ,KAAK;gBAGN,gBAAgB;sBADf,KAAK;;;AEpBR;;;;;;;;MAaa,qCAAqC,6BAA6B;;;IAQ7E,YACY,MAAsB,EACtB,aAAmC,EACnC,YAA0B,EAC1B,gBAAkC;QAE5C,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QALnD,WAAM,GAAN,MAAM,CAAgB;QACtB,kBAAa,GAAb,aAAa,CAAsB;QACnC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAXrC,sBAAiB,GAAW,CAAC,CAAC;QAC9B,+BAA0B,GAAY,KAAK,CAAC;KAapD;IAED,WAAW,CAAC,OAA4C;QACtD,IAAI,UAAU,GAAY,KAAK,CAAC;QAChC,KAAK,IAAI,QAAQ,IAAI,OAAO,EAAE;YAC5B,IAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,MAAM,EAAE;gBACvB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;gBACtF,UAAU,GAAG,IAAI,CAAC;aACnB;iBAAM,IAAI,QAAQ,KAAK,gBAAgB,EAAE;gBACxC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC/C,UAAU,GAAG,IAAI,CAAC;aACnB;iBAAM,IAAI,QAAQ,KAAK,cAAc,EAAE;gBACtC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC7C,UAAU,GAAG,IAAI,CAAC;aACnB;SACF;QACD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;KACF;IAED,iBAAiB,CAAC,EAAE;QAClB,IAAI,KAAK,GAAW,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC7D,IAAI,QAAQ,EAAE;gBACZ,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;aACxB;SACF;QACD,OAAO,KAAK,CAAC;KACd;IAED,kBAAkB,CAAC,KAAK,EAAE,IAAI;QAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;QAE9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C;IAED,IAAI,aAAa;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,EAAE;YACV,IAAI,KAAK,GAAU,EAAE,CAAC;YACtB,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;gBACpB,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;gBAC5D,IAAI,MAAM,EAAE;oBACV,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC1B;aACF;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,EAAE,CAAC;KACX;;yHAtEU,4BAA4B;6GAA5B,4BAA4B,yPCnBzC,6zDAqCA;2FDlBa,4BAA4B;kBAJxC,SAAS;+BACE,uBAAuB;yLAIxB,iBAAiB;sBAAzB,KAAK;gBACG,0BAA0B;sBAAlC,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,MAAM;sBAAd,KAAK;;;MEvBK,mBAAmB;IAM9B;QALA,eAAU,GAAY,IAAI,CAAC;QAC3B,aAAQ,GAAY,IAAI,CAAC;QACzB,WAAM,GAAY,IAAI,CAAC;QACvB,SAAI,GAAY,IAAI,CAAC;KAEL;IAET,OAAO,SAAS;QACrB,OAAO,IAAI,mBAAmB,EAAE,CAAC;KAClC;IAEM,OAAO,eAAe,CAAC,MAAW;QACvC,IAAI,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACvC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7B,OAAO,MAAM,CAAC;KACf;;;MCZU,uCAAuC,GAAQ;IAC1D,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;IACjD,KAAK,EAAE,IAAI;EACX;AAEF;;;;;;;;;;MAgBa,2BAA2B,kBAAkB;IAUxD,YAAsB,YAA0B,EAAY,iBAAoC;QAC9F,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QADnB,iBAAY,GAAZ,YAAY,CAAc;QAAY,sBAAiB,GAAjB,iBAAiB,CAAmB;QATvF,SAAI,GAAW,SAAS,CAAC;;;QAGzB,kBAAa,GAAwB,kBAAkB,CAAC,mBAAmB,CAAC;QAC5E,WAAM,GAAW,GAAG,CAAC;KAO7B;IAED,IAAI,aAAa;QACf,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,OAAO,EAAE,CAAC;SACX;aACI;YACH,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;KACF;IAED,OAAO;QACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,MAAM,CAAC,KAAK;;;;;;;;;;KAUX;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC,mBAAmB,CAAC;KACzF;;AAlCD;AACc,sCAAmB,GAAG,mBAAmB,CAAC,SAAS,EAAG,CAAA;+GARzD,kBAAkB;mGAAlB,kBAAkB,iHAFlB,CAAC,uCAAuC,CAAC,iDC5BtD,4mFAoDgG;2FDtBnF,kBAAkB;kBAL9B,SAAS;+BACE,YAAY,aAEX,CAAC,uCAAuC,CAAC;gIAG3C,IAAI;sBAAZ,KAAK;gBAGG,aAAa;sBAArB,KAAK;gBACG,MAAM;sBAAd,KAAK;;;ME1BK,oBAAoB;IAU/B,YACY,MAAsB,EACtB,aAAmC,EACnC,YAA0B,EAC1B,iBAAoC;QAHpC,WAAM,GAAN,MAAM,CAAgB;QACtB,kBAAa,GAAb,aAAa,CAAsB;QACnC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,sBAAiB,GAAjB,iBAAiB,CAAmB;QAVvC,cAAS,GAAY,KAAK,CAAC;QAI5B,qBAAgB,GAAU,EAAE,CAAC;KAOjC;IAEJ,QAAQ;QACN,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;gBAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAClC,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,UAAU,IAAI,IAAI,EAAE;oBACtB,UAAU,CAAC,SAAS,CAClB,MAAM;;wBAEJ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;wBACpD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;wBACvC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;qBACxC,EACD,KAAK;wBACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;qBAC1D,CACF,CAAC;iBACH;qBAAM;oBACL,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;iBAChD;aACF,CAAC,CAAC;SACJ;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE;YACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SAC3C;KACF;IAED,WAAW,CAAC,OAAsB;QAChC,KAAK,IAAI,QAAQ,IAAI,OAAO,EAAE;YAC5B,IAAI,QAAQ,KAAK,MAAM,EAAE;gBACvB,IAAI,OAAO,GAAU,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC1D,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;aACxC;SACF;KACF;IAED,SAAS;QACP,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5C;IAED,IAAI,aAAa;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;QAChC,QAAQ,IAAI,CAAC,IAAI;YACf,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YACpG,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YACnG,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YAC/F,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;YAClC,KAAK,MAAM;gBACT,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC1B,KAAK,eAAe;gBAClB,IAAI,MAAM,GAAU,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;gBACjJ,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC3C;gBACE,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;KACF;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;KACjC;;iHAjFU,oBAAoB;qGAApB,oBAAoB,2LCTjC,4TAK+D;2FDIlD,oBAAoB;kBAJhC,SAAS;+BACE,cAAc;6LAIf,KAAK;sBAAb,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBACG,MAAM;sBAAd,KAAK;;;AEPR;;;MAOa,6BAA6B,aAAa;IASrD,YAAoB,IAAgB,EAAU,iBAAoC;QAChF,KAAK,EAAE,CAAC;QADU,SAAI,GAAJ,IAAI,CAAY;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;QARxE,WAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAItC,aAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,cAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QACzC,SAAI,GAAoB,MAAM,CAAC;KAI9B;IAED,QAAQ;QACN,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;;IAGD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;KAC3E;IAED,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;KAChC;;IAGD,eAAe;QACb,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;aAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC,CAAC,CAAC;KACN;;IAGD,eAAe;;QAEb,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CACrD,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE;;YAEhB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;SAChD,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,CACR,CAAC;;QAEF,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;aAC7B,IAAI,CACH,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EACnC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB;aACA,SAAS,CAAC,CAAC,KAAK;YACf,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,CAAC,CAAC;;;QAIL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK;YACxF,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;KACpB;;iHAvEU,oBAAoB;qGAApB,oBAAoB,4HAEjB,iBAAiB,8EACjB,iBAAiB,uEALrB,iEAAiE;2FAEhE,oBAAoB;kBAJhC,SAAS;mBAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,QAAQ,EAAE,iEAAiE;iBAC5E;iIAEW,MAAM;sBAAf,MAAM;gBAC0B,WAAW;sBAA3C,YAAY;uBAAC,iBAAiB;gBACE,WAAW;sBAA3C,YAAY;uBAAC,iBAAiB;;;ACgDjC,MAAM,OAAO,GAAU;IACrB,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,cAAc;IACd,cAAc;IACd,YAAY;IACZ,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,UAAU;IACV,cAAc;IACd,aAAa;IACb,WAAW;IACX,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,iBAAiB;IACjB,aAAa;IACb,kBAAkB;IAClB,cAAc;IACd,WAAW;IACX,eAAe;CAChB,CAAC;MAEW,UAAU,GAAU;IAC/B,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,6BAA6B;IAC7B,6BAA6B;IAC7B,mBAAmB;IACnB,oBAAoB;IACpB,wBAAwB;IACxB,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;EACvB;MAEW,cAAc,GAAU;IACnC,gBAAgB;IAChB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;IACxB,oBAAoB;IACpB,4BAA4B;IAC5B,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;EACpB;MAEW,UAAU,GAAU,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE;MAEnF,KAAK,GAAU,CAAC,cAAc,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE;MAQlG,mBAAmB;;gHAAnB,mBAAmB;iHAAnB,mBAAmB,iBAVE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAjC5F,sBAAsB;QACtB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,gBAAgB;QAChB,mBAAmB;QACnB,6BAA6B;QAC7B,6BAA6B;QAC7B,mBAAmB;QACnB,oBAAoB;QACpB,wBAAwB;QACxB,sBAAsB;QACtB,yBAAyB;QACzB,uBAAuB,EAIvB,gBAAgB;QAChB,oBAAoB;QACpB,gBAAgB;QAChB,gBAAgB;QAChB,oBAAoB;QACpB,oBAAoB;QACpB,kBAAkB;QAClB,wBAAwB;QACxB,oBAAoB;QACpB,4BAA4B;QAC5B,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB,EAKO,cAAc,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,aA/D3G,YAAY;QACZ,mBAAmB;QACnB,WAAW;QACX,cAAc;QACd,cAAc;QACd,YAAY;QACZ,iBAAiB;QACjB,eAAe;QACf,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,YAAY;QACZ,UAAU;QACV,cAAc;QACd,aAAa;QACb,WAAW;QACX,mBAAmB;QACnB,eAAe;QACf,kBAAkB;QAClB,iBAAiB;QACjB,aAAa;QACb,kBAAkB;QAClB,cAAc;QACd,WAAW;QACX,eAAe,EA0CO,gBAAgB,EAAE,eAAe,aAlEvD,YAAY;QACZ,mBAAmB;QACnB,WAAW;QACX,cAAc;QACd,cAAc;QACd,YAAY;QACZ,iBAAiB;QACjB,eAAe;QACf,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,YAAY;QACZ,UAAU;QACV,cAAc;QACd,aAAa;QACb,WAAW;QACX,mBAAmB;QACnB,eAAe;QACf,kBAAkB;QAClB,iBAAiB;QACjB,aAAa;QACb,kBAAkB;QAClB,cAAc;QACd,WAAW;QACX,eAAe,EAqCiB,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAEjE,cAAc,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAnC3G,sBAAsB;QACtB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,gBAAgB;QAChB,mBAAmB;QACnB,6BAA6B;QAC7B,6BAA6B;QAC7B,mBAAmB;QACnB,oBAAoB;QACpB,wBAAwB;QACxB,sBAAsB;QACtB,yBAAyB;QACzB,uBAAuB,EAIvB,gBAAgB;QAChB,oBAAoB;QACpB,gBAAgB;QAChB,gBAAgB;QAChB,oBAAoB;QACpB,oBAAoB;QACpB,kBAAkB;QAClB,wBAAwB;QACxB,oBAAoB;QACpB,4BAA4B;QAC5B,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB;iHAaT,mBAAmB,aAFnB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,cAAc,CAAC,YAH1E,CAAC,GAAG,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAlExD,YAAY;QACZ,mBAAmB;QACnB,WAAW;QACX,cAAc;QACd,cAAc;QACd,YAAY;QACZ,iBAAiB;QACjB,eAAe;QACf,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,YAAY;QACZ,UAAU;QACV,cAAc;QACd,aAAa;QACb,WAAW;QACX,mBAAmB;QACnB,eAAe;QACf,kBAAkB;QAClB,iBAAiB;QACjB,aAAa;QACb,kBAAkB;QAClB,cAAc;QACd,WAAW;QACX,eAAe;2FA+CJ,mBAAmB;kBAN/B,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC;oBACxD,YAAY,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,UAAU,EAAE,GAAG,cAAc,EAAE,GAAG,KAAK,CAAC;oBACzE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,EAAE,GAAG,UAAU,EAAE,GAAG,cAAc,CAAC;oBAChF,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,cAAc,CAAC;iBACpF;;;AClID;;;;;;;;;;MAWsB,oCAAoC,kBAAkB;IAc1E,YACY,MAAsB,EACtB,aAAmC,EACnC,YAA0B,EAC1B,iBAAoC,EACpC,gBAAkC;QAE5C,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAN7B,WAAM,GAAN,MAAM,CAAgB;QACtB,kBAAa,GAAb,aAAa,CAAsB;QACnC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAlBrC,cAAS,GAAY,KAAK,CAAC;QAK3B,cAAS,GAAW,8BAA8B,CAAC;QACnD,iBAAY,GAAY,IAAI,CAAC;QAEtC,kBAAa,GAAU,EAAE,CAAC;QAC1B,yBAAoB,GAAU,EAAE,CAAC;QAEjC,sBAAiB,GAAW,EAAE,CAAC;KAU9B;;IAGS,cAAc;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;aACvC;;iBAEI,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gBAC/E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;aAC7D;iBAAM,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gBACjF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;aAC7D;SACF;KACF;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;;IAGD,gBAAgB;QACd,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;QACzG,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;YAElE,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACjH;SACF;aAAM;YACL,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;SAChC;;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,4CAA4C,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACxE,IAAI,CAAC,gBAAgB;iBAClB,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACb,SAAS,CAAC,CAAC,WAAW;gBACrB,OAAO,CAAC,GAAG,CAAC,+CAA+C,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC,CAAC;gBACzG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;;aAEtC,CAAC,CAAC;SACN;KACF;IAED,MAAM;QACJ,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,OAAO;QACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;;wHA9EmB,2BAA2B;4GAA3B,2BAA2B;2FAA3B,2BAA2B;kBADhD,SAAS;yNAEC,SAAS;sBAAjB,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBACG,OAAO;sBAAf,KAAK;gBACG,EAAE;sBAAV,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,YAAY;sBAApB,KAAK;;;ACzBR;;;MAGa,IAAI;IACf,YAAmB,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;KAAI;;;MCFtB,gBAAgB,IAAI;IAC/B,YACS,EAAU,EACV,MAAc,EACd,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,iBAAyB,EACzB,WAAmB,EACnB,aAAqB;QAE5B,KAAK,CAAC,EAAE,CAAC,CAAC;QATH,OAAE,GAAF,EAAE,CAAQ;QACV,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;QAChB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,sBAAiB,GAAjB,iBAAiB,CAAQ;QACzB,gBAAW,GAAX,WAAW,CAAQ;QACnB,kBAAa,GAAb,aAAa,CAAQ;KAG7B;IAEM,OAAO,SAAS;QACrB,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;KACvD;;;MChBU,eAAe;IAK1B,YACS,KAAwB,EACxB,OAA0B,EAC1B,WAAmB,MAAM;;QAFzB,UAAK,GAAL,KAAK,CAAmB;QACxB,YAAO,GAAP,OAAO,CAAmB;QAC1B,aAAQ,GAAR,QAAQ,CAAiB;KAC9B;;AARG,oBAAI,GAAW,MAAM,CAAC;AACtB,oBAAI,GAAW,MAAM,CAAC;AACtB,qBAAK,GAAW,OAAO;;MCFnB,6BAA6B,eAAe;IACvD,YAAmB,KAAwB,EAAS,OAA0B,EAAS,OAAgB,EAAS,cAAoC;QAClJ,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;QAD5B,UAAK,GAAL,KAAK,CAAmB;QAAS,YAAO,GAAP,OAAO,CAAmB;QAAS,YAAO,GAAP,OAAO,CAAS;QAAS,mBAAc,GAAd,cAAc,CAAsB;KAEnJ;;;MCGU,kBAAkB;IAC7B,aAAa,CAAC,SAAiC;QAC7C,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC;KACnE;;+GAHU,kBAAkB;mHAAlB,kBAAkB;2FAAlB,kBAAkB;kBAD9B,UAAU;;;MCCE,qBAAqB;IAChC,YAAoB,iBAAoC,EAAU,YAA0B;QAAxE,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAU,iBAAY,GAAZ,YAAY,CAAc;QAC1F,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;KACtD;IAED,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,UAAU,CAAC,CAAC,KAAwB;;YAElC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,WAAW,GAAG,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC9C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;SAC1B,CAAC,EACF,QAAQ,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC,CAAC,CACH,CAAC;KACH;;kHAvBU,qBAAqB;sHAArB,qBAAqB,cADR,MAAM;2FACnB,qBAAqB;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACRlC;;;;ACAA;;;;;;"}
|