@jvsoft/components 0.0.13-alpha.1 → 0.0.13-alpha.3

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 (140) hide show
  1. package/dialog-flotante/dialog-flotante.component.d.ts +32 -0
  2. package/dialog-flotante/dialog-flotante.interface.d.ts +11 -0
  3. package/dialog-flotante/index.d.ts +5 -0
  4. package/fesm2022/jvsoft-components-dialog-flotante.mjs +129 -0
  5. package/fesm2022/jvsoft-components-dialog-flotante.mjs.map +1 -0
  6. package/fesm2022/jvsoft-components-lista-arbol.mjs +282 -0
  7. package/fesm2022/jvsoft-components-lista-arbol.mjs.map +1 -0
  8. package/fesm2022/jvsoft-components-luces-navidad.mjs +33 -0
  9. package/fesm2022/jvsoft-components-luces-navidad.mjs.map +1 -0
  10. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs +47 -0
  11. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs.map +1 -0
  12. package/fesm2022/jvsoft-components-menu.mjs +102 -0
  13. package/fesm2022/jvsoft-components-menu.mjs.map +1 -0
  14. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs +91 -0
  15. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs.map +1 -0
  16. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs +1812 -0
  17. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs.map +1 -0
  18. package/fesm2022/jvsoft-components.mjs +2335 -0
  19. package/fesm2022/jvsoft-components.mjs.map +1 -0
  20. package/{index.ts → index.d.ts} +1 -8
  21. package/lista-arbol/index.d.ts +5 -0
  22. package/lista-arbol/lista-arbol.component.d.ts +58 -0
  23. package/lista-arbol/lista-arbol.functions.d.ts +8 -0
  24. package/luces-navidad/index.d.ts +5 -0
  25. package/luces-navidad/luces-navidad.component.d.ts +11 -0
  26. package/mat-suffix-search-button/index.d.ts +5 -0
  27. package/mat-suffix-search-button/mat-suffix-search-button.component.d.ts +12 -0
  28. package/menu/index.d.ts +5 -0
  29. package/menu/menu.component.d.ts +25 -0
  30. package/menu/menu.interface.d.ts +16 -0
  31. package/package.json +43 -6
  32. package/tabla-mantenimiento/classes/data-model.d.ts +25 -0
  33. package/tabla-mantenimiento/components/progress-bar/index.d.ts +5 -0
  34. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.d.ts +30 -0
  35. package/tabla-mantenimiento/components/progress-bar/public-api.d.ts +1 -0
  36. package/tabla-mantenimiento/index.d.ts +5 -0
  37. package/tabla-mantenimiento/interfaces/{archivo.ts → archivo.d.ts} +4 -7
  38. package/tabla-mantenimiento/interfaces/global/{boton-mantenimiento.ts → boton-mantenimiento.d.ts} +3 -9
  39. package/tabla-mantenimiento/interfaces/global/{columnas-tabla.ts → columnas-tabla.d.ts} +12 -89
  40. package/tabla-mantenimiento/interfaces/global/no-export.d.ts +2 -0
  41. package/tabla-mantenimiento/interfaces/global/{otros.ts → otros.d.ts} +4 -15
  42. package/tabla-mantenimiento/interfaces/implements/{incluye-tabla-mantenimiento.ts → incluye-tabla-mantenimiento.d.ts} +4 -6
  43. package/tabla-mantenimiento/interfaces/implements/{index.ts → index.d.ts} +0 -1
  44. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.d.ts +19 -0
  45. package/tabla-mantenimiento/pipes/no-sanitize.pipe.d.ts +10 -0
  46. package/tabla-mantenimiento/pipes/zero-fill.pipe.d.ts +8 -0
  47. package/tabla-mantenimiento/{public-api.ts → public-api.d.ts} +2 -3
  48. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.d.ts +8 -0
  49. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.d.ts +9 -0
  50. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.d.ts +9 -0
  51. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.d.ts +8 -0
  52. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.d.ts +8 -0
  53. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.d.ts +9 -0
  54. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.d.ts +8 -0
  55. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.d.ts +18 -0
  56. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.d.ts +23 -0
  57. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.d.ts +21 -0
  58. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.d.ts +18 -0
  59. package/tabla-mantenimiento/tabla-mantenimiento.component.d.ts +151 -0
  60. package/tabla-mantenimiento/tabla-mantenimiento.functions.d.ts +5 -0
  61. package/tabla-mantenimiento/tabla-mantenimiento.service.d.ts +8 -0
  62. package/tabla-mantenimiento/table-util.d.ts +11 -0
  63. package/CHANGELOG.md +0 -15
  64. package/build.js +0 -20
  65. package/dialog-flotante/dialog-flotante.component.html +0 -66
  66. package/dialog-flotante/dialog-flotante.component.ts +0 -115
  67. package/dialog-flotante/dialog-flotante.interface.ts +0 -13
  68. package/dialog-flotante/index.ts +0 -1
  69. package/dialog-flotante/ng-package.json +0 -5
  70. package/lista-arbol/lista-arbol.component.html +0 -66
  71. package/lista-arbol/lista-arbol.component.ts +0 -238
  72. package/lista-arbol/lista-arbol.functions.ts +0 -46
  73. package/lista-arbol/ng-package.json +0 -5
  74. package/luces-navidad/christmas-tree.png +0 -0
  75. package/luces-navidad/index.ts +0 -1
  76. package/luces-navidad/luces-navidad.component.html +0 -6
  77. package/luces-navidad/luces-navidad.component.ts +0 -24
  78. package/luces-navidad/ng-package.json +0 -5
  79. package/mat-suffix-search-button/index.ts +0 -1
  80. package/mat-suffix-search-button/mat-suffix-search-button.component.html +0 -5
  81. package/mat-suffix-search-button/mat-suffix-search-button.component.ts +0 -36
  82. package/mat-suffix-search-button/ng-package.json +0 -5
  83. package/menu/index.ts +0 -1
  84. package/menu/menu.component.html +0 -40
  85. package/menu/menu.component.ts +0 -88
  86. package/menu/menu.interface.ts +0 -16
  87. package/menu/ng-package.json +0 -5
  88. package/ng-package.json +0 -17
  89. package/progress-spinner.zip +0 -0
  90. package/tabla-mantenimiento/classes/data-model.ts +0 -150
  91. package/tabla-mantenimiento/components/progress-bar/index.ts +0 -1
  92. package/tabla-mantenimiento/components/progress-bar/ng-package.json +0 -5
  93. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.html +0 -10
  94. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.ts +0 -85
  95. package/tabla-mantenimiento/components/progress-bar/public-api.ts +0 -2
  96. package/tabla-mantenimiento/index.ts +0 -1
  97. package/tabla-mantenimiento/interfaces/global/export-excel-servidor.ts +0 -0
  98. package/tabla-mantenimiento/interfaces/global/no-export.ts +0 -11
  99. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.ts +0 -97
  100. package/tabla-mantenimiento/ng-package.json +0 -5
  101. package/tabla-mantenimiento/pipes/no-sanitize.pipe.ts +0 -12
  102. package/tabla-mantenimiento/pipes/zero-fill.pipe.ts +0 -19
  103. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.html +0 -22
  104. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.ts +0 -12
  105. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.html +0 -58
  106. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.ts +0 -19
  107. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.html +0 -40
  108. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.ts +0 -17
  109. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.html +0 -25
  110. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.ts +0 -14
  111. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.html +0 -28
  112. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.ts +0 -13
  113. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.html +0 -30
  114. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.ts +0 -38
  115. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.html +0 -97
  116. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.ts +0 -43
  117. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.html +0 -26
  118. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.ts +0 -36
  119. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.ts +0 -54
  120. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.html +0 -76
  121. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.ts +0 -67
  122. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.html +0 -7
  123. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.ts +0 -39
  124. package/tabla-mantenimiento/tabla-mantenimiento.component.html +0 -385
  125. package/tabla-mantenimiento/tabla-mantenimiento.component.ts +0 -951
  126. package/tabla-mantenimiento/tabla-mantenimiento.functions.ts +0 -57
  127. package/tabla-mantenimiento/tabla-mantenimiento.service.ts +0 -44
  128. package/tabla-mantenimiento/table-util.ts +0 -49
  129. package/tabla-mantenimiento.zip +0 -0
  130. package/tsconfig.lib.json +0 -21
  131. package/tsconfig.lib.prod.json +0 -11
  132. package/tsconfig.spec.json +0 -15
  133. package/yarn-error.log +0 -68
  134. /package/dialog-flotante/{public-api.ts → public-api.d.ts} +0 -0
  135. /package/lista-arbol/{public-api.ts → public-api.d.ts} +0 -0
  136. /package/luces-navidad/{public-api.ts → public-api.d.ts} +0 -0
  137. /package/mat-suffix-search-button/{public-api.ts → public-api.d.ts} +0 -0
  138. /package/menu/{public-api.ts → public-api.d.ts} +0 -0
  139. /package/tabla-mantenimiento/interfaces/global/{index.ts → index.d.ts} +0 -0
  140. /package/tabla-mantenimiento/interfaces/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,1812 @@
1
+ import { __decorate } from 'tslib';
2
+ import { trigger, state, transition, style, animate } from '@angular/animations';
3
+ import { TemplatePortal } from '@angular/cdk/portal';
4
+ import * as i1 from '@angular/common';
5
+ import { CommonModule, DecimalPipe } from '@angular/common';
6
+ import * as i0 from '@angular/core';
7
+ import { EventEmitter, HostListener, Output, Input, Directive, ViewChild, Optional, Component, inject, Pipe, NgModule, ContentChildren, ViewChildren, Injectable, ElementRef, HostBinding } from '@angular/core';
8
+ import * as i1$2 from '@angular/forms';
9
+ import { Validators, FormControl, FormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';
10
+ import * as i14 from '@angular/material/badge';
11
+ import { MatBadgeModule } from '@angular/material/badge';
12
+ import * as i3$1 from '@angular/material/checkbox';
13
+ import { MatCheckboxModule } from '@angular/material/checkbox';
14
+ import * as i5$1 from '@angular/material/core';
15
+ import { MatRipple, MatRippleModule } from '@angular/material/core';
16
+ import * as i6 from '@angular/material/divider';
17
+ import { MatDividerModule } from '@angular/material/divider';
18
+ import * as i5 from '@angular/material/icon';
19
+ import { MatIconRegistry, MatIcon, MatIconModule } from '@angular/material/icon';
20
+ import * as i8 from '@angular/material/menu';
21
+ import { MatMenuModule } from '@angular/material/menu';
22
+ import * as i9 from '@angular/material/paginator';
23
+ import { MatPaginatorModule, MatPaginator, MAT_PAGINATOR_DEFAULT_OPTIONS } from '@angular/material/paginator';
24
+ import * as i3 from '@angular/material/sort';
25
+ import { MatSortModule, MatSort } from '@angular/material/sort';
26
+ import * as i2 from '@angular/material/table';
27
+ import { MatColumnDef, MatTable, MatTableModule, MatTableDataSource, MatFooterRow, MatRow } from '@angular/material/table';
28
+ import * as i4 from '@angular/material/tooltip';
29
+ import { MatTooltipModule } from '@angular/material/tooltip';
30
+ import { untilDestroyed, UntilDestroy } from '@ngneat/until-destroy';
31
+ import moment from 'moment';
32
+ import { Subject, takeUntil, startWith, of, fromEvent } from 'rxjs';
33
+ import { filter, map, take } from 'rxjs/operators';
34
+ import shortHash from 'shorthash2';
35
+ import * as i1$1 from '@angular/platform-browser';
36
+ import { DomSanitizer } from '@angular/platform-browser';
37
+ import * as XLSX from 'xlsx';
38
+ import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
39
+ import * as i2$1 from '@angular/cdk/overlay';
40
+
41
+ function buscarEnArray(coleccion, idBuscar, dato) {
42
+ if (!Array.isArray(coleccion) || coleccion.length === 0)
43
+ return null; // 🔹 Validación de entrada
44
+ return Array.isArray(idBuscar)
45
+ ? coleccion.find(item => idBuscar.every((campo, idx) => item[campo] === dato[idx])) || null
46
+ : coleccion.find(item => item[idBuscar] === dato) || null;
47
+ }
48
+ function formatearFecha(val, hora = '00:00:00') {
49
+ if (val) {
50
+ if (val.length <= 10) {
51
+ val = val + ' ' + hora;
52
+ }
53
+ return new Date(val);
54
+ }
55
+ return val;
56
+ }
57
+ function esNumero(value) {
58
+ return !isNaN(Number(value));
59
+ }
60
+ function capitalizarTexto(texto) {
61
+ texto = texto.replace(/_/g, ' ');
62
+ texto = texto.replace(/-/g, ' ');
63
+ const textoCortado = texto.split(' ');
64
+ const nText = [];
65
+ textoCortado.forEach(textActual => {
66
+ nText.push(textActual.charAt(0).toUpperCase() + textActual.slice(1));
67
+ });
68
+ return nText.join(' ');
69
+ }
70
+ function getBrowserName() {
71
+ const agent = window.navigator.userAgent.toLowerCase();
72
+ switch (true) {
73
+ case agent.indexOf('edge') > -1:
74
+ return 'edge';
75
+ case agent.indexOf('opr') > -1 && !!window.opr:
76
+ return 'opera';
77
+ case agent.indexOf('chrome') > -1 && !!window.chrome:
78
+ return 'chrome';
79
+ case agent.indexOf('trident') > -1:
80
+ return 'ie';
81
+ case agent.indexOf('firefox') > -1:
82
+ return 'firefox';
83
+ case agent.indexOf('safari') > -1:
84
+ return 'safari';
85
+ default:
86
+ return 'other';
87
+ }
88
+ }
89
+
90
+ class DataModel {
91
+ modelosChk = {}; // Usar any para valores dinámicos
92
+ checkbox;
93
+ constructor() {
94
+ this.checkbox = new ForCheckboxModel(this);
95
+ }
96
+ generarId(row, campoValor, separador = '') {
97
+ if (typeof campoValor == 'string') {
98
+ campoValor = [campoValor];
99
+ }
100
+ return campoValor.map(data => row[data]).join(separador);
101
+ }
102
+ // Agrega controles al objeto modelosChk
103
+ agregarControles(lista, idLista, limpiar = true, campoValor = null, campoValorSeparador = '') {
104
+ if (limpiar) {
105
+ this.modelosChk = {};
106
+ }
107
+ const asignarValor = (dat, idLista, campoValor, key) => {
108
+ if (!key) {
109
+ key = dat[idLista] + (campoValor.includes('.') ? '' : `.${campoValor}`);
110
+ }
111
+ const mat = campoValor.match(/^([in])[A-Z][a-zA-Z]+/);
112
+ if (mat) {
113
+ this.modelosChk[key] = dat[campoValor] * 1;
114
+ }
115
+ else {
116
+ this.modelosChk[key] = dat[campoValor];
117
+ }
118
+ };
119
+ lista.forEach(dat => {
120
+ if (campoValor === null) {
121
+ // Caso 1: Sin campoValor, se asigna false
122
+ this.modelosChk[dat[idLista]] = false;
123
+ }
124
+ else if (typeof campoValor === 'string') {
125
+ // Caso 2: campoValor es un string
126
+ asignarValor(dat, idLista, campoValor, dat[idLista]);
127
+ }
128
+ else if (campoValorSeparador) {
129
+ const idStr = this.generarId(dat, campoValor, campoValorSeparador);
130
+ // Caso 2: campoValor es un string
131
+ asignarValor(dat, idLista, '.', idStr);
132
+ }
133
+ else {
134
+ // Caso 3: campoValor es un array de strings
135
+ campoValor.forEach(data => asignarValor(dat, idLista, data));
136
+ }
137
+ });
138
+ }
139
+ // Establece el estado de un índice
140
+ setState(idx, state) {
141
+ this.modelosChk[idx] = state;
142
+ }
143
+ // Obtiene el estado de un índice
144
+ getState(idx) {
145
+ return this.modelosChk[idx];
146
+ }
147
+ getDataMultiple(idx) {
148
+ const camposMod = Object.keys(this.modelosChk).filter(key => key.split('.')[0] == idx);
149
+ const vRet = {};
150
+ camposMod.forEach(key => {
151
+ vRet[key.split('.')[1]] = this.modelosChk[key];
152
+ });
153
+ return vRet;
154
+ }
155
+ // Genera una lista basada en el estado de los índices
156
+ generarLista(tipoRetorno = null, esCampoNumerico = false) {
157
+ const strLista = [];
158
+ const objLista = {};
159
+ Object.keys(this.modelosChk).forEach(key => {
160
+ if ((esCampoNumerico && esNumero(this.modelosChk[key])) ||
161
+ (this.modelosChk[key])) {
162
+ strLista.push(key);
163
+ objLista[key] = this.modelosChk[key];
164
+ }
165
+ });
166
+ if (tipoRetorno === 'array') {
167
+ return strLista;
168
+ }
169
+ if (tipoRetorno === 'object') {
170
+ return objLista;
171
+ }
172
+ return strLista.join(',');
173
+ }
174
+ generarFormGroupFromModelosChk(tipo) {
175
+ const formGroupObj = {};
176
+ let validadores = [];
177
+ if (tipo == 'number') {
178
+ validadores = [
179
+ Validators.required,
180
+ Validators.min(1)
181
+ ];
182
+ }
183
+ Object.keys(this.modelosChk).forEach(key => {
184
+ formGroupObj[key] = new FormControl(this.modelosChk[key], validadores);
185
+ });
186
+ return new FormGroup(formGroupObj);
187
+ // return this.formBuilder.group(formGroupObj);
188
+ }
189
+ }
190
+ class ForCheckboxModel {
191
+ modeloCheck;
192
+ constructor(modeloCheck) {
193
+ this.modeloCheck = modeloCheck;
194
+ }
195
+ get cantidadActivos() {
196
+ return Object.values(this.modeloCheck.modelosChk).filter(Boolean).length;
197
+ }
198
+ get existenActivados() {
199
+ return this.cantidadActivos > 0;
200
+ }
201
+ get todosActivos() {
202
+ const total = Object.keys(this.modeloCheck.modelosChk).length;
203
+ const activos = this.cantidadActivos;
204
+ return activos > 0 && total === activos;
205
+ }
206
+ get algunosActivos() {
207
+ const total = Object.keys(this.modeloCheck.modelosChk).length;
208
+ const activos = this.cantidadActivos;
209
+ return activos > 0 && total !== activos;
210
+ }
211
+ establecerTodos(activo) {
212
+ Object.keys(this.modeloCheck.modelosChk).forEach(idx => this.modeloCheck.modelosChk[idx] = activo);
213
+ }
214
+ }
215
+
216
+ function tipoValorFuncion(datoParam, defaultValue, ...param) {
217
+ if (datoParam === undefined || datoParam === null) {
218
+ return defaultValue; // Retorna el valor por defecto si es undefined
219
+ }
220
+ if (typeof datoParam === 'function') {
221
+ return datoParam(...param);
222
+ }
223
+ return datoParam;
224
+ }
225
+
226
+ class MatRowKeyboardSelectionDirective {
227
+ el;
228
+ rows;
229
+ renderedData;
230
+ tabla; // Entrada: Referencia a la tabla
231
+ rowModel; // Entrada: Modelo de fila actual
232
+ seleccionarSiguiente = new EventEmitter(); // Salida: Evento al seleccionar siguiente
233
+ unsubscriber$ = new Subject();
234
+ constructor(el) {
235
+ this.el = el;
236
+ }
237
+ ngOnInit() {
238
+ // Asignar tabindex si no está definido
239
+ if (this.el.nativeElement.tabIndex < 0) {
240
+ this.el.nativeElement.tabIndex = 0;
241
+ }
242
+ // Obtener la fuente de datos de la tabla
243
+ const dataSource = this.tabla.dataSource;
244
+ // Suscribirse a los cambios en los datos
245
+ dataSource.connect().pipe(takeUntil(this.unsubscriber$)).subscribe(data => {
246
+ this.renderedData = data;
247
+ this.rows = Array.from(this.getTableRows());
248
+ });
249
+ }
250
+ ngOnDestroy() {
251
+ // Finalizar la suscripción al destruir la directiva
252
+ this.unsubscriber$.next(null);
253
+ this.unsubscriber$.complete();
254
+ }
255
+ onKeydown(event) {
256
+ var element = event.target;
257
+ if (element.tagName === "INPUT") {
258
+ event.stopPropagation();
259
+ }
260
+ else {
261
+ const currentIndex = this.renderedData.findIndex(row => row === this.rowModel);
262
+ const eRef = event.target;
263
+ this.rows = this.rows.filter(elem => elem.hasAttribute('id'));
264
+ const arrayFilas = Array.from(this.rows);
265
+ const fElem = arrayFilas.filter(elem => elem.id == eRef.id).pop();
266
+ const cElemIdx = arrayFilas.findIndex(elem => elem == fElem);
267
+ let newRow;
268
+ // Controlar las teclas presionadas
269
+ switch (event.key) {
270
+ case 'ArrowDown':
271
+ newRow = this.rows[cElemIdx + 1];
272
+ break;
273
+ case 'ArrowUp':
274
+ newRow = this.rows[cElemIdx - 1];
275
+ break;
276
+ case 'Enter':
277
+ case ' ':
278
+ this.seleccionarSiguiente.next(this.renderedData[currentIndex]);
279
+ event.preventDefault();
280
+ break;
281
+ }
282
+ // Enfocar la nueva fila seleccionada
283
+ if (newRow) {
284
+ newRow.classList.add('estaFocus');
285
+ newRow.focus();
286
+ }
287
+ }
288
+ }
289
+ getTableRows() {
290
+ let el = this.el.nativeElement;
291
+ // Recorrer los elementos padres hasta encontrar la tabla
292
+ while (el && el.parentNode) {
293
+ el = el.parentNode;
294
+ // Verificar si es una tabla de material
295
+ if (el.tagName && el.tagName.toLowerCase() === 'mat-table' || el.hasAttribute('mat-table')) {
296
+ return el.querySelectorAll('mat-row, tr[mat-row]');
297
+ }
298
+ }
299
+ return undefined;
300
+ }
301
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MatRowKeyboardSelectionDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
302
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: MatRowKeyboardSelectionDirective, isStandalone: true, selector: "[matRowKeyboardSelection]", inputs: { tabla: ["matRowKeyboardSelection", "tabla"], rowModel: "rowModel" }, outputs: { seleccionarSiguiente: "seleccionarSiguiente" }, host: { listeners: { "keydown": "onKeydown($event)" } }, ngImport: i0 });
303
+ }
304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MatRowKeyboardSelectionDirective, decorators: [{
305
+ type: Directive,
306
+ args: [{
307
+ selector: '[matRowKeyboardSelection]'
308
+ }]
309
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { tabla: [{
310
+ type: Input,
311
+ args: ['matRowKeyboardSelection']
312
+ }], rowModel: [{
313
+ type: Input
314
+ }], seleccionarSiguiente: [{
315
+ type: Output
316
+ }], onKeydown: [{
317
+ type: HostListener,
318
+ args: ['keydown', ['$event']]
319
+ }] } });
320
+
321
+ class ColumnTypeComponent {
322
+ table;
323
+ column;
324
+ columnDef;
325
+ columnTitleTemplate; // Permite personalizar títulos
326
+ columnFooterTemplate; // Permite personalizar footer
327
+ cellTemplate; // Se usa para el contenido de las celdas
328
+ constructor(table) {
329
+ this.table = table;
330
+ }
331
+ ngOnInit() {
332
+ }
333
+ ngAfterViewInit() {
334
+ if (this.columnDef) {
335
+ this.table.addColumnDef(this.columnDef);
336
+ }
337
+ }
338
+ accionClick(item, event) {
339
+ if (this.column.click) {
340
+ this.column.click(item);
341
+ event.stopPropagation();
342
+ }
343
+ return false;
344
+ }
345
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeComponent, deps: [{ token: i2.MatTable, optional: true }], target: i0.ɵɵFactoryTarget.Component });
346
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeComponent, isStandalone: false, selector: "jvs-column-type", inputs: { column: "column", columnTitleTemplate: "columnTitleTemplate", columnFooterTemplate: "columnFooterTemplate", cellTemplate: "cellTemplate" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true, static: true }], ngImport: i0, template: "<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <ng-container *ngIf=\"columnTitleTemplate; else defaultTitle\">\n <ng-container *ngTemplateOutlet=\"columnTitleTemplate; context: { column: column }\"></ng-container>\n </ng-container>\n <ng-template #defaultTitle>\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </ng-template>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { row: row, column: column }\"></ng-container>\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n <ng-container *ngIf=\"columnFooterTemplate; else defaultFooter\">\n <ng-container *ngTemplateOutlet=\"columnFooterTemplate; context: { column: column }\"></ng-container>\n </ng-container>\n <ng-template #defaultFooter>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </ng-template>\n </th>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }] });
347
+ }
348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeComponent, decorators: [{
349
+ type: Component,
350
+ args: [{ selector: 'jvs-column-type', standalone: false, template: "<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <ng-container *ngIf=\"columnTitleTemplate; else defaultTitle\">\n <ng-container *ngTemplateOutlet=\"columnTitleTemplate; context: { column: column }\"></ng-container>\n </ng-container>\n <ng-template #defaultTitle>\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </ng-template>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { row: row, column: column }\"></ng-container>\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n <ng-container *ngIf=\"columnFooterTemplate; else defaultFooter\">\n <ng-container *ngTemplateOutlet=\"columnFooterTemplate; context: { column: column }\"></ng-container>\n </ng-container>\n <ng-template #defaultFooter>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </ng-template>\n </th>\n</ng-container>\n" }]
351
+ }], ctorParameters: () => [{ type: i2.MatTable, decorators: [{
352
+ type: Optional
353
+ }] }], propDecorators: { column: [{
354
+ type: Input,
355
+ args: [{ required: true }]
356
+ }], columnDef: [{
357
+ type: ViewChild,
358
+ args: [MatColumnDef, { static: true }]
359
+ }], columnTitleTemplate: [{
360
+ type: Input
361
+ }], columnFooterTemplate: [{
362
+ type: Input
363
+ }], cellTemplate: [{
364
+ type: Input
365
+ }] } });
366
+
367
+ class ColumnTypeNumberComponent extends ColumnTypeComponent {
368
+ column = {};
369
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeNumberComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
370
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeNumberComponent, isStandalone: false, selector: "jvs-column-type-number", inputs: { column: "column" }, usesInheritance: true, ngImport: i0, template: "\n<ng-template #cellTemplate let-row=\"row\">\n\t\t\t\t<span *ngIf=\"column.property && row[column.property]\" class=\"!text-indigo-900 font-semibold\">\n\t\t\t\t\t{{ row[column.property] | number: (column.format ? column.format : '1.0-2') }}\n\t\t\t\t</span>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
371
+ }
372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeNumberComponent, decorators: [{
373
+ type: Component,
374
+ args: [{ selector: 'jvs-column-type-number', standalone: false, template: "\n<ng-template #cellTemplate let-row=\"row\">\n\t\t\t\t<span *ngIf=\"column.property && row[column.property]\" class=\"!text-indigo-900 font-semibold\">\n\t\t\t\t\t{{ row[column.property] | number: (column.format ? column.format : '1.0-2') }}\n\t\t\t\t</span>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n" }]
375
+ }], propDecorators: { column: [{
376
+ type: Input,
377
+ args: [{ required: true }]
378
+ }] } });
379
+
380
+ class ColumnTypeDateComponent extends ColumnTypeComponent {
381
+ column = {};
382
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeDateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
383
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeDateComponent, isStandalone: false, selector: "jvs-column-type-date", inputs: { column: "column" }, usesInheritance: true, ngImport: i0, template: "<ng-template #cellTemplate let-row=\"row\">\n {{ row[column.property] | date: (column.format ? column.format : 'dd/MM/yyyy') }}\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
384
+ }
385
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeDateComponent, decorators: [{
386
+ type: Component,
387
+ args: [{ selector: 'jvs-column-type-date', standalone: false, template: "<ng-template #cellTemplate let-row=\"row\">\n {{ row[column.property] | date: (column.format ? column.format : 'dd/MM/yyyy') }}\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n" }]
388
+ }], propDecorators: { column: [{
389
+ type: Input,
390
+ args: [{ required: true }]
391
+ }] } });
392
+
393
+ const YES_ICON = `
394
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M21 7L9 19l-5.5-5.5l1.41-1.41L9 16.17L19.59 5.59z"/></svg>
395
+ `;
396
+ const NO_ICON = `
397
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z"/></svg>
398
+ `;
399
+ class ColumnTypeSinoComponent extends ColumnTypeComponent {
400
+ column = {}; // 🟢 Solución
401
+ constructor() {
402
+ super(inject(MatTable)); // 🟢 Llamar al constructor del padre
403
+ const iconRegistry = inject(MatIconRegistry);
404
+ const sanitizer = inject(DomSanitizer);
405
+ // Note that we provide the icon here as a string literal here due to a limitation in
406
+ // Stackblitz. If you want to provide the icon from a URL, you can use:
407
+ // `iconRegistry.addSvgIcon('thumbs-up', sanitizer.bypassSecurityTrustResourceUrl('icon.svg'));`
408
+ iconRegistry.addSvgIconLiteralInNamespace('yes_no', 'yes', sanitizer.bypassSecurityTrustHtml(YES_ICON));
409
+ iconRegistry.addSvgIconLiteralInNamespace('yes_no', 'no', sanitizer.bypassSecurityTrustHtml(NO_ICON));
410
+ // iconRegistry.addSvgIconLiteral('yesIcon', sanitizer.bypassSecurityTrustHtml(YES_ICON));
411
+ // iconRegistry.addSvgIconLiteral('noIcon', sanitizer.bypassSecurityTrustHtml(NO_ICON));
412
+ }
413
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeSinoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
414
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeSinoComponent, isStandalone: false, selector: "jvs-column-type-sino", inputs: { column: "column" }, usesInheritance: true, ngImport: i0, template: "<ng-template #cellTemplate let-row=\"row\">\n <mat-icon *ngIf=\"[column.yesValue, 1, true].includes(row[column.property])\"\n [svgIcon]=\"column.yesIcon ?? 'yes_no:yes'\" class=\"icon-sm\"\n [matTooltip]=\"column.yesTooltip ?? undefined\"\n ></mat-icon>\n <mat-icon *ngIf=\"[column.noValue, 0, false].includes(row[column.property])\" [svgIcon]=\"column.noIcon ?? 'yes_no:no'\"\n class=\"icon-sm\"\n [matTooltip]=\"column.noTooltip ?? undefined\"\n ></mat-icon>\n <span class=\"cdk-visually-hidden\">{{ row[column.property] }}</span>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
415
+ }
416
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeSinoComponent, decorators: [{
417
+ type: Component,
418
+ args: [{ selector: 'jvs-column-type-sino', standalone: false, template: "<ng-template #cellTemplate let-row=\"row\">\n <mat-icon *ngIf=\"[column.yesValue, 1, true].includes(row[column.property])\"\n [svgIcon]=\"column.yesIcon ?? 'yes_no:yes'\" class=\"icon-sm\"\n [matTooltip]=\"column.yesTooltip ?? undefined\"\n ></mat-icon>\n <mat-icon *ngIf=\"[column.noValue, 0, false].includes(row[column.property])\" [svgIcon]=\"column.noIcon ?? 'yes_no:no'\"\n class=\"icon-sm\"\n [matTooltip]=\"column.noTooltip ?? undefined\"\n ></mat-icon>\n <span class=\"cdk-visually-hidden\">{{ row[column.property] }}</span>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n" }]
419
+ }], ctorParameters: () => [], propDecorators: { column: [{
420
+ type: Input,
421
+ args: [{ required: true }]
422
+ }] } });
423
+
424
+ class ProgressBarComponent {
425
+ objThis;
426
+ porcentaje = 0;
427
+ textoCentrado = false;
428
+ _textoMostrar = '';
429
+ get textoMostrar() { return this._textoMostrar; }
430
+ set textoMostrar(val) { this._textoMostrar = val; }
431
+ _formatoNumero = '';
432
+ get formatoNumero() { return this._formatoNumero; }
433
+ set formatoNumero(val) { this._formatoNumero = val ?? '1.0-0'; }
434
+ _coloresValor = [];
435
+ get coloresValor() { return this._coloresValor; }
436
+ set coloresValor(val) {
437
+ if (!val || !Array.isArray(val)) {
438
+ this._coloresValor = [
439
+ { valorMaximo: 1, class: 'p-0' },
440
+ { valorMaximo: 40, class: 'bg-red-400 text-red-900' },
441
+ // {valorMaximo: 35, class: 'bg-red-600 text-red-100'},
442
+ { valorMaximo: 80, class: 'bg-yellow-600 text-yellow-100' },
443
+ { valorMaximo: 100, class: 'bg-green-600 text-green-100' },
444
+ ];
445
+ }
446
+ else {
447
+ this._coloresValor = val;
448
+ }
449
+ }
450
+ constructor() { }
451
+ ngOnInit() {
452
+ }
453
+ colorEstilo() {
454
+ let estiloFin = null;
455
+ let claseFin = null;
456
+ let encontro = false;
457
+ this.coloresValor = this.ordenarPorPropiedad(this.coloresValor, 'valorMaximo');
458
+ this.coloresValor.forEach(estilo => {
459
+ if (!encontro && (this.porcentaje <= estilo.valorMaximo)) {
460
+ // console.log(this.porcentaje, estilo, (this.porcentaje < estilo.valorMaximo));
461
+ encontro = true;
462
+ estiloFin = estilo.style;
463
+ claseFin = estilo.class;
464
+ }
465
+ });
466
+ return {
467
+ style: estiloFin ?? '',
468
+ class: claseFin ?? '',
469
+ };
470
+ }
471
+ ordenarPorPropiedad(objData, propiedad, numeros = false) {
472
+ if (numeros) {
473
+ return objData.sort((a, b) => a[propiedad] - b[propiedad]);
474
+ }
475
+ return objData.sort((a, b) => (a[propiedad] > b[propiedad]) ? 1 : ((b[propiedad] > a[propiedad]) ? -1 : 0));
476
+ }
477
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
478
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ProgressBarComponent, isStandalone: true, selector: "jvs-progress-bar", inputs: { objThis: "objThis", porcentaje: "porcentaje", textoCentrado: "textoCentrado", textoMostrar: "textoMostrar", formatoNumero: "formatoNumero", coloresValor: "coloresValor" }, host: { classAttribute: "jvs-progress-bar" }, ngImport: i0, template: "<div class=\"w-full bg-gray-200 text-gray-700 rounded-full\" [class.text-center]=\"textoCentrado\">\n\t<div class=\"text-xxs font-medium text-center p-1 leading-none rounded-full\"\n\t\t [ngClass]=\"colorEstilo().class ? colorEstilo().class : 'bg-blue-600 text-blue-100'\"\n\t\t [style]=\"colorEstilo().style ? colorEstilo().style : ''\"\n\t\t [style.width]=\"(textoCentrado ? 100 : porcentaje) + '%'\"\n\t>\n <span *ngIf=\"textoMostrar else defaultText;\" class=\"whitespace-nowrap\">{{ textoMostrar }}</span>\n <ng-template #defaultText>{{ porcentaje | number: formatoNumero }}%</ng-template>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
479
+ }
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProgressBarComponent, decorators: [{
481
+ type: Component,
482
+ args: [{ selector: 'jvs-progress-bar', imports: [
483
+ CommonModule,
484
+ DecimalPipe
485
+ ], host: {
486
+ class: 'jvs-progress-bar',
487
+ }, template: "<div class=\"w-full bg-gray-200 text-gray-700 rounded-full\" [class.text-center]=\"textoCentrado\">\n\t<div class=\"text-xxs font-medium text-center p-1 leading-none rounded-full\"\n\t\t [ngClass]=\"colorEstilo().class ? colorEstilo().class : 'bg-blue-600 text-blue-100'\"\n\t\t [style]=\"colorEstilo().style ? colorEstilo().style : ''\"\n\t\t [style.width]=\"(textoCentrado ? 100 : porcentaje) + '%'\"\n\t>\n <span *ngIf=\"textoMostrar else defaultText;\" class=\"whitespace-nowrap\">{{ textoMostrar }}</span>\n <ng-template #defaultText>{{ porcentaje | number: formatoNumero }}%</ng-template>\n </div>\n</div>\n" }]
488
+ }], ctorParameters: () => [], propDecorators: { objThis: [{
489
+ type: Input
490
+ }], porcentaje: [{
491
+ type: Input
492
+ }], textoCentrado: [{
493
+ type: Input
494
+ }], textoMostrar: [{
495
+ type: Input
496
+ }], formatoNumero: [{
497
+ type: Input
498
+ }], coloresValor: [{
499
+ type: Input
500
+ }] } });
501
+
502
+ class ColumnTypeProgressbarComponent extends ColumnTypeComponent {
503
+ column = {};
504
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeProgressbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
505
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeProgressbarComponent, isStandalone: false, selector: "jvs-column-type-progressbar", inputs: { column: "column" }, usesInheritance: true, ngImport: i0, template: "<ng-template #cellTemplate let-row=\"row\">\n <jvs-progress-bar\n [textoCentrado]=\"!!column.progressbar.textoCentrado\"\n [porcentaje]=\"column.progressbar.porcentaje(row)\"\n [coloresValor]=\"column.progressbar.coloresValor\"\n [formatoNumero]=\"column.progressbar.formatoNumero\"\n [textoMostrar]=\"column.progressbar.textoMostrar ? column.progressbar.textoMostrar(row) : ''\"\n ></jvs-progress-bar>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: ProgressBarComponent, selector: "jvs-progress-bar", inputs: ["objThis", "porcentaje", "textoCentrado", "textoMostrar", "formatoNumero", "coloresValor"] }] });
506
+ }
507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeProgressbarComponent, decorators: [{
508
+ type: Component,
509
+ args: [{ selector: 'jvs-column-type-progressbar', standalone: false, template: "<ng-template #cellTemplate let-row=\"row\">\n <jvs-progress-bar\n [textoCentrado]=\"!!column.progressbar.textoCentrado\"\n [porcentaje]=\"column.progressbar.porcentaje(row)\"\n [coloresValor]=\"column.progressbar.coloresValor\"\n [formatoNumero]=\"column.progressbar.formatoNumero\"\n [textoMostrar]=\"column.progressbar.textoMostrar ? column.progressbar.textoMostrar(row) : ''\"\n ></jvs-progress-bar>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n" }]
510
+ }], propDecorators: { column: [{
511
+ type: Input,
512
+ args: [{ required: true }]
513
+ }] } });
514
+
515
+ class NoSanitizePipe {
516
+ domSanitizer;
517
+ constructor(domSanitizer) {
518
+ this.domSanitizer = domSanitizer;
519
+ }
520
+ transform(html) {
521
+ return this.domSanitizer.bypassSecurityTrustHtml(html);
522
+ }
523
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NoSanitizePipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
524
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: NoSanitizePipe, isStandalone: true, name: "noSanitize" });
525
+ }
526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NoSanitizePipe, decorators: [{
527
+ type: Pipe,
528
+ args: [{ name: 'noSanitize' }]
529
+ }], ctorParameters: () => [{ type: i1$1.DomSanitizer }] });
530
+
531
+ class ZeroFillPipe {
532
+ transform(value, digitos, ...args) {
533
+ let s = value + '';
534
+ while (s.length < digitos) {
535
+ s = '0' + s;
536
+ }
537
+ return s;
538
+ }
539
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ZeroFillPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
540
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: ZeroFillPipe, isStandalone: true, name: "zeroFill" });
541
+ }
542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ZeroFillPipe, decorators: [{
543
+ type: Pipe,
544
+ args: [{
545
+ name: 'zeroFill',
546
+ }]
547
+ }] });
548
+ function zeroFill(value, digitos, ...args) {
549
+ return new ZeroFillPipe().transform(value, digitos, args);
550
+ }
551
+
552
+ // export * from './progress-spinner.service';
553
+
554
+ class ColumnTypeTextComponent extends ColumnTypeComponent {
555
+ column = {}; // 🟢 Solución
556
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeTextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
557
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeTextComponent, isStandalone: false, selector: "jvs-column-type-text", inputs: { column: "column" }, usesInheritance: true, ngImport: i0, template: "<ng-template #cellTemplate let-row=\"row\">\n <div *ngIf=\"column.innerHTML; else sinInnerHTML\" [class]=\"column.text?.cssContenedor\" [ngStyle]=\"column.text?.cssStyle\" class=\"hover:!max-h-max\"\n [innerHTML]=\"column.innerHTML(row) | noSanitize\">\n </div>\n <ng-template #sinInnerHTML>\n <ng-container *ngIf=\"column.text && column.text?.separador else campoTextNormal\">\n <div [class]=\"column.text?.cssContenedor\">\n <ng-container\n *ngFor=\"let itm of ((column.transformar ? column.transformar(row) : row[column.property]) ?? '').split(column.text.separador)\">\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: itm, class: column.textCss, row: row }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #campoTextNormal>\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: (column.transformar ? column.transformar(row) : row[column.property]), class: column.textCss, row: row }\"></ng-template>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n\n\n<!--<ng-container matColumnDef=\"{{ column.property }}\">\n<th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n</th>\n<ng-container *ngIf=\"column.innerHTML; else sinInnerHTML\">\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(column, row, $event)\">\n <div [class]=\"column.text?.cssContenedor\" [ngStyle]=\"column.text?.cssStyle\" class=\"hover:!max-h-max\"\n [innerHTML]=\"column.innerHTML(row) | noSanitize\">\n\n </div>\n </td>\n</ng-container>\n<ng-template #sinInnerHTML>\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell>\n <ng-container *ngIf=\"column.text && column.text?.separador else campoTextNormal\">\n <div [class]=\"column.text?.cssContenedor\">\n <ng-container\n *ngFor=\"let itm of ((column.transformar ? column.transformar(row) : row[column.property]) ?? '').split(column.text.separador)\">\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: itm, class: column.textCss, row: row }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #campoTextNormal>\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: (column.transformar ? column.transformar(row) : row[column.property]), class: column.textCss, row: row }\"></ng-template>\n </ng-template>\n </td>\n</ng-template>\n<th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" style=\"height: unset !important;\" mat-footer-cell\n [innerHTML]=\"column.transformarFooter ? column.transformarFooter() : ''\">\n</th>\n</ng-container>-->\n\n<ng-template #tipoDatoString let-row=\"row\" let-fila=\"fila\" let-tipo=\"tipo\" let-value=\"value\" let-format=\"format\"\n let-clase=\"class\">\n <ng-container [ngSwitch]=\"tipo\">\n <ng-container *ngSwitchCase=\"'text'\"><span [ngClass]=\"clase\" *ngIf=\"value\"\n (click)=\"accionClick(row, $event)\">\n <span *ngIf=\"!fila.zeroFill\">{{ value }}</span>\n <span *ngIf=\"fila.zeroFill\">{{ value | zeroFill: fila.zeroFill }}</span>\n </span></ng-container>\n <ng-container *ngSwitchCase=\"'date'\"><span [ngClass]=\"clase\" *ngIf=\"value\"\n (click)=\"accionClick(row, $event)\">{{ value | date: (format || 'dd/MM/yyyy') }}</span></ng-container>\n <ng-container *ngSwitchCase=\"'number'\"><span [ngClass]=\"clase\" *ngIf=\"value\"\n (click)=\"accionClick(row, $event)\">{{ value | number: (format || '0.0-2') }}</span></ng-container>\n <ng-container *ngSwitchCase=\"'money'\"><span [ngClass]=\"clase\"\n [class.text-sky-700]=\"(value * 1) >= 0\" [class.text-red-700]=\"(value * 1) < 0\"\n *ngIf=\"value\" (click)=\"accionClick(row, $event)\">{{ value | number: (format || '1.2-2') }}</span>\n </ng-container>\n\n <!--\t\t<span [ngClass]=\"class\" *ngSwitchCase=\"'date'\">{{ value | date: (format || 'dd/MM/yyyy') }}</span>-->\n <!--\t\t<span [ngClass]=\"class\" *ngSwitchCase=\"'number'\">{{ value | number: (format || '0.0-2') }}</span>-->\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: NoSanitizePipe, name: "noSanitize" }, { kind: "pipe", type: ZeroFillPipe, name: "zeroFill" }] });
558
+ }
559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeTextComponent, decorators: [{
560
+ type: Component,
561
+ args: [{ selector: 'jvs-column-type-text', standalone: false, template: "<ng-template #cellTemplate let-row=\"row\">\n <div *ngIf=\"column.innerHTML; else sinInnerHTML\" [class]=\"column.text?.cssContenedor\" [ngStyle]=\"column.text?.cssStyle\" class=\"hover:!max-h-max\"\n [innerHTML]=\"column.innerHTML(row) | noSanitize\">\n </div>\n <ng-template #sinInnerHTML>\n <ng-container *ngIf=\"column.text && column.text?.separador else campoTextNormal\">\n <div [class]=\"column.text?.cssContenedor\">\n <ng-container\n *ngFor=\"let itm of ((column.transformar ? column.transformar(row) : row[column.property]) ?? '').split(column.text.separador)\">\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: itm, class: column.textCss, row: row }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #campoTextNormal>\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: (column.transformar ? column.transformar(row) : row[column.property]), class: column.textCss, row: row }\"></ng-template>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n\n\n<!--<ng-container matColumnDef=\"{{ column.property }}\">\n<th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n</th>\n<ng-container *ngIf=\"column.innerHTML; else sinInnerHTML\">\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(column, row, $event)\">\n <div [class]=\"column.text?.cssContenedor\" [ngStyle]=\"column.text?.cssStyle\" class=\"hover:!max-h-max\"\n [innerHTML]=\"column.innerHTML(row) | noSanitize\">\n\n </div>\n </td>\n</ng-container>\n<ng-template #sinInnerHTML>\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell>\n <ng-container *ngIf=\"column.text && column.text?.separador else campoTextNormal\">\n <div [class]=\"column.text?.cssContenedor\">\n <ng-container\n *ngFor=\"let itm of ((column.transformar ? column.transformar(row) : row[column.property]) ?? '').split(column.text.separador)\">\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: itm, class: column.textCss, row: row }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #campoTextNormal>\n <ng-template *ngIf=\"column.property\" [ngTemplateOutlet]=\"tipoDatoString\"\n [ngTemplateOutletContext]=\"{ fila: column, tipo: 'text', value: (column.transformar ? column.transformar(row) : row[column.property]), class: column.textCss, row: row }\"></ng-template>\n </ng-template>\n </td>\n</ng-template>\n<th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" style=\"height: unset !important;\" mat-footer-cell\n [innerHTML]=\"column.transformarFooter ? column.transformarFooter() : ''\">\n</th>\n</ng-container>-->\n\n<ng-template #tipoDatoString let-row=\"row\" let-fila=\"fila\" let-tipo=\"tipo\" let-value=\"value\" let-format=\"format\"\n let-clase=\"class\">\n <ng-container [ngSwitch]=\"tipo\">\n <ng-container *ngSwitchCase=\"'text'\"><span [ngClass]=\"clase\" *ngIf=\"value\"\n (click)=\"accionClick(row, $event)\">\n <span *ngIf=\"!fila.zeroFill\">{{ value }}</span>\n <span *ngIf=\"fila.zeroFill\">{{ value | zeroFill: fila.zeroFill }}</span>\n </span></ng-container>\n <ng-container *ngSwitchCase=\"'date'\"><span [ngClass]=\"clase\" *ngIf=\"value\"\n (click)=\"accionClick(row, $event)\">{{ value | date: (format || 'dd/MM/yyyy') }}</span></ng-container>\n <ng-container *ngSwitchCase=\"'number'\"><span [ngClass]=\"clase\" *ngIf=\"value\"\n (click)=\"accionClick(row, $event)\">{{ value | number: (format || '0.0-2') }}</span></ng-container>\n <ng-container *ngSwitchCase=\"'money'\"><span [ngClass]=\"clase\"\n [class.text-sky-700]=\"(value * 1) >= 0\" [class.text-red-700]=\"(value * 1) < 0\"\n *ngIf=\"value\" (click)=\"accionClick(row, $event)\">{{ value | number: (format || '1.2-2') }}</span>\n </ng-container>\n\n <!--\t\t<span [ngClass]=\"class\" *ngSwitchCase=\"'date'\">{{ value | date: (format || 'dd/MM/yyyy') }}</span>-->\n <!--\t\t<span [ngClass]=\"class\" *ngSwitchCase=\"'number'\">{{ value | number: (format || '0.0-2') }}</span>-->\n </ng-container>\n</ng-template>\n" }]
562
+ }], propDecorators: { column: [{
563
+ type: Input,
564
+ args: [{ required: true }]
565
+ }] } });
566
+
567
+ class ColumnTypeMoneyComponent extends ColumnTypeComponent {
568
+ column = {};
569
+ value(row) {
570
+ return (this.column.transformar ? this.column.transformar(row) : row[this.column.property]);
571
+ }
572
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeMoneyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
573
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeMoneyComponent, isStandalone: false, selector: "jvs-column-type-money", inputs: { column: "column" }, usesInheritance: true, ngImport: i0, template: "<ng-template #cellTemplate let-row=\"row\">\n <span [ngClass]=\"column.textCss\"\n [class.text-sky-700]=\"(value(row)) >= 0\" [class.text-red-700]=\"(value(row)) < 0\"\n *ngIf=\"value(row)\"\n (click)=\"accionClick(row, $event)\">{{ value(row) | number: (column.format || '1.2-2') }}</span>\n</ng-template>\n<ng-template #columnFooterTemplate let-row=\"row\">\n\t\t<span *ngIf=\"column.transformarFooter\"\n [class.text-sky-700]=\"column.transformarFooter() >= 0\"\n [class.text-red-700]=\"column.transformarFooter() < 0\"\n >\n\t\t\t\t\t<span>{{ column.transformarFooter() | currency: column.simboloMoneda ?? 'S/' }}</span>\n\t\t\t\t</span>\n</ng-template>\n\n<!--<jvs-column-type [column]=\"column\" [cellTemplate]=\"cellTemplate\" [columnFooterTemplate]=\"columnFooterTemplate\"></jvs-column-type>-->\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n \t\t<span *ngIf=\"column.transformarFooter\"\n [class.text-sky-700]=\"column.transformarFooter() >= 0\"\n [class.text-red-700]=\"column.transformarFooter() < 0\"\n >\n\t\t\t\t\t<span>{{ column.transformarFooter() | currency: column.simboloMoneda ?? 'S/' }}</span>\n\t\t\t\t</span>\n </th>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1.CurrencyPipe, name: "currency" }] });
574
+ }
575
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeMoneyComponent, decorators: [{
576
+ type: Component,
577
+ args: [{ selector: 'jvs-column-type-money', standalone: false, template: "<ng-template #cellTemplate let-row=\"row\">\n <span [ngClass]=\"column.textCss\"\n [class.text-sky-700]=\"(value(row)) >= 0\" [class.text-red-700]=\"(value(row)) < 0\"\n *ngIf=\"value(row)\"\n (click)=\"accionClick(row, $event)\">{{ value(row) | number: (column.format || '1.2-2') }}</span>\n</ng-template>\n<ng-template #columnFooterTemplate let-row=\"row\">\n\t\t<span *ngIf=\"column.transformarFooter\"\n [class.text-sky-700]=\"column.transformarFooter() >= 0\"\n [class.text-red-700]=\"column.transformarFooter() < 0\"\n >\n\t\t\t\t\t<span>{{ column.transformarFooter() | currency: column.simboloMoneda ?? 'S/' }}</span>\n\t\t\t\t</span>\n</ng-template>\n\n<!--<jvs-column-type [column]=\"column\" [cellTemplate]=\"cellTemplate\" [columnFooterTemplate]=\"columnFooterTemplate\"></jvs-column-type>-->\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n \t\t<span *ngIf=\"column.transformarFooter\"\n [class.text-sky-700]=\"column.transformarFooter() >= 0\"\n [class.text-red-700]=\"column.transformarFooter() < 0\"\n >\n\t\t\t\t\t<span>{{ column.transformarFooter() | currency: column.simboloMoneda ?? 'S/' }}</span>\n\t\t\t\t</span>\n </th>\n</ng-container>\n" }]
578
+ }], propDecorators: { column: [{
579
+ type: Input,
580
+ args: [{ required: true }]
581
+ }] } });
582
+
583
+ class ColumnTypeIconsComponent extends ColumnTypeComponent {
584
+ column = {};
585
+ obtenerItems(columna, row) {
586
+ if (typeof columna.items === 'function') {
587
+ return columna.items(row);
588
+ }
589
+ return columna.items;
590
+ }
591
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeIconsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
592
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ColumnTypeIconsComponent, isStandalone: false, selector: "jvs-column-type-icons", inputs: { column: "column" }, usesInheritance: true, ngImport: i0, template: "<ng-template #cellTemplate let-row=\"row\">\n <div class=\"flex items-center justify-center\" [ngClass]=\"{ '-space-x-1': !column.iconsDef?.soloIcono }\"\n >\n <ng-container *ngFor=\"let icon of obtenerItems(column.iconsDef, row)\">\n <ng-container *ngIf=\"!column.iconsDef?.soloIcono; else soloIcono\">\n <button matRipple type=\"button\" *ngIf=\"!icon.esVisible || icon.esVisible(row)\"\n (click)=\"icon.click ? icon.click(row) : false; $event.stopPropagation()\"\n class=\"flex items-center justify-center p-1 rounded border shadow-sm hover:shadow-lg\"\n [ngClass]=\"icon.contentCss\"\n [matTooltip]=\"icon.toolTip ?? row[icon.toolTipField ?? '_field_']\"\n [matTooltipDisabled]=\"!icon.toolTip && !icon.toolTipField\"\n >\n <ng-container [ngTemplateOutlet]=\"iconoConTamanio\"\n [ngTemplateOutletContext]=\"{icon: icon.icon, iconClass: icon.cssClass, size: (icon.iconSize ?? column.iconsDef?.iconSize)}\"></ng-container>\n </button>\n </ng-container>\n <ng-template #soloIcono>\n <div *ngIf=\"!icon.esVisible || icon.esVisible(row)\" [ngClass]=\"icon.contentCss\"\n class=\"flex items-center\"\n [matTooltip]=\"icon.toolTip ?? row[icon.toolTipField ?? '_field_']\"\n [matTooltipDisabled]=\"!icon.toolTip && !icon.toolTipField\"\n >\n <ng-container [ngTemplateOutlet]=\"iconoConTamanio\"\n [ngTemplateOutletContext]=\"{icon: icon.icon, iconClass: icon.cssClass, size: (icon.iconSize ?? column.iconsDef?.iconSize)}\"></ng-container>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n\n\n<ng-template #iconoConTamanio let-icon=\"icon\" let-iconClass=\"iconClass\" let-size=\"size\">\n <mat-icon *ngIf=\"size\" [svgIcon]=\"icon\" [ngClass]=\"iconClass\" [inline]=\"true\"\n [style.font-size]=\"size\"\n [style.height]=\"size\"\n [style.width]=\"size\"\n ></mat-icon>\n <mat-icon *ngIf=\"!size\" [svgIcon]=\"icon\" [ngClass]=\"iconClass\"></mat-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
593
+ }
594
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeIconsComponent, decorators: [{
595
+ type: Component,
596
+ args: [{ selector: 'jvs-column-type-icons', standalone: false, template: "<ng-template #cellTemplate let-row=\"row\">\n <div class=\"flex items-center justify-center\" [ngClass]=\"{ '-space-x-1': !column.iconsDef?.soloIcono }\"\n >\n <ng-container *ngFor=\"let icon of obtenerItems(column.iconsDef, row)\">\n <ng-container *ngIf=\"!column.iconsDef?.soloIcono; else soloIcono\">\n <button matRipple type=\"button\" *ngIf=\"!icon.esVisible || icon.esVisible(row)\"\n (click)=\"icon.click ? icon.click(row) : false; $event.stopPropagation()\"\n class=\"flex items-center justify-center p-1 rounded border shadow-sm hover:shadow-lg\"\n [ngClass]=\"icon.contentCss\"\n [matTooltip]=\"icon.toolTip ?? row[icon.toolTipField ?? '_field_']\"\n [matTooltipDisabled]=\"!icon.toolTip && !icon.toolTipField\"\n >\n <ng-container [ngTemplateOutlet]=\"iconoConTamanio\"\n [ngTemplateOutletContext]=\"{icon: icon.icon, iconClass: icon.cssClass, size: (icon.iconSize ?? column.iconsDef?.iconSize)}\"></ng-container>\n </button>\n </ng-container>\n <ng-template #soloIcono>\n <div *ngIf=\"!icon.esVisible || icon.esVisible(row)\" [ngClass]=\"icon.contentCss\"\n class=\"flex items-center\"\n [matTooltip]=\"icon.toolTip ?? row[icon.toolTipField ?? '_field_']\"\n [matTooltipDisabled]=\"!icon.toolTip && !icon.toolTipField\"\n >\n <ng-container [ngTemplateOutlet]=\"iconoConTamanio\"\n [ngTemplateOutletContext]=\"{icon: icon.icon, iconClass: icon.cssClass, size: (icon.iconSize ?? column.iconsDef?.iconSize)}\"></ng-container>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-container matColumnDef=\"{{ column.property }}\">\n <!-- Definici\u00F3n del encabezado de la columna -->\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n </th>\n\n <!-- Cuerpo de la celda, definido por los hijos -->\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell (click)=\"accionClick(row, $event)\">\n\n <ng-container [ngTemplateOutlet]=\"cellTemplate\" [ngTemplateOutletContext]=\"{row}\"></ng-container>\n\n </td>\n\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell>\n {{ column.transformarFooter ? column.transformarFooter() : '' }}\n </th>\n</ng-container>\n\n\n<ng-template #iconoConTamanio let-icon=\"icon\" let-iconClass=\"iconClass\" let-size=\"size\">\n <mat-icon *ngIf=\"size\" [svgIcon]=\"icon\" [ngClass]=\"iconClass\" [inline]=\"true\"\n [style.font-size]=\"size\"\n [style.height]=\"size\"\n [style.width]=\"size\"\n ></mat-icon>\n <mat-icon *ngIf=\"!size\" [svgIcon]=\"icon\" [ngClass]=\"iconClass\"></mat-icon>\n</ng-template>\n" }]
597
+ }], propDecorators: { column: [{
598
+ type: Input,
599
+ args: [{ required: true }]
600
+ }] } });
601
+
602
+ class ColumnTypeModule {
603
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
604
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, declarations: [ColumnTypeComponent,
605
+ ColumnTypeTextComponent,
606
+ ColumnTypeMoneyComponent,
607
+ ColumnTypeNumberComponent,
608
+ ColumnTypeDateComponent,
609
+ ColumnTypeIconsComponent,
610
+ ColumnTypeSinoComponent,
611
+ ColumnTypeProgressbarComponent], imports: [CommonModule,
612
+ MatTableModule,
613
+ MatSortModule,
614
+ MatTooltipModule,
615
+ NoSanitizePipe,
616
+ ZeroFillPipe,
617
+ MatRipple,
618
+ MatIcon,
619
+ ProgressBarComponent], exports: [ColumnTypeTextComponent,
620
+ ColumnTypeMoneyComponent,
621
+ ColumnTypeNumberComponent,
622
+ ColumnTypeDateComponent,
623
+ ColumnTypeIconsComponent,
624
+ ColumnTypeSinoComponent,
625
+ ColumnTypeProgressbarComponent] });
626
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, imports: [CommonModule,
627
+ MatTableModule,
628
+ MatSortModule,
629
+ MatTooltipModule,
630
+ MatIcon,
631
+ ProgressBarComponent] });
632
+ }
633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, decorators: [{
634
+ type: NgModule,
635
+ args: [{
636
+ declarations: [
637
+ ColumnTypeComponent,
638
+ ColumnTypeTextComponent,
639
+ ColumnTypeMoneyComponent,
640
+ ColumnTypeNumberComponent,
641
+ ColumnTypeDateComponent,
642
+ ColumnTypeIconsComponent,
643
+ ColumnTypeSinoComponent,
644
+ ColumnTypeProgressbarComponent,
645
+ ],
646
+ imports: [
647
+ CommonModule,
648
+ MatTableModule,
649
+ MatSortModule,
650
+ MatTooltipModule,
651
+ NoSanitizePipe,
652
+ ZeroFillPipe,
653
+ MatRipple,
654
+ MatIcon,
655
+ ProgressBarComponent,
656
+ ],
657
+ exports: [
658
+ ColumnTypeTextComponent,
659
+ ColumnTypeMoneyComponent,
660
+ ColumnTypeNumberComponent,
661
+ ColumnTypeDateComponent,
662
+ ColumnTypeIconsComponent,
663
+ ColumnTypeSinoComponent,
664
+ ColumnTypeProgressbarComponent,
665
+ ]
666
+ }]
667
+ }] });
668
+
669
+ class TablaMantenimientoColumnDefsComponent {
670
+ table;
671
+ cdRef;
672
+ objThis;
673
+ nombreColeccion;
674
+ colDetalle;
675
+ chkLista; // = new DataModel();
676
+ chkListaChange = new EventEmitter();
677
+ columnDefLocales;
678
+ columnDefEnSubComponentes;
679
+ constructor(table, cdRef) {
680
+ this.table = table;
681
+ this.cdRef = cdRef;
682
+ }
683
+ ngAfterContentInit() {
684
+ if (this.table) {
685
+ this.cdRef.detectChanges();
686
+ this.columnDefEnSubComponentes.forEach(refCol => {
687
+ this.table.addColumnDef(refCol);
688
+ });
689
+ this.columnDefLocales.forEach(refCol => {
690
+ this.table.addColumnDef(refCol);
691
+ });
692
+ }
693
+ }
694
+ trackByProperty(index, column) {
695
+ return column.property;
696
+ }
697
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoColumnDefsComponent, deps: [{ token: i2.MatTable, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
698
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TablaMantenimientoColumnDefsComponent, isStandalone: true, selector: "jvs-tabla-mantenimiento-column-defs", inputs: { objThis: "objThis", nombreColeccion: "nombreColeccion", colDetalle: "colDetalle", chkLista: "chkLista" }, outputs: { chkListaChange: "chkListaChange" }, queries: [{ propertyName: "columnDefEnSubComponentes", predicate: MatColumnDef, descendants: true }], viewQueries: [{ propertyName: "columnDefLocales", predicate: MatColumnDef, descendants: true }], ngImport: i0, template: "<ng-content></ng-content>\n\n\n\n<ng-container *ngFor=\"let column of colDetalle; trackBy: trackByProperty\">\n\n <ng-container *ngIf=\"column.type === 'expandir'\" [matColumnDef]=\"column.property\">\n\n <th *matHeaderCellDef class=\"w-4\" mat-header-cell> <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span></th>\n <td *matCellDef=\"let row\" class=\"w-4 text-center\" mat-cell>\n <button type=\"button\" class=\"boton-circular text-primary-contrast bg-primary mat-elevation-z2\" matRipple\n *ngIf=\"column.click\"\n (click)=\"column.click(row); row.isExpanded = !row.isExpanded; $event.stopPropagation()\"\n matTooltip=\"Expandir / Contraer\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"(row.isExpanded ? 'roundExpandLess' : 'roundExpandMore')\"></mat-icon>\n </button>\n <button type=\"button\" class=\"boton-circular text-primary-contrast bg-primary mat-elevation-z2\" matRipple\n *ngIf=\"!column.click\"\n (click)=\"row.isExpanded = !row.isExpanded; $event.stopPropagation()\"\n matTooltip=\"Expandir / Contraer\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"(row.isExpanded ? 'roundExpandLess' : 'roundExpandMore')\"></mat-icon>\n </button>\n </td>\n <td *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell></td>\n\n </ng-container>\n <ng-container *ngIf=\"column.type === 'checkbox'\" [matColumnDef]=\"column.property\">\n\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"w-4 text-center\" mat-header-cell>\n <mat-checkbox *ngIf=\"chkLista\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"chkLista.checkbox.establecerTodos($event.checked)\"\n [indeterminate]=\"chkLista.checkbox.algunosActivos\"\n [checked]=\"chkLista.checkbox.todosActivos\"\n ></mat-checkbox>\n </th>\n <td *matCellDef=\"let row\" class=\"w-4 text-center\" mat-cell>\n <mat-checkbox *ngIf=\"chkLista\"\n (click)=\"$event.stopPropagation()\"\n [(ngModel)]=\"chkLista.modelosChk[chkLista.generarId(row, (column.chkField ?? column.property), column.chkFieldSeparador)]\"\n [ngModelOptions]=\"{standalone: true}\"\n ></mat-checkbox>\n\n </td>\n <td *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell></td>\n\n </ng-container>\n <ng-container *ngIf=\"column.type === 'estiloEstablecido'\" [matColumnDef]=\"column.property\">\n\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell\n mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n <span class=\"text-red-900 font-bold bg-white\">CONFIGURAR ESTILO ESTABLECIDO</span>\n </th>\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell>\n {{ column.property }}\n <span class=\"text-red-900 font-bold bg-white\">CONFIGURAR ESTILO ESTABLECIDO</span>\n </td>\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" style=\"height: unset !important;\" mat-footer-cell\n [innerHTML]=\"column.transformarFooter ? column.transformarFooter() : ''\">\n </th>\n\n </ng-container>\n\n <jvs-column-type-text *ngIf=\"column.type == 'text'\" [column]=\"column\"></jvs-column-type-text>\n <jvs-column-type-money *ngIf=\"column.type == 'money'\" [column]=\"column\"></jvs-column-type-money>\n <jvs-column-type-number *ngIf=\"column.type == 'number'\" [column]=\"column\"></jvs-column-type-number>\n <jvs-column-type-date *ngIf=\"column.type == 'date'\" [column]=\"column\"></jvs-column-type-date>\n <jvs-column-type-icons *ngIf=\"column.type == 'icons'\" [column]=\"column\"></jvs-column-type-icons>\n <jvs-column-type-sino *ngIf=\"column.type == 'yes_no'\" [column]=\"column\"></jvs-column-type-sino>\n <jvs-column-type-progressbar *ngIf=\"column.type == 'progress'\" [column]=\"column\"></jvs-column-type-progressbar>\n\n\n\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i5$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i2.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ColumnTypeModule }, { kind: "component", type: ColumnTypeTextComponent, selector: "jvs-column-type-text", inputs: ["column"] }, { kind: "component", type: ColumnTypeMoneyComponent, selector: "jvs-column-type-money", inputs: ["column"] }, { kind: "component", type: ColumnTypeNumberComponent, selector: "jvs-column-type-number", inputs: ["column"] }, { kind: "component", type: ColumnTypeDateComponent, selector: "jvs-column-type-date", inputs: ["column"] }, { kind: "component", type: ColumnTypeIconsComponent, selector: "jvs-column-type-icons", inputs: ["column"] }, { kind: "component", type: ColumnTypeSinoComponent, selector: "jvs-column-type-sino", inputs: ["column"] }, { kind: "component", type: ColumnTypeProgressbarComponent, selector: "jvs-column-type-progressbar", inputs: ["column"] }] });
699
+ }
700
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoColumnDefsComponent, decorators: [{
701
+ type: Component,
702
+ args: [{ selector: 'jvs-tabla-mantenimiento-column-defs', standalone: true, imports: [
703
+ CommonModule,
704
+ MatCheckboxModule,
705
+ MatIconModule,
706
+ MatRippleModule,
707
+ MatSortModule,
708
+ MatTableModule,
709
+ MatTooltipModule,
710
+ ReactiveFormsModule,
711
+ FormsModule,
712
+ ColumnTypeModule,
713
+ ], template: "<ng-content></ng-content>\n\n\n\n<ng-container *ngFor=\"let column of colDetalle; trackBy: trackByProperty\">\n\n <ng-container *ngIf=\"column.type === 'expandir'\" [matColumnDef]=\"column.property\">\n\n <th *matHeaderCellDef class=\"w-4\" mat-header-cell> <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span></th>\n <td *matCellDef=\"let row\" class=\"w-4 text-center\" mat-cell>\n <button type=\"button\" class=\"boton-circular text-primary-contrast bg-primary mat-elevation-z2\" matRipple\n *ngIf=\"column.click\"\n (click)=\"column.click(row); row.isExpanded = !row.isExpanded; $event.stopPropagation()\"\n matTooltip=\"Expandir / Contraer\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"(row.isExpanded ? 'roundExpandLess' : 'roundExpandMore')\"></mat-icon>\n </button>\n <button type=\"button\" class=\"boton-circular text-primary-contrast bg-primary mat-elevation-z2\" matRipple\n *ngIf=\"!column.click\"\n (click)=\"row.isExpanded = !row.isExpanded; $event.stopPropagation()\"\n matTooltip=\"Expandir / Contraer\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"(row.isExpanded ? 'roundExpandLess' : 'roundExpandMore')\"></mat-icon>\n </button>\n </td>\n <td *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell></td>\n\n </ng-container>\n <ng-container *ngIf=\"column.type === 'checkbox'\" [matColumnDef]=\"column.property\">\n\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"w-4 text-center\" mat-header-cell>\n <mat-checkbox *ngIf=\"chkLista\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"chkLista.checkbox.establecerTodos($event.checked)\"\n [indeterminate]=\"chkLista.checkbox.algunosActivos\"\n [checked]=\"chkLista.checkbox.todosActivos\"\n ></mat-checkbox>\n </th>\n <td *matCellDef=\"let row\" class=\"w-4 text-center\" mat-cell>\n <mat-checkbox *ngIf=\"chkLista\"\n (click)=\"$event.stopPropagation()\"\n [(ngModel)]=\"chkLista.modelosChk[chkLista.generarId(row, (column.chkField ?? column.property), column.chkFieldSeparador)]\"\n [ngModelOptions]=\"{standalone: true}\"\n ></mat-checkbox>\n\n </td>\n <td *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" mat-footer-cell></td>\n\n </ng-container>\n <ng-container *ngIf=\"column.type === 'estiloEstablecido'\" [matColumnDef]=\"column.property\">\n\n <th *matHeaderCellDef [ngClass]=\"column.cssClassesTH\" class=\"uppercase text-center\" mat-header-cell\n mat-sort-header\n [disabled]=\"column.sort === false\">\n <span [innerHTML]=\"column.label ?? ''\">{{ column.label }} </span>\n <span class=\"text-red-900 font-bold bg-white\">CONFIGURAR ESTILO ESTABLECIDO</span>\n </th>\n <td *matCellDef=\"let row\" [ngClass]=\"column.cssClasses\" mat-cell>\n {{ column.property }}\n <span class=\"text-red-900 font-bold bg-white\">CONFIGURAR ESTILO ESTABLECIDO</span>\n </td>\n <th *matFooterCellDef [ngClass]=\"column.cssFooterClasses\" style=\"height: unset !important;\" mat-footer-cell\n [innerHTML]=\"column.transformarFooter ? column.transformarFooter() : ''\">\n </th>\n\n </ng-container>\n\n <jvs-column-type-text *ngIf=\"column.type == 'text'\" [column]=\"column\"></jvs-column-type-text>\n <jvs-column-type-money *ngIf=\"column.type == 'money'\" [column]=\"column\"></jvs-column-type-money>\n <jvs-column-type-number *ngIf=\"column.type == 'number'\" [column]=\"column\"></jvs-column-type-number>\n <jvs-column-type-date *ngIf=\"column.type == 'date'\" [column]=\"column\"></jvs-column-type-date>\n <jvs-column-type-icons *ngIf=\"column.type == 'icons'\" [column]=\"column\"></jvs-column-type-icons>\n <jvs-column-type-sino *ngIf=\"column.type == 'yes_no'\" [column]=\"column\"></jvs-column-type-sino>\n <jvs-column-type-progressbar *ngIf=\"column.type == 'progress'\" [column]=\"column\"></jvs-column-type-progressbar>\n\n\n\n</ng-container>\n" }]
714
+ }], ctorParameters: () => [{ type: i2.MatTable, decorators: [{
715
+ type: Optional
716
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { objThis: [{
717
+ type: Input
718
+ }], nombreColeccion: [{
719
+ type: Input
720
+ }], colDetalle: [{
721
+ type: Input
722
+ }], chkLista: [{
723
+ type: Input
724
+ }], chkListaChange: [{
725
+ type: Output
726
+ }], columnDefLocales: [{
727
+ type: ViewChildren,
728
+ args: [MatColumnDef]
729
+ }], columnDefEnSubComponentes: [{
730
+ type: ContentChildren,
731
+ args: [MatColumnDef, { descendants: true }]
732
+ }] } });
733
+
734
+ class TablaMantenimientoMenuComponent {
735
+ objThis;
736
+ nombreColeccion;
737
+ item;
738
+ derechosActuales;
739
+ // @Input() modalPrincipal;
740
+ // @Input() botonDisabled = (btn: BotonMantenimiento, item: any) => [];
741
+ opcionSelecionada = new EventEmitter();
742
+ menu;
743
+ subItems;
744
+ botonTemplate;
745
+ constructor() {
746
+ }
747
+ ngOnInit() {
748
+ }
749
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
750
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TablaMantenimientoMenuComponent, isStandalone: true, selector: "jvs-tabla-mantenimiento-menu", inputs: { objThis: "objThis", nombreColeccion: "nombreColeccion", item: "item", derechosActuales: "derechosActuales", subItems: "subItems", botonTemplate: "botonTemplate" }, outputs: { opcionSelecionada: "opcionSelecionada" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\">\n <div class=\"mat-menu bg-white rounded mat-elevation-z8 shadow botonesContextual w-full\">\n <ng-container *ngFor=\"let btn of subItems\">\n <ng-container *ngTemplateOutlet=\"botonTemplate; context:{btn: btn, item: item, barraSuperior: false}\"></ng-container>\n </ng-container>\n </div>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }] });
751
+ }
752
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoMenuComponent, decorators: [{
753
+ type: Component,
754
+ args: [{ selector: 'jvs-tabla-mantenimiento-menu', standalone: true, imports: [
755
+ CommonModule,
756
+ MatMenuModule,
757
+ ], template: "<mat-menu #menu=\"matMenu\">\n <div class=\"mat-menu bg-white rounded mat-elevation-z8 shadow botonesContextual w-full\">\n <ng-container *ngFor=\"let btn of subItems\">\n <ng-container *ngTemplateOutlet=\"botonTemplate; context:{btn: btn, item: item, barraSuperior: false}\"></ng-container>\n </ng-container>\n </div>\n</mat-menu>\n" }]
758
+ }], ctorParameters: () => [], propDecorators: { objThis: [{
759
+ type: Input
760
+ }], nombreColeccion: [{
761
+ type: Input
762
+ }], item: [{
763
+ type: Input
764
+ }], derechosActuales: [{
765
+ type: Input
766
+ }], opcionSelecionada: [{
767
+ type: Output
768
+ }], menu: [{
769
+ type: ViewChild,
770
+ args: ['menu', { static: true }]
771
+ }], subItems: [{
772
+ type: Input,
773
+ args: [{ required: true }]
774
+ }], botonTemplate: [{
775
+ type: Input,
776
+ args: [{ required: true }]
777
+ }] } });
778
+
779
+ const getFileName = (name) => {
780
+ const timeSpan = new Date().toISOString();
781
+ const sheetName = name || 'ExportResult';
782
+ const fileName = `${sheetName}-${timeSpan}`;
783
+ return {
784
+ sheetName,
785
+ fileName
786
+ };
787
+ };
788
+ class TableUtil {
789
+ static exportTableToExcelV2(targetTableElm, name) {
790
+ const { sheetName, fileName } = getFileName(name);
791
+ console.log(targetTableElm);
792
+ const wb = XLSX.utils.table_to_book(targetTableElm, {
793
+ sheet: sheetName
794
+ });
795
+ XLSX.writeFile(wb, `${fileName}.xlsx`);
796
+ }
797
+ static exportTableToExcel(tableId, name) {
798
+ const { sheetName, fileName } = getFileName(name);
799
+ const targetTableElm = document.getElementById(tableId);
800
+ console.log(targetTableElm);
801
+ const wb = XLSX.utils.table_to_book(targetTableElm, {
802
+ sheet: sheetName
803
+ });
804
+ // XLSX.writeFile(wb, `${fileName}.xlsx`);
805
+ }
806
+ static exportArrayToExcel(arr, name) {
807
+ const { sheetName, fileName } = getFileName(name);
808
+ const wb = XLSX.utils.book_new();
809
+ const ws = XLSX.utils.json_to_sheet(arr, { dateNF: 'dd/MM/yyyy' });
810
+ XLSX.utils.book_append_sheet(wb, ws, sheetName);
811
+ XLSX.writeFile(wb, `${fileName}.xlsx`);
812
+ }
813
+ static getWorkBook(htmlTableId, data) {
814
+ const targetTableElm = document.getElementById(htmlTableId);
815
+ const tableToSheet = XLSX.utils.table_to_sheet(targetTableElm, { raw: true });
816
+ const jsonToSheet = XLSX.utils.json_to_sheet(data);
817
+ const sheetToJson = XLSX.utils.sheet_to_json(tableToSheet);
818
+ return { tableToSheet, jsonToSheet, sheetToJson };
819
+ }
820
+ }
821
+
822
+ class TablaMantenimientoService {
823
+ get templateBotonesComunes() {
824
+ return [
825
+ { icono: 'roundAdd', tipo: 'nuevo', class: 'text-green-100 !bg-green-600', sinCondicion: true },
826
+ { icono: 'roundEdit', tipo: 'editar', class: 'text-amber-900 !bg-amber-300' },
827
+ { icono: 'roundDelete', tipo: 'eliminar', class: 'text-red-100 !bg-red-700' },
828
+ { icono: 'roundDelete', tipo: 'eliminar_fila', class: 'text-red-100 !bg-red-700' },
829
+ { icono: 'roundPrint', tipo: 'imprimir', class: '!bg-blue-100 text-blue-700' },
830
+ { icono: 'roundDownload', tipo: 'descargar', class: '!bg-blue-100 text-blue-700' },
831
+ { icono: 'roundFolder', tipo: 'ver_archivos', class: '!bg-green-100 text-green-700' },
832
+ { icono: 'fa5FilePdf', tipo: 'exportar_pdf', label: 'Exportar a PDF', class: 'bg-pdf-light text-pdf' },
833
+ { icono: 'fa5FileExcel', tipo: 'exportar_excel', label: 'Exportar a Excel', class: 'bg-excel-light text-excel' },
834
+ { icono: 'fa5sFileExport', tipo: 'exportacion_avanzada', label: 'Exportación Avanzada', class: '!text-indigo-600 !bg-indigo-100' },
835
+ { icono: 'icSave', tipo: 'guardar', class: '!text-indigo-100 !bg-indigo-600' },
836
+ { icono: 'icCancel', tipo: 'cancelar', class: '!text-cyan-100 !bg-cyan-600' },
837
+ {
838
+ icono: 'roundFactCheck', tipo: 'seleccionar',
839
+ class: 'text-blue-100 bg-blue-700 dark:text-blue-100 dark:bg-blue-700'
840
+ },
841
+ { icono: 'roundListAlt', tipo: 'detalle', class: 'text-blue-100 bg-blue-700 dark:text-blue-100 dark:bg-blue-700' },
842
+ { icono: 'roundPublic', tipo: 'ver_mapa', class: 'text-blue-100 bg-blue-700 dark:text-blue-100 dark:bg-blue-700' },
843
+ { icono: 'icCheck', tipo: 'activar', },
844
+ { icono: 'icClose', tipo: 'desactivar', },
845
+ { icono: 'fa5sLock', tipo: 'cerrar', },
846
+ { icono: 'fa5sLockOpen', tipo: 'abrir', },
847
+ ];
848
+ }
849
+ get templateColumnasTabla() {
850
+ return [
851
+ { label: '#', labelLista: 'Numeración', property: 'numeracion_automatica', type: 'numeracion_automatica' },
852
+ ];
853
+ }
854
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
855
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoService, providedIn: 'root' });
856
+ }
857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoService, decorators: [{
858
+ type: Injectable,
859
+ args: [{
860
+ providedIn: 'root',
861
+ }]
862
+ }] });
863
+
864
+ var TablaMantenimientoComponent_1;
865
+ let TablaMantenimientoComponent = class TablaMantenimientoComponent {
866
+ static { TablaMantenimientoComponent_1 = this; }
867
+ fb;
868
+ overlay;
869
+ viewContainerRef;
870
+ tablaMantenimientoService;
871
+ cdRef;
872
+ static nextId = 0;
873
+ id = `jvs-tabla-mantenimiento-id-${TablaMantenimientoComponent_1.nextId++}`;
874
+ router = inject(Router);
875
+ route = inject(ActivatedRoute);
876
+ get templateBotonesComunes() {
877
+ return this.tablaMantenimientoService.templateBotonesComunes;
878
+ }
879
+ ;
880
+ get templateColumnasTabla() {
881
+ return this.tablaMantenimientoService.templateColumnasTabla;
882
+ }
883
+ ;
884
+ dataSuscription;
885
+ objThis;
886
+ nombreColeccion;
887
+ ctrlBusquedaValue = '';
888
+ ctrlBusquedaPlaceholder = 'Buscar...';
889
+ filtroCampos = true;
890
+ paginador = true;
891
+ esTabla = true;
892
+ readOnly = false;
893
+ filaExtraHeader;
894
+ filaFooter = false;
895
+ botonesCRUD = 'CUD';
896
+ dblclickItem = new EventEmitter();
897
+ objBotonesCRUD = [
898
+ { tipo: 'nuevo', sinCondicion: true },
899
+ { tipo: 'editar' },
900
+ { tipo: 'eliminar' },
901
+ ];
902
+ classSeleccionado = ['elemento-seleccionado', /*'!bg-primary-activo','text-primary-contrast', */ 'mat-elevation-z8', /*'dark:!bg-primary-dark-activo',*/ 'border-y-2 border-primary-contrast', 'font-bold', 'text-2xl'];
903
+ // @Input() classAnulado = ['line-through', 'text-red', 'italic'];
904
+ classAnulado = ['elemento-anulado', /*'line-through', */ 'text-red-900', 'bg-red-200'];
905
+ campoAnulado = null;
906
+ campoAnuladoMensaje = null;
907
+ opcionSelecionada = new EventEmitter();
908
+ opcBusqueda = new EventEmitter();
909
+ accionRecargar = new EventEmitter();
910
+ set selectionModel(val) {
911
+ this.objSeleccionado = val;
912
+ }
913
+ selectionModelChange = new EventEmitter();
914
+ isRecargarUsed = false;
915
+ filaExtraTemplate;
916
+ paginator;
917
+ sort;
918
+ exportarExcel = true;
919
+ // MIO
920
+ pageSize = 25;
921
+ pageSizeOptions = [5, 10, 25, 50, 100, 500, 1000];
922
+ dataSourceChange = new EventEmitter();
923
+ resultados = new EventEmitter();
924
+ dataSource = new MatTableDataSource(); // or whatever type of datasource you have
925
+ // this is where the magic happens:
926
+ table;
927
+ columnDefs;
928
+ componenteCargadoTotalmente = false;
929
+ /////////////////////
930
+ paginacion = {
931
+ pageSize: 25,
932
+ pageSizeOptions: [],
933
+ pageCurrent: null,
934
+ pageIndex: 0,
935
+ pageLength: null,
936
+ };
937
+ // All that's left is to add them to the table ourselves:
938
+ ignorarDerechos = false;
939
+ derechosActuales = null;
940
+ // listaCRUD: BotonMantenimiento[] = [];
941
+ rows;
942
+ rowFooter;
943
+ mouseEvent$;
944
+ overlayRef;
945
+ userMenu;
946
+ // FILTRO BUSQUEDA
947
+ opcFiltroActual = {};
948
+ capitalizarTexto = capitalizarTexto;
949
+ _seleccionado = {};
950
+ cCampoBusqueda = new FormControl('');
951
+ chkLista = new DataModel();
952
+ constructor(fb, overlay, viewContainerRef, tablaMantenimientoService, cdRef) {
953
+ this.fb = fb;
954
+ this.overlay = overlay;
955
+ this.viewContainerRef = viewContainerRef;
956
+ this.tablaMantenimientoService = tablaMantenimientoService;
957
+ this.cdRef = cdRef;
958
+ // this._seleccionado[this.nombreColeccion] = null;
959
+ }
960
+ _ctrlBusqueda = '';
961
+ get ctrlBusqueda() {
962
+ return this._ctrlBusqueda;
963
+ }
964
+ set ctrlBusqueda(val) {
965
+ if (val == '') {
966
+ val = 'simple';
967
+ }
968
+ this._ctrlBusqueda = val;
969
+ }
970
+ // @Input() leyenda;
971
+ _leyenda = undefined;
972
+ get leyenda() {
973
+ return this._leyenda;
974
+ }
975
+ set leyenda(val) {
976
+ if (typeof val == 'string') {
977
+ this._leyenda = { text: val };
978
+ }
979
+ else {
980
+ this._leyenda = val;
981
+ }
982
+ }
983
+ // @Input() idTabla: string[];
984
+ _idTabla = [];
985
+ get idTabla() {
986
+ return this._idTabla;
987
+ }
988
+ set idTabla(val) {
989
+ if (Array.isArray(val)) {
990
+ this._idTabla = val;
991
+ }
992
+ else {
993
+ this._idTabla.push(val);
994
+ }
995
+ }
996
+ _columnasTabla = [];
997
+ get columnasTabla() {
998
+ return this._columnasTabla ?? [];
999
+ }
1000
+ set columnasTabla(val) {
1001
+ const reemplazarConTemplate = (listaInicial = []) => {
1002
+ listaInicial.forEach((btnActual, idx) => {
1003
+ const btnEnTemplate = buscarEnArray(this.templateColumnasTabla, 'property', btnActual.property);
1004
+ if (btnEnTemplate) {
1005
+ listaInicial[idx] = {
1006
+ ...btnEnTemplate,
1007
+ ...btnActual
1008
+ };
1009
+ }
1010
+ if (listaInicial[idx].type == 'text') {
1011
+ if (!listaInicial[idx].text) {
1012
+ listaInicial[idx].text = {
1013
+ cssStyle: {}
1014
+ };
1015
+ }
1016
+ else if (!listaInicial[idx].text.cssStyle) {
1017
+ listaInicial[idx].text.cssStyle = {};
1018
+ }
1019
+ listaInicial[idx].text.cssStyle = { ...listaInicial[idx].text.cssStyle };
1020
+ }
1021
+ else if (listaInicial[idx].type == 'estado') {
1022
+ const mutar = {
1023
+ ...listaInicial[idx],
1024
+ type: 'icons',
1025
+ iconsDef: {
1026
+ soloIcono: true,
1027
+ iconSize: '16px',
1028
+ items: [
1029
+ // {
1030
+ // icon: 'roundToggleOff', contentCss: 'text-gray-400',
1031
+ // esVisible: (row) => row['iCredDepenTareaEstado'] == 0
1032
+ // },
1033
+ // {
1034
+ // icon: 'roundToggleOn', contentCss: 'text-green-600',
1035
+ // esVisible: (row) => row['iCredDepenTareaEstado'] == 1
1036
+ // },
1037
+ ]
1038
+ },
1039
+ };
1040
+ if (listaInicial[idx].estados) {
1041
+ listaInicial[idx].estados.forEach((estado) => {
1042
+ if (Array.isArray(mutar.iconsDef.items)) {
1043
+ mutar.iconsDef.items.push({
1044
+ icon: estado.icon, contentCss: estado.cssClasses,
1045
+ esVisible: (row) => row[listaInicial[idx].property] == estado.estado,
1046
+ });
1047
+ }
1048
+ });
1049
+ }
1050
+ listaInicial[idx] = mutar;
1051
+ }
1052
+ if (btnActual.type == 'custom') {
1053
+ listaInicial[idx].datosExtra = {
1054
+ ...listaInicial[idx].datosExtra,
1055
+ tabla_mantenimiento_config_visibleAlias: listaInicial[idx].visible == undefined ? true : listaInicial[idx].visible,
1056
+ };
1057
+ listaInicial[idx].visible = false;
1058
+ }
1059
+ });
1060
+ return listaInicial;
1061
+ };
1062
+ this._columnasTabla = val ? reemplazarConTemplate(val) : [];
1063
+ }
1064
+ // @Input() botonesMenu: BotonMantenimiento[] = [];
1065
+ _botonesMenu = {
1066
+ crud: undefined,
1067
+ principal: [],
1068
+ izquierda: [],
1069
+ derecha: [],
1070
+ secundario: [],
1071
+ inferior: [],
1072
+ };
1073
+ get botonesMenu() {
1074
+ return this._botonesMenu;
1075
+ }
1076
+ get botonesMenuFinal() {
1077
+ const nuevoBotonesMenu = this.botonesMenu;
1078
+ // Iteramos sobre cada sección de botones
1079
+ Object.keys(nuevoBotonesMenu).forEach(seccion => {
1080
+ nuevoBotonesMenu[seccion] = nuevoBotonesMenu[seccion]?.filter((boton) => {
1081
+ if (this.readOnly) {
1082
+ if (boton.subItems) {
1083
+ boton.subItems = boton.subItems.filter((subItem) => subItem.ignorarReadOnly === true);
1084
+ return boton.subItems.length < 1;
1085
+ }
1086
+ return boton.ignorarReadOnly === true;
1087
+ }
1088
+ return true;
1089
+ }); // Filtramos los botones nulos
1090
+ });
1091
+ return nuevoBotonesMenu;
1092
+ }
1093
+ set botonesMenu(val) {
1094
+ const reemplazarConTemplate = (listaInicial = []) => listaInicial.map((btnActual) => {
1095
+ const btnEnTemplate = buscarEnArray(this.templateBotonesComunes, 'tipo', btnActual.tipoTemplate ?? btnActual.tipo);
1096
+ if (btnEnTemplate) {
1097
+ if (btnActual.tipoTemplate && !btnActual.label) {
1098
+ btnEnTemplate.label = undefined;
1099
+ }
1100
+ if (btnActual.subItems) {
1101
+ return { ...btnEnTemplate, ...btnActual, seccion: this.nombreColeccion, subItems: reemplazarConTemplate(btnActual.subItems) };
1102
+ }
1103
+ return { ...btnEnTemplate, ...btnActual, seccion: this.nombreColeccion };
1104
+ }
1105
+ return btnActual;
1106
+ });
1107
+ if (val?.crud) {
1108
+ this.objBotonesCRUD = this.templateBotonesComunes
1109
+ .filter(obj => ['nuevo', 'editar', 'eliminar'].includes(obj.tipo))
1110
+ .map(obj => val.crud?.find(o => o.tipo === obj.tipo) ?? obj);
1111
+ }
1112
+ Object.keys(val).forEach(btnKey => {
1113
+ if (val[btnKey]) {
1114
+ val[btnKey] = reemplazarConTemplate(val[btnKey]);
1115
+ }
1116
+ });
1117
+ this._botonesMenu = { ...this._botonesMenu, ...val };
1118
+ }
1119
+ get listaMenuCompleto() {
1120
+ let menuTotal = [];
1121
+ menuTotal = menuTotal.concat(this.botonesMenu.izquierda ?? []);
1122
+ menuTotal = menuTotal.concat(this.botonesMenu.crud ?? []);
1123
+ menuTotal = menuTotal.concat(this.botonesMenu.principal ?? []);
1124
+ menuTotal = menuTotal.concat(this.botonesMenu.derecha ?? []);
1125
+ menuTotal = menuTotal.concat(this.botonesMenu.secundario ?? []);
1126
+ menuTotal = menuTotal.concat(this.botonesMenu.inferior ?? []);
1127
+ return menuTotal;
1128
+ }
1129
+ get objVisibleColumns() {
1130
+ return this.columnasTabla.filter(column => {
1131
+ if (column.noMostrar != undefined) {
1132
+ column.noMostrarEnLista = column.noMostrar;
1133
+ }
1134
+ return !tipoValorFuncion(column.noMostrarEnLista, false);
1135
+ }).filter(column => {
1136
+ // SECCION MODIFICADOR
1137
+ if (this.filaExtraTemplate) {
1138
+ column.sort = false;
1139
+ }
1140
+ // Fin SECCION MODIFICADOR
1141
+ column.visible = tipoValorFuncion(column.visible, true);
1142
+ if (!column.visible && column.esVisible != undefined) {
1143
+ column.visible = column.esVisible();
1144
+ }
1145
+ return column.visible;
1146
+ });
1147
+ }
1148
+ get visibleColumns() {
1149
+ return this.objVisibleColumns.map(column => column.property);
1150
+ }
1151
+ get tieneCheckbox() {
1152
+ return this.columnasTabla && this.columnasTabla.length > 0 && this.columnasTabla.find(col => col.type === 'checkbox') || false;
1153
+ }
1154
+ get buscarItemSeleccionado() {
1155
+ const dRet = this.dataSource.data.find(itm => this._seleccionado === this.propiedadSeleccion(itm));
1156
+ return dRet ?? null;
1157
+ }
1158
+ get objSeleccionado() {
1159
+ return this.buscarItemSeleccionado; // ?? this.objThis?.['seleccionados']?.[this.nombreColeccion];
1160
+ }
1161
+ set objSeleccionado(val) {
1162
+ // if (val) {
1163
+ this.seleccionarItem(val, true);
1164
+ // }
1165
+ /* if (!this.objThis) {
1166
+ this.objThis = {};
1167
+ }
1168
+ if (!this.objThis['seleccionados']) {
1169
+ this.objThis['seleccionados'] = {};
1170
+ }
1171
+ this.objThis['seleccionados'][this.nombreColeccion] = val;*/
1172
+ }
1173
+ get idsSeleccionado() {
1174
+ return this.chkLista.generarLista();
1175
+ }
1176
+ idTablaValor(data) {
1177
+ if (data) {
1178
+ if (this.idTabla.length < 1) {
1179
+ return shortHash(JSON.stringify({ data, claseFinal: undefined }));
1180
+ }
1181
+ return this.idTabla.map(d => data[d]).join('-');
1182
+ }
1183
+ return '';
1184
+ }
1185
+ condicionesClaseFila = (item) => [];
1186
+ rowTooltip = (item) => '';
1187
+ soloIconos = false;
1188
+ ngOnInit() {
1189
+ this.router.events.pipe(filter(event => event instanceof NavigationEnd), startWith(null), map(() => this.getDeepestRoute(this.route)), map(route => route.snapshot.data), untilDestroyed(this)).subscribe(data => {
1190
+ console.log(data);
1191
+ this.derechosActuales = data['derechos'];
1192
+ this.ignorarDerechos = data['ignorarDerechos'] ?? false;
1193
+ });
1194
+ // this.sharedService.dataRutaActual$.pipe(untilDestroyed(this)).subscribe(datRouteData => {
1195
+ // if (datRouteData) {
1196
+ // this.derechosActuales = datRouteData['derechos'];
1197
+ // if (!this.ignorarDerechos) {
1198
+ // this.ignorarDerechos = datRouteData['ignorarDerechos'] ?? false;
1199
+ // }
1200
+ // }
1201
+ // });
1202
+ this.paginacion.pageSize = this.pageSize;
1203
+ this.paginacion.pageSizeOptions = this.pageSizeOptions;
1204
+ this.actualizarCrud();
1205
+ this.agregarBotonesExportacion();
1206
+ if (this.dataSuscription) {
1207
+ this.dataSuscription.subscribe(res => {
1208
+ if (res) {
1209
+ if (this.objSeleccionado) {
1210
+ console.log('SELECCIONADO');
1211
+ if (this.idTabla && this.idTabla.length > 0) {
1212
+ console.log('ID TABLA');
1213
+ const arrayData = this.idTabla.map(d => this.objSeleccionado[d]);
1214
+ console.log(arrayData);
1215
+ const busqueda = buscarEnArray(res, this.idTabla, arrayData);
1216
+ console.log(busqueda);
1217
+ if (busqueda) {
1218
+ console.log(busqueda);
1219
+ this.objSeleccionado = busqueda;
1220
+ }
1221
+ }
1222
+ else {
1223
+ console.log('eLSE ID TABLA');
1224
+ const dataStr = res.find((itm) => shortHash(JSON.stringify({
1225
+ ...itm, claseFinal: undefined
1226
+ })) == shortHash(JSON.stringify({ ...this.objSeleccionado, claseFinal: undefined })));
1227
+ if (dataStr) {
1228
+ this.objSeleccionado = dataStr;
1229
+ }
1230
+ }
1231
+ }
1232
+ this.setData(res);
1233
+ }
1234
+ });
1235
+ }
1236
+ this.isRecargarUsed = this.accionRecargar.observed;
1237
+ }
1238
+ ngAfterContentInit() {
1239
+ this.componenteCargadoTotalmente = true;
1240
+ this.cdRef.detectChanges();
1241
+ this.columnDefs.forEach(columnDef => {
1242
+ this.table.addColumnDef(columnDef);
1243
+ const col = this.columnasTabla.find(col => col.property == columnDef.name);
1244
+ if (col && col.type == 'custom') {
1245
+ col.visible = col.datosExtra?.tabla_mantenimiento_config_visibleAlias ?? col.visible;
1246
+ delete col.datosExtra?.tabla_mantenimiento_config_visibleAlias;
1247
+ if (Object.keys(col.datosExtra).length < 1) {
1248
+ delete col.datosExtra;
1249
+ }
1250
+ }
1251
+ });
1252
+ // console.log(a);
1253
+ if (this.ctrlBusquedaValue) {
1254
+ this.cCampoBusqueda.setValue(this.ctrlBusquedaValue);
1255
+ }
1256
+ this.table.renderRows(); // 🔹 Refrescar la tabla
1257
+ }
1258
+ ngOnChanges(changes) {
1259
+ if (changes['botonesCRUD'] || changes['ctrlBusqueda']) {
1260
+ this.actualizarCrud();
1261
+ }
1262
+ if (changes['botonesMenu']) {
1263
+ this.agregarBotonesExportacion();
1264
+ }
1265
+ }
1266
+ trackByFn = (index, item) => {
1267
+ return this.propiedadSeleccion(item);
1268
+ };
1269
+ getDeepestRoute(route) {
1270
+ while (route.firstChild) {
1271
+ route = route.firstChild;
1272
+ }
1273
+ return route;
1274
+ }
1275
+ agregarBotonesExportacion() {
1276
+ const fnAddBoton = (condicion, tipoBoton) => {
1277
+ if (condicion) {
1278
+ const objBoton = buscarEnArray(this.templateBotonesComunes, 'tipo', tipoBoton);
1279
+ const objBotonEnInferior = buscarEnArray((this.botonesMenu?.inferior ?? []), 'tipo', tipoBoton);
1280
+ if (!objBotonEnInferior && objBoton) {
1281
+ if (!this.botonesMenu.inferior) {
1282
+ this.botonesMenu.inferior = [];
1283
+ }
1284
+ this.botonesMenu?.inferior?.push({
1285
+ ...objBoton,
1286
+ esIndependiente: true,
1287
+ });
1288
+ }
1289
+ }
1290
+ };
1291
+ fnAddBoton((this.exportarExcel && this.esTabla), 'exportar_excel');
1292
+ }
1293
+ actualizarCrud() {
1294
+ const operacionesCRUD = {
1295
+ 'C': 'nuevo',
1296
+ 'U': 'editar',
1297
+ 'D': 'eliminar'
1298
+ };
1299
+ const agregarBoton = (tipo) => {
1300
+ let botonComun = buscarEnArray(this.templateBotonesComunes, 'tipo', tipo);
1301
+ if (botonComun) {
1302
+ const personalizado = buscarEnArray(this.objBotonesCRUD, 'tipo', tipo);
1303
+ const boton = personalizado ? { ...botonComun, ...personalizado } : botonComun;
1304
+ if (this.botonesMenu.crud) {
1305
+ this.botonesMenu.crud.push(boton);
1306
+ }
1307
+ }
1308
+ };
1309
+ const lstCRUD = (this.botonesMenu.crud ?? []).map(i => i.tipo);
1310
+ if (lstCRUD.length > 0) {
1311
+ for (const operacion of (this.botonesCRUD || "").toUpperCase()) {
1312
+ const operacionKey = operacion;
1313
+ if (lstCRUD.includes(operacion) && operacionesCRUD[operacionKey]) {
1314
+ agregarBoton(operacionesCRUD[operacionKey]);
1315
+ }
1316
+ }
1317
+ }
1318
+ else {
1319
+ this.botonesMenu.crud = [];
1320
+ for (const operacion of (this.botonesCRUD || "").toUpperCase()) {
1321
+ const operacionKey = operacion;
1322
+ if (operacionesCRUD[operacionKey]) {
1323
+ agregarBoton(operacionesCRUD[operacionKey]);
1324
+ }
1325
+ }
1326
+ }
1327
+ if (this.ctrlBusqueda === 'simple') {
1328
+ this.cCampoBusqueda.valueChanges.pipe(untilDestroyed(this)).subscribe(value => this.onFilterChange(value ?? ''));
1329
+ }
1330
+ if (this.botonesCRUD === '-') {
1331
+ this.botonesMenu.crud = [];
1332
+ }
1333
+ }
1334
+ classFila(item) {
1335
+ let claseFinal = [];
1336
+ if (this.campoAnulado && (item[this.campoAnulado] == 1)) {
1337
+ claseFinal = claseFinal.concat(this.classAnulado);
1338
+ }
1339
+ if (this.objSeleccionado == item || this.esSeleccionActual(item)) {
1340
+ claseFinal = claseFinal.concat(this.classSeleccionado);
1341
+ }
1342
+ claseFinal = claseFinal.concat(this.condicionesClaseFila(item));
1343
+ item.claseFinal = claseFinal;
1344
+ return claseFinal;
1345
+ }
1346
+ procesarRowTooltip(item) {
1347
+ let txtTooptip = [];
1348
+ if (this.campoAnuladoMensaje && (item[this.campoAnulado] == 1)) {
1349
+ txtTooptip.push(item[this.campoAnuladoMensaje]);
1350
+ // return item[this.campoAnuladoMensaje];
1351
+ }
1352
+ if (this.rowTooltip) {
1353
+ txtTooptip.push(this.rowTooltip(item));
1354
+ }
1355
+ return txtTooptip.filter(itm => !!itm).join(' | ');
1356
+ }
1357
+ subItemsActivos(btn, item) {
1358
+ return btn.subItems.filter((sub) => !sub.esVisible || sub.esVisible(item)).length > 0;
1359
+ }
1360
+ get noData() {
1361
+ if (!this.esTabla) {
1362
+ return of(true);
1363
+ }
1364
+ if (!this.dataSource || !this.table) {
1365
+ return of(true);
1366
+ }
1367
+ // @ts-ignore
1368
+ return this.table.dataSource?.connect().pipe(map(data => data?.length === 0));
1369
+ }
1370
+ onFilterChange(value) {
1371
+ if (!this.dataSource) {
1372
+ return;
1373
+ }
1374
+ value = value.trim();
1375
+ value = value.toLowerCase();
1376
+ this.dataSource.filter = value;
1377
+ }
1378
+ toggleColumnVisibility(column, event) {
1379
+ event.stopPropagation();
1380
+ event.stopImmediatePropagation();
1381
+ column.visible = !column.visible;
1382
+ }
1383
+ cargarData(retorno = false) {
1384
+ if (this.ctrlBusqueda && this.ctrlBusqueda == 'simple') {
1385
+ if (!retorno) {
1386
+ this.dataSource.paginator = this.paginator;
1387
+ this.dataSource.sort = this.sort;
1388
+ }
1389
+ const aS = this.dataSource?.data;
1390
+ if ((!aS || !aS[0] || !aS[0]['iTotalRegistros'])) {
1391
+ return false;
1392
+ }
1393
+ }
1394
+ const dPag = {
1395
+ iPaginacion: 1,
1396
+ iPageSize: this.paginator?.pageSize ? this.paginator?.pageSize : this.paginacion.pageCurrent?.pageSize,
1397
+ iPageNumber: (this.paginator?.pageIndex ? this.paginator?.pageIndex : 0) + 1,
1398
+ };
1399
+ if (this.ctrlBusqueda && this.ctrlBusqueda == 'query') {
1400
+ dPag['cCampoBusqueda'] = this.cCampoBusqueda.value;
1401
+ }
1402
+ if (retorno) {
1403
+ return dPag;
1404
+ }
1405
+ this.resultados.emit(dPag);
1406
+ this.opcBusqueda.emit(dPag);
1407
+ }
1408
+ // FIN FILTRO BUSQUEDA INTEGRAR
1409
+ setData(data) {
1410
+ this.dataSource = new MatTableDataSource(data);
1411
+ this.dataSource.sortingDataAccessor = (item, property) => {
1412
+ const dColumn = buscarEnArray(this.columnasTabla, 'property', property);
1413
+ if (dColumn) {
1414
+ switch (dColumn.sortType ?? dColumn.type) {
1415
+ case 'number':
1416
+ return item[property] * 1;
1417
+ case 'date':
1418
+ return formatearFecha(item[property]);
1419
+ }
1420
+ }
1421
+ if (item) {
1422
+ switch (property) {
1423
+ case 'fromDate':
1424
+ return new Date(item['fromDate']);
1425
+ default:
1426
+ return item[property];
1427
+ }
1428
+ }
1429
+ };
1430
+ // this.paginator.length = (data && data[0] && data[0]['iTotalRegistros']) ? data[0]['iTotalRegistros'] : data.length;
1431
+ // this.dataSource.paginator = this.paginator;
1432
+ if (this.sort) {
1433
+ this.dataSource.sort = this.sort;
1434
+ }
1435
+ // this.dataSource.filter = this.filter;
1436
+ this.dataSourceChange.emit(this.dataSource);
1437
+ // this.dataSource.paginator.pageSize = this.paginacion.pageSize;
1438
+ if (data && data[0] && data[0]['iPageNumber']) {
1439
+ this.paginacion.pageIndex = (data && data[0] && data[0]['iPageNumber']) ? data[0]['iPageNumber'] : 0;
1440
+ }
1441
+ this.paginacion.pageLength = (data && data[0] && data[0]['iTotalRegistros']) ? data[0]['iTotalRegistros'] : data.length;
1442
+ if (data && data[0] && !data[0]['iTotalRegistros']) {
1443
+ this.dataSource.paginator = this.paginator;
1444
+ }
1445
+ if (this.tieneCheckbox) {
1446
+ this.chkLista.agregarControles(data, this.tieneCheckbox.property, !this.tieneCheckbox.chkFieldPersistente, (this.tieneCheckbox.chkField ?? null), this.tieneCheckbox.chkFieldSeparador);
1447
+ }
1448
+ }
1449
+ botonDisabled(btn, item) {
1450
+ let disabled;
1451
+ if (!btn.sinCondicion) {
1452
+ if (btn.estaDeshabilitado) {
1453
+ disabled = btn.estaDeshabilitado(item, this);
1454
+ }
1455
+ else {
1456
+ disabled = !this.objSeleccionado;
1457
+ }
1458
+ }
1459
+ if (!disabled && !btn.esIndependiente && !btn.ignorarDerecho && this.derechosActuales) {
1460
+ // if (!this.usuarioService.esEquipoJVSoft()) {
1461
+ disabled = !(this.derechosActuales[btn.cDerechoCodigo ?? btn.tipo]);
1462
+ // }
1463
+ }
1464
+ return disabled;
1465
+ }
1466
+ propiedadSeleccion(item) {
1467
+ return `${this.nombreColeccion}_${this.idTablaValor(item)}`;
1468
+ }
1469
+ esSeleccionActual(item) {
1470
+ return this._seleccionado === this.propiedadSeleccion(item);
1471
+ }
1472
+ seleccionarItem(item, forzado = false) {
1473
+ const idItem = this.propiedadSeleccion(item);
1474
+ if (forzado) {
1475
+ this._seleccionado = idItem;
1476
+ }
1477
+ else {
1478
+ this._seleccionado = this._seleccionado === idItem ? null : idItem;
1479
+ }
1480
+ this.selectionModelChange.emit(this.objSeleccionado);
1481
+ /*if (!this.objThis) {
1482
+ this.objThis = {};
1483
+ }
1484
+ if (!this.objThis['seleccionados']) {
1485
+ this.objThis['seleccionados'] = {};
1486
+ }
1487
+ this.objThis['seleccionados'][this.nombreColeccion] = this._seleccionado;*/
1488
+ }
1489
+ opcMenu(item, objMenu, modal = null, retorno = false) {
1490
+ // console.log(this.buscarItemSeleccionado);
1491
+ // console.log(objMenu);
1492
+ // let salir = this.readOnly;
1493
+ // if (salir && this.readOnly === 'permitirSeleccion' && ['ver', 'seleccionar'].includes(objMenu.tipo)) {
1494
+ // salir = false;
1495
+ // }
1496
+ // if (salir) {
1497
+ // return false;
1498
+ // }
1499
+ // console.warn(objMenu);
1500
+ if (objMenu.tipo == 'exportar_excel' && this.exportarExcel) {
1501
+ /*
1502
+ TableUtil.exportArrayToExcel(this.dataSource.data.map(x => {
1503
+ const columnasNumeros = this.objVisibleColumns.filter(column => ['money', 'number'].includes(column.type));
1504
+ columnasNumeros.forEach(columna => {
1505
+ x[columna.property] *= 1;
1506
+ });
1507
+ return x;
1508
+ }), 'TEST');
1509
+ */
1510
+ const dataGeneradoPorHtml = TableUtil.getWorkBook('tabla_' + this.nombreColeccion, []);
1511
+ const objetosExtraidos = this.dataSource.filteredData.map((objeto, idx) => this.objVisibleColumns.reduce((acumulador, columna) => {
1512
+ // console.log(propiedad);
1513
+ const nColumn = (columna.labelLista ?? columna.label).toUpperCase().replace('<BR>', ' ');
1514
+ switch (columna.type) {
1515
+ case 'date':
1516
+ // acumulador[nColumn] = (new DatePipe('es-PE')).transform(objeto[columna.property], 'dd/MM/yyyy' /*'yyyy-MM-dd'*/);
1517
+ // new Date(dateString.replace(/(\d{2}:\d{2}:\d{2}):\w{2}/, '$1'));
1518
+ // acumulador[nColumn] = new Date(objeto[columna.property].replace(/(\d{2}:\d{2}:\d{2}):\w{2}/, '$1'));
1519
+ // acumulador[nColumn] = formatearFechaFormato(objeto[columna.property], 'dd/MM/yyyy');
1520
+ // acumulador[nColumn] = formatearFechaTimezone(objeto[columna.property]);
1521
+ // acumulador[nColumn] = new Date(objeto[columna.property]);
1522
+ let fecha = objeto[columna.property];
1523
+ if (objeto[columna.property]) {
1524
+ fecha = new Date(objeto[columna.property].replace(/(\d{2}:\d{2}:\d{2}):\w{2}/, '$1'));
1525
+ if (getBrowserName() == 'chrome') {
1526
+ fecha = moment(objeto[columna.property], true).add(2, 'minutes').toDate();
1527
+ }
1528
+ }
1529
+ acumulador[nColumn] = fecha;
1530
+ // acumulador[nColumn] = objeto[columna.property];
1531
+ break;
1532
+ case 'number':
1533
+ case 'money':
1534
+ acumulador[nColumn] = objeto[columna.property] * 1;
1535
+ break;
1536
+ default:
1537
+ if (columna.property == 'numeracion_automatica') {
1538
+ acumulador[nColumn] = idx + 1;
1539
+ }
1540
+ else {
1541
+ if (columna.type == 'custom') {
1542
+ // dataGeneradoPorHtml.sheetToJson
1543
+ acumulador[nColumn] = dataGeneradoPorHtml.sheetToJson[idx][columna.label];
1544
+ }
1545
+ else {
1546
+ if (columna.type == 'text' && columna.innerHTML) {
1547
+ const convertirHtmlATexto = (html) => {
1548
+ const elementoTemporal = document.createElement('div');
1549
+ elementoTemporal.innerHTML = html;
1550
+ return elementoTemporal.textContent || "";
1551
+ };
1552
+ acumulador[nColumn] = convertirHtmlATexto(columna.innerHTML(objeto));
1553
+ }
1554
+ else if (columna.transformar) {
1555
+ acumulador[nColumn] = columna.transformar(objeto);
1556
+ }
1557
+ else {
1558
+ acumulador[nColumn] = objeto[columna.property];
1559
+ }
1560
+ }
1561
+ }
1562
+ break;
1563
+ }
1564
+ return acumulador;
1565
+ }, {}));
1566
+ // TableUtil.exportTableToExcel('tabla_' + this.nombreColeccion);
1567
+ // console.log(objetosExtraidos);
1568
+ TableUtil.exportArrayToExcel(objetosExtraidos, this.nombreColeccion);
1569
+ // this.tableExporter.exportTable('xlsx', {fileName: 'JVSoftExport'});
1570
+ }
1571
+ const opAdic = { seccion: this.nombreColeccion };
1572
+ if (item) {
1573
+ opAdic['item'] = item;
1574
+ }
1575
+ opAdic['itemSeleccionado'] = this.objSeleccionado;
1576
+ if (this.tieneCheckbox) {
1577
+ // itmsSeleccionados = this.formulariosGlobalesService.generarLista(this.nombreColeccion);
1578
+ opAdic['idsSeleccionados'] = this.idsSeleccionado;
1579
+ }
1580
+ // opAdic['refTabla'] = this;
1581
+ objMenu = { ...objMenu, ...opAdic };
1582
+ if (retorno) {
1583
+ return objMenu;
1584
+ }
1585
+ // console.warn(objMenu);
1586
+ this.opcionSelecionada.emit(objMenu);
1587
+ return 1;
1588
+ }
1589
+ emitirResultados(evento = {}) {
1590
+ this.opcFiltroActual = { ...this.opcFiltroActual, ...evento, ...this.cargarData(true) };
1591
+ // console.warn('resultadosFILTRO', this.opcFiltroActual);
1592
+ this.resultados.emit(this.opcFiltroActual);
1593
+ }
1594
+ abrirMenuContextual({ x, y }, user) {
1595
+ // console.log(user);
1596
+ // this.opcMenu(user, {tipo: 'ver'});
1597
+ this.objSeleccionado = user;
1598
+ this.cerrarMenuContextual();
1599
+ const positionStrategy = this.overlay.position().flexibleConnectedTo({ x, y }).withPositions([
1600
+ {
1601
+ originX: 'end',
1602
+ originY: 'bottom',
1603
+ overlayX: 'end',
1604
+ overlayY: 'top',
1605
+ },
1606
+ ]);
1607
+ this.overlayRef = this.overlay.create({
1608
+ positionStrategy,
1609
+ scrollStrategy: this.overlay.scrollStrategies.close(),
1610
+ });
1611
+ this.overlayRef.attach(new TemplatePortal(this.userMenu, this.viewContainerRef, {
1612
+ // $implicit: user
1613
+ item: user,
1614
+ }));
1615
+ this.mouseEvent$ = fromEvent(document, 'click').pipe(filter(event => {
1616
+ const clickTarget = event.target;
1617
+ return !!this.overlayRef && !this.overlayRef.overlayElement.contains(clickTarget);
1618
+ }), take(1)).subscribe(() => this.cerrarMenuContextual());
1619
+ }
1620
+ cerrarMenuContextual() {
1621
+ this.mouseEvent$ && this.mouseEvent$.unsubscribe();
1622
+ if (this.overlayRef) {
1623
+ this.overlayRef.dispose();
1624
+ this.overlayRef = undefined;
1625
+ }
1626
+ }
1627
+ emitirAccionRecargar() {
1628
+ if (!this.idTabla) {
1629
+ this.objSeleccionado = null;
1630
+ }
1631
+ this.accionRecargar.emit(this.opcFiltroActual);
1632
+ // this.accionRecargar.emit({ ...this.opcFiltroActual, ...{seleccionado: this.objSeleccionado}});
1633
+ }
1634
+ tipoValorFuncion = tipoValorFuncion;
1635
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoComponent, deps: [{ token: i1$2.FormBuilder }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: TablaMantenimientoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1636
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TablaMantenimientoComponent, isStandalone: true, selector: "jvs-tabla-mantenimiento", inputs: { dataSuscription: "dataSuscription", objThis: "objThis", nombreColeccion: "nombreColeccion", ctrlBusquedaValue: "ctrlBusquedaValue", ctrlBusquedaPlaceholder: "ctrlBusquedaPlaceholder", filtroCampos: "filtroCampos", paginador: "paginador", esTabla: "esTabla", readOnly: "readOnly", filaExtraHeader: "filaExtraHeader", filaFooter: "filaFooter", botonesCRUD: "botonesCRUD", objBotonesCRUD: "objBotonesCRUD", classSeleccionado: "classSeleccionado", classAnulado: "classAnulado", campoAnulado: "campoAnulado", campoAnuladoMensaje: "campoAnuladoMensaje", selectionModel: "selectionModel", filaExtraTemplate: "filaExtraTemplate", exportarExcel: "exportarExcel", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", derechosActuales: "derechosActuales", ctrlBusqueda: "ctrlBusqueda", leyenda: "leyenda", idTabla: "idTabla", columnasTabla: "columnasTabla", botonesMenu: "botonesMenu", condicionesClaseFila: "condicionesClaseFila", rowTooltip: "rowTooltip", soloIconos: "soloIconos" }, outputs: { dblclickItem: "dblclickItem", opcionSelecionada: "opcionSelecionada", opcBusqueda: "opcBusqueda", accionRecargar: "accionRecargar", selectionModelChange: "selectionModelChange", dataSourceChange: "dataSourceChange", resultados: "resultados" }, host: { properties: { "id": "this.id" }, classAttribute: "jvs-tabla-mantenimiento" }, providers: [
1637
+ { provide: MAT_PAGINATOR_DEFAULT_OPTIONS, useValue: { formFieldAppearance: 'outline' } }
1638
+ ], queries: [{ propertyName: "columnDefs", predicate: MatColumnDef, descendants: true }], viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "rowFooter", first: true, predicate: MatFooterRow, descendants: true, read: ElementRef }, { propertyName: "userMenu", first: true, predicate: ["userMenu"], descendants: true }, { propertyName: "rows", predicate: MatRow, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col h-fit\">\n <div class=\"grow flex items-center justify-between bg-white\">\n <ng-content select=\"[filtro]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col border-t\">\n <div class=\"flex-1 bg-app-bar flex items-center justify-between p-1\">\n <!-- <div class=\"hidden flex-1 sm:flex items-center flex-wrap gap-1\">-->\n <!-- </div>-->\n <div class=\"flex items-center flex-wrap mr-1 h-full\" *ngIf=\"leyenda\">\n <span class=\"font-bold\" [class]=\"leyenda.class\">{{ leyenda.text }}</span>\n </div>\n <div class=\"hidden flex-1 sm:flex items-center flex-wrap gap-1\">\n <div *ngIf=\"(botonesMenuFinal.izquierda ?? []).length > 0 \" class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.izquierda; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.izquierda?.length}}\"></ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.crud ?? []).length > 0\" class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.crud; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.crud?.length}}\"></ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.principal ?? []).length > 0\" class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.principal; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.principal?.length}}\"></ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.derecha ?? []).length > 0\" class=\"flex-auto flex items-center justify-end contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.derecha; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.derecha?.length}}\"></ng-container>\n </ng-container>\n </div>\n <ng-content select=\"[objetosMenuPegado]\"></ng-content>\n </div>\n <div class=\"flex flex-1 sm:hidden items-center flex-wrap gap-1\">\n <button class=\"flex items-center justify-center text-2xs leading-none rounded-full p-1\"\n matRipple\n matTooltip=\"Botones de Acci\u00F3n\"\n type=\"button\"\n [matMenuTriggerFor]=\"menuOpciones\"\n >\n <mat-icon class=\"icon-xs\" svgIcon=\"roundMenu\"></mat-icon>\n </button>\n </div>\n <div class=\"flex-none flex items-center justify-end border-l-2\">\n <div class=\"flex-1 sm:flex-none flex items-center justify-end\">\n <ng-content select=\"[objetosMenu]\"></ng-content>\n </div>\n </div>\n <div *ngIf=\"ctrlBusqueda\" class=\"hidden flex-initial sm:flex items-center form-input max-w-[150px] bg-card rounded-full border m-1 px-1 border-l-2\"\n >\n <mat-icon svgIcon=\"roundSearch\" class=\"icon-xs\"></mat-icon>\n <input [formControl]=\"cCampoBusqueda\"\n class=\"text-xs px-1 py-1 border-0 outline-none w-full bg-transparent max-w-sm\"\n [placeholder]=\"ctrlBusquedaPlaceholder\"\n (keyup.enter)=\"ctrlBusqueda == 'query' ? cargarData() : false;\"\n type=\"search\">\n </div>\n <div class=\"flex-none flex items-center justify-end border-l-2\">\n <ng-content select=\"[botonesFiltro]\"></ng-content>\n <button matRipple *ngIf=\"isRecargarUsed || ctrlBusqueda == 'query'\"\n class=\"flex items-center justify-center text-2xs leading-none rounded-full p-1 text-green-700\"\n matTooltip=\"Actualizar datos\"\n (click)=\"(ctrlBusqueda == 'query' ? cargarData() : emitirAccionRecargar())\"\n type=\"button\">\n <mat-icon svgIcon=\"roundRefresh\" class=\"icon-xs\"></mat-icon>\n\n </button>\n <button matRipple [matMenuTriggerFor]=\"columnFilterMenu\" *ngIf=\"filtroCampos\"\n class=\"flex items-center justify-center text-2xs leading-none rounded-full p-1\"\n matTooltip=\"Columnas Filtro\"\n type=\"button\">\n <mat-icon svgIcon=\"roundFilterList\" class=\"icon-xs\"></mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.secundario ?? []).length > 0\" class=\"flex-1 bg-app-bar flex items-center justify-between p-1 border-t\">\n <div class=\"hidden flex-1 sm:flex items-center flex-wrap gap-1\">\n <div class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.secundario; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.secundario?.length}}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <!--<div class=\"grow flex flex-col items-stretch contenedor-tabla\" [ngClass]=\"{'table-container overflow-auto': esTabla}\">\n <pre>{{ this.chkLista.modelosChk | json }}</pre>\n <pre>{{ this.chkLista.checkbox.cantidadActivos | json }}</pre>\n <pre>{{ this.chkLista.checkbox.algunosActivos | json }}</pre>\n </div>-->\n <div class=\"grow flex flex-col items-stretch contenedor-tabla\" [ngClass]=\"{'table-container overflow-auto': esTabla}\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n\n <table [id]=\"'tabla_' + nombreColeccion\" [dataSource]=\"dataSource\" [multiTemplateDataRows]=\"true\"\n [hidden]=\"!esTabla\"\n class=\"flex-1 table-mantenimiento table-auto h-fit\" mat-table matSort\n [trackBy]=\"trackByFn\"\n #tablaMantenimiento\n >\n\n <!--<table [dataSource]=\"dataSource\" class=\"table-mantenimiento table-auto h-auto w-full justify-center\" mat-table matSort>-->\n\n\n <ng-content select=\"[tableDefinitions]\"></ng-content>\n <ng-container matColumnDef=\"numeracion_automatica\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 16px !important\">N\u00BA</th>\n <td mat-cell *matCellDef=\"let element; let i = dataIndex\" class=\"p-0 celda-numeracion-fila\">\n <div class=\"flex items-center justify-center font-bold numeracionFila\">\n <ng-container *ngIf=\"esTabla && paginador\">\n {{ (this.paginator?.pageIndex == 0 ? i + 1 : 1 + i + (this.paginator?.pageIndex ?? 1) * (this.paginator?.pageSize ?? 1)) }}\n </ng-container>\n <ng-container *ngIf=\"!paginador\">\n {{ (i + 1) }}\n </ng-container>\n </div>\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"uppercase\"></td>\n </ng-container>\n <jvs-tabla-mantenimiento-column-defs [objThis]=\"this\" [colDetalle]=\"columnasTabla\"\n [nombreColeccion]=\"nombreColeccion\" [(chkLista)]=\"chkLista\"></jvs-tabla-mantenimiento-column-defs>\n\n <tr *matHeaderRowDef=\"visibleColumns; sticky: true\" mat-header-row class=\"title\" matHeader\n ></tr>\n\n <ng-container *ngIf=\"!!filaExtraHeader\">\n <tr mat-row *matRowDef=\"let row; columns: ['filaExtraHeader']\" class=\"student-detail-row\"\n [style.height.px]=\"0\"\n ></tr>\n\n <ng-container matColumnDef=\"filaExtraHeader\">\n <td mat-cell *matCellDef=\"let row; let i = dataIndex\" [attr.colspan]=\"visibleColumns.length\">\n\n <div class=\"row m-0 student-element-detail\"\n [@detailExpand]=\"(i == 0 && filaExtraHeader.esVisible && filaExtraHeader.esVisible()) ? 'expanded' : 'collapsed'\"\n [style.padding-right.px]=\"row.isExpanded ? 5 : 0\"\n [style.padding-left.px]=\"row.isExpanded ? 5 : 0\"\n >\n <ng-container *ngIf=\"filaExtraHeader.template\"\n [ngTemplateOutlet]=\"filaExtraHeader.template\"\n [ngTemplateOutletContext]=\"{ row: row }\"></ng-container>\n </div>\n\n </td>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"filaFooter\">\n <tr *matFooterRowDef=\"visibleColumns\" mat-footer-row\n [style.height.px]=\"0\"\n [id]=\"nombreColeccion + '_filaFooter'\"\n ></tr>\n </ng-container>\n\n <!--\t<tr\n *matRowDef=\"let row; columns: visibleColumns;\"\n class=\"hover:bg-secondary trans-ease-out cursor-pointer\"\n mat-row></tr>-->\n <tr\n [matRowKeyboardSelection]=\"tablaMantenimiento\"\n [rowModel]=\"row\"\n (seleccionarSiguiente)=\"opcMenu($event, {seccion: nombreColeccion, tipo: 'ver'});\"\n\n *matRowDef=\"let row; let idxTabla = dataIndex; columns: visibleColumns;\"\n (click)=\"seleccionarItem(row); opcMenu(row, {seccion: nombreColeccion, tipo: 'ver', tableDataIndex: idxTabla });\"\n (dblclick)=\"opcMenu(row, {seccion: nombreColeccion, tipo: 'seleccionar'}); dblclickItem.emit(row)\"\n (contextmenu)=\"(abrirMenuContextual($event, row)); $event. preventDefault();\"\n [ngClass]=\"classFila(row)\"\n @fadeInUp\n class=\"trans-ease-out cursor-pointer h-auto\"\n [style.height.px]=\"0\"\n [id]=\"propiedadSeleccion(row)\"\n [matTooltip]=\"procesarRowTooltip(row)\"\n matTooltipPosition=\"below\"\n [matTooltipPositionAtOrigin]=\"true\"\n [matTooltipClass]=\"['bg-red-700', 'text-red-100', 'm-0']\"\n [matTooltipDisabled]=\"!procesarRowTooltip(row)\"\n [class.regAnulado]=\"row[campoAnulado] == 1\"\n [class.regTooltip]=\"!!procesarRowTooltip(row)\"\n (keyup.delete)=\"opcMenu(row, {seccion: nombreColeccion, tipo: 'eliminar'})\"\n mat-row></tr>\n <ng-container *ngIf=\"filaExtraTemplate\">\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"student-detail-row h-0\"></tr>\n\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"visibleColumns.length\">\n\n <div class=\"row m-0 student-element-detail\"\n [@detailExpand]=\"row.isExpanded ? 'expanded' : 'collapsed'\"\n [style.padding-right.px]=\"row.isExpanded ? 5 : 0\"\n [style.padding-left.px]=\"row.isExpanded ? 5 : 0\"\n >\n <ng-container [ngTemplateOutlet]=\"filaExtraTemplate\"\n [ngTemplateOutletContext]=\"{ row: row }\"></ng-container>\n </div>\n\n </td>\n </ng-container>\n </ng-container>\n </table>\n\n <ng-container *ngIf=\"componenteCargadoTotalmente\">\n <div *ngIf=\"(noData | async) && esTabla\" class=\"flex-1 text-center text-secondary font-medium\">\n No se encontraron datos\n </div>\n </ng-container>\n </div>\n <ng-content select=\"[appendTable]\"></ng-content>\n <div class=\"flex-1 bg-app-bar flex flex-col sm:flex-row items-start justify-between p-1\">\n <div class=\"flex-1 flex items-start flex-wrap gap-1\">\n <div *ngIf=\"(botonesMenuFinal.inferior ?? []).length > 0\" class=\" flex items-center flex-wrap\">\n <ng-container *ngFor=\"let btn of botonesMenu.inferior; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.inferior?.length}}\"></ng-container>\n </ng-container>\n </div>\n </div>\n\n <div *ngIf=\"esTabla && paginador\" class=\"flex-1 sm:flex-none flex items-center justify-end\">\n <mat-paginator class=\"tabla-mantenimiento-paginador\" [pageSizeOptions]=\"paginacion.pageSizeOptions\" [pageIndex]=\"paginacion.pageIndex - 1\" [length]=\"paginacion.pageLength\" [pageSize]=\"paginacion.pageSize\" (page)=\"paginacion.pageCurrent = $event; emitirResultados();\" ></mat-paginator>\n </div>\n </div>\n </div>\n\n</div>\n\n\n\n<!-- SECCION DE TEMPLATES O MENUS -->\n\n\n<mat-menu #columnFilterMenu=\"matMenu\" xPosition=\"before\" yPosition=\"below\">\n <ng-container *ngFor=\"let column of columnasTabla\">\n <button (click)=\"toggleColumnVisibility(column, $event)\" *ngIf=\"!tipoValorFuncion(column.noMostrarEnLista, false)\"\n class=\"checkbox-item mat-menu-item\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [(ngModel)]=\"column.visible\" [ngModelOptions]=\"{standalone: true}\" color=\"primary\">\n <span [innerHTML]=\"(column.labelLista ?? column.label).replace('<br>', ' ')\"></span>\n </mat-checkbox>\n </button>\n </ng-container>\n</mat-menu>\n\n\n\n\n\n\n<ng-template #botonesSuperiores let-btn=\"btn\" let-idx=\"idx\">\n <ng-container *ngTemplateOutlet=\"botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: true, idx: idx}\"></ng-container>\n</ng-template>\n\n<ng-template #botonesContextual let-btn=\"btn\" let-item=\"item\" let-barraSuperior=\"barraSuperior\" let-idx=\"idx\">\n\n <ng-container *ngIf=\"barraSuperior; else noBarraSuperior\">\n\n <!--\t\t<button mat-button style=\"min-width: unset; border: 1px !important;\" class=\"uppercase border border-gray rounded-none h-full px-1 disabled:opacity-50 disabled:text-secondary disabled:bg-transparent\">-->\n <!--\t\t\t<mat-icon *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\" size=\"15px\" class=\"icon-xs\"></mat-icon>-->\n <!--\t\t</button>-->\n <ng-container *ngIf=\"btn.subItems && btn.subItems.length > 0\">\n <button class=\"flex items-center justify-between uppercase text-2xs leading-none rounded-none px-2 py-1 bg-opacity-95 hover:bg-opacity-100 disabled:opacity-50 disabled:text-secondary disabled:!bg-gray-300 dark:disabled:!bg-gray-500 mat-elevation-z2\" type=\"button\"\n\n *ngIf=\"(!btn.esVisible || btn.esVisible(item, this)) && subItemsActivos(btn, item)\"\n [class]=\"(btn.class?btn.class:'')\"\n\n (click)=\"opcMenu(item, btn)\"\n [style.min-width]=\"((btn.soloIcono ?? tipoValorFuncion(soloIconos)) ? 'unset' : '')\"\n [matTooltip]=\"btn.tooltip || (btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo))) \"\n [matMenuTriggerFor]=\"menuOtrosBarra.menu\"\n\n [matBadge]=\"btn.badge\"\n matBadgeSize=\"small\"\n >\n <mat-icon class=\"icon-xs\" [class.mr-0.5]=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\" *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\" ></mat-icon>\n <span class=\"whitespace-nowrap\" *ngIf=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n <mat-icon class=\"icon-xs\" svgIcon=\"fa5sCaretDown\" ></mat-icon>\n </button>\n\n <jvs-tabla-mantenimiento-menu #menuOtrosBarra\n [objThis]=\"objThis\"\n [nombreColeccion]=\"nombreColeccion\"\n [item]=\"item\"\n [derechosActuales]=\"derechosActuales\"\n [subItems]=\"btn.subItems\"\n (opcionSelecionada)=\"opcMenu($event.item, $event.btn)\"\n [botonTemplate]=\"botonesContextual\"\n >\n </jvs-tabla-mantenimiento-menu>\n </ng-container>\n <ng-container *ngIf=\"!btn.subItems || btn.subItems.length == 0\">\n <button class=\"flex items-center justify-between uppercase text-2xs leading-none rounded-none px-2 py-1 bg-opacity-95 hover:bg-opacity-100 disabled:opacity-50 disabled:text-secondary disabled:!bg-gray-300 dark:disabled:!bg-gray-500 mat-elevation-z2\" type=\"button\"\n\n *ngIf=\"!btn.esVisible || btn.esVisible(item, this)\"\n [class]=\"(btn.class?btn.class:'text-secondary')\"\n [ngClass]=\"{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo])) && !(['nuevo', 'editar', 'eliminar'].includes(btn.tipo))}\"\n [disabled]=\"!btn.esIndependiente && botonDisabled(btn, item)\"\n (click)=\"opcMenu(item, btn)\"\n [style.min-width]=\"((btn.soloIcono ?? tipoValorFuncion(soloIconos)) ? 'unset' : '')\"\n [matTooltip]=\"btn.tooltip || (btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo))) \"\n\n [matBadge]=\"btn.badge\"\n matBadgeSize=\"small\"\n >\n <mat-icon class=\"icon-xs\" [class.mr-0.5]=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\" *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\"></mat-icon>\n <span class=\"whitespace-nowrap\" *ngIf=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n </button>\n\n </ng-container>\n\n </ng-container>\n <ng-template #noBarraSuperior>\n\n <ng-container *ngIf=\"btn.subItems && btn.subItems.length > 0\">\n <button class=\"flex items-center justify-between uppercase w-full rounded-none px-2 disabled:opacity-50 disabled:text-secondary disabled:bg-transparent\" mat-menu-item type=\"button\"\n *ngIf=\"!btn.noContextual && (!btn.esVisible || btn.esVisible(item, this))\"\n [class]=\"(btn.class?btn.class.replace('text-white', '').replace('bg', 'text'):'text-secondary')\"\n [ngClass]=\"{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo]))}\"\n [disabled]=\"!btn.esIndependiente && botonDisabled(btn, item)\"\n (click)=\"opcMenu(item, btn); $event.stopPropagation();\"\n [matMenuTriggerFor]=\"menuOtrosBarra.menu\"\n >\n <div class=\"flex w-full items-center justify-between uppercase text-2xs\"\n >\n <mat-icon *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\"\n class=\"flex-none icon-xs\"\n ></mat-icon>\n <span class=\"grow text-2xs\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n <mat-icon class=\"flex-none icon-xs\" svgIcon=\"fa5sCaretRight\"></mat-icon>\n </div>\n </button>\n\n <jvs-tabla-mantenimiento-menu #menuOtrosBarra\n [objThis]=\"objThis\"\n [nombreColeccion]=\"nombreColeccion\"\n [item]=\"item\"\n [derechosActuales]=\"derechosActuales\"\n [subItems]=\"btn.subItems\"\n (opcionSelecionada)=\"opcMenu($event.item, $event.btn)\"\n [botonTemplate]=\"botonesContextual\"\n >\n </jvs-tabla-mantenimiento-menu>\n </ng-container>\n <ng-container *ngIf=\"!btn.subItems || btn.subItems.length == 0\">\n <ng-container *ngIf=\"btn.tipo == '-#SEPARADOR#-'; else itemsNormales\">\n <mat-divider></mat-divider>\n </ng-container>\n <ng-template #itemsNormales>\n <button class=\"flex items-center justify-between uppercase w-full rounded-none px-2 disabled:opacity-50 disabled:text-secondary disabled:bg-transparent\" mat-menu-item type=\"button\"\n *ngIf=\"!btn.noContextual && (!btn.esVisible || btn.esVisible(item, this))\"\n [class]=\"(btn.class?btn.class.replace('text-white', '').replace('bg', 'text'):'text-secondary')\"\n [ngClass]=\"{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo]))}\"\n [disabled]=\"!btn.esIndependiente && botonDisabled(btn, item)\"\n (click)=\"opcMenu(item, btn)\"\n >\n <div class=\"flex w-full items-center justify-between uppercase text-2xs\">\n <mat-icon *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\" class=\"flex-none icon-xs\"\n ></mat-icon>\n <span class=\"grow text-2xs\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n </div>\n </button>\n </ng-template>\n\n </ng-container>\n\n </ng-template>\n\n</ng-template>\n\n<ng-template #userMenu let-item=\"item\">\n <div class=\"mat-menu bg-white rounded mat-elevation-z8 shadow botonesContextual\">\n <ng-container *ngFor=\"let btn of listaMenuCompleto\">\n <ng-container *ngTemplateOutlet=\"botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: false}\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n\n<mat-menu #menuOpciones=\"matMenu\" xPosition=\"before\" yPosition=\"below\">\n <ng-container *ngFor=\"let btn of listaMenuCompleto\">\n <ng-container\n *ngTemplateOutlet=\"botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: false}\"></ng-container>\n </ng-container>\n</mat-menu>\n\n", styles: ["@charset \"UTF-8\";:root{--tabla-mantenimiento-seleccion-fondo: rgb(179, 217, 252);--tabla-mantenimiento-seleccion-texto: rgb(1, 84, 164);--mat-paginator-container-size: 30px}:root .table-mantenimiento .elemento-seleccionado{background-color:var(--tabla-mantenimiento-seleccion-fondo)!important;color:var(--tabla-mantenimiento-seleccion-texto)!important;border-color:var(--tabla-mantenimiento-seleccion-texto)!important}.jvs-tabla-mantenimiento{width:inherit}.jvs-tabla-mantenimiento .contenedor-botones>*:first-child{@apply rounded-l;}.jvs-tabla-mantenimiento .contenedor-botones>*:last-child{@apply rounded-r;}.jvs-tabla-mantenimiento tr.regTooltip>td:first-child div:first-child:before,.jvs-tabla-mantenimiento tr.regTooltip>th:first-child div:first-child:before{content:\"\\26a0\\fe0f \";color:red;margin-right:4px;font-size:12px}.jvs-tabla-mantenimiento tr.regTooltip>td:first-child:not(:has(div)):before,.jvs-tabla-mantenimiento tr.regTooltip>th:first-child:not(:has(div)):before{content:\"\\26a0\\fe0f \";color:red;margin-right:4px;font-size:12px}.jvs-tabla-mantenimiento .mat-mdc-menu-content:not(:empty){@apply flex flex-col items-start;padding:0!important}.jvs-tabla-mantenimiento .mat-mdc-menu-item{line-height:24px!important;height:24px!important;min-height:24px!important}.jvs-tabla-mantenimiento .mat-mdc-menu-panel{min-height:auto!important}.jvs-tabla-mantenimiento .mat-mdc-table .mat-mdc-cell,.jvs-tabla-mantenimiento .mat-mdc-table .mat-mdc-header-cell .mat-mdc-footer-cell{white-space:unset}.jvs-tabla-mantenimiento .table-container{max-height:600px!important}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-table-sticky-border-elem-right{border-left:1px solid #e0e0e0}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-table-sticky-border-elem-left{border-right:1px solid #e0e0e0}.jvs-tabla-mantenimiento .table-mantenimiento tr.regAnulado .mat-mdc-cell{color:unset!important}.jvs-tabla-mantenimiento .table-mantenimiento .bg-primary-activo .numeracionFila{@apply rounded-full bg-primary-contrast text-primary mx-1 p-1 w-6 h-6;}.jvs-tabla-mantenimiento .table-mantenimiento th .form-input{@apply w-auto;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell,.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell,.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell{border-width:1px;border-style:solid}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell:not(.celda-numeracion-fila){padding:.05rem .25rem}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell:first-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell:last-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell:first-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell:last-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell:first-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell:last-of-type:not(.celda-numeracion-fila){padding:0 .25rem}.jvs-tabla-mantenimiento .table-mantenimiento .student-element-detail{overflow:hidden;display:flex;align-items:center;justify-content:center}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-header-row{height:25px!important;color:rgb(var(--color-primary))!important;background-color:rgb(var(--color-primary-contrast))!important}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-header-cell{padding:5px;font-size:10px;line-height:10px;font-weight:700!important;color:inherit}.jvs-tabla-mantenimiento .table-mantenimiento .mdc-data-table__row:not(.mdc-data-table__row--selected):not(.elemento-seleccionado):hover,.jvs-tabla-mantenimiento .table-mantenimiento .mdc-data-table__row:not(.mdc-data-table__row--selected):not(.elemento-seleccionado):focus{background-color:rgba(var(--color-primary-contrast),.04)}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-row .mat-mdc-cell,.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-footer-row .mat-mdc-cell{font-size:10px}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-row .mat-mdc-footer-cell:empty,.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-footer-row .mat-mdc-footer-cell:empty{border-width:0!important}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-cell{@apply leading-tight;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell{border-color:#d4d0d0;@apply text-center uppercase;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell .mat-sort-header-container{@apply flex items-center justify-between w-full;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell .mat-sort-header-container .mat-sort-header-content{@apply inline w-full text-center;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell .mat-sort-header-container .mat-sort-header-arrow{@apply flex-none;}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-sort-header-content{width:100%;text-align:center;display:unset;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i5$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i2.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i2.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: TablaMantenimientoColumnDefsComponent, selector: "jvs-tabla-mantenimiento-column-defs", inputs: ["objThis", "nombreColeccion", "colDetalle", "chkLista"], outputs: ["chkListaChange"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i14.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: TablaMantenimientoMenuComponent, selector: "jvs-tabla-mantenimiento-menu", inputs: ["objThis", "nombreColeccion", "item", "derechosActuales", "subItems", "botonTemplate"], outputs: ["opcionSelecionada"] }, { kind: "directive", type: MatRowKeyboardSelectionDirective, selector: "[matRowKeyboardSelection]", inputs: ["matRowKeyboardSelection", "rowModel"], outputs: ["seleccionarSiguiente"] }], animations: [
1639
+ trigger('detailExpand', [
1640
+ state('collapsed', style({ height: '0px', minHeight: '0' })),
1641
+ state('expanded', style({ height: '*' })),
1642
+ transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
1643
+ ]),
1644
+ trigger('fadeInUp', [
1645
+ transition(':enter', [
1646
+ style({
1647
+ transform: 'translateY(20px)',
1648
+ opacity: 0
1649
+ }),
1650
+ animate(`400ms cubic-bezier(0.35, 0, 0.25, 1)`, style({
1651
+ transform: 'translateY(0)',
1652
+ opacity: 1
1653
+ }))
1654
+ ])
1655
+ ]),
1656
+ ] });
1657
+ };
1658
+ TablaMantenimientoComponent = TablaMantenimientoComponent_1 = __decorate([
1659
+ UntilDestroy({ checkProperties: true })
1660
+ ], TablaMantenimientoComponent);
1661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoComponent, decorators: [{
1662
+ type: Component,
1663
+ args: [{ selector: 'jvs-tabla-mantenimiento', standalone: true, imports: [
1664
+ CommonModule,
1665
+ FormsModule,
1666
+ MatCheckboxModule,
1667
+ MatDividerModule,
1668
+ MatIconModule,
1669
+ MatMenuModule,
1670
+ MatPaginatorModule,
1671
+ MatRippleModule,
1672
+ MatSortModule,
1673
+ MatTableModule,
1674
+ MatTooltipModule,
1675
+ ReactiveFormsModule,
1676
+ TablaMantenimientoColumnDefsComponent,
1677
+ MatBadgeModule,
1678
+ TablaMantenimientoMenuComponent,
1679
+ MatRowKeyboardSelectionDirective,
1680
+ ], host: {
1681
+ class: 'jvs-tabla-mantenimiento',
1682
+ }, animations: [
1683
+ trigger('detailExpand', [
1684
+ state('collapsed', style({ height: '0px', minHeight: '0' })),
1685
+ state('expanded', style({ height: '*' })),
1686
+ transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
1687
+ ]),
1688
+ trigger('fadeInUp', [
1689
+ transition(':enter', [
1690
+ style({
1691
+ transform: 'translateY(20px)',
1692
+ opacity: 0
1693
+ }),
1694
+ animate(`400ms cubic-bezier(0.35, 0, 0.25, 1)`, style({
1695
+ transform: 'translateY(0)',
1696
+ opacity: 1
1697
+ }))
1698
+ ])
1699
+ ]),
1700
+ ], providers: [
1701
+ { provide: MAT_PAGINATOR_DEFAULT_OPTIONS, useValue: { formFieldAppearance: 'outline' } }
1702
+ ], template: "<div class=\"flex flex-col h-fit\">\n <div class=\"grow flex items-center justify-between bg-white\">\n <ng-content select=\"[filtro]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col border-t\">\n <div class=\"flex-1 bg-app-bar flex items-center justify-between p-1\">\n <!-- <div class=\"hidden flex-1 sm:flex items-center flex-wrap gap-1\">-->\n <!-- </div>-->\n <div class=\"flex items-center flex-wrap mr-1 h-full\" *ngIf=\"leyenda\">\n <span class=\"font-bold\" [class]=\"leyenda.class\">{{ leyenda.text }}</span>\n </div>\n <div class=\"hidden flex-1 sm:flex items-center flex-wrap gap-1\">\n <div *ngIf=\"(botonesMenuFinal.izquierda ?? []).length > 0 \" class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.izquierda; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.izquierda?.length}}\"></ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.crud ?? []).length > 0\" class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.crud; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.crud?.length}}\"></ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.principal ?? []).length > 0\" class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.principal; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.principal?.length}}\"></ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.derecha ?? []).length > 0\" class=\"flex-auto flex items-center justify-end contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.derecha; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.derecha?.length}}\"></ng-container>\n </ng-container>\n </div>\n <ng-content select=\"[objetosMenuPegado]\"></ng-content>\n </div>\n <div class=\"flex flex-1 sm:hidden items-center flex-wrap gap-1\">\n <button class=\"flex items-center justify-center text-2xs leading-none rounded-full p-1\"\n matRipple\n matTooltip=\"Botones de Acci\u00F3n\"\n type=\"button\"\n [matMenuTriggerFor]=\"menuOpciones\"\n >\n <mat-icon class=\"icon-xs\" svgIcon=\"roundMenu\"></mat-icon>\n </button>\n </div>\n <div class=\"flex-none flex items-center justify-end border-l-2\">\n <div class=\"flex-1 sm:flex-none flex items-center justify-end\">\n <ng-content select=\"[objetosMenu]\"></ng-content>\n </div>\n </div>\n <div *ngIf=\"ctrlBusqueda\" class=\"hidden flex-initial sm:flex items-center form-input max-w-[150px] bg-card rounded-full border m-1 px-1 border-l-2\"\n >\n <mat-icon svgIcon=\"roundSearch\" class=\"icon-xs\"></mat-icon>\n <input [formControl]=\"cCampoBusqueda\"\n class=\"text-xs px-1 py-1 border-0 outline-none w-full bg-transparent max-w-sm\"\n [placeholder]=\"ctrlBusquedaPlaceholder\"\n (keyup.enter)=\"ctrlBusqueda == 'query' ? cargarData() : false;\"\n type=\"search\">\n </div>\n <div class=\"flex-none flex items-center justify-end border-l-2\">\n <ng-content select=\"[botonesFiltro]\"></ng-content>\n <button matRipple *ngIf=\"isRecargarUsed || ctrlBusqueda == 'query'\"\n class=\"flex items-center justify-center text-2xs leading-none rounded-full p-1 text-green-700\"\n matTooltip=\"Actualizar datos\"\n (click)=\"(ctrlBusqueda == 'query' ? cargarData() : emitirAccionRecargar())\"\n type=\"button\">\n <mat-icon svgIcon=\"roundRefresh\" class=\"icon-xs\"></mat-icon>\n\n </button>\n <button matRipple [matMenuTriggerFor]=\"columnFilterMenu\" *ngIf=\"filtroCampos\"\n class=\"flex items-center justify-center text-2xs leading-none rounded-full p-1\"\n matTooltip=\"Columnas Filtro\"\n type=\"button\">\n <mat-icon svgIcon=\"roundFilterList\" class=\"icon-xs\"></mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"(botonesMenuFinal.secundario ?? []).length > 0\" class=\"flex-1 bg-app-bar flex items-center justify-between p-1 border-t\">\n <div class=\"hidden flex-1 sm:flex items-center flex-wrap gap-1\">\n <div class=\" flex items-center flex-wrap contenedor-botones\">\n <ng-container *ngFor=\"let btn of botonesMenu.secundario; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.secundario?.length}}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <!--<div class=\"grow flex flex-col items-stretch contenedor-tabla\" [ngClass]=\"{'table-container overflow-auto': esTabla}\">\n <pre>{{ this.chkLista.modelosChk | json }}</pre>\n <pre>{{ this.chkLista.checkbox.cantidadActivos | json }}</pre>\n <pre>{{ this.chkLista.checkbox.algunosActivos | json }}</pre>\n </div>-->\n <div class=\"grow flex flex-col items-stretch contenedor-tabla\" [ngClass]=\"{'table-container overflow-auto': esTabla}\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n\n <table [id]=\"'tabla_' + nombreColeccion\" [dataSource]=\"dataSource\" [multiTemplateDataRows]=\"true\"\n [hidden]=\"!esTabla\"\n class=\"flex-1 table-mantenimiento table-auto h-fit\" mat-table matSort\n [trackBy]=\"trackByFn\"\n #tablaMantenimiento\n >\n\n <!--<table [dataSource]=\"dataSource\" class=\"table-mantenimiento table-auto h-auto w-full justify-center\" mat-table matSort>-->\n\n\n <ng-content select=\"[tableDefinitions]\"></ng-content>\n <ng-container matColumnDef=\"numeracion_automatica\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 16px !important\">N\u00BA</th>\n <td mat-cell *matCellDef=\"let element; let i = dataIndex\" class=\"p-0 celda-numeracion-fila\">\n <div class=\"flex items-center justify-center font-bold numeracionFila\">\n <ng-container *ngIf=\"esTabla && paginador\">\n {{ (this.paginator?.pageIndex == 0 ? i + 1 : 1 + i + (this.paginator?.pageIndex ?? 1) * (this.paginator?.pageSize ?? 1)) }}\n </ng-container>\n <ng-container *ngIf=\"!paginador\">\n {{ (i + 1) }}\n </ng-container>\n </div>\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"uppercase\"></td>\n </ng-container>\n <jvs-tabla-mantenimiento-column-defs [objThis]=\"this\" [colDetalle]=\"columnasTabla\"\n [nombreColeccion]=\"nombreColeccion\" [(chkLista)]=\"chkLista\"></jvs-tabla-mantenimiento-column-defs>\n\n <tr *matHeaderRowDef=\"visibleColumns; sticky: true\" mat-header-row class=\"title\" matHeader\n ></tr>\n\n <ng-container *ngIf=\"!!filaExtraHeader\">\n <tr mat-row *matRowDef=\"let row; columns: ['filaExtraHeader']\" class=\"student-detail-row\"\n [style.height.px]=\"0\"\n ></tr>\n\n <ng-container matColumnDef=\"filaExtraHeader\">\n <td mat-cell *matCellDef=\"let row; let i = dataIndex\" [attr.colspan]=\"visibleColumns.length\">\n\n <div class=\"row m-0 student-element-detail\"\n [@detailExpand]=\"(i == 0 && filaExtraHeader.esVisible && filaExtraHeader.esVisible()) ? 'expanded' : 'collapsed'\"\n [style.padding-right.px]=\"row.isExpanded ? 5 : 0\"\n [style.padding-left.px]=\"row.isExpanded ? 5 : 0\"\n >\n <ng-container *ngIf=\"filaExtraHeader.template\"\n [ngTemplateOutlet]=\"filaExtraHeader.template\"\n [ngTemplateOutletContext]=\"{ row: row }\"></ng-container>\n </div>\n\n </td>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"filaFooter\">\n <tr *matFooterRowDef=\"visibleColumns\" mat-footer-row\n [style.height.px]=\"0\"\n [id]=\"nombreColeccion + '_filaFooter'\"\n ></tr>\n </ng-container>\n\n <!--\t<tr\n *matRowDef=\"let row; columns: visibleColumns;\"\n class=\"hover:bg-secondary trans-ease-out cursor-pointer\"\n mat-row></tr>-->\n <tr\n [matRowKeyboardSelection]=\"tablaMantenimiento\"\n [rowModel]=\"row\"\n (seleccionarSiguiente)=\"opcMenu($event, {seccion: nombreColeccion, tipo: 'ver'});\"\n\n *matRowDef=\"let row; let idxTabla = dataIndex; columns: visibleColumns;\"\n (click)=\"seleccionarItem(row); opcMenu(row, {seccion: nombreColeccion, tipo: 'ver', tableDataIndex: idxTabla });\"\n (dblclick)=\"opcMenu(row, {seccion: nombreColeccion, tipo: 'seleccionar'}); dblclickItem.emit(row)\"\n (contextmenu)=\"(abrirMenuContextual($event, row)); $event. preventDefault();\"\n [ngClass]=\"classFila(row)\"\n @fadeInUp\n class=\"trans-ease-out cursor-pointer h-auto\"\n [style.height.px]=\"0\"\n [id]=\"propiedadSeleccion(row)\"\n [matTooltip]=\"procesarRowTooltip(row)\"\n matTooltipPosition=\"below\"\n [matTooltipPositionAtOrigin]=\"true\"\n [matTooltipClass]=\"['bg-red-700', 'text-red-100', 'm-0']\"\n [matTooltipDisabled]=\"!procesarRowTooltip(row)\"\n [class.regAnulado]=\"row[campoAnulado] == 1\"\n [class.regTooltip]=\"!!procesarRowTooltip(row)\"\n (keyup.delete)=\"opcMenu(row, {seccion: nombreColeccion, tipo: 'eliminar'})\"\n mat-row></tr>\n <ng-container *ngIf=\"filaExtraTemplate\">\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"student-detail-row h-0\"></tr>\n\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"visibleColumns.length\">\n\n <div class=\"row m-0 student-element-detail\"\n [@detailExpand]=\"row.isExpanded ? 'expanded' : 'collapsed'\"\n [style.padding-right.px]=\"row.isExpanded ? 5 : 0\"\n [style.padding-left.px]=\"row.isExpanded ? 5 : 0\"\n >\n <ng-container [ngTemplateOutlet]=\"filaExtraTemplate\"\n [ngTemplateOutletContext]=\"{ row: row }\"></ng-container>\n </div>\n\n </td>\n </ng-container>\n </ng-container>\n </table>\n\n <ng-container *ngIf=\"componenteCargadoTotalmente\">\n <div *ngIf=\"(noData | async) && esTabla\" class=\"flex-1 text-center text-secondary font-medium\">\n No se encontraron datos\n </div>\n </ng-container>\n </div>\n <ng-content select=\"[appendTable]\"></ng-content>\n <div class=\"flex-1 bg-app-bar flex flex-col sm:flex-row items-start justify-between p-1\">\n <div class=\"flex-1 flex items-start flex-wrap gap-1\">\n <div *ngIf=\"(botonesMenuFinal.inferior ?? []).length > 0\" class=\" flex items-center flex-wrap\">\n <ng-container *ngFor=\"let btn of botonesMenu.inferior; let idx = index;\">\n <ng-container *ngTemplateOutlet=\"botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.inferior?.length}}\"></ng-container>\n </ng-container>\n </div>\n </div>\n\n <div *ngIf=\"esTabla && paginador\" class=\"flex-1 sm:flex-none flex items-center justify-end\">\n <mat-paginator class=\"tabla-mantenimiento-paginador\" [pageSizeOptions]=\"paginacion.pageSizeOptions\" [pageIndex]=\"paginacion.pageIndex - 1\" [length]=\"paginacion.pageLength\" [pageSize]=\"paginacion.pageSize\" (page)=\"paginacion.pageCurrent = $event; emitirResultados();\" ></mat-paginator>\n </div>\n </div>\n </div>\n\n</div>\n\n\n\n<!-- SECCION DE TEMPLATES O MENUS -->\n\n\n<mat-menu #columnFilterMenu=\"matMenu\" xPosition=\"before\" yPosition=\"below\">\n <ng-container *ngFor=\"let column of columnasTabla\">\n <button (click)=\"toggleColumnVisibility(column, $event)\" *ngIf=\"!tipoValorFuncion(column.noMostrarEnLista, false)\"\n class=\"checkbox-item mat-menu-item\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [(ngModel)]=\"column.visible\" [ngModelOptions]=\"{standalone: true}\" color=\"primary\">\n <span [innerHTML]=\"(column.labelLista ?? column.label).replace('<br>', ' ')\"></span>\n </mat-checkbox>\n </button>\n </ng-container>\n</mat-menu>\n\n\n\n\n\n\n<ng-template #botonesSuperiores let-btn=\"btn\" let-idx=\"idx\">\n <ng-container *ngTemplateOutlet=\"botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: true, idx: idx}\"></ng-container>\n</ng-template>\n\n<ng-template #botonesContextual let-btn=\"btn\" let-item=\"item\" let-barraSuperior=\"barraSuperior\" let-idx=\"idx\">\n\n <ng-container *ngIf=\"barraSuperior; else noBarraSuperior\">\n\n <!--\t\t<button mat-button style=\"min-width: unset; border: 1px !important;\" class=\"uppercase border border-gray rounded-none h-full px-1 disabled:opacity-50 disabled:text-secondary disabled:bg-transparent\">-->\n <!--\t\t\t<mat-icon *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\" size=\"15px\" class=\"icon-xs\"></mat-icon>-->\n <!--\t\t</button>-->\n <ng-container *ngIf=\"btn.subItems && btn.subItems.length > 0\">\n <button class=\"flex items-center justify-between uppercase text-2xs leading-none rounded-none px-2 py-1 bg-opacity-95 hover:bg-opacity-100 disabled:opacity-50 disabled:text-secondary disabled:!bg-gray-300 dark:disabled:!bg-gray-500 mat-elevation-z2\" type=\"button\"\n\n *ngIf=\"(!btn.esVisible || btn.esVisible(item, this)) && subItemsActivos(btn, item)\"\n [class]=\"(btn.class?btn.class:'')\"\n\n (click)=\"opcMenu(item, btn)\"\n [style.min-width]=\"((btn.soloIcono ?? tipoValorFuncion(soloIconos)) ? 'unset' : '')\"\n [matTooltip]=\"btn.tooltip || (btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo))) \"\n [matMenuTriggerFor]=\"menuOtrosBarra.menu\"\n\n [matBadge]=\"btn.badge\"\n matBadgeSize=\"small\"\n >\n <mat-icon class=\"icon-xs\" [class.mr-0.5]=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\" *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\" ></mat-icon>\n <span class=\"whitespace-nowrap\" *ngIf=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n <mat-icon class=\"icon-xs\" svgIcon=\"fa5sCaretDown\" ></mat-icon>\n </button>\n\n <jvs-tabla-mantenimiento-menu #menuOtrosBarra\n [objThis]=\"objThis\"\n [nombreColeccion]=\"nombreColeccion\"\n [item]=\"item\"\n [derechosActuales]=\"derechosActuales\"\n [subItems]=\"btn.subItems\"\n (opcionSelecionada)=\"opcMenu($event.item, $event.btn)\"\n [botonTemplate]=\"botonesContextual\"\n >\n </jvs-tabla-mantenimiento-menu>\n </ng-container>\n <ng-container *ngIf=\"!btn.subItems || btn.subItems.length == 0\">\n <button class=\"flex items-center justify-between uppercase text-2xs leading-none rounded-none px-2 py-1 bg-opacity-95 hover:bg-opacity-100 disabled:opacity-50 disabled:text-secondary disabled:!bg-gray-300 dark:disabled:!bg-gray-500 mat-elevation-z2\" type=\"button\"\n\n *ngIf=\"!btn.esVisible || btn.esVisible(item, this)\"\n [class]=\"(btn.class?btn.class:'text-secondary')\"\n [ngClass]=\"{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo])) && !(['nuevo', 'editar', 'eliminar'].includes(btn.tipo))}\"\n [disabled]=\"!btn.esIndependiente && botonDisabled(btn, item)\"\n (click)=\"opcMenu(item, btn)\"\n [style.min-width]=\"((btn.soloIcono ?? tipoValorFuncion(soloIconos)) ? 'unset' : '')\"\n [matTooltip]=\"btn.tooltip || (btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo))) \"\n\n [matBadge]=\"btn.badge\"\n matBadgeSize=\"small\"\n >\n <mat-icon class=\"icon-xs\" [class.mr-0.5]=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\" *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\"></mat-icon>\n <span class=\"whitespace-nowrap\" *ngIf=\"!(btn.soloIcono ?? tipoValorFuncion(soloIconos))\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n </button>\n\n </ng-container>\n\n </ng-container>\n <ng-template #noBarraSuperior>\n\n <ng-container *ngIf=\"btn.subItems && btn.subItems.length > 0\">\n <button class=\"flex items-center justify-between uppercase w-full rounded-none px-2 disabled:opacity-50 disabled:text-secondary disabled:bg-transparent\" mat-menu-item type=\"button\"\n *ngIf=\"!btn.noContextual && (!btn.esVisible || btn.esVisible(item, this))\"\n [class]=\"(btn.class?btn.class.replace('text-white', '').replace('bg', 'text'):'text-secondary')\"\n [ngClass]=\"{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo]))}\"\n [disabled]=\"!btn.esIndependiente && botonDisabled(btn, item)\"\n (click)=\"opcMenu(item, btn); $event.stopPropagation();\"\n [matMenuTriggerFor]=\"menuOtrosBarra.menu\"\n >\n <div class=\"flex w-full items-center justify-between uppercase text-2xs\"\n >\n <mat-icon *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\"\n class=\"flex-none icon-xs\"\n ></mat-icon>\n <span class=\"grow text-2xs\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n <mat-icon class=\"flex-none icon-xs\" svgIcon=\"fa5sCaretRight\"></mat-icon>\n </div>\n </button>\n\n <jvs-tabla-mantenimiento-menu #menuOtrosBarra\n [objThis]=\"objThis\"\n [nombreColeccion]=\"nombreColeccion\"\n [item]=\"item\"\n [derechosActuales]=\"derechosActuales\"\n [subItems]=\"btn.subItems\"\n (opcionSelecionada)=\"opcMenu($event.item, $event.btn)\"\n [botonTemplate]=\"botonesContextual\"\n >\n </jvs-tabla-mantenimiento-menu>\n </ng-container>\n <ng-container *ngIf=\"!btn.subItems || btn.subItems.length == 0\">\n <ng-container *ngIf=\"btn.tipo == '-#SEPARADOR#-'; else itemsNormales\">\n <mat-divider></mat-divider>\n </ng-container>\n <ng-template #itemsNormales>\n <button class=\"flex items-center justify-between uppercase w-full rounded-none px-2 disabled:opacity-50 disabled:text-secondary disabled:bg-transparent\" mat-menu-item type=\"button\"\n *ngIf=\"!btn.noContextual && (!btn.esVisible || btn.esVisible(item, this))\"\n [class]=\"(btn.class?btn.class.replace('text-white', '').replace('bg', 'text'):'text-secondary')\"\n [ngClass]=\"{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo]))}\"\n [disabled]=\"!btn.esIndependiente && botonDisabled(btn, item)\"\n (click)=\"opcMenu(item, btn)\"\n >\n <div class=\"flex w-full items-center justify-between uppercase text-2xs\">\n <mat-icon *ngIf=\"btn.icono\" [svgIcon]=\"btn.icono\" class=\"flex-none icon-xs\"\n ></mat-icon>\n <span class=\"grow text-2xs\">{{ btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo)) }}</span>\n </div>\n </button>\n </ng-template>\n\n </ng-container>\n\n </ng-template>\n\n</ng-template>\n\n<ng-template #userMenu let-item=\"item\">\n <div class=\"mat-menu bg-white rounded mat-elevation-z8 shadow botonesContextual\">\n <ng-container *ngFor=\"let btn of listaMenuCompleto\">\n <ng-container *ngTemplateOutlet=\"botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: false}\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n\n<mat-menu #menuOpciones=\"matMenu\" xPosition=\"before\" yPosition=\"below\">\n <ng-container *ngFor=\"let btn of listaMenuCompleto\">\n <ng-container\n *ngTemplateOutlet=\"botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: false}\"></ng-container>\n </ng-container>\n</mat-menu>\n\n", styles: ["@charset \"UTF-8\";:root{--tabla-mantenimiento-seleccion-fondo: rgb(179, 217, 252);--tabla-mantenimiento-seleccion-texto: rgb(1, 84, 164);--mat-paginator-container-size: 30px}:root .table-mantenimiento .elemento-seleccionado{background-color:var(--tabla-mantenimiento-seleccion-fondo)!important;color:var(--tabla-mantenimiento-seleccion-texto)!important;border-color:var(--tabla-mantenimiento-seleccion-texto)!important}.jvs-tabla-mantenimiento{width:inherit}.jvs-tabla-mantenimiento .contenedor-botones>*:first-child{@apply rounded-l;}.jvs-tabla-mantenimiento .contenedor-botones>*:last-child{@apply rounded-r;}.jvs-tabla-mantenimiento tr.regTooltip>td:first-child div:first-child:before,.jvs-tabla-mantenimiento tr.regTooltip>th:first-child div:first-child:before{content:\"\\26a0\\fe0f \";color:red;margin-right:4px;font-size:12px}.jvs-tabla-mantenimiento tr.regTooltip>td:first-child:not(:has(div)):before,.jvs-tabla-mantenimiento tr.regTooltip>th:first-child:not(:has(div)):before{content:\"\\26a0\\fe0f \";color:red;margin-right:4px;font-size:12px}.jvs-tabla-mantenimiento .mat-mdc-menu-content:not(:empty){@apply flex flex-col items-start;padding:0!important}.jvs-tabla-mantenimiento .mat-mdc-menu-item{line-height:24px!important;height:24px!important;min-height:24px!important}.jvs-tabla-mantenimiento .mat-mdc-menu-panel{min-height:auto!important}.jvs-tabla-mantenimiento .mat-mdc-table .mat-mdc-cell,.jvs-tabla-mantenimiento .mat-mdc-table .mat-mdc-header-cell .mat-mdc-footer-cell{white-space:unset}.jvs-tabla-mantenimiento .table-container{max-height:600px!important}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-table-sticky-border-elem-right{border-left:1px solid #e0e0e0}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-table-sticky-border-elem-left{border-right:1px solid #e0e0e0}.jvs-tabla-mantenimiento .table-mantenimiento tr.regAnulado .mat-mdc-cell{color:unset!important}.jvs-tabla-mantenimiento .table-mantenimiento .bg-primary-activo .numeracionFila{@apply rounded-full bg-primary-contrast text-primary mx-1 p-1 w-6 h-6;}.jvs-tabla-mantenimiento .table-mantenimiento th .form-input{@apply w-auto;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell,.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell,.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell{border-width:1px;border-style:solid}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell:not(.celda-numeracion-fila){padding:.05rem .25rem}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell:first-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell:last-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell:first-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-cell:last-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell:first-of-type:not(.celda-numeracion-fila),.jvs-tabla-mantenimiento .table-mantenimiento td.mat-mdc-footer-cell:last-of-type:not(.celda-numeracion-fila){padding:0 .25rem}.jvs-tabla-mantenimiento .table-mantenimiento .student-element-detail{overflow:hidden;display:flex;align-items:center;justify-content:center}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-header-row{height:25px!important;color:rgb(var(--color-primary))!important;background-color:rgb(var(--color-primary-contrast))!important}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-header-cell{padding:5px;font-size:10px;line-height:10px;font-weight:700!important;color:inherit}.jvs-tabla-mantenimiento .table-mantenimiento .mdc-data-table__row:not(.mdc-data-table__row--selected):not(.elemento-seleccionado):hover,.jvs-tabla-mantenimiento .table-mantenimiento .mdc-data-table__row:not(.mdc-data-table__row--selected):not(.elemento-seleccionado):focus{background-color:rgba(var(--color-primary-contrast),.04)}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-row .mat-mdc-cell,.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-footer-row .mat-mdc-cell{font-size:10px}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-row .mat-mdc-footer-cell:empty,.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-footer-row .mat-mdc-footer-cell:empty{border-width:0!important}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-cell{@apply leading-tight;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell{border-color:#d4d0d0;@apply text-center uppercase;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell .mat-sort-header-container{@apply flex items-center justify-between w-full;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell .mat-sort-header-container .mat-sort-header-content{@apply inline w-full text-center;}.jvs-tabla-mantenimiento .table-mantenimiento th.mat-mdc-header-cell .mat-sort-header-container .mat-sort-header-arrow{@apply flex-none;}.jvs-tabla-mantenimiento .table-mantenimiento .mat-mdc-sort-header-content{width:100%;text-align:center;display:unset;align-items:center}\n"] }]
1703
+ }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: TablaMantenimientoService }, { type: i0.ChangeDetectorRef }], propDecorators: { id: [{
1704
+ type: HostBinding
1705
+ }], dataSuscription: [{
1706
+ type: Input
1707
+ }], objThis: [{
1708
+ type: Input,
1709
+ args: [{ required: true }]
1710
+ }], nombreColeccion: [{
1711
+ type: Input,
1712
+ args: [{ required: true }]
1713
+ }], ctrlBusquedaValue: [{
1714
+ type: Input
1715
+ }], ctrlBusquedaPlaceholder: [{
1716
+ type: Input
1717
+ }], filtroCampos: [{
1718
+ type: Input
1719
+ }], paginador: [{
1720
+ type: Input
1721
+ }], esTabla: [{
1722
+ type: Input
1723
+ }], readOnly: [{
1724
+ type: Input
1725
+ }], filaExtraHeader: [{
1726
+ type: Input
1727
+ }], filaFooter: [{
1728
+ type: Input
1729
+ }], botonesCRUD: [{
1730
+ type: Input
1731
+ }], dblclickItem: [{
1732
+ type: Output
1733
+ }], objBotonesCRUD: [{
1734
+ type: Input
1735
+ }], classSeleccionado: [{
1736
+ type: Input
1737
+ }], classAnulado: [{
1738
+ type: Input
1739
+ }], campoAnulado: [{
1740
+ type: Input
1741
+ }], campoAnuladoMensaje: [{
1742
+ type: Input
1743
+ }], opcionSelecionada: [{
1744
+ type: Output
1745
+ }], opcBusqueda: [{
1746
+ type: Output
1747
+ }], accionRecargar: [{
1748
+ type: Output
1749
+ }], selectionModel: [{
1750
+ type: Input
1751
+ }], selectionModelChange: [{
1752
+ type: Output
1753
+ }], filaExtraTemplate: [{
1754
+ type: Input
1755
+ }], paginator: [{
1756
+ type: ViewChild,
1757
+ args: [MatPaginator]
1758
+ }], sort: [{
1759
+ type: ViewChild,
1760
+ args: [MatSort]
1761
+ }], exportarExcel: [{
1762
+ type: Input
1763
+ }], pageSize: [{
1764
+ type: Input
1765
+ }], pageSizeOptions: [{
1766
+ type: Input
1767
+ }], dataSourceChange: [{
1768
+ type: Output
1769
+ }], resultados: [{
1770
+ type: Output
1771
+ }], table: [{
1772
+ type: ViewChild,
1773
+ args: [MatTable, { static: false }]
1774
+ }], columnDefs: [{
1775
+ type: ContentChildren,
1776
+ args: [MatColumnDef, { descendants: true }]
1777
+ }], derechosActuales: [{
1778
+ type: Input
1779
+ }], rows: [{
1780
+ type: ViewChildren,
1781
+ args: [MatRow, { read: ElementRef }]
1782
+ }], rowFooter: [{
1783
+ type: ViewChild,
1784
+ args: [MatFooterRow, { read: ElementRef }]
1785
+ }], userMenu: [{
1786
+ type: ViewChild,
1787
+ args: ['userMenu']
1788
+ }], ctrlBusqueda: [{
1789
+ type: Input
1790
+ }], leyenda: [{
1791
+ type: Input
1792
+ }], idTabla: [{
1793
+ type: Input,
1794
+ args: [{ required: true }]
1795
+ }], columnasTabla: [{
1796
+ type: Input
1797
+ }], botonesMenu: [{
1798
+ type: Input
1799
+ }], condicionesClaseFila: [{
1800
+ type: Input
1801
+ }], rowTooltip: [{
1802
+ type: Input
1803
+ }], soloIconos: [{
1804
+ type: Input
1805
+ }] } });
1806
+
1807
+ /**
1808
+ * Generated bundle index. Do not edit.
1809
+ */
1810
+
1811
+ export { ProgressBarComponent, TablaMantenimientoComponent, TablaMantenimientoService };
1812
+ //# sourceMappingURL=jvsoft-components-tabla-mantenimiento.mjs.map