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

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 (42) hide show
  1. package/alerta/README.md +102 -0
  2. package/alerta/alerta.component.d.ts +29 -0
  3. package/alerta/index.d.ts +5 -0
  4. package/alerta/public-api.d.ts +1 -0
  5. package/dialog-flotante/README.md +169 -0
  6. package/dialog-flotante/dialog-flotante.component.d.ts +13 -22
  7. package/fesm2022/jvsoft-components-alerta.mjs +88 -0
  8. package/fesm2022/jvsoft-components-alerta.mjs.map +1 -0
  9. package/fesm2022/jvsoft-components-dialog-flotante.mjs +49 -83
  10. package/fesm2022/jvsoft-components-dialog-flotante.mjs.map +1 -1
  11. package/fesm2022/jvsoft-components-filtro-busqueda.mjs +660 -0
  12. package/fesm2022/jvsoft-components-filtro-busqueda.mjs.map +1 -0
  13. package/fesm2022/jvsoft-components-lista-arbol.mjs +121 -145
  14. package/fesm2022/jvsoft-components-lista-arbol.mjs.map +1 -1
  15. package/fesm2022/jvsoft-components-luces-navidad.mjs.map +1 -1
  16. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs +4 -2
  17. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs.map +1 -1
  18. package/fesm2022/jvsoft-components-menu.mjs.map +1 -1
  19. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs +1 -1
  20. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs.map +1 -1
  21. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs +107 -61
  22. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs.map +1 -1
  23. package/fesm2022/jvsoft-components.mjs +1004 -302
  24. package/fesm2022/jvsoft-components.mjs.map +1 -1
  25. package/filtro-busqueda/README.md +156 -0
  26. package/filtro-busqueda/filtro-busqueda.component.d.ts +89 -0
  27. package/filtro-busqueda/filtro-busqueda.component.scss +98 -0
  28. package/filtro-busqueda/filtro-busqueda.service.d.ts +40 -0
  29. package/filtro-busqueda/index.d.ts +5 -0
  30. package/filtro-busqueda/interfaces/filtro-busqueda.interface.d.ts +86 -0
  31. package/filtro-busqueda/public-api.d.ts +3 -0
  32. package/index.d.ts +2 -0
  33. package/lista-arbol/README.md +268 -0
  34. package/lista-arbol/lista-arbol.component.d.ts +36 -37
  35. package/package.json +22 -15
  36. package/src/styles/base-jvsoft-components.css +6 -4
  37. package/src/styles/base.scss +1 -0
  38. package/tabla-mantenimiento/interfaces/global/columnas-tabla.d.ts +9 -10
  39. package/tabla-mantenimiento/interfaces/global/otros.d.ts +1 -0
  40. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.d.ts +2 -1
  41. package/tabla-mantenimiento/tabla-mantenimiento.component.d.ts +15 -8
  42. package/tabla-mantenimiento/tabla-mantenimiento.component.scss +14 -1
@@ -0,0 +1,268 @@
1
+ # ListaArbolComponent
2
+
3
+ Componente Angular para visualizar datos jerárquicos en estructura de árbol con soporte para selección, checkboxes y menú contextual.
4
+
5
+ ## Instalación
6
+
7
+ ```bash
8
+ npm install @jvsoft/components
9
+ ```
10
+
11
+ ## Uso Básico
12
+
13
+ ```typescript
14
+ import { ListaArbolComponent } from '@jvsoft/components/lista-arbol';
15
+
16
+ @Component({
17
+ selector: 'app-example',
18
+ standalone: true,
19
+ imports: [ListaArbolComponent],
20
+ template: `
21
+ <jvs-lista-arbol
22
+ [listaSuscription]="despachos$"
23
+ nombreColeccion="despachos"
24
+ [idTabla]="['iDespachoId']"
25
+ campoId="iDespachoId"
26
+ campoIdPadre="iDespachoPadreId"
27
+ campoStr="cDespachoNombre"
28
+ (seleccionado)="onSeleccion($event)">
29
+ </jvs-lista-arbol>
30
+ `
31
+ })
32
+ export class ExampleComponent {
33
+ despachos$ = this.service.getDespachos();
34
+
35
+ onSeleccion(item: any) {
36
+ console.log('Item seleccionado:', item);
37
+ }
38
+ }
39
+ ```
40
+
41
+ ## API
42
+
43
+ ### Inputs
44
+
45
+ #### Requeridos
46
+
47
+ | Input | Tipo | Descripción |
48
+ |-------|------|-------------|
49
+ | `listaSuscription` | `Observable<T[]>` | Observable que emite la lista de datos a mostrar |
50
+ | `nombreColeccion` | `string` | Nombre identificador de la colección |
51
+ | `idTabla` | `string \| string[]` | Campo(s) que identifican únicamente cada item |
52
+ | `campoId` | `string` | Nombre del campo que contiene el ID del item |
53
+ | `campoIdPadre` | `string` | Nombre del campo que contiene el ID del padre |
54
+
55
+ #### Opcionales
56
+
57
+ | Input | Tipo | Default | Descripción |
58
+ |-------|------|---------|-------------|
59
+ | `campoStr` | `string` | `''` | Campo a mostrar como texto del nodo |
60
+ | `checkbox` | `boolean` | `false` | Habilita checkboxes con selección cascada |
61
+ | `expandirRecursivo` | `boolean` | `false` | Expande/colapsa recursivamente |
62
+ | `checkboxSeleccionados` | `T[]` | `[]` | Items pre-seleccionados (modo checkbox) |
63
+ | `campoOrden` | `string` | - | Campo para ordenar los nodos |
64
+ | `strHijoContainer` | `string` | `'hijos'` | Nombre de la propiedad que contiene los hijos |
65
+ | `menuContextual` | `object` | - | Objeto con funciones para menú contextual |
66
+ | `classSeleccionado` | `string[]` | `['bg-primary-activo', ...]` | Clases CSS para item seleccionado |
67
+ | `classAnulado` | `string[]` | `['line-through', ...]` | Clases CSS para items anulados |
68
+ | `campoAnulado` | `string \| null` | - | Campo que indica si un item está anulado |
69
+ | `templateTxtData` | `TemplateRef<any>` | - | Template personalizado para el contenido del nodo |
70
+ | `condicionMostrar` | `(item: T) => boolean` | - | Función para filtrar items a mostrar |
71
+ | `condicionesClaseFila` | `(item: T) => string[]` | `() => []` | Función que retorna clases CSS adicionales |
72
+ | `selectionModel` | `any` | - | Modelo de selección (backward compatibility) |
73
+
74
+ ### Outputs
75
+
76
+ | Output | Tipo | Descripción |
77
+ |--------|------|-------------|
78
+ | `seleccionado` | `EventEmitter<any>` | Emite cuando se selecciona un item |
79
+ | `selectionModelChange` | `EventEmitter<any>` | Emite cambios en el modelo de selección |
80
+ | `listaCheck` | `EventEmitter<T[]>` | Emite array de items seleccionados (modo checkbox) |
81
+ | `listaCheckObj` | `EventEmitter<Record<string, any>>` | Emite objeto con items seleccionados (modo checkbox) |
82
+
83
+ ## Ejemplos
84
+
85
+ ### Árbol Simple
86
+
87
+ ```typescript
88
+ <jvs-lista-arbol
89
+ [listaSuscription]="categorias$"
90
+ nombreColeccion="categorias"
91
+ [idTabla]="['iCategoriaId']"
92
+ campoId="iCategoriaId"
93
+ campoIdPadre="iCategoriaPadreId"
94
+ campoStr="cCategoriaNombre">
95
+ </jvs-lista-arbol>
96
+ ```
97
+
98
+ ### Con Checkboxes
99
+
100
+ ```typescript
101
+ <jvs-lista-arbol
102
+ [listaSuscription]="permisos$"
103
+ nombreColeccion="permisos"
104
+ [idTabla]="['iPermisoId']"
105
+ campoId="iPermisoId"
106
+ campoIdPadre="iPermisoPadreId"
107
+ campoStr="cPermisoNombre"
108
+ [checkbox]="true"
109
+ [checkboxSeleccionados]="permisosActuales"
110
+ (listaCheck)="onPermisosChange($event)">
111
+ </jvs-lista-arbol>
112
+ ```
113
+
114
+ ### Con Template Personalizado
115
+
116
+ ```typescript
117
+ <jvs-lista-arbol
118
+ [listaSuscription]="departamentos$"
119
+ nombreColeccion="departamentos"
120
+ [idTabla]="['iDepartamentoId']"
121
+ campoId="iDepartamentoId"
122
+ campoIdPadre="iDepartamentoPadreId"
123
+ [templateTxtData]="customTemplate">
124
+ </jvs-lista-arbol>
125
+
126
+ <ng-template #customTemplate let-data="data">
127
+ <div class="flex items-center gap-2">
128
+ <mat-icon>{{ data.icono }}</mat-icon>
129
+ <span class="font-bold">{{ data.nombre }}</span>
130
+ <span class="text-gray-500">({{ data.codigo }})</span>
131
+ </div>
132
+ </ng-template>
133
+ ```
134
+
135
+ ### Con Menú Contextual
136
+
137
+ ```typescript
138
+ export class MyComponent {
139
+ menuContextual = {
140
+ abrirMenuContextual: (event: MouseEvent, item: any) => {
141
+ // Lógica para abrir menú contextual
142
+ this.menuService.open(event, item);
143
+ },
144
+ cerrarMenuContextual: () => {
145
+ this.menuService.close();
146
+ }
147
+ };
148
+ }
149
+ ```
150
+
151
+ ```html
152
+ <jvs-lista-arbol
153
+ [listaSuscription]="items$"
154
+ nombreColeccion="items"
155
+ [idTabla]="['id']"
156
+ campoId="id"
157
+ campoIdPadre="parentId"
158
+ campoStr="nombre"
159
+ [menuContextual]="menuContextual">
160
+ </jvs-lista-arbol>
161
+ ```
162
+
163
+ ### Con Ordenamiento
164
+
165
+ ```typescript
166
+ <jvs-lista-arbol
167
+ [listaSuscription]="tareas$"
168
+ nombreColeccion="tareas"
169
+ [idTabla]="['iTareaId']"
170
+ campoId="iTareaId"
171
+ campoIdPadre="iTareaPadreId"
172
+ campoStr="cTareaNombre"
173
+ campoOrden="iOrden">
174
+ </jvs-lista-arbol>
175
+ ```
176
+
177
+ ### Con Clases Condicionales
178
+
179
+ ```typescript
180
+ export class MyComponent {
181
+ getClasesFila = (item: any): string[] => {
182
+ const clases: string[] = [];
183
+ if (item.urgente) clases.push('bg-red-100');
184
+ if (item.completado) clases.push('opacity-50');
185
+ return clases;
186
+ };
187
+ }
188
+ ```
189
+
190
+ ```html
191
+ <jvs-lista-arbol
192
+ [listaSuscription]="tareas$"
193
+ nombreColeccion="tareas"
194
+ [idTabla]="['id']"
195
+ campoId="id"
196
+ campoIdPadre="parentId"
197
+ campoStr="nombre"
198
+ [condicionesClaseFila]="getClasesFila">
199
+ </jvs-lista-arbol>
200
+ ```
201
+
202
+ ## Estructura de Datos
203
+
204
+ El componente espera un array plano de objetos con referencias padre-hijo:
205
+
206
+ ```typescript
207
+ interface Item {
208
+ id: number;
209
+ parentId: number | null;
210
+ nombre: string;
211
+ // ... otros campos
212
+ }
213
+
214
+ const items: Item[] = [
215
+ { id: 1, parentId: null, nombre: 'Raíz' },
216
+ { id: 2, parentId: 1, nombre: 'Hijo 1' },
217
+ { id: 3, parentId: 1, nombre: 'Hijo 2' },
218
+ { id: 4, parentId: 2, nombre: 'Nieto 1' },
219
+ ];
220
+ ```
221
+
222
+ El componente automáticamente construye la estructura jerárquica.
223
+
224
+ ## Características
225
+
226
+ - ✅ **Signals API**: Usa la API moderna de Signals de Angular
227
+ - ✅ **Selección simple**: Click para seleccionar items
228
+ - ✅ **Checkboxes con cascada**: Selección padre-hijo automática
229
+ - ✅ **Templates personalizados**: Personaliza la visualización de nodos
230
+ - ✅ **Menú contextual**: Soporte integrado para menús contextuales
231
+ - ✅ **Ordenamiento**: Ordena nodos por campo específico
232
+ - ✅ **Clases condicionales**: Aplica estilos dinámicos
233
+ - ✅ **Cleanup automático**: Gestión automática de suscripciones
234
+ - ✅ **TypeScript**: Totalmente tipado con genéricos
235
+
236
+ ## Migración desde Versión Anterior
237
+
238
+ Si estás migrando desde una versión anterior con `@Input()` decorators:
239
+
240
+ ### Antes (v1.0.0-alpha.5)
241
+ ```typescript
242
+ @Input() listaSuscription!: Observable<T[]>;
243
+ @Input() nombreColeccion!: string;
244
+ ```
245
+
246
+ ### Después (v1.0.0-alpha.6+)
247
+ ```typescript
248
+ // El uso en templates permanece igual
249
+ <jvs-lista-arbol
250
+ [listaSuscription]="items$"
251
+ nombreColeccion="items"
252
+ ...>
253
+ </jvs-lista-arbol>
254
+ ```
255
+
256
+ **No se requieren cambios** en el código que usa el componente. La API pública permanece 100% compatible.
257
+
258
+ ## Notas Técnicas
259
+
260
+ - El componente usa `NestedTreeControl` de Angular CDK
261
+ - Las suscripciones se limpian automáticamente con `takeUntilDestroyed()`
262
+ - Los valores derivados usan `computed()` para optimización
263
+ - El estado interno usa `signal()` para reactividad
264
+ - Compatible con Angular 16+
265
+
266
+ ## Licencia
267
+
268
+ MIT
@@ -1,47 +1,46 @@
1
- import { EventEmitter, OnInit, TemplateRef } from '@angular/core';
1
+ import { TemplateRef } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { NestedTreeControl } from '@angular/cdk/tree';
4
4
  import { DataModel } from '@jvsoft/utils';
5
- import { SelectionModel } from '@angular/cdk/collections';
6
5
  import * as i0 from "@angular/core";
7
- export declare class ListaArbolComponent<T = any> implements OnInit {
8
- listaSuscription: Observable<T[]>;
9
- nombreColeccion: string;
10
- checkbox: boolean;
11
- expandirRecursivo: boolean;
12
- checkboxSeleccionados: T[];
13
- campoId: string;
14
- campoIdPadre: string;
15
- campoStr: string;
16
- campoOrden?: string;
17
- strHijoContainer: string;
18
- menuContextual?: {
6
+ export declare class ListaArbolComponent<T = any> {
7
+ listaSuscription: import("@angular/core").InputSignal<Observable<T[]>>;
8
+ nombreColeccion: import("@angular/core").InputSignal<string>;
9
+ checkbox: import("@angular/core").InputSignal<boolean>;
10
+ expandirRecursivo: import("@angular/core").InputSignal<boolean>;
11
+ checkboxSeleccionados: import("@angular/core").InputSignal<T[]>;
12
+ campoId: import("@angular/core").InputSignal<string>;
13
+ campoIdPadre: import("@angular/core").InputSignal<string>;
14
+ campoStr: import("@angular/core").InputSignal<string>;
15
+ campoOrden: import("@angular/core").InputSignal<string | undefined>;
16
+ strHijoContainer: import("@angular/core").InputSignal<string>;
17
+ menuContextual: import("@angular/core").InputSignal<{
19
18
  abrirMenuContextual: Function;
20
19
  cerrarMenuContextual: Function;
21
- };
22
- classSeleccionado: string[];
23
- classAnulado: string[];
24
- campoAnulado?: string | null;
25
- templateTxtData?: TemplateRef<any>;
26
- condicionMostrar?: (item: T) => boolean;
27
- condicionesClaseFila: (item: T) => string[];
28
- set selectionModel(val: SelectionModel<any>);
29
- selectionModelChange: EventEmitter<SelectionModel<any>>;
30
- seleccionado: EventEmitter<any>;
31
- listaCheck: EventEmitter<T[]>;
32
- listaCheckObj: EventEmitter<Record<string, any>>;
20
+ } | undefined>;
21
+ classSeleccionado: import("@angular/core").InputSignal<string[]>;
22
+ classAnulado: import("@angular/core").InputSignal<string[]>;
23
+ campoAnulado: import("@angular/core").InputSignal<string | null | undefined>;
24
+ templateTxtData: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
25
+ condicionMostrar: import("@angular/core").InputSignal<((item: T) => boolean) | undefined>;
26
+ condicionesClaseFila: import("@angular/core").InputSignal<(item: T) => string[]>;
27
+ idTabla: import("@angular/core").InputSignalWithTransform<string | string[], string | string[]>;
28
+ selectionModel: import("@angular/core").InputSignal<any>;
29
+ selectionModelChange: import("@angular/core").OutputEmitterRef<any>;
30
+ seleccionado: import("@angular/core").OutputEmitterRef<any>;
31
+ listaCheck: import("@angular/core").OutputEmitterRef<T[]>;
32
+ listaCheckObj: import("@angular/core").OutputEmitterRef<Record<string, any>>;
33
33
  private _idTabla;
34
- get idTabla(): string[];
35
- set idTabla(val: string[] | string);
36
- get buscarItemSeleccionado(): any;
37
- get objSeleccionado(): any;
38
- set objSeleccionado(val: any);
34
+ private _seleccionado;
35
+ listaMuestraArbol: import("@angular/core").WritableSignal<T[]>;
36
+ listaOriginal: import("@angular/core").WritableSignal<T[]>;
39
37
  chkLista: DataModel;
40
- listaMuestraArbol: T[];
41
- listaOriginal: T[];
38
+ idTablaValue: import("@angular/core").Signal<string[]>;
39
+ buscarItemSeleccionado: import("@angular/core").Signal<NonNullable<T> | null>;
40
+ objSeleccionado: import("@angular/core").Signal<NonNullable<T> | null>;
42
41
  treeControl: NestedTreeControl<any, any>;
43
- _seleccionado: any;
44
- ngOnInit(): void;
42
+ private listaSuscription$;
43
+ constructor();
45
44
  idTablaValor(data: any): string;
46
45
  propiedadSeleccion(item: any): string;
47
46
  esSeleccionActual(item: any): boolean;
@@ -52,7 +51,7 @@ export declare class ListaArbolComponent<T = any> implements OnInit {
52
51
  cambiarPadre(checkActual: T, estado: boolean): void;
53
52
  cambiarCheck(checkActual: T, estado: boolean): void;
54
53
  hijosActivos(tipo: 'checked' | 'indeterminate', checkActual: T): boolean;
55
- classFila(item: any): any[];
54
+ classFila(item: any): string[];
56
55
  static ɵfac: i0.ɵɵFactoryDeclaration<ListaArbolComponent<any>, never>;
57
- static ɵcmp: i0.ɵɵComponentDeclaration<ListaArbolComponent<any>, "jvs-lista-arbol", never, { "listaSuscription": { "alias": "listaSuscription"; "required": false; }; "nombreColeccion": { "alias": "nombreColeccion"; "required": false; }; "checkbox": { "alias": "checkbox"; "required": false; }; "expandirRecursivo": { "alias": "expandirRecursivo"; "required": false; }; "checkboxSeleccionados": { "alias": "checkboxSeleccionados"; "required": false; }; "campoId": { "alias": "campoId"; "required": false; }; "campoIdPadre": { "alias": "campoIdPadre"; "required": false; }; "campoStr": { "alias": "campoStr"; "required": false; }; "campoOrden": { "alias": "campoOrden"; "required": false; }; "strHijoContainer": { "alias": "strHijoContainer"; "required": false; }; "menuContextual": { "alias": "menuContextual"; "required": false; }; "classSeleccionado": { "alias": "classSeleccionado"; "required": false; }; "classAnulado": { "alias": "classAnulado"; "required": false; }; "campoAnulado": { "alias": "campoAnulado"; "required": false; }; "templateTxtData": { "alias": "templateTxtData"; "required": false; }; "condicionMostrar": { "alias": "condicionMostrar"; "required": false; }; "condicionesClaseFila": { "alias": "condicionesClaseFila"; "required": false; }; "selectionModel": { "alias": "selectionModel"; "required": false; }; "idTabla": { "alias": "idTabla"; "required": true; }; }, { "selectionModelChange": "selectionModelChange"; "seleccionado": "seleccionado"; "listaCheck": "listaCheck"; "listaCheckObj": "listaCheckObj"; }, never, never, true, never>;
56
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListaArbolComponent<any>, "jvs-lista-arbol", never, { "listaSuscription": { "alias": "listaSuscription"; "required": true; "isSignal": true; }; "nombreColeccion": { "alias": "nombreColeccion"; "required": true; "isSignal": true; }; "checkbox": { "alias": "checkbox"; "required": false; "isSignal": true; }; "expandirRecursivo": { "alias": "expandirRecursivo"; "required": false; "isSignal": true; }; "checkboxSeleccionados": { "alias": "checkboxSeleccionados"; "required": false; "isSignal": true; }; "campoId": { "alias": "campoId"; "required": true; "isSignal": true; }; "campoIdPadre": { "alias": "campoIdPadre"; "required": true; "isSignal": true; }; "campoStr": { "alias": "campoStr"; "required": false; "isSignal": true; }; "campoOrden": { "alias": "campoOrden"; "required": false; "isSignal": true; }; "strHijoContainer": { "alias": "strHijoContainer"; "required": false; "isSignal": true; }; "menuContextual": { "alias": "menuContextual"; "required": false; "isSignal": true; }; "classSeleccionado": { "alias": "classSeleccionado"; "required": false; "isSignal": true; }; "classAnulado": { "alias": "classAnulado"; "required": false; "isSignal": true; }; "campoAnulado": { "alias": "campoAnulado"; "required": false; "isSignal": true; }; "templateTxtData": { "alias": "templateTxtData"; "required": false; "isSignal": true; }; "condicionMostrar": { "alias": "condicionMostrar"; "required": false; "isSignal": true; }; "condicionesClaseFila": { "alias": "condicionesClaseFila"; "required": false; "isSignal": true; }; "idTabla": { "alias": "idTabla"; "required": true; "isSignal": true; }; "selectionModel": { "alias": "selectionModel"; "required": false; "isSignal": true; }; }, { "selectionModelChange": "selectionModelChange"; "seleccionado": "seleccionado"; "listaCheck": "listaCheck"; "listaCheckObj": "listaCheckObj"; }, never, never, true, never>;
58
57
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jvsoft/components",
3
- "version": "0.0.13-alpha.4",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "JVSOFT Angular Components",
5
5
  "publishConfig": {
6
6
  "tag": "alpha",
@@ -11,17 +11,13 @@
11
11
  "@angular/core": ">=16.0.0",
12
12
  "@angular/forms": ">=16.0.0",
13
13
  "@angular/material": ">=16.0.0",
14
- "@jvsoft/utils": "*",
14
+ "@jvsoft/utils": "workspace:*",
15
15
  "@ngneat/until-destroy": "^10.0.0",
16
16
  "moment": "^2.30.1",
17
17
  "shorthash2": "^1.0.5",
18
18
  "tailwindcss": "3",
19
19
  "xlsx": "^0.18.5"
20
20
  },
21
- "dependencies": {
22
- "@jvsoft/utils": "*",
23
- "tslib": "^2.3.0"
24
- },
25
21
  "sideEffects": false,
26
22
  "exports": {
27
23
  "./base.scss": "./src/styles/base.scss",
@@ -33,6 +29,18 @@
33
29
  "types": "./index.d.ts",
34
30
  "default": "./fesm2022/jvsoft-components.mjs"
35
31
  },
32
+ "./alerta": {
33
+ "types": "./alerta/index.d.ts",
34
+ "default": "./fesm2022/jvsoft-components-alerta.mjs"
35
+ },
36
+ "./filtro-busqueda": {
37
+ "types": "./filtro-busqueda/index.d.ts",
38
+ "default": "./fesm2022/jvsoft-components-filtro-busqueda.mjs"
39
+ },
40
+ "./dialog-flotante": {
41
+ "types": "./dialog-flotante/index.d.ts",
42
+ "default": "./fesm2022/jvsoft-components-dialog-flotante.mjs"
43
+ },
36
44
  "./luces-navidad": {
37
45
  "types": "./luces-navidad/index.d.ts",
38
46
  "default": "./fesm2022/jvsoft-components-luces-navidad.mjs"
@@ -45,23 +53,22 @@
45
53
  "types": "./menu/index.d.ts",
46
54
  "default": "./fesm2022/jvsoft-components-menu.mjs"
47
55
  },
48
- "./lista-arbol": {
49
- "types": "./lista-arbol/index.d.ts",
50
- "default": "./fesm2022/jvsoft-components-lista-arbol.mjs"
51
- },
52
- "./dialog-flotante": {
53
- "types": "./dialog-flotante/index.d.ts",
54
- "default": "./fesm2022/jvsoft-components-dialog-flotante.mjs"
55
- },
56
56
  "./tabla-mantenimiento": {
57
57
  "types": "./tabla-mantenimiento/index.d.ts",
58
58
  "default": "./fesm2022/jvsoft-components-tabla-mantenimiento.mjs"
59
59
  },
60
+ "./lista-arbol": {
61
+ "types": "./lista-arbol/index.d.ts",
62
+ "default": "./fesm2022/jvsoft-components-lista-arbol.mjs"
63
+ },
60
64
  "./tabla-mantenimiento/components/progress-bar": {
61
65
  "types": "./tabla-mantenimiento/components/progress-bar/index.d.ts",
62
66
  "default": "./fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs"
63
67
  }
64
68
  },
65
69
  "module": "fesm2022/jvsoft-components.mjs",
66
- "typings": "index.d.ts"
70
+ "typings": "index.d.ts",
71
+ "dependencies": {
72
+ "tslib": "^2.3.0"
73
+ }
67
74
  }
@@ -1,9 +1,11 @@
1
1
  @use "tailwind.scss";
2
2
 
3
- @use "components/index.scss";
3
+ /*@use "components/index.scss";*/
4
4
 
5
- /*
5
+ @use "../../../components/tabla-mantenimiento/tabla-mantenimiento.component";
6
+
7
+ @use "../../../components/dialog-flotante/dialog-flotante.component";
8
+
9
+ @use "../../../components/filtro-busqueda/filtro-busqueda.component";
6
10
 
7
- @import "../../components/tabla-mantenimiento/tabla-mantenimiento.component.scss";
8
- */
9
11
 
@@ -5,5 +5,6 @@
5
5
 
6
6
  @use "../../../components/tabla-mantenimiento/tabla-mantenimiento.component";
7
7
  @use "../../../components/dialog-flotante/dialog-flotante.component";
8
+ @use "../../../components/filtro-busqueda/filtro-busqueda.component";
8
9
 
9
10
 
@@ -1,5 +1,13 @@
1
1
  import { EstilosBarra } from '../../components/progress-bar';
2
2
  import { TipoValorFuncion } from './no-export';
3
+ import { TemplateRef } from '@angular/core';
4
+ export interface PopoverConfig<T> {
5
+ content?: (row: T) => string;
6
+ template?: TemplateRef<any>;
7
+ trigger?: 'hover' | 'click' | 'focus';
8
+ position?: 'top' | 'bottom' | 'left' | 'right';
9
+ customClass?: string;
10
+ }
3
11
  type TiposColumnas = 'yes_no' | 'estiloEstablecido' | 'text' | 'number' | 'money' | 'date' | 'image' | 'estado' | 'badge' | 'progress' | 'checkbox' | 'icon' | 'icons' | 'icon_checkbox' | 'custom' | 'expandir' | 'numeracion_automatica';
4
12
  export interface ColumnaTablaReporte {
5
13
  ocultar?: boolean;
@@ -15,16 +23,6 @@ export interface ColumnaTablaReporte {
15
23
  total?: TipoValorFuncion<any>;
16
24
  };
17
25
  }
18
- export interface IconsIcon {
19
- icon: string;
20
- iconSize?: string;
21
- toolTip?: string;
22
- toolTipField?: string;
23
- contentCss?: string;
24
- cssClass?: string;
25
- click?(row: any): void;
26
- esVisible?(row: any): boolean;
27
- }
28
26
  export type TiposColumnasNuevo = 'text' | 'checkbox' | 'money' | 'icon' | 'icons' | 'progress' | 'expandir' | 'date' | 'number';
29
27
  type PropiedadString<T> = Extract<keyof T, string>;
30
28
  interface BaseColumna<T> {
@@ -44,6 +42,7 @@ interface BaseColumna<T> {
44
42
  textCss?: string | string[];
45
43
  cssFooterClasses?: string[];
46
44
  datosExtra?: any;
45
+ popover?: PopoverConfig<T>;
47
46
  reporte?: ColumnaTablaReporte;
48
47
  innerHTMLInvisible?: (row: any) => string;
49
48
  /** @deprecated usar `visible` en su lugar: ejm: visible: ():boolean => {}, visible: boolean */
@@ -9,6 +9,7 @@ export interface OpcionSeleccionada {
9
9
  tipo: TiposOpciones;
10
10
  /** Solo emite cuando se tiene los checkbox para seleccion */
11
11
  idsSeleccionados?: any;
12
+ itemsSeleccionados?: any[];
12
13
  datosExtra?: any;
13
14
  /** @deprecated usar '`datosExtra`' en su lugar */
14
15
  formGroup?: any;
@@ -16,8 +16,9 @@ import * as i14 from "../../pipes/zero-fill.pipe";
16
16
  import * as i15 from "@angular/material/core";
17
17
  import * as i16 from "@angular/material/icon";
18
18
  import * as i17 from "../../components/progress-bar/progress-bar.component";
19
+ import * as i18 from "@jvsoft/utils";
19
20
  export declare class ColumnTypeModule {
20
21
  static ɵfac: i0.ɵɵFactoryDeclaration<ColumnTypeModule, never>;
21
- static ɵmod: i0.ɵɵNgModuleDeclaration<ColumnTypeModule, [typeof i1.ColumnTypeComponent, typeof i2.ColumnTypeTextComponent, typeof i3.ColumnTypeMoneyComponent, typeof i4.ColumnTypeNumberComponent, typeof i5.ColumnTypeDateComponent, typeof i6.ColumnTypeIconsComponent, typeof i7.ColumnTypeSinoComponent, typeof i8.ColumnTypeProgressbarComponent], [typeof i9.CommonModule, typeof i10.MatTableModule, typeof i11.MatSortModule, typeof i12.MatTooltipModule, typeof i13.NoSanitizePipe, typeof i14.ZeroFillPipe, typeof i15.MatRipple, typeof i16.MatIcon, typeof i17.ProgressBarComponent], [typeof i2.ColumnTypeTextComponent, typeof i3.ColumnTypeMoneyComponent, typeof i4.ColumnTypeNumberComponent, typeof i5.ColumnTypeDateComponent, typeof i6.ColumnTypeIconsComponent, typeof i7.ColumnTypeSinoComponent, typeof i8.ColumnTypeProgressbarComponent]>;
22
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ColumnTypeModule, [typeof i1.ColumnTypeComponent, typeof i2.ColumnTypeTextComponent, typeof i3.ColumnTypeMoneyComponent, typeof i4.ColumnTypeNumberComponent, typeof i5.ColumnTypeDateComponent, typeof i6.ColumnTypeIconsComponent, typeof i7.ColumnTypeSinoComponent, typeof i8.ColumnTypeProgressbarComponent], [typeof i9.CommonModule, typeof i10.MatTableModule, typeof i11.MatSortModule, typeof i12.MatTooltipModule, typeof i13.NoSanitizePipe, typeof i14.ZeroFillPipe, typeof i15.MatRipple, typeof i16.MatIcon, typeof i17.ProgressBarComponent, typeof i18.JvsPopoverDirective, typeof i18.JvsPopoverListenerDirective], [typeof i2.ColumnTypeTextComponent, typeof i3.ColumnTypeMoneyComponent, typeof i4.ColumnTypeNumberComponent, typeof i5.ColumnTypeDateComponent, typeof i6.ColumnTypeIconsComponent, typeof i7.ColumnTypeSinoComponent, typeof i8.ColumnTypeProgressbarComponent]>;
22
23
  static ɵinj: i0.ɵɵInjectorDeclaration<ColumnTypeModule>;
23
24
  }
@@ -1,6 +1,7 @@
1
1
  import { Overlay, OverlayRef } from '@angular/cdk/overlay';
2
2
  import { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnInit, QueryList, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
3
3
  import { FormBuilder, FormControl } from '@angular/forms';
4
+ import { MatMenuTrigger } from '@angular/material/menu';
4
5
  import { MatPaginator } from '@angular/material/paginator';
5
6
  import { MatSort } from '@angular/material/sort';
6
7
  import { MatColumnDef, MatTable, MatTableDataSource } from '@angular/material/table';
@@ -33,8 +34,8 @@ export declare class TablaMantenimientoComponent<T> implements OnInit, AfterCont
33
34
  dataSuscription: Observable<any> | undefined;
34
35
  objThis: any;
35
36
  nombreColeccion: any;
36
- ctrlBusquedaValue: string;
37
- ctrlBusquedaPlaceholder: string;
37
+ busquedaValor: import("@angular/core").InputSignal<string>;
38
+ busquedaPlaceholder: import("@angular/core").InputSignal<string>;
38
39
  filtroCampos: boolean;
39
40
  paginador: boolean;
40
41
  esTabla: boolean;
@@ -58,11 +59,13 @@ export declare class TablaMantenimientoComponent<T> implements OnInit, AfterCont
58
59
  paginator: MatPaginator;
59
60
  sort: MatSort;
60
61
  exportarExcel: boolean;
62
+ busquedaCompacta: import("@angular/core").InputSignal<boolean>;
63
+ alturaFull: import("@angular/core").InputSignal<boolean>;
61
64
  pageSize: number;
62
65
  pageSizeOptions: number[];
63
66
  dataSourceChange: EventEmitter<any>;
64
67
  resultados: EventEmitter<any>;
65
- dataSource: MatTableDataSource<unknown, MatPaginator>;
68
+ dataSource: MatTableDataSource<T, MatPaginator>;
66
69
  table: MatTable<T>;
67
70
  columnDefs: QueryList<MatColumnDef>;
68
71
  componenteCargadoTotalmente: boolean;
@@ -80,15 +83,16 @@ export declare class TablaMantenimientoComponent<T> implements OnInit, AfterCont
80
83
  mouseEvent$: Subscription | undefined;
81
84
  overlayRef: OverlayRef | undefined;
82
85
  userMenu: TemplateRef<any>;
86
+ compactSearchMenuTrigger: MatMenuTrigger;
83
87
  opcFiltroActual: {};
84
88
  protected readonly capitalizarTexto: typeof capitalizarTexto;
85
89
  _seleccionado: any;
86
90
  cCampoBusqueda: FormControl<string | null>;
87
91
  chkLista: DataModel;
92
+ bDireccionOrden: import("@angular/core").WritableSignal<number>;
93
+ mostrarBotonOrden: import("@angular/core").InputSignal<boolean>;
88
94
  constructor(fb: FormBuilder, overlay: Overlay, viewContainerRef: ViewContainerRef, tablaMantenimientoService: TablaMantenimientoService, cdRef: ChangeDetectorRef);
89
- _ctrlBusqueda: TiposControlBusqueda;
90
- get ctrlBusqueda(): TiposControlBusqueda;
91
- set ctrlBusqueda(val: TiposControlBusqueda);
95
+ busquedaTipo: import("@angular/core").InputSignalWithTransform<TiposControlBusqueda, string>;
92
96
  private _leyenda;
93
97
  get leyenda(): {
94
98
  text: string;
@@ -111,11 +115,12 @@ export declare class TablaMantenimientoComponent<T> implements OnInit, AfterCont
111
115
  get listaMenuCompleto(): BotonMantenimiento[];
112
116
  get objVisibleColumns(): ColumnaTabla<any>[];
113
117
  get visibleColumns(): string[];
114
- get tieneCheckbox(): false | import("@jvsoft/components/tabla-mantenimiento").ColumnaCheckbox<any>;
118
+ get tieneCheckbox(): false | import("./interfaces").ColumnaCheckbox<any>;
115
119
  get buscarItemSeleccionado(): any;
116
120
  get objSeleccionado(): any;
117
121
  set objSeleccionado(val: any);
118
122
  get idsSeleccionado(): string;
123
+ get itemsSeleccionados(): T[];
119
124
  idTablaValor(data: any): string;
120
125
  condicionesClaseFila: (item: any) => any[];
121
126
  rowTooltip: (item: any) => string;
@@ -134,6 +139,7 @@ export declare class TablaMantenimientoComponent<T> implements OnInit, AfterCont
134
139
  onFilterChange(value: string): void;
135
140
  toggleColumnVisibility(column: any, event: any): void;
136
141
  cargarData(retorno?: boolean): any;
142
+ toggleDireccionOrden(): void;
137
143
  setData(data: any): void;
138
144
  botonDisabled(btn: BotonMantenimiento, item: any): boolean | undefined;
139
145
  propiedadSeleccion(item: any): string;
@@ -143,9 +149,10 @@ export declare class TablaMantenimientoComponent<T> implements OnInit, AfterCont
143
149
  emitirResultados(evento?: {}): void;
144
150
  abrirMenuContextual({ x, y }: MouseEvent, user: any): void;
145
151
  cerrarMenuContextual(): void;
152
+ ejecutarBusquedaCompacta(): void;
146
153
  emitirAccionRecargar(): void;
147
154
  protected readonly tipoValorFuncion: typeof tipoValorFuncion;
148
155
  static ɵfac: i0.ɵɵFactoryDeclaration<TablaMantenimientoComponent<any>, never>;
149
- static ɵcmp: i0.ɵɵComponentDeclaration<TablaMantenimientoComponent<any>, "jvs-tabla-mantenimiento", never, { "dataSuscription": { "alias": "dataSuscription"; "required": false; }; "objThis": { "alias": "objThis"; "required": true; }; "nombreColeccion": { "alias": "nombreColeccion"; "required": true; }; "ctrlBusquedaValue": { "alias": "ctrlBusquedaValue"; "required": false; }; "ctrlBusquedaPlaceholder": { "alias": "ctrlBusquedaPlaceholder"; "required": false; }; "filtroCampos": { "alias": "filtroCampos"; "required": false; }; "paginador": { "alias": "paginador"; "required": false; }; "esTabla": { "alias": "esTabla"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "filaExtraHeader": { "alias": "filaExtraHeader"; "required": false; }; "filaFooter": { "alias": "filaFooter"; "required": false; }; "botonesCRUD": { "alias": "botonesCRUD"; "required": false; }; "objBotonesCRUD": { "alias": "objBotonesCRUD"; "required": false; }; "classSeleccionado": { "alias": "classSeleccionado"; "required": false; }; "classAnulado": { "alias": "classAnulado"; "required": false; }; "campoAnulado": { "alias": "campoAnulado"; "required": false; }; "campoAnuladoMensaje": { "alias": "campoAnuladoMensaje"; "required": false; }; "selectionModel": { "alias": "selectionModel"; "required": false; }; "filaExtraTemplate": { "alias": "filaExtraTemplate"; "required": false; }; "exportarExcel": { "alias": "exportarExcel"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "derechosActuales": { "alias": "derechosActuales"; "required": false; }; "ctrlBusqueda": { "alias": "ctrlBusqueda"; "required": false; }; "leyenda": { "alias": "leyenda"; "required": false; }; "idTabla": { "alias": "idTabla"; "required": true; }; "columnasTabla": { "alias": "columnasTabla"; "required": false; }; "botonesMenu": { "alias": "botonesMenu"; "required": false; }; "condicionesClaseFila": { "alias": "condicionesClaseFila"; "required": false; }; "rowTooltip": { "alias": "rowTooltip"; "required": false; }; "soloIconos": { "alias": "soloIconos"; "required": false; }; }, { "dblclickItem": "dblclickItem"; "opcionSelecionada": "opcionSelecionada"; "opcBusqueda": "opcBusqueda"; "accionRecargar": "accionRecargar"; "selectionModelChange": "selectionModelChange"; "dataSourceChange": "dataSourceChange"; "resultados": "resultados"; }, ["columnDefs"], ["[filtro]", "[objetosMenuPegado]", "[objetosMenu]", "[botonesFiltro]", "[cuerpo]", "[tableDefinitions]", "[appendTable]"], true, never>;
156
+ static ɵcmp: i0.ɵɵComponentDeclaration<TablaMantenimientoComponent<any>, "jvs-tabla-mantenimiento", never, { "dataSuscription": { "alias": "dataSuscription"; "required": false; }; "objThis": { "alias": "objThis"; "required": true; }; "nombreColeccion": { "alias": "nombreColeccion"; "required": true; }; "busquedaValor": { "alias": "ctrlBusquedaValue"; "required": false; "isSignal": true; }; "busquedaPlaceholder": { "alias": "ctrlBusquedaPlaceholder"; "required": false; "isSignal": true; }; "filtroCampos": { "alias": "filtroCampos"; "required": false; }; "paginador": { "alias": "paginador"; "required": false; }; "esTabla": { "alias": "esTabla"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "filaExtraHeader": { "alias": "filaExtraHeader"; "required": false; }; "filaFooter": { "alias": "filaFooter"; "required": false; }; "botonesCRUD": { "alias": "botonesCRUD"; "required": false; }; "objBotonesCRUD": { "alias": "objBotonesCRUD"; "required": false; }; "classSeleccionado": { "alias": "classSeleccionado"; "required": false; }; "classAnulado": { "alias": "classAnulado"; "required": false; }; "campoAnulado": { "alias": "campoAnulado"; "required": false; }; "campoAnuladoMensaje": { "alias": "campoAnuladoMensaje"; "required": false; }; "selectionModel": { "alias": "selectionModel"; "required": false; }; "filaExtraTemplate": { "alias": "filaExtraTemplate"; "required": false; }; "exportarExcel": { "alias": "exportarExcel"; "required": false; }; "busquedaCompacta": { "alias": "busquedaCompacta"; "required": false; "isSignal": true; }; "alturaFull": { "alias": "alturaFull"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "derechosActuales": { "alias": "derechosActuales"; "required": false; }; "mostrarBotonOrden": { "alias": "mostrarBotonOrden"; "required": false; "isSignal": true; }; "busquedaTipo": { "alias": "ctrlBusqueda"; "required": false; "isSignal": true; }; "leyenda": { "alias": "leyenda"; "required": false; }; "idTabla": { "alias": "idTabla"; "required": true; }; "columnasTabla": { "alias": "columnasTabla"; "required": false; }; "botonesMenu": { "alias": "botonesMenu"; "required": false; }; "condicionesClaseFila": { "alias": "condicionesClaseFila"; "required": false; }; "rowTooltip": { "alias": "rowTooltip"; "required": false; }; "soloIconos": { "alias": "soloIconos"; "required": false; }; }, { "dblclickItem": "dblclickItem"; "opcionSelecionada": "opcionSelecionada"; "opcBusqueda": "opcBusqueda"; "accionRecargar": "accionRecargar"; "selectionModelChange": "selectionModelChange"; "dataSourceChange": "dataSourceChange"; "resultados": "resultados"; }, ["columnDefs"], ["[filtro]", "[objetosMenuPegado]", "[objetosMenu]", "[botonesFiltro]", "[botonesConfig]", "[cuerpo]", "[tableDefinitions]", "[appendTable]"], true, never>;
150
157
  }
151
158
  export {};