@jvsoft/components 0.0.13-alpha.4 → 1.0.0-alpha.10

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.
Files changed (36) hide show
  1. package/dialog-flotante/README.md +169 -0
  2. package/dialog-flotante/dialog-flotante.component.d.ts +13 -22
  3. package/fesm2022/jvsoft-components-dialog-flotante.mjs +49 -83
  4. package/fesm2022/jvsoft-components-dialog-flotante.mjs.map +1 -1
  5. package/fesm2022/jvsoft-components-filtro-busqueda.mjs +660 -0
  6. package/fesm2022/jvsoft-components-filtro-busqueda.mjs.map +1 -0
  7. package/fesm2022/jvsoft-components-lista-arbol.mjs +121 -145
  8. package/fesm2022/jvsoft-components-lista-arbol.mjs.map +1 -1
  9. package/fesm2022/jvsoft-components-luces-navidad.mjs.map +1 -1
  10. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs +4 -2
  11. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs.map +1 -1
  12. package/fesm2022/jvsoft-components-menu.mjs.map +1 -1
  13. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs +1 -1
  14. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs.map +1 -1
  15. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs +107 -61
  16. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs.map +1 -1
  17. package/fesm2022/jvsoft-components.mjs +928 -302
  18. package/fesm2022/jvsoft-components.mjs.map +1 -1
  19. package/filtro-busqueda/README.md +156 -0
  20. package/filtro-busqueda/filtro-busqueda.component.d.ts +89 -0
  21. package/filtro-busqueda/filtro-busqueda.component.scss +98 -0
  22. package/filtro-busqueda/filtro-busqueda.service.d.ts +40 -0
  23. package/filtro-busqueda/index.d.ts +5 -0
  24. package/filtro-busqueda/interfaces/filtro-busqueda.interface.d.ts +86 -0
  25. package/filtro-busqueda/public-api.d.ts +3 -0
  26. package/index.d.ts +1 -0
  27. package/lista-arbol/README.md +268 -0
  28. package/lista-arbol/lista-arbol.component.d.ts +36 -37
  29. package/package.json +14 -11
  30. package/src/styles/base-jvsoft-components.css +6 -4
  31. package/src/styles/base.scss +1 -0
  32. package/tabla-mantenimiento/interfaces/global/columnas-tabla.d.ts +9 -10
  33. package/tabla-mantenimiento/interfaces/global/otros.d.ts +1 -0
  34. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.d.ts +2 -1
  35. package/tabla-mantenimiento/tabla-mantenimiento.component.d.ts +15 -8
  36. package/tabla-mantenimiento/tabla-mantenimiento.component.scss +14 -1
@@ -0,0 +1,156 @@
1
+ # Documentación de FiltroBusquedaComponent
2
+
3
+ El componente `@jvsoft/components/filtro-busqueda` es un sistema dinámico de filtrado diseñado para Angular v19+. Utiliza **Signals** para la gestión de estado y ofrece una estética "orgánica" basada en elementos nativos con el poder de Angular Material.
4
+
5
+ ## Características Principales
6
+
7
+ - **Angular 19+**: Aprovecha `signal()`, `input()`, `output()` y el nuevo flujo de control (`@if`, `@for`).
8
+ - **Estética Orgánica**: Labels sobre el borde (fieldset/legend) con tipografía limpia y bordes continuos.
9
+ - **Carga en Cascada (Niveles)**: Soporta hasta 5 niveles de peticiones asíncronas encadenadas mediante `ordenPeticion`.
10
+ - **Tipos de Control**: Autocomplete, Select, Date, Date Range, Checkbox, Text, Number, y Controles Agrupados.
11
+ - **Resumen Automático**: Genera una cadena legible (`labelResumen`) de todos los filtros aplicados.
12
+ - **Servicio Centralizado**: Gestión de estado reactiva mediante `FiltroBusquedaService`.
13
+
14
+ ---
15
+
16
+ ## 🚀 Instalación e Importación
17
+
18
+ Importa el componente en tu módulo o componente standalone:
19
+
20
+ ```typescript
21
+ import { FiltroBusquedaComponent } from '@jvsoft/components/filtro-busqueda';
22
+
23
+ @Component({
24
+ standalone: true,
25
+ imports: [FiltroBusquedaComponent],
26
+ // ...
27
+ })
28
+ export class MiComponente {}
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 🛠️ Configuración (CampoFiltro)
34
+
35
+ El componente se configura mediante un array de `TabSeccion`. Cada sección contiene un array de `CampoFiltro`.
36
+
37
+ ### Propiedades de CampoFiltro
38
+
39
+ | Propiedad | Tipo | Descripción |
40
+ | :--- | :--- | :--- |
41
+ | `control` | `TiposControl` | `select`, `autocomplete`, `date`, `date_range`, `checkbox`, `text`, `number` |
42
+ | `campo` | `string` | Nombre del campo en el formulario y objeto resultante. |
43
+ | `label` | `string` | Texto descriptivo (se muestra en el legend). |
44
+ | `value` | `any` | Valor inicial (`*fechaActual*`, `*primero*`, etc). |
45
+ | `required` | `boolean` | Indica si el campo es obligatorio. |
46
+ | `select` / `autocomplete` | `Config` | Objeto de configuración específico para estos tipos. |
47
+ | `dateRange` | `Config` | Configuración para rangos de fechas. |
48
+ | `ordenPeticion` | `number (0-4)` | Nivel de carga cuando hay selects dependientes. |
49
+
50
+ ---
51
+
52
+ ## 📊 Carga de Datos en Cascada
53
+
54
+ El componente utiliza un sistema de niveles para cargar datos del servidor de forma ordenada.
55
+
56
+ ### Ejemplo: País -> Departamento -> Provincia
57
+
58
+ 1. **Nivel 0**: Se carga la lista de Países.
59
+ 2. **Nivel 1**: El select de Departamento tiene `ordenPeticion: 1` y espera a que el País tenga valor.
60
+ 3. **Nivel 2**: El select de Provincia tiene `ordenPeticion: 2` y espera a Departamento.
61
+
62
+ Configura `reqParams.fields` para indicar qué campos debe enviar el control dependiente al servidor.
63
+
64
+ ---
65
+
66
+ ## 🔄 Inputs y Outputs
67
+
68
+ ### Inputs
69
+ - `opciones`: Array de `TabSeccion[]` con la configuración.
70
+ - `nombreColeccion`: ID único para el service (ej: `'tramitesBusqueda'`).
71
+ - `defaultTab`: Índice de la pestaña inicial (default `0`).
72
+ - `busquedaAutomatica`: Si es `true`, emite cambios en cada interacción.
73
+
74
+ ### Outputs
75
+ - `buscar`: **NUEVA API (Mejora 2)**. Evento principal de filtrado. Emite la interfaz `FiltroResultante` con los datos listos para API y las etiquetas legibles (`labelResumen`).
76
+ - `resultados`: **@deprecated**. Solo emite el diccionario crudo. Se mantiene temporalmente por retrocompatibilidad. ¡Usa `(buscar)` en su lugar!
77
+ - `dataFiltro`: **@deprecated** (Paradigma Zero-Output). En lugar de escuchar este evento, inyecta el `FiltroBusquedaService` y usa `getFiltroSignal()`.
78
+ - `cargaCompleta`: **@deprecated** (Paradigma Zero-Output). Depender de Signals en el servicio evita la necesidad de este output de sincronización.
79
+
80
+ ---
81
+
82
+ ## � Acceso al Estado (Angular 19+ Signals)
83
+
84
+ El estado del filtro está centralizado en `FiltroBusquedaService`. Para acceder de forma reactiva y Zero-Cost desde cualquier componente, utiliza la nueva API basada en Signals:
85
+
86
+ ```typescript
87
+ import { Component, inject, computed } from '@angular/core';
88
+ import { FiltroBusquedaService } from '@jvsoft/components/filtro-busqueda';
89
+
90
+ @Component({ ... })
91
+ export class MiVistaTabla {
92
+ private filtroService = inject(FiltroBusquedaService);
93
+
94
+ // 1. Obtener los valores del formulario continuamente
95
+ // Retorna un Signal<any>, inicializado con el fallback proveído.
96
+ readonly dataFiltro = this.filtroService.getFiltroSignal('tramitesBusqueda', { datosFiltro: {} });
97
+
98
+ // 2. Obtener metadatos/catálogos que llegaron del servidor para un campo
99
+ readonly listaDepartamentos = this.filtroService.getDataServidorSignal('tramitesBusqueda', 'departamento_id', []);
100
+ }
101
+ ```
102
+
103
+ > **Nota**: Los métodos `getValue()` y `getDataServidorSuscripcion()` aún existen para retrocompatibilidad síncrona, pero su uso reactivo con RxJS está marcado como **@deprecated**.
104
+
105
+ ---
106
+
107
+ ## �📋 FiltroResultante
108
+
109
+ El objeto emitido por `resultados` tiene esta estructura:
110
+
111
+ ```typescript
112
+ export interface FiltroResultante {
113
+ datosFiltro: { [key: string]: any }; // Datos crudos para enviar al API
114
+ datosFiltroConLabel: DataFiltroAplicado[]; // Metadatos con etiquetas
115
+ labelResumen: string; // "Periodo: 01/01/2026 - 31/01/2026 | Estado: Activo"
116
+ }
117
+ ```
118
+
119
+ ---
120
+
121
+ ## 💉 Token de Servicio de Datos (QUERY_SERVICE_TOKEN)
122
+
123
+ El componente no sabe cómo llamar a tu API. Debes proveer una implementación del `QUERY_SERVICE_TOKEN`:
124
+
125
+ ```typescript
126
+ {
127
+ provide: QUERY_SERVICE_TOKEN,
128
+ useExisting: MiApiService // Debe tener un método .cargar(...)
129
+ }
130
+ ```
131
+
132
+ ---
133
+
134
+ ## 🧪 Ejemplo de Autocomplete
135
+
136
+ ```typescript
137
+ {
138
+ control: 'autocomplete',
139
+ campo: 'idEntidad',
140
+ label: 'Entidad',
141
+ autocomplete: {
142
+ data: 'entidades', // Nombre de la consulta al servidor
143
+ camposText: ['nombre', 'ruc'], // Campos para el label
144
+ campotxtBuscar: 'nombre', // Parámetro de búsqueda al API
145
+ campotxtBuscarLength: 3 // Mínimo caracteres para disparar búsqueda
146
+ }
147
+ }
148
+ ```
149
+
150
+ ---
151
+
152
+ ## 💡 Mejores Prácticas
153
+
154
+ - Usa `nombreColeccion` descriptivos para evitar colisiones en el `FiltroBusquedaService`.
155
+ - Aprovecha `labelResumen` para mostrar al usuario qué filtros tiene activos sin ocupar mucho espacio.
156
+ - En `date_range`, usa `value: ['*fechaActual*', '*fechaActual*']` para inicializar el día de hoy cómodamente.
@@ -0,0 +1,89 @@
1
+ import { InjectionToken, OnDestroy, OnInit } from '@angular/core';
2
+ import { BehaviorSubject, Observable, Subject } from 'rxjs';
3
+ import { FormArray, FormControl, FormGroup } from '@angular/forms';
4
+ import { DataServidor, mostrarValorEnBusqueda, tipoValorFuncion } from '@jvsoft/utils';
5
+ import { CampoFiltro, FiltroResultante, TabFiltroSeccion, TabSeccion } from './interfaces/filtro-busqueda.interface';
6
+ import * as i0 from "@angular/core";
7
+ export interface IQueryService {
8
+ cargar(objThis: any, reqArray: string[], data: any, anonimo: boolean, prefix: string): Promise<any>;
9
+ }
10
+ export declare const QUERY_SERVICE_TOKEN: InjectionToken<IQueryService>;
11
+ export declare class FiltroBusquedaComponent implements OnInit, OnDestroy {
12
+ private fb;
13
+ private toastr;
14
+ private filtroBusquedaService;
15
+ private queryService;
16
+ opciones: import("@angular/core").InputSignal<TabSeccion[]>;
17
+ nombreColeccionInput: import("@angular/core").InputSignal<string>;
18
+ prefijoConsulta: import("@angular/core").InputSignal<string>;
19
+ busquedaAutomatica: import("@angular/core").InputSignal<boolean>;
20
+ opciones$: import("@angular/core").InputSignal<Observable<TabSeccion[]> | undefined>;
21
+ modificarOpciones$: import("@angular/core").InputSignal<Observable<{
22
+ [key: string]: any;
23
+ }> | undefined>;
24
+ defaultTab: import("@angular/core").InputSignal<number>;
25
+ /**
26
+ * @deprecated Paradigma Zero-Output: Inyecta FiltroBusquedaService y usa `getFiltroSignal('nombreColeccion')` para estado en tiempo real, esto evita renderizados innecesarios del padre.
27
+ */
28
+ dataFiltro: import("@angular/core").OutputEmitterRef<any>;
29
+ /**
30
+ * @deprecated Su payload de diccionario crudo desaparecerá pronto (Mejora 2). Migra al nuevo evento `(buscar)` que emite la interfaz `FiltroResultante`.
31
+ * Se mantiene temporalmente para componentes legacy.
32
+ */
33
+ resultados: import("@angular/core").OutputEmitterRef<any>;
34
+ /**
35
+ * Evento principal explícito de búsqueda (Click en Filtrar). Emite el objeto con metadata y labels.
36
+ */
37
+ buscar: import("@angular/core").OutputEmitterRef<FiltroResultante>;
38
+ /**
39
+ * @deprecated Paradigma Zero-Output: Maneja la finalización de carga a través de los Signals internos del servicio o asume inmediatez de la arquitectura nueva.
40
+ */
41
+ cargaCompleta: import("@angular/core").OutputEmitterRef<boolean>;
42
+ tabActual: import("@angular/core").WritableSignal<number>;
43
+ dataOpcionesNuevo: import("@angular/core").WritableSignal<TabFiltroSeccion[]>;
44
+ isCargaCompleta: import("@angular/core").WritableSignal<boolean>;
45
+ frmFiltroBusqueda: FormGroup;
46
+ get opcionesTabs(): FormArray;
47
+ get frmGroupSeleccionado(): FormGroup;
48
+ getControl(nombre: string): FormControl;
49
+ getControlRaiz(nombre: string): FormControl;
50
+ getAutocompleteLabel(controlData: CampoFiltro, value: any): string;
51
+ dataServidor: DataServidor;
52
+ dataServidorSuscripcion: {
53
+ [key: string]: BehaviorSubject<any>;
54
+ };
55
+ filtrados: {
56
+ [key: string]: any[];
57
+ };
58
+ inputParaEnviarAutocomplete: Subject<any>;
59
+ private destroy$;
60
+ protected sufixTemporal: string;
61
+ protected tipoValorFuncion: typeof tipoValorFuncion;
62
+ private fechaActual;
63
+ constructor();
64
+ ngOnInit(): void;
65
+ private initOpciones;
66
+ private reorganizarOpcionesNuevas;
67
+ cargarDatosFiltroNuevo(idTab?: number): Promise<void>;
68
+ private actualizarEstadoService;
69
+ private setCustomData;
70
+ private procesarRetornoDatos;
71
+ getFiltroResultante(): FiltroResultante;
72
+ mostrarValorEnBusqueda: typeof mostrarValorEnBusqueda;
73
+ campoValorEval(campoFiltro: CampoFiltro, itemSelect: any): any;
74
+ campoTextEval(campoFiltro: CampoFiltro, itemSelect: any): string;
75
+ concatenarCadenasArray(array: string | string[], objData: any): any;
76
+ filtrarData(): void;
77
+ actualizarEnFormArray(name: string, value: any, extra?: {
78
+ disabled?: boolean;
79
+ }): void;
80
+ accionPosteriorCambioAutocomplete(controlData: CampoFiltro, valControl: any): void;
81
+ cambiarNuevo(campo: CampoFiltro, val: any): void;
82
+ cambiarSeleccionNuevo(campo: CampoFiltro, event?: any): void;
83
+ buscarControl(campo: string): CampoFiltro | undefined;
84
+ generarParams(meta: CampoFiltro, trigger: CampoFiltro): any;
85
+ limpiarAutocomplete(campo: CampoFiltro, event: Event): void;
86
+ ngOnDestroy(): void;
87
+ static ɵfac: i0.ɵɵFactoryDeclaration<FiltroBusquedaComponent, never>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<FiltroBusquedaComponent, "jvs-filtro-busqueda", never, { "opciones": { "alias": "opciones"; "required": false; "isSignal": true; }; "nombreColeccionInput": { "alias": "nombreColeccion"; "required": false; "isSignal": true; }; "prefijoConsulta": { "alias": "prefijoConsulta"; "required": false; "isSignal": true; }; "busquedaAutomatica": { "alias": "busquedaAutomatica"; "required": false; "isSignal": true; }; "opciones$": { "alias": "opciones$"; "required": false; "isSignal": true; }; "modificarOpciones$": { "alias": "modificarOpciones$"; "required": false; "isSignal": true; }; "defaultTab": { "alias": "defaultTab"; "required": false; "isSignal": true; }; }, { "dataFiltro": "dataFiltro"; "resultados": "resultados"; "buscar": "buscar"; "cargaCompleta": "cargaCompleta"; }, never, never, true, never>;
89
+ }
@@ -0,0 +1,98 @@
1
+ @use '@angular/material' as mat;
2
+
3
+ .jvsFiltroBusqueda {
4
+ @include mat.all-component-densities(-3);
5
+ @apply py-1;
6
+
7
+
8
+ .mat-mdc-tab,
9
+ .mat-mdc-tab-label,
10
+ .mat-tab-label {
11
+ height: 24px !important;
12
+ }
13
+
14
+ [aria-label=primary] {
15
+ color: rgb(var(--color-primary-contrast));
16
+ }
17
+
18
+ .mat-mdc-tab {
19
+ border-bottom: solid 2px !important;
20
+ border-bottom-color: rgb(var(--color-primary)) !important;
21
+ }
22
+
23
+ .mat-mdc-tab.mdc-tab--active {
24
+ @apply bg-primary/20;
25
+ }
26
+
27
+ .mat-mdc-tab.mdc-tab--active .mdc-tab__text-label {
28
+ color: rgb(var(--color-primary-selected-tab)) !important;
29
+ font-weight: bold;
30
+ }
31
+
32
+ fieldset.contenedorCampo {
33
+ @apply w-full sm:w-auto rounded-sm bg-transparent pt-0 pb-1 px-1 border-0;
34
+
35
+ legend {
36
+ @apply px-2 text-2xs font-light border-0 bg-transparent;
37
+ width: auto;
38
+ }
39
+
40
+ .formcontrol-container,
41
+ .daterange-container,
42
+ .date-container,
43
+ .campos-container,
44
+ select, input, textarea {
45
+ @apply w-full bg-white border border-gray-300 rounded-sm leading-tight focus:outline-none focus:border-blue-500 /*dark:*/
46
+ bg-transparent;
47
+ }
48
+
49
+ input {
50
+ padding-left: 2px;
51
+ }
52
+
53
+ .formcontrol-container {
54
+ textarea, input {
55
+ @apply text-xs border-0;
56
+ }
57
+ }
58
+
59
+ .daterange-container {
60
+ width: 200px;
61
+
62
+ input {
63
+ @apply text-xs text-center border-0;
64
+ }
65
+ }
66
+
67
+ .date-container {
68
+ width: 100px;
69
+
70
+ input {
71
+ @apply text-xs border-0;
72
+ }
73
+ }
74
+ .campos-container {
75
+ select, input, textarea {
76
+ @apply text-xs border-0 rounded-none;
77
+ }
78
+ input, textarea {
79
+ @apply border-l px-1;
80
+ }
81
+ .formcontrol-container {
82
+ @apply border-none;
83
+ }
84
+ }
85
+
86
+ .mat-datepicker-toggle {
87
+ //@apply w-auto h-auto;
88
+ height: 18px !important;
89
+ width: 18px !important;
90
+
91
+ button {
92
+ height: unset !important;
93
+ width: unset !important;
94
+ padding: 0 !important;
95
+ }
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,40 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FiltroBusquedaService {
3
+ private _filtrosActivos;
4
+ private _dataServidorActivos;
5
+ filtrosActivos: import("@angular/core").Signal<Map<string, any>>;
6
+ dataServidorActivos: import("@angular/core").Signal<Map<string, Map<string, any>>>;
7
+ /**
8
+ * Establece un valor para un filtro reactivo
9
+ */
10
+ setValue(nombreFiltro: string, val: any): void;
11
+ /**
12
+ * @deprecated Usa `getFiltroSignal(nombreFiltro)` en componentes modernos.
13
+ * Retorna el snapshot sincrónico actual (para componentes legacy).
14
+ */
15
+ getValue(nombreFiltro: string): any;
16
+ /**
17
+ * Actualiza la metadata del servidor (Signals).
18
+ */
19
+ setDataServidorSuscripcion(nombreFiltro: string, campo: string, data: any): void;
20
+ /**
21
+ * @deprecated Usa `getDataServidorSignal(nombreFiltro, campo)` en componentes modernos.
22
+ * Retorna el snapshot sincrónico actual de metadata (para componentes legacy).
23
+ */
24
+ getDataServidorSuscripcion(nombreFiltro: string, campo: string): any;
25
+ /**
26
+ * Crea y devuelve un Signal reactivo continuo para observar los valores aplicados de un filtro particular.
27
+ * @param nombreFiltro Nombre del filtro que se desea escuchar
28
+ * @param defaultValue Valor de respaldo seguro si aún no se ha inicializado el filtro.
29
+ */
30
+ getFiltroSignal<T = any>(nombreFiltro: string, defaultValue?: T): import("@angular/core").Signal<T>;
31
+ /**
32
+ * Crea y devuelve un Signal reactivo continuo para escuchar la metadata/catálogo recibida del backend para un campo.
33
+ * @param nombreFiltro Nombre de la colección del filtro principal
34
+ * @param campo Campo específico (ej: id_usuario, categoria) del que se espera escuchar la lista u objeto servidor
35
+ * @param defaultValue Valor de respaldo seguro si aún no hay data del servidor.
36
+ */
37
+ getDataServidorSignal<T = any>(nombreFiltro: string, campo: string, defaultValue?: T): import("@angular/core").Signal<T>;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<FiltroBusquedaService, never>;
39
+ static ɵprov: i0.ɵɵInjectableDeclaration<FiltroBusquedaService>;
40
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@jvsoft/components/filtro-busqueda" />
5
+ export * from './public-api';
@@ -0,0 +1,86 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { TipoValorFuncion } from '@jvsoft/utils';
3
+ export type TiposControl = 'select' | 'autocomplete' | 'date' | 'text' | 'number' | 'date_range' | 'controlAgrupado' | 'checkbox';
4
+ export type TiposValores = '*primero*' | '*deUsuario*' | '*fechaActual*' | any;
5
+ export interface TabSeccion {
6
+ id?: string;
7
+ label?: string;
8
+ campos?: CampoFiltro[];
9
+ esVisible?: TipoValorFuncion<boolean>;
10
+ }
11
+ export interface CampoFiltroChange {
12
+ filter?: boolean;
13
+ filterFields?: string[];
14
+ }
15
+ export interface CampoFiltroSelectAutocompleteComun {
16
+ ordenPeticion?: number;
17
+ data?: string;
18
+ customData?: any[];
19
+ dataCuandoVacio?: any[];
20
+ campoValor?: string | '*objeto*';
21
+ camposText?: string[];
22
+ textoCuandoNulo?: string;
23
+ optionText?(row: any): string;
24
+ cssClass?: {
25
+ class?: string;
26
+ option?: string;
27
+ };
28
+ }
29
+ export interface CampoFiltroDateRange {
30
+ campo?: [string, string];
31
+ value?: [TiposValores, TiposValores];
32
+ }
33
+ export interface CampoFiltroSelect extends CampoFiltroSelectAutocompleteComun {
34
+ }
35
+ export interface CampoFiltroAutocomplete extends CampoFiltroSelectAutocompleteComun {
36
+ controlType?: 'textarea' | 'text';
37
+ class?: string;
38
+ searchFields?: string[];
39
+ campotxtBuscar?: string;
40
+ campotxtBuscarLength?: number;
41
+ optionTemplate?: TemplateRef<any>;
42
+ optionInnerHtml?(row: any): string;
43
+ }
44
+ export interface CampoFiltro {
45
+ control: TiposControl;
46
+ templateName?: string;
47
+ campo: string;
48
+ aliasCampoEnviar?: string;
49
+ label?: string;
50
+ cssClass?: string;
51
+ value?: TiposValores;
52
+ reqParams?: {
53
+ params?: object;
54
+ fields?: string[];
55
+ };
56
+ disabled?: boolean;
57
+ required?: boolean;
58
+ keyUpEnter?: boolean;
59
+ change?: CampoFiltroChange;
60
+ checkbox?: {
61
+ text: TipoValorFuncion<string>;
62
+ };
63
+ dateRange?: CampoFiltroDateRange;
64
+ select?: CampoFiltroSelect;
65
+ autocomplete?: CampoFiltroAutocomplete;
66
+ controlAgrupado?: CampoFiltro[];
67
+ modificadorDatos?(control: CampoFiltro): any;
68
+ }
69
+ export interface TabFiltroSeccion extends Omit<TabSeccion, 'id'> {
70
+ campos: CampoFiltro[];
71
+ }
72
+ export interface DataFiltroAplicado {
73
+ campo: string;
74
+ label: string;
75
+ value: any;
76
+ list?: any[];
77
+ valueString?: string;
78
+ valueObject?: any;
79
+ }
80
+ export interface FiltroResultante {
81
+ datosFiltro: {
82
+ [key: string]: any;
83
+ };
84
+ datosFiltroConLabel: DataFiltroAplicado[];
85
+ labelResumen: string;
86
+ }
@@ -0,0 +1,3 @@
1
+ export * from './filtro-busqueda.component';
2
+ export * from './filtro-busqueda.service';
3
+ export * from './interfaces/filtro-busqueda.interface';
package/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from './luces-navidad';
5
5
  export * from './mat-suffix-search-button';
6
6
  export * from './menu';
7
7
  export * from './lista-arbol/public-api';
8
+ export * from './filtro-busqueda';